• 
    

    
    

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

      ?

      面向人工智能的浮點乘加器設計

      2019-08-22 09:26:26陳正博吳鐵彬丁亞軍
      計算機技術與發(fā)展 2019年8期
      關鍵詞:浮點移位乘法

      陳正博,吳鐵彬,鄭 方,丁亞軍

      (江南計算技術研究所,江蘇 無錫 214000)

      0 引 言

      隨著人工智能應用需求的快速增長,面向人工智能推理和訓練的加速芯片已成為該領域重要的發(fā)展方向,許多國內(nèi)外知名的大公司都大力投入相關研發(fā)。谷歌TPU、NVIDIA Tesla V100、寒武紀DianNao等是具有代表性的人工智能加速芯片。谷歌公司的TPU[1]以脈動陣列為基礎,支持半精度和8位整數(shù)的推理應用;寒武紀公司的DianNao系列[2-5]芯片將神經(jīng)網(wǎng)絡各層分解成神經(jīng)功能單元(NFU),支持半精度的推理應用;英偉達公司于2017年推出了Tesla V100[6]芯片,引入了張量計算單元(tensor core),支持雙、單、半精度以及混合精度的訓練和推理應用。

      浮點乘加部件能力是衡量人工智能芯片性能的主要指標。以NVIDIA Tesla V100為例,該芯片可達到7.5 TFLOPS的雙精度計算性能、15 TFLOPS的單精度計算性能和125 TFLOPS的張量計算性能。Tesla V100中包含2 560個FP64的計算單元和5 120個FP32的計算單元,同時引入了640個張量核心。作為人工智能卷積運算的基本單元,張量計算單元的運算方式如圖1所示。

      圖1 Tensor Core基本運算方式

      矩陣運算中,A和B都是半精度浮點數(shù)(FP16)組成的矩陣,C和D同為半精度浮點數(shù)(FP16)或單精度浮點數(shù)(FP32)組成的矩陣。當C和D矩陣同為半精度浮點數(shù)時,張量計算單元進行半精度的浮點乘加運算;當C和D矩陣同為單精度浮點數(shù)時,張量計算單元進行半精度乘半精度加單精度的單半混合精度浮點乘加運算。

      考慮到人工智能領域?qū)τ诟鱾€精度的浮點運算和整數(shù)運算都存在需求,研究人員開始進行混合浮點乘加器的相關研究。NVIDIA公司[7]提出了單精度和半精度混合的浮點融合乘加部件。該部件采用雙模式實現(xiàn)不同功能,通過硬件復用技術,支持單精度浮點乘加、半精度浮點乘加和半精度浮點乘法后加法的運算模式。

      為滿足人工智能領域的不同應用場景,人工智能芯片需要集成多種不同精度的運算部件。但目前的人工智能芯片都采用多種獨立運算部件集成的技術路線,這些獨立的運算部件帶來了較大的芯片面積和功耗開銷。文中采用跨精度復用的思想,探索通過復用技術進行多種精度混合的浮點乘加部件實現(xiàn)的技術可行性。該研究成果對國產(chǎn)人工智能芯片研發(fā)具有重要借鑒意義。

      文中設計并實現(xiàn)的面向人工智能的浮點乘加器,支持IEEE-754[8]標準的單精度、并行2個半精度、半精度乘半精度加單精度(單半混合精度)的浮點乘加操作,也支持32位、并行2個16位/8位的整數(shù)乘法操作。提出了乘法器復用、移位器復用和前導零預測復用等一系列關鍵技術,使用復用關鍵技術設計和實現(xiàn)該浮點乘加器,研究浮點乘加器中各模塊的詳細設計方法。在完成代碼設計后,對其進行功能點和隨機數(shù)測試,驗證浮點乘加器的正確性,同時使用DC工具進行物理綜合,結(jié)果顯示綜合運行頻率可達2 GHz。

      1 面向AI的浮點乘加器的總體結(jié)構(gòu)

      文中設計的面向AI的浮點乘加器以經(jīng)典的浮點融合乘加結(jié)構(gòu)[9]為基礎,采用6級全流水結(jié)構(gòu)實現(xiàn),總體實現(xiàn)結(jié)構(gòu)如圖2所示。浮點乘加器的輸入數(shù)據(jù)為32位數(shù)據(jù)A/B/C和控制信號,在第6級站臺輸出的數(shù)據(jù)包括32位浮點乘加結(jié)果、浮點異常信號、32位整數(shù)乘法結(jié)果和乘法溢出信號。該浮點乘加器支持單精度、單半混合精度和并行2個半精度的浮點乘加操作,也支持32位、并行2個16位/8位的整數(shù)乘法操作。

      文中設計的面向AI的浮點乘加器包括數(shù)據(jù)預處理、指數(shù)差值、對階移位、乘法器、合并、前導零預測、規(guī)格化移位、指數(shù)調(diào)整、舍入等模塊。圖2中涂黑的乘法器、移位器、合并、前導零預測模塊使用復用技術實現(xiàn),既解決了跨精度復用功能,又可以優(yōu)化整體實現(xiàn)的面積和功耗等指標。各模塊的功能、跨精度復用技術和詳細設計方法將在第2節(jié)詳細介紹。

      在設計的各模塊實現(xiàn)后,首先進行功能點和隨機數(shù)等正確性測試,然后對該設計進行物理綜合,根據(jù)結(jié)果手動調(diào)節(jié)流水線的劃分,使得各級站臺之間的時延基本一致,最終的流水線站臺劃分合理后,再對比單精度和半精度浮點乘加部件比較性能。

      2 各模塊詳細設計方法

      本節(jié)將介紹各模塊的功能、邏輯結(jié)構(gòu)和詳細設計方法。該設計中乘法器、移位器、合并與前導零預測等依據(jù)跨精度復用思想,使用復用技術實現(xiàn)。

      2.1 數(shù)據(jù)預處理

      數(shù)據(jù)預處理是對輸入數(shù)據(jù)和控制信號提前進行處理,判斷計算方式和數(shù)據(jù)是否符合規(guī)范。數(shù)據(jù)預處理模塊的功能分別有指數(shù)尾數(shù)拆分、輸入數(shù)據(jù)例外異常檢測兩部分。在數(shù)據(jù)進入到數(shù)據(jù)預處理模塊時,根據(jù)控制信號和部件需要完成的功能,遵守一定的規(guī)則,如表1所示。

      表1 數(shù)據(jù)輸入規(guī)則

      圖2 面向AI的浮點乘加器總體結(jié)構(gòu)

      輸入數(shù)據(jù)滿足規(guī)則后,還需要對輸入異常和例外進行檢測,異常情況直接旁路處理,以減少后續(xù)計算復雜度。例外和異常結(jié)果主要由非數(shù)和無窮數(shù)產(chǎn)生,除此以外,非規(guī)格化數(shù)在實際運算過程中會作為0處理。浮點乘加操作的異常產(chǎn)生條件和處理結(jié)果如表2所示。

      表2 浮點乘加操作異常條件與結(jié)果

      2.2 指數(shù)差值

      指數(shù)差值模塊是根據(jù)輸入數(shù)據(jù)A、B和C的指數(shù)值,計算對階移位量和初始結(jié)果的階碼。由于不同精度數(shù)據(jù)的指數(shù)值不同,尾數(shù)長度也不同,所以分別計算各個精度的對階移位量和初始結(jié)果階碼。在此分別介紹單精度、半精度和單半混合精度的浮點乘加操作中指數(shù)差值模塊的計算方法。

      各種的精度浮點乘加操作,階差的表達式均為:d=Ce-Ae-Be+bias。

      在得到指數(shù)域差值d后,可以分別計算對階移位量和指數(shù)階碼。單精度浮點乘加操作的尾數(shù)對階移位示意如圖3所示,其中數(shù)據(jù)位0后表示補0,數(shù)據(jù)位0前表示尾數(shù)在小數(shù)點前的部分,小數(shù)點前表示尾數(shù)在小數(shù)點后的部分,可知對階移位量應為ASC=27-d,結(jié)果階碼的初值也應根據(jù)階差大小決定。若d>27,此時ASC為負數(shù),對階移位量為0,取加數(shù)階碼的大小作為乘加結(jié)果基礎解碼;若1

      圖3 單精度浮點乘加尾數(shù)對階移位示意

      文中設計的浮點乘加器分別支持單精度、半精度和單半混合精度的浮點乘加運算,而不同精度的浮點乘加運算中的對階移位量和乘加結(jié)果階碼的計算方式也不相同,需要分別進行分析。單精度、半精度和單半混合精度的浮點乘加運算的ASC、對階移位量和乘加結(jié)果階碼計算方式如表3所示。

      表3 對階移位量和結(jié)果階碼的計算方式

      2.3 移位器

      在該設計中,移位器包括對階移位器和規(guī)格化移位器兩種。對階移位器的功能是進行尾數(shù)C和乘法結(jié)果的對階,規(guī)格化移位器的功能是進行中間尾數(shù)結(jié)果與規(guī)格化數(shù)的對階。雖然各模塊的功能不同,但移位器的跨精度復用思想一致。

      移位器跨精度復用設計方法介紹如下:以對階移位為例,單精度浮點乘加需求76位移位器,半精度浮點乘加需求37位移位器,混合精度浮點乘加需求50位移位器,考慮到該設計支持一個單精度乘加、并行兩個半精度乘加、一個混合精度乘加的操作,使用一個37位和一個76位的桶形移位器[10]可滿足需求,在移位器前后分別加上移位位數(shù)選擇器和結(jié)果選擇器,完成對階移位器模塊的復用設計。

      以規(guī)格化移位為例,單精度浮點乘加需求52位移位器,半精度浮點乘加需求26位移位器,混合精度浮點乘加可直接復用單精度操作完成。同樣地,使用一個26位和一個52位的移位器,并在前后分別加上移位位數(shù)選擇器和結(jié)果選擇器,即可完成規(guī)格化移位器模塊的復用設計。

      2.4 乘法器

      乘法器是該設計中最重要的單元,包括部分積生成和部分積壓縮兩個部分,計算方法是按位拆分,分別計算再進行合并。乘法計算公式為:

      將公式中括號內(nèi)的內(nèi)容進行Booth-4編碼[11-12],生成以A為基礎的16個部分積,再通過部分積壓縮樹將部分積壓縮成Carry和Sum結(jié)果。跨精度復用技術在部分積生成和部分積壓縮樹兩部分中都有體現(xiàn)。進行并行兩個的半精度數(shù)計算的操作中,在生成后8個部分積時,A和B低位填充第一個半精度數(shù),高位填零;生成前8個部分積時,A和B低位填零,高位填充第二個半精度數(shù)。這樣的填充方法可直接進行壓縮,不影響最終結(jié)果,得到的后8個部分積壓縮后得到第一個半精度數(shù)乘法結(jié)果,前8個部分積壓縮后得到第二個半精度數(shù)乘法結(jié)果。部分積生成完成后進行部分積壓縮,復用的部分積壓縮樹的結(jié)構(gòu)如圖4所示。

      產(chǎn)生的16個部分積首先經(jīng)過兩層4∶2的CSA壓縮樹,此時產(chǎn)生的4個分量結(jié)果與2個半精度特殊分量分別進行3∶2CSA壓縮后即可輸出2個半精度結(jié)果;若其中兩個分量結(jié)果直接與單精度特殊分量進行壓縮可輸出單半混合精度結(jié)果;而4個分量經(jīng)過4∶2CSA壓縮樹后再與單精度特殊分量進行壓縮可得到單精度結(jié)果,所以此時需要增加一個MUX選擇器,根據(jù)控制信號中的精度信息進行分量選擇,這樣最終可得到半精度、單精度或是單半精度的浮點數(shù)乘法中間結(jié)果Carry和Sum。值得注意的是,整數(shù)乘法也可借用此邏輯復用實現(xiàn),8位整數(shù)乘法套用半精度整數(shù)乘法,16位整數(shù)乘法套用半精度整數(shù)乘法,32位整數(shù)乘法套用單精度整數(shù)乘法即可。

      圖4 部分積壓縮樹

      2.5 合并與前導零預測

      得到Carry和Sum后,需要將這兩個分量合并成一個分量,同時并行使用這兩個分量進行前導零預測,預測合并后的分量前方有多少個零,這樣在分量合并得到結(jié)果后,同時通過前導零預測模塊得到的規(guī)格化移位位數(shù),直接進行規(guī)格化移位,從而減少關鍵路徑時延。

      合并模塊的功能是將Sum和Carry分量合并到一起,得到尾數(shù)計算的中間結(jié)果,通常使用加法器即可實現(xiàn)。合并模塊的跨精度復用實現(xiàn)技術比較直觀,由于單精度、半精度和單半混合精度的輸入數(shù)據(jù)大小不同,按照最低位數(shù)拆分并處理,并行使用4個41位的超前進位加法器[13],輸入進位分別設置為0和1,4個加法器根據(jù)控制信號分別輸入各種精度的浮點或整數(shù)乘加的Sum和Carry(位數(shù)不足時分別補0和1),然后將加法器結(jié)果通過選擇器可得到不同精度的合并數(shù)值。

      前導零預測模塊的功能是根據(jù)Sum和Carry分量預測計算兩個分量合并后的首1位置。前導零預測模塊的核心算法是LZA算法[14],即對兩個操作數(shù)做減法計算,得到數(shù)零位串,對得到的數(shù)零位串通過樹形結(jié)構(gòu)LZD預測第一個1的位置,即可得到前導零預測的結(jié)果。

      前導零預測的跨精度復用思想和設計技術與合并模塊類似,單精度和半精度的數(shù)零位串的長度分別為52位和26位,考慮到LZD預測樹的高度可擴展性,使用長度為2的次方數(shù)的LZD樹形結(jié)構(gòu)。按照最低位數(shù)拆分并處理,并行使用兩個32位的LZD預測樹,根據(jù)兩個預測樹分別輸出的有效位和預測數(shù)值進行邏輯判斷,通過選擇器后,最終得到不同精度需求的規(guī)格化移位位數(shù)。由于前導零預測算法本身可能會存在1位的誤差,且加法和減法可能存在1位誤差,所以至多存在2位的誤差,需要在規(guī)格化移位結(jié)束后進行檢測,若存在誤差則進行指數(shù)和尾數(shù)的修正。值得注意的是,在乘法器輸出結(jié)果之后,單半混合精度與單精度結(jié)果的處理方式完全相同,不會額外增加邏輯。

      2.6 指數(shù)調(diào)整與舍入

      指數(shù)調(diào)整模塊的功能是消除誤差,得到準確的指數(shù)值。由于前導零預測本身可能存在至多2位的誤差,故在規(guī)格化移位后進行簡單的邏輯判斷,計算出指數(shù)調(diào)整和尾數(shù)移位的數(shù)值,使用加法器即可得到最終結(jié)果的指數(shù)值,并對尾數(shù)再進行一定量的移位得到最終結(jié)果的尾數(shù)值。

      舍入模塊的功能是對最終結(jié)果進行舍入,并合并指數(shù)尾數(shù)結(jié)果得到最終的輸出結(jié)果和異常或溢出信號。得到最終結(jié)果的指數(shù)值和尾數(shù)值后,結(jié)合舍入位和粘貼位的數(shù)據(jù),舍入模塊根據(jù)控制信號提供的4種不同的舍入方式進行舍入,得到正常的計算結(jié)果,同時與異常處理結(jié)果合并,即可最終輸出浮點乘加結(jié)果、浮點異常信號、整數(shù)乘法結(jié)果和整數(shù)溢出信號,完成面向AI的浮點乘法器功能。

      3 實驗分析

      3.1 正確性測試

      完成代碼設計后,撰寫激勵使用PSL語言對浮點乘加器進行正確性測試,驗證面向人工智能的浮點乘加器是否滿足正確性要求。正確性測試主要分為功能點測試和隨機數(shù)測試兩個方面。第一是功能點測試,對于各種異常的輸入分別制造激勵進行測試,直到所有的異常情況都被覆蓋,從而檢測浮點乘加器的異常處理機制是否完備;第二是隨機數(shù)測試,對于表1中列舉的各種部件功能,包括單精度、半精度和混合精度三種精度浮點乘加,和32/16/8位定點乘法,分別生成十萬組不同的隨機數(shù)數(shù)據(jù),測試各個功能的結(jié)果是否保持正確,從而檢測浮點乘加器的各功能都能正確使用。功能點和隨機數(shù)測試的結(jié)果顯示,文中設計的面向AI的浮點乘加器結(jié)果滿足正確性要求。

      3.2 物理綜合

      使用Synopsys公司的Design Compiler工具,基于28 nm工藝庫條件對浮點乘加器進行物理綜合。物理綜合結(jié)果顯示,該部件的綜合運行頻率可達2 GHz。

      為了評估該部件的功耗和面積等指標,體現(xiàn)該設計的優(yōu)越性,在相同條件下,分別對單精度浮點乘加部件[9]、半精度浮點乘加部件[9]和設計的面向AI的浮點乘加器進行物理綜合,并對面積和功耗等性能指標進行對比,結(jié)果如表4所示。

      表4 性能對比

      對比的結(jié)果可以發(fā)現(xiàn),文中設計的面積比經(jīng)典的單精度浮點乘加部件增加了27.2%,功耗增加了37.55%??紤]完全無復用的設計,完成面向AI的浮點乘加器的計算功能需求至少需要1個單精度部件和2個半精度部件,同時需要1個單半精度混合部件,且單半精度混合部件的面積和功耗比半精度部件要大,在計算無復用結(jié)果時可進行累加。最終結(jié)果顯示,該設計比完全無復用設計的面積至少減少50.09%,功耗至少減少47.91%。

      總而言之,該設計使用跨精度復用技術[15],在保證頻率可接受范圍內(nèi),大幅度減少了設計的硬件實現(xiàn)消耗,優(yōu)化了浮點乘加器的性能,提出的復用技術具有顯著意義。

      4 結(jié)束語

      文中研究和設計了一種面向AI的浮點乘加器,支持32位、并行2個16位/8位的整數(shù)乘法運算,同時支持單精度、單半混合精度、并行2個半精度的浮點乘加運算。采用跨精度復用思路,詳細講解了各模塊的功能、詳細設計方法和跨精度復用實現(xiàn)方案??缇葟陀眉夹g是文中的主要創(chuàng)新點,提出了乘法器復用、移位器復用和前導零預測復用等一系列關鍵技術。完成代碼設計后,對浮點乘加器進行了正確性測試,結(jié)果表明浮點乘加器能夠滿足正確性要求。使用DC工具對浮點乘加器進行硬件綜合,結(jié)果顯示該設計類比于無復用設計,減少了至少50.09%的面積、47.91%的功耗,綜合運行頻率可達2 GHz。

      猜你喜歡
      浮點移位乘法
      算乘法
      LEO星座增強GNSS PPP模糊度浮點解與固定解性能評估
      我們一起來學習“乘法的初步認識”
      《整式的乘法與因式分解》鞏固練習
      再生核移位勒讓德基函數(shù)法求解分數(shù)階微分方程
      基于浮點DSP的鐵路FSK信號檢測
      把加法變成乘法
      大型總段船塢建造、移位、定位工藝技術
      Σ(X)上權(quán)移位算子的不變分布混沌性
      多指離斷手指移位再植拇指25例
      池州市| 凯里市| 赞皇县| 灵山县| 太仆寺旗| 共和县| 南靖县| 忻州市| 正安县| 同仁县| 华坪县| 平顺县| 宁波市| 乐陵市| 长沙县| 扎鲁特旗| 安化县| 普安县| 鄄城县| 云梦县| 益阳市| 开化县| 筠连县| 昭平县| 阳江市| 洪泽县| 长泰县| 平江县| 新龙县| 台山市| 伊宁市| 濉溪县| 高唐县| 定州市| 永和县| 青海省| 湾仔区| 鄂托克前旗| 阳高县| 绥滨县| 大英县|