本發(fā)明屬于存算一體,具體涉及一種基于憶阻器的三角函數(shù)實(shí)現(xiàn)方法。
背景技術(shù):
1、在過(guò)去的幾十年間,物聯(lián)網(wǎng),人工智能,大數(shù)據(jù)以及相關(guān)應(yīng)用飛速發(fā)展,導(dǎo)致了數(shù)據(jù)量的爆炸式增長(zhǎng)。面對(duì)如此龐大的數(shù)據(jù),我們對(duì)于處理器的高性能和低功耗的需求也是與日俱增。在傳統(tǒng)的馮諾依曼架構(gòu)中,數(shù)據(jù)在存儲(chǔ)器以及處理器間需要通過(guò)數(shù)據(jù)總線進(jìn)行傳輸,而數(shù)據(jù)總線的有限帶寬導(dǎo)致數(shù)據(jù)的傳輸效率與存儲(chǔ)器的容量相比非常小,這種現(xiàn)象在內(nèi)存容量指數(shù)級(jí)提升之后顯得更為明顯。這就導(dǎo)致計(jì)算機(jī)在處理計(jì)算操作時(shí),數(shù)據(jù)在處理器以及存儲(chǔ)器間的傳輸花費(fèi)了大量的時(shí)間和功耗。
2、三角函數(shù)作為數(shù)學(xué)物理領(lǐng)域經(jīng)常進(jìn)行的操作之一,在很多領(lǐng)域中發(fā)揮著重要的作用。在過(guò)去,已經(jīng)提出了很多算法,用于實(shí)現(xiàn)三角函數(shù)計(jì)算,例如多項(xiàng)式逼近,查找表插值,cordic算法等等。但是在數(shù)據(jù)量飛速增長(zhǎng)的今天,現(xiàn)實(shí)任務(wù)的主要瓶頸已經(jīng)逐漸轉(zhuǎn)移到內(nèi)存帶寬上,數(shù)據(jù)在內(nèi)存和處理器間的傳輸需要消耗大量的時(shí)間和能量,已經(jīng)逐漸無(wú)法滿足現(xiàn)在的需求。
3、新興的存內(nèi)計(jì)算架構(gòu)將存儲(chǔ)和計(jì)算融合,有效解決了傳輸?shù)膸拞?wèn)題。而新型存儲(chǔ)器憶阻器,由于其存儲(chǔ)計(jì)算合一的特點(diǎn),引起了人們的廣泛關(guān)注和研究,且被認(rèn)為是解決馮諾依曼瓶頸的可行方案之一?;趹涀杵鞔鎯?nèi)計(jì)算架構(gòu)的三角函數(shù)算法,可以和其他存內(nèi)計(jì)算架構(gòu)融合,實(shí)現(xiàn)存內(nèi)計(jì)算可實(shí)現(xiàn)算子的擴(kuò)展。然而,現(xiàn)有的基于憶阻器存內(nèi)計(jì)算架構(gòu)的三角函數(shù)計(jì)算方法研究尚不成熟,雖然避免了帶寬限制,但是仍然需要花費(fèi)大量的時(shí)間和能耗來(lái)進(jìn)行排序,并且在精度上也有所限制。因此,為了應(yīng)對(duì)數(shù)據(jù)飛速增長(zhǎng)情況下的三角函數(shù)計(jì)算需求,急需研究一種基于憶阻器存內(nèi)計(jì)算架構(gòu)的高精度三角函數(shù)實(shí)現(xiàn)方法。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)以上現(xiàn)有技術(shù)中存在的不足,解決三角函數(shù)在存算一體硬件上實(shí)現(xiàn)的問(wèn)題,本發(fā)明提出了一種基于憶阻器的三角函數(shù)實(shí)現(xiàn)方法,采用分組并行流水設(shè)計(jì)的三角函數(shù)存算一體計(jì)算架構(gòu)及對(duì)應(yīng)數(shù)據(jù)流,實(shí)現(xiàn)以cordic算法為基礎(chǔ)的非線性函數(shù)計(jì)算任務(wù),實(shí)現(xiàn)高精度三角函數(shù)計(jì)算。
2、本發(fā)明的技術(shù)方案如下:
3、一種基于憶阻器的三角函數(shù)實(shí)現(xiàn)方法,采用分組并行流水設(shè)計(jì)的三角函數(shù)存算一體計(jì)算架構(gòu)及對(duì)應(yīng)數(shù)據(jù)流,具體步驟如下:
4、1)基于n位精度cordic算法,對(duì)目標(biāo)角度進(jìn)行拆分,對(duì)拆分后的角度集系數(shù)進(jìn)行分組1.1)基于n位精度cordic算法的轉(zhuǎn)移方程,建立由2的冪次構(gòu)成的角度集,角度集對(duì)應(yīng)的轉(zhuǎn)移方程系數(shù)存入三角函數(shù)計(jì)算模塊的憶阻器陣列;
5、1.2)在步驟1.1)所建立的角度集上,將目標(biāo)角度進(jìn)行二進(jìn)制化拆分得到角度集系數(shù)ai,
6、ai∈{0,1},i=1,2...,n;
7、1.3)進(jìn)一步按照布斯編碼,將角度集系數(shù)ai轉(zhuǎn)變?yōu)榻嵌燃禂?shù)bi,bi∈{-1,0,1},i=1,2…,n;
8、1.4)基于步驟1.3)的角度拆分,將系數(shù)bi進(jìn)行平均分組:取n的最接近的因數(shù)m作為組數(shù),分為m組,每組為(n/m)位;
9、2)按分組,在三角函數(shù)計(jì)算模塊中進(jìn)行迭代計(jì)算,各組同步進(jìn)行,并行度為m
10、2.1)將步驟1.4)中得到的分組系數(shù)bi發(fā)送到m組三角函數(shù)計(jì)算模塊中,各模塊根據(jù)bi系數(shù)值啟用行選擇器,其中系數(shù)bi為0時(shí)跳過(guò),為1時(shí)行選擇器對(duì)應(yīng)選擇轉(zhuǎn)移方程系數(shù)
11、1和系數(shù)2,為-1時(shí)行選擇器對(duì)應(yīng)的選擇轉(zhuǎn)移方程系數(shù)1和系數(shù)3;
12、2.2)按順序進(jìn)行三角函數(shù)計(jì)算模塊內(nèi)的迭代計(jì)算,第一次迭代計(jì)算由角度0作為起點(diǎn),即輸入坐標(biāo)為(1,0);
13、2.3)根據(jù)輸入坐標(biāo)和系數(shù)bi選擇的憶阻器陣列中存儲(chǔ)的轉(zhuǎn)移方程系數(shù),進(jìn)行cordic算法轉(zhuǎn)移方程計(jì)算;利用存內(nèi)計(jì)算的原理,進(jìn)行陣列內(nèi)乘法和加法,實(shí)現(xiàn)多項(xiàng)式計(jì)算,輸出得到下一次迭代的輸入坐標(biāo);
14、2.4)重復(fù)步驟2.3)直到完成一共(n/m)次的迭代計(jì)算,得到(n/m)次迭代計(jì)算后的坐標(biāo)(x(n/m),y(n/m));
15、所述步驟2)中實(shí)現(xiàn)了m組三角函數(shù)計(jì)算模塊的并行計(jì)算,得到m個(gè)分組計(jì)算坐標(biāo)結(jié)果;
16、3)匯總分組計(jì)算結(jié)果,在匯總?cè)呛瘮?shù)計(jì)算模塊中計(jì)算最終結(jié)果
17、3.1)將步驟2)中得到的分組計(jì)算坐標(biāo)結(jié)果作為新的角度集,利用數(shù)字電路計(jì)算新的角度集內(nèi)m個(gè)新角度對(duì)應(yīng)的cordic算法轉(zhuǎn)移方程系數(shù);并將得到的轉(zhuǎn)移方程系數(shù)寫(xiě)入?yún)R總計(jì)算模塊內(nèi)的各塊憶阻器陣列內(nèi);同時(shí),匯總?cè)呛瘮?shù)計(jì)算模塊接收步驟1.4)中的系數(shù)bi作為其行選擇器的選擇信號(hào),i=k×n/m+1,k=0,1,2...,m-1;
18、3.2)重復(fù)步驟2.2)至2.4),完成m次迭代計(jì)算,得到最終的迭代計(jì)算坐標(biāo);
19、3.3)根據(jù)坐標(biāo)直接計(jì)算得到sin、cos函數(shù)值,進(jìn)一步計(jì)算得到tan函數(shù)值;最終實(shí)現(xiàn)三角函數(shù)的計(jì)算。
20、進(jìn)一步,所述方法的并行流水設(shè)計(jì)三角函數(shù)存算一體計(jì)算架構(gòu),包括角度符號(hào)化模塊和三角函數(shù)計(jì)算模塊,角度符號(hào)化模塊用于對(duì)cordic算法的目標(biāo)角度進(jìn)行二進(jìn)制角度拆分,輸出角度集系數(shù)bi;三角函數(shù)計(jì)算模塊,包括多塊x坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊、多塊y坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊和一個(gè)數(shù)據(jù)流控制中心,每塊x/y坐標(biāo)計(jì)算憶阻器陣列塊外圍電路包括行選擇器、移位器和緩存;x坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊用于坐標(biāo)中的x值的迭代計(jì)算,其對(duì)應(yīng)cos函數(shù),y坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊用于坐標(biāo)中的y值的迭代計(jì)算,其對(duì)應(yīng)sin函數(shù);數(shù)據(jù)流控制中心用于控制陣列間的數(shù)據(jù)流動(dòng);x/y坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊的大小為3×n,用于存儲(chǔ)3個(gè)權(quán)重,分別對(duì)應(yīng)cordic算法轉(zhuǎn)移方程所涉及的3個(gè)系數(shù),憶阻器陣列計(jì)算塊在架構(gòu)上前后連接,按順序進(jìn)行計(jì)算,其數(shù)量由所述方法中角度精度n和分組m決定,即(n/m)塊;行選擇器根據(jù)角度符號(hào)化模塊輸出的系數(shù)bi值進(jìn)行選擇;緩存放置于陣列的輸出位置,用于存儲(chǔ)陣列計(jì)算轉(zhuǎn)移方程的計(jì)算結(jié)果。
21、本發(fā)明的技術(shù)效果如下:
22、本發(fā)明一種基于憶阻器的三角函數(shù)實(shí)現(xiàn)方法,適用于以cordic算法為基礎(chǔ)的非線性函數(shù)計(jì)算任務(wù),包括雙曲函數(shù),利用布斯編碼拆解角度,提高系數(shù)的稀疏性,利用分組并行流水設(shè)計(jì)三角函數(shù)計(jì)算模塊和模塊內(nèi)陣列計(jì)算塊,實(shí)現(xiàn)了高精度的三角函數(shù)在存算一體架構(gòu)上的高速計(jì)算。
1.一種基于憶阻器的三角函數(shù)實(shí)現(xiàn)方法,其特征在于,采用分組并行流水設(shè)計(jì)的三角函數(shù)存算一體計(jì)算架構(gòu)及對(duì)應(yīng)數(shù)據(jù)流,具體步驟如下:
2.如權(quán)利要求1所的方法,其特征在于,所述方法的并行流水設(shè)計(jì)三角函數(shù)存算一體計(jì)算架構(gòu),包括角度符號(hào)化模塊和三角函數(shù)計(jì)算模塊,角度符號(hào)化模塊用于對(duì)cordic算法的目標(biāo)角度進(jìn)行二進(jìn)制角度拆分,輸出角度集系數(shù)bi;三角函數(shù)計(jì)算模塊,包括多塊x坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊、多塊y坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊和一個(gè)數(shù)據(jù)流控制中心,每塊x/y坐標(biāo)計(jì)算憶阻器陣列塊外圍電路包括行選擇器、移位器和緩存;x坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊用于坐標(biāo)中的x值的迭代計(jì)算,其對(duì)應(yīng)cos函數(shù),y坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊用于坐標(biāo)中的y值的迭代計(jì)算,其對(duì)應(yīng)sin函數(shù);數(shù)據(jù)流控制中心用于控制陣列間的數(shù)據(jù)流動(dòng);x/y坐標(biāo)計(jì)算憶阻器陣列計(jì)算塊的大小為3×n,用于存儲(chǔ)3個(gè)權(quán)重,分別對(duì)應(yīng)cordic算法轉(zhuǎn)移方程所涉及的3個(gè)系數(shù),憶阻器陣列計(jì)算塊在架構(gòu)上前后連接,按順序進(jìn)行計(jì)算,其數(shù)量由所述方法中角度精度n和分組m決定,即(n/m)塊;行選擇器根據(jù)角度符號(hào)化模塊輸出的系數(shù)bi值進(jìn)行選擇;緩存放置于陣列的輸出位置,用于存儲(chǔ)陣列計(jì)算轉(zhuǎn)移方程的計(jì)算結(jié)果。