• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種單精度浮點倒數(shù)開方運算的硬件實現(xiàn)

      2013-04-29 10:17:23焦永
      電腦知識與技術 2013年9期

      焦永

      摘要:單精度浮點倒數(shù)開方運算在GPU設計中經(jīng)常會用到。實現(xiàn)這種運算一般有兩種方法,迭代法和查表法。迭代法要根據(jù)精度要求確定迭代次數(shù),只需要很小的存儲器保存迭代初值,但需要的運算器數(shù)量較多。查表法根據(jù)輸入的數(shù)據(jù)直接從ROM中查表得到結果,需要占用的存儲資源比較多。該文提出了一種間接查表法實現(xiàn)的浮點倒數(shù)開方運算實現(xiàn)方法,將迭代法和直接查表法的優(yōu)點結合起來。經(jīng)過理論推導和硬件仿真驗證,該算法能夠滿足單精度浮點數(shù)的運算精度。

      關鍵詞:單精度浮點;倒數(shù)開方;查表

      中圖分類號:TP312 文獻標識碼:A 文章編號:1009-3044(2013)09-2242-04

      單精度浮點倒數(shù)開方運算在GPU設計中經(jīng)常會用到。在硬件設計中一般有兩種實現(xiàn)方法,一種是采用迭代法,比較著名的是牛頓-辛普森迭代法;另一種方法是查表法。兩種方法各有優(yōu)缺點:迭代法需要的存儲資源比較小,但是要達到單精度浮點數(shù)的精度要求,需要進行多級迭代,所耗費的運算資源比較大;而查表法不需要運算資源,但是需要占用的存儲器資源數(shù)量會比較大。所以結合這兩種實現(xiàn)方法的優(yōu)缺點,該文實現(xiàn)了一種間接查表法,利用泰勒級數(shù)展開,取出適當?shù)奈粩?shù)位數(shù)進行查表,然后再進行運算得出滿足精度要求的結果,在存儲資源和運算資源方面進行了平衡。

      1 IEEE 754單精度浮點數(shù)據(jù)格式

      IEEE754標準定義了單精度32位和雙精度64位浮點數(shù)的格式。32位IEEE754單精度標準值中,第一位是符號位,其后8位用來存放指數(shù),最后23位用來存放小數(shù)尾數(shù),如表1所示。

      表 1 單精度32位浮點數(shù)格式

      在IEEE754單精度浮點標準中,明確包含了符號位,第32位用作符號位。尾數(shù)進行了歸一化,以產(chǎn)生一個1.f格式的數(shù),f是小數(shù)部分,占用分配的23位。因為規(guī)格化的數(shù)最左一位總是1,所以不需要存儲該位,在該格式中它是隱式的。這樣一個n位的尾數(shù)實際上存放了一個n+1位數(shù)。為使尾數(shù)規(guī)格化,指數(shù)被適當增減,來跟蹤規(guī)格化所需的左右移位數(shù)以及小數(shù)點。

      2 單精度浮點倒數(shù)開方算法

      設x為單精度浮點數(shù),計算[1x]的算法有迭代法、直接查表法和間接查表法。先不考慮指數(shù)的計算,只考慮尾數(shù)的倒數(shù)開方。(指數(shù)的計算在間接查表法中一并介紹)

      2.1 迭代法

      牛頓迭代法的迭代公式:

      迭代法的收斂速度定義為:

      則稱序列[xn]p階收斂,如果序列[xn]是由迭代公式[xn+1=Φxn]產(chǎn)生的,且p階收斂,則稱這種迭代過程是P階收斂的。

      當定義域為[1,4)時,上式可轉(zhuǎn)化為對尾數(shù)的整數(shù)運算。

      注:定義域為[1,4)的說明:對于任一個浮點數(shù)而言,其尾數(shù)都在[1,2)內(nèi),但由于開方時需要將階數(shù)除以2,因此尾數(shù)的范圍需要放大為2倍或縮小一半。實驗表明,放大至[1,4)效果更好。

      為了加快收斂速度,按照如下方法確定迭代的初值:由于這里計算倒數(shù)時定義域為[1,4),因此把x軸上的區(qū)間[1,4)分成N段,每一段取中點的倒數(shù)開方值作為落在此段的x的迭代初值。當分為32份時,則浮點數(shù)的尾數(shù)部分的前4位即可作為分段的序號。

      試驗表明,分成32段的情況下,迭代n步得到結果的情況如下:

      2.2 直接查表法

      直接查表法比較簡單,根據(jù)浮點數(shù)的尾數(shù),構造ROM表,若直接根據(jù)輸入數(shù)據(jù)查ROM得到結果,總共需要223×32(bit)的存儲空間(即32MB),這在硬件實現(xiàn)時是基本不可能的。

      2.3 間接查表法

      將上述兩種方法的優(yōu)點結合起來,我們就會很自然的得到一種間接查表法。關鍵問題是ROM表如何設計。

      2.3.1 指數(shù)的計算。

      由浮點數(shù)格式可知:

      因此,在保證24位精度的前提下,應把浮點數(shù)x的尾數(shù)的定義域[1,2]等分為[212=4096]份。

      步驟1:把x規(guī)格化到[1,2)的范圍內(nèi),保持該數(shù)的后23位尾數(shù),前面用0x3f8替代,即:nval = 0x3f800000 | (nval & 0x7fffff);

      步驟2:計算n值。n就是[an]中剛好小于x的n值,也就是尾數(shù)的前12位。于是:n = (nval & 0x7fffff) >> 11;

      步驟3:計算h值、確定[An]、計算[an]-h。注意到當x落在第一個小區(qū)間[1.0+14096,1.0+24096]時,即n==0時,[an]=0x3f800000,[2an-h]時會出現(xiàn)尾數(shù)溢出的情況。所以這時使用公式(4)進行計算,其余情況使用公式(3)計算。

      結論:計算2[an]-h時,注意到[an]和h的精度剛好是尾數(shù)中的前12位和后11位,因此這兩個數(shù)的差值不需要按浮點數(shù)相減,只需要把它們按照32位整數(shù)值相減就可以了。

      步驟4:計算[An](2[an]-h)。使用浮點數(shù)乘法計算以上兩數(shù)之積,得到的結果的后23位就是所要求的1/x的尾數(shù)。

      得到尾數(shù)之后,再把x的符號位和1/x指數(shù)位合并到一起就得到了最后的1/x。

      3 硬件實現(xiàn)

      根據(jù)前面對算法的描述,將該算法的硬件實現(xiàn)結構如圖2所示。

      根據(jù)硬件實現(xiàn)結構,計算浮點倒數(shù)的模塊需要的邏輯資源為:1個24位加法、1個24位乘法、1個4096×32(bit)=16KB的ROM。

      將該算法用Verilog語言描述,生成一些隨機測試激勵在NC_Verilog環(huán)境下進行仿真,仿真波形如圖3所示,其中輸入數(shù)據(jù)、運行結果、實際結果和誤差見表2所示。

      由仿真結果可以看出,在硬件實現(xiàn)的計算結果與真實結果相比,誤差都不會超過±1×2-24,能夠滿足單精度浮點數(shù)的精度要求。

      4 結束語

      為了實現(xiàn)一種運算邏輯與存儲資源的平衡,該文提出了一種浮點倒數(shù)的間接查表算法。通過理論證明,該算法能夠保證單精度浮點數(shù)的運算精度。將該算法用硬件實現(xiàn),通過仿真進一步驗證了算法的正確性。

      參考文獻:

      [1] Nobuhiro Ide.2.44-GFLOPS 300-MHz Floating-Point Vector-Processing Unit for High-Performance 3-D Graphics Computing [J].IEEE JOURNAL OF SOLID-STATE CIRCUITS (JSSC),2000,35(7):1025-1033.

      [2] Kim D H.A SoC with 1.3 Gtexels/s 3-D Graphics Full Pipeline for Consumer Applications[J].IEEE JOURNAL OF SOLID-STATE CIRCUITS,2006,41:71-78.

      [3] E.Lindholm,et at.A User-Programmable Vertex Engine [C].ACM SIGGRAPH,2001:12-17.

      [4] Ercegovac M D,Lang T.Digital Arithmetic[M].Morgan Kaufmann Publishers,2004:182-237.

      兴化市| 平舆县| 普宁市| 镇原县| 永善县| 陆河县| 太和县| 体育| 遵义县| 三门县| 太康县| 马关县| 武鸣县| 湟中县| 莒南县| 芮城县| 女性| 高平市| 轮台县| 巴楚县| 会同县| 南丰县| 盐山县| 莱阳市| 休宁县| 平顺县| 普定县| 大洼县| 徐汇区| 田东县| 贵阳市| 牙克石市| 留坝县| 红安县| 乌兰浩特市| 宝坻区| 大埔区| 保山市| 湄潭县| 方山县| 远安县|