999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于飛騰M6678的向量數(shù)學(xué)庫優(yōu)化技術(shù)研究?

2021-04-06 07:13:34
艦船電子工程 2021年3期
關(guān)鍵詞:指令優(yōu)化數(shù)學(xué)

(中船重工(武漢)凌久電子有限責(zé)任公司 武漢 430074)

1 引言

飛騰M6678為國(guó)產(chǎn)化數(shù)字信號(hào)處理器(Digital Signal Processor,DSP),單核心的浮點(diǎn)理論運(yùn)算速度達(dá)到16GFLOPS,具有功能強(qiáng)大的FFT協(xié)處理器,同時(shí)兼容TMS320C6678處理器的SIMD指令集。

基礎(chǔ)數(shù)學(xué)庫是高性能計(jì)算的核心基礎(chǔ)軟件。與傳統(tǒng)的標(biāo)量運(yùn)算不同,向量數(shù)學(xué)庫為提升大點(diǎn)數(shù)下的數(shù)學(xué)運(yùn)算性能而構(gòu)建,向量化帶來的加速比高,性能提升明顯。這對(duì)于促進(jìn)國(guó)產(chǎn)化芯片行業(yè)的蓬勃發(fā)展至關(guān)重要。向量數(shù)學(xué)庫已經(jīng)在ARM微處理器[1~2]和國(guó)產(chǎn)CPU[3]平臺(tái)進(jìn)行了向量化優(yōu)化[4~6]的嘗試。

雖然處理器架構(gòu)不同,但是向量化的許多方法都是類似的,比如地址對(duì)齊[7]、使用SIMD指令[8]和軟件流水[9~10]。其中地址對(duì)齊提高了訪存的速度,SIMD指令利用了指令的位寬[11]實(shí)現(xiàn)了數(shù)據(jù)運(yùn)算的并行,而軟件流水,類似于工廠的流水線,函數(shù)循環(huán)并非順序執(zhí)行,第一次循環(huán)還未執(zhí)行完畢,第二次循環(huán)已經(jīng)開始了。但是,僅有這些方法,無法在DSP上完成向量化優(yōu)化。本文針對(duì)飛騰M6678處理器,構(gòu)建向量數(shù)學(xué)庫。

目前,飛騰M6678處理器上能夠運(yùn)算的數(shù)學(xué)函數(shù)庫有兩個(gè),一個(gè)是標(biāo)準(zhǔn)C數(shù)學(xué)函數(shù)庫,一個(gè)是TI公司提供的MATHLIB函數(shù)庫。上述兩個(gè)數(shù)學(xué)函數(shù)庫都只能滿足標(biāo)量運(yùn)算的性能要求,當(dāng)進(jìn)行大點(diǎn)數(shù)的向量數(shù)學(xué)運(yùn)算時(shí),無法充分利用DSP的并行運(yùn)算能力。前者在向量化運(yùn)算過程中效率低下,后者將代碼由內(nèi)聯(lián)函數(shù)封裝,編譯器可以根據(jù)算法的實(shí)現(xiàn),自行嘗試向量化的優(yōu)化。

數(shù)學(xué)運(yùn)算在飛騰M6678處理器上進(jìn)行性能測(cè)試。測(cè)試點(diǎn)數(shù)選擇1024,結(jié)果如表1。

表1 數(shù)學(xué)運(yùn)算性能測(cè)試

由表1可知,ARCTAN、COS、SIN、EXP和LOG運(yùn)算的加速比均超過了20,向量化程度高,可向量化的空間小[12]。因此,本文性能優(yōu)化的重點(diǎn)應(yīng)該是ARCCOS、ARCSIN、TAN和SQRT。

本文以MATHLIB函數(shù)庫為基礎(chǔ),結(jié)合DSP的硬件特性,對(duì)數(shù)學(xué)函數(shù)進(jìn)行向量化優(yōu)化,實(shí)現(xiàn)了高性能向量數(shù)學(xué)庫。

2 函數(shù)實(shí)現(xiàn)

數(shù)學(xué)庫常用的實(shí)現(xiàn)方法有級(jí)數(shù)法、迭代法、查表法、有理數(shù)逼近法、逐位法、CORDIC[13]算法。但是以上算法都各自存在自己的問題,級(jí)數(shù)法和迭代法運(yùn)算量大,查表法占用空間大,只能計(jì)算一定區(qū)間內(nèi)的三角函數(shù),有理數(shù)逼近法的向量化空間小,逐位法和CORDIC算法適合只有加法器,沒有乘法器的處理器架構(gòu)。文獻(xiàn)[14]算法實(shí)現(xiàn)了雙精度浮點(diǎn)數(shù)學(xué)運(yùn)算的向量化,然而大多數(shù)數(shù)學(xué)運(yùn)算只需要單精度就足夠了。本文實(shí)現(xiàn)的是單精度浮點(diǎn)向量數(shù)學(xué)庫,ARCCOS、ARCSIN選用泰勒級(jí)數(shù)法實(shí)現(xiàn),SQRT選用牛頓迭代法[15]實(shí)現(xiàn),TAN采用公式SIN/COS實(shí)現(xiàn)。DSP良好的乘加運(yùn)算能力,很好地滿足了級(jí)數(shù)法和迭代法對(duì)運(yùn)算能力的要求。

上述4個(gè)函數(shù)的實(shí)現(xiàn)均需要進(jìn)行求倒數(shù)或者求平方根倒數(shù)的運(yùn)算。為提高函數(shù)運(yùn)算性能,不同于簡(jiǎn)單使用符號(hào)“/”,本文用DSP指令[16]RCPSP和RSQRSP實(shí)現(xiàn),其中RCPSP進(jìn)行浮點(diǎn)的求倒數(shù)運(yùn)算,RSQRSP進(jìn)行浮點(diǎn)的求平方根倒數(shù)運(yùn)算。一方面,編譯器省去了解碼、譯碼的時(shí)間,另一方面,能夠正常開啟軟件流水。

上述指令經(jīng)過測(cè)試后發(fā)現(xiàn),運(yùn)算性能相較于符號(hào)“/”提高了兩個(gè)數(shù)量級(jí),但是運(yùn)算精度很低,達(dá)不到大多數(shù)應(yīng)用場(chǎng)景的要求。為了提高運(yùn)算性能的同時(shí)保證數(shù)據(jù)精度,引入牛頓迭代法。

不加推導(dǎo)的給出牛頓迭代法的基本公式為

已經(jīng)證明,如果是連續(xù)的、并且待求的零點(diǎn)是孤立的,那么該零點(diǎn)周圍存在一個(gè)區(qū)域,只要初始值位與這個(gè)鄰近區(qū)域,那么牛頓法必定收斂。

牛頓迭代法具有平方收斂的性能,這意味著,牛頓法每迭代一次,計(jì)算結(jié)果精度將提高一倍。FLOAT類型有效位數(shù)為7位,RCPSP和RSQRSP運(yùn)算精度為1/256,即有效位數(shù)為2位,使用牛頓法迭代2次,即可以完全滿足精度要求。

3 函數(shù)優(yōu)化

3.1 確定算法的性能瓶頸

優(yōu)化的第一步是找到算法的性能瓶頸。以開平方運(yùn)算為例,對(duì)迭代法的代碼進(jìn)行性能分析。MATHLIB源碼如下:

表2統(tǒng)計(jì)了單次循環(huán)體內(nèi),各個(gè)計(jì)算單元所需要的時(shí)鐘周期數(shù)。

表2 原單次循環(huán)性能分析

由于各個(gè)運(yùn)算單元可以并行執(zhí)行,那么循環(huán)體執(zhí)行一次的周期數(shù)就等于表中最大的時(shí)鐘周期數(shù)。由表2可知,循環(huán)體執(zhí)行一次的周期數(shù)等于7。多達(dá)7次的跨組寄存器訪問導(dǎo)致性能下降。同時(shí),乘法計(jì)算單元使用負(fù)荷也很大。另外,RSQRSP執(zhí)行時(shí)間遠(yuǎn)低于牛頓迭代法執(zhí)行時(shí)間。

因此,過多的跨組寄存器訪問,是開平方運(yùn)算的性能瓶頸。

3.2 均衡負(fù)載

均衡負(fù)載的方法根據(jù)M6678的計(jì)算單元結(jié)構(gòu)所提出。

如圖1 DSP內(nèi)核中有兩套4個(gè)截然不同的處理單元,當(dāng)處理float型數(shù)據(jù)時(shí),M處理乘法運(yùn)算、L處理加法和轉(zhuǎn)換運(yùn)算、S處理比較和倒數(shù)運(yùn)算、D處理數(shù)據(jù)的加載和存儲(chǔ)。這8個(gè)處理單元可以獨(dú)立并行執(zhí)行。但是,計(jì)算單元訪問不同組的寄存器,會(huì)導(dǎo)致運(yùn)算時(shí)間的消耗。

圖1 M6678內(nèi)核數(shù)據(jù)處理示意圖

均衡負(fù)載,要求A、B兩組處理單元的使用次數(shù)大體一致,不要出現(xiàn)某個(gè)處理單元的負(fù)荷過大,其他處理單元在旁邊等待的情況。

本文采用循環(huán)展開的方式使得負(fù)載均衡。循環(huán)展開,就是減少循環(huán)次數(shù)的同時(shí),將循環(huán)體擴(kuò)大。以開平方運(yùn)算為例,將循環(huán)體擴(kuò)大一倍,使得原來的第一次循環(huán)由A組執(zhí)行,原來的第二次循環(huán)由B組執(zhí)行。這樣一來,循環(huán)體內(nèi)不再需要跨組寄存器的訪問。同時(shí),循環(huán)展開前的乘法單元在一次循環(huán)內(nèi),共執(zhí)行了9次,其中A組執(zhí)行了5次,B組執(zhí)行了4次,等待了1次,此時(shí)負(fù)載不均衡。循環(huán)展開后,A組和B組的乘法單元均執(zhí)行了9次,沒有等待時(shí)間。也就是說,原本兩次循環(huán),共計(jì)10次乘法計(jì)算的時(shí)間,循環(huán)展開后,只需要9次乘法計(jì)算的時(shí)間了。

3.3 指令級(jí)SIMD優(yōu)化

解決了負(fù)載均衡的問題,本文使用指令級(jí)SIMD優(yōu)化方法著手解決第二個(gè)瓶頸,即9次乘法運(yùn)算。

通常需要運(yùn)算的FLOAT、INT型數(shù)據(jù)都是32位,甚至有16位的SHORT類型,然而M6678的每個(gè)運(yùn)算單元均是64位位寬。因此,調(diào)用SIMD指令集,可以充分利用運(yùn)算單元的位寬,一個(gè)指令在一個(gè)時(shí)鐘周期內(nèi),可以同時(shí)完成幾個(gè)數(shù)據(jù)的運(yùn)算。同時(shí),使用指令集也節(jié)省了編譯器調(diào)用指令的時(shí)間。編譯器可以在一個(gè)時(shí)鐘周期內(nèi)完成指令預(yù)取、取指、譯碼、訪問、讀取、執(zhí)行的所有操作。

前文提到的開平方運(yùn)算中,通過AMEMD8_CONST、FTOD、DMPYSP、DSUBSP指令完成迭代法的數(shù)據(jù)位并行,減少乘法計(jì)算單元的使用負(fù)荷。

3.4 減小循環(huán)體的條件分支

開平方運(yùn)算經(jīng)過前兩個(gè)小節(jié)的優(yōu)化,計(jì)算單元的占用達(dá)到了最小,但是由于兩個(gè)分支條件的存在,軟件流水不能完全開啟。

為了減小循環(huán)體的條件分支,本文將原來的循環(huán)體分成了兩個(gè)小的循環(huán)體,第一個(gè)循環(huán)體進(jìn)行計(jì)算,第二個(gè)循環(huán)體進(jìn)行特殊值的處理。

至此,開平方運(yùn)算完成了向量化的優(yōu)化。優(yōu)化后的代碼性能分析如下。

由表3可知,循環(huán)體內(nèi)執(zhí)行的最大時(shí)鐘周期數(shù)等于乘法計(jì)算單元執(zhí)行的周期數(shù)9,此時(shí)A、B兩組乘法計(jì)算單元負(fù)載均衡。數(shù)據(jù)位并行和循環(huán)展開都分別將循環(huán)點(diǎn)數(shù)減少了2倍,因此表2中循環(huán)體執(zhí)行1次,相當(dāng)于表1中循環(huán)體執(zhí)行4次。這意味著,原有代碼執(zhí)行4次循環(huán)共計(jì)28個(gè)時(shí)鐘周期的操作,優(yōu)化后9個(gè)時(shí)鐘周期就完成了。當(dāng)然,實(shí)際優(yōu)化的效率并沒有這么高,還應(yīng)考慮條件分支處理循環(huán)產(chǎn)生的耗時(shí)。

表2 通用航空安全風(fēng)險(xiǎn)計(jì)算結(jié)果

表3 優(yōu)化后單次循環(huán)性能分析

4 性能測(cè)試與評(píng)價(jià)

本文測(cè)試的硬件平臺(tái)為飛騰M6678開發(fā)板,主頻1.0GHz,開發(fā)調(diào)試環(huán)境為CCS 5.5,數(shù)據(jù)運(yùn)行地址為MSMC(多核共享內(nèi)存)。

設(shè)計(jì)測(cè)試MATHLIB函數(shù)庫和本文優(yōu)化的向量數(shù)學(xué)庫在M6678單核條件下的運(yùn)算能力。測(cè)試數(shù)據(jù)規(guī)模分別為256、512、1024、2048,記錄兩個(gè)數(shù)學(xué)庫函數(shù)接口的執(zhí)行時(shí)間,求出不同數(shù)據(jù)規(guī)模下,向量數(shù)學(xué)庫相較于MATHLIB函數(shù)庫的加速比。最后,求出不同數(shù)據(jù)規(guī)模下加速比的平均值,記錄于表4。

表4 部分典型向量數(shù)學(xué)運(yùn)算的性能測(cè)試

由于MATHLIB函數(shù)庫各個(gè)接口已有的向量化程度不同,所以加速比也不相同。但是總地來說,優(yōu)化效果是顯著的。

正確性方面,在浮點(diǎn)數(shù)據(jù)有效位數(shù)之內(nèi),向量數(shù)學(xué)庫與MATHLIB函數(shù)庫結(jié)果完全相等。這表明,向量數(shù)學(xué)庫完全能夠勝任大多數(shù)應(yīng)用對(duì)運(yùn)算精度的要求。

5 結(jié)語

本文針對(duì)飛騰M6678平臺(tái)下的向量數(shù)學(xué)庫,采用了DSP指令和牛頓迭代法進(jìn)行改進(jìn)。通過深入分析算法的性能瓶頸,提出了通用的SIMD優(yōu)化方法,以及結(jié)合硬件特性的優(yōu)化方法,充分利用了硬件資源,顯著提升了向量數(shù)學(xué)庫的運(yùn)算性能。此外,總結(jié)的優(yōu)化方法包括性能瓶頸的分析、循環(huán)展開、SIMD指令的使用和減小循環(huán)體分支,在飛騰M6678平臺(tái)下具有通用性,適用于大多數(shù)情況下的算法優(yōu)化。下一步工作將主要圍繞更為復(fù)雜的信號(hào)處理和圖像處理向量庫進(jìn)行性能優(yōu)化。

猜你喜歡
指令優(yōu)化數(shù)學(xué)
聽我指令:大催眠術(shù)
超限高層建筑結(jié)構(gòu)設(shè)計(jì)與優(yōu)化思考
民用建筑防煙排煙設(shè)計(jì)優(yōu)化探討
關(guān)于優(yōu)化消防安全告知承諾的一些思考
一道優(yōu)化題的幾何解法
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
我為什么怕數(shù)學(xué)
新民周刊(2016年15期)2016-04-19 18:12:04
數(shù)學(xué)到底有什么用?
新民周刊(2016年15期)2016-04-19 15:47:52
數(shù)學(xué)也瘋狂
主站蜘蛛池模板: 国产成人亚洲无吗淙合青草| 精品国产电影久久九九| 国产日韩欧美在线视频免费观看 | 国产无遮挡猛进猛出免费软件| 一级高清毛片免费a级高清毛片| 亚洲精品国偷自产在线91正片| www.99在线观看| 最新亚洲人成网站在线观看| 女人18毛片久久| 自慰网址在线观看| 国产成人凹凸视频在线| 婷婷色中文网| 欧美区国产区| 国产在线精品99一区不卡| 在线视频精品一区| 精品无码人妻一区二区| 亚洲首页国产精品丝袜| 天天色天天综合| 国产人人射| 国产二级毛片| 首页亚洲国产丝袜长腿综合| 在线观看无码a∨| 国产精品久久久久久影院| 欧美在线网| 成人一区在线| 最新无码专区超级碰碰碰| 久久国产精品77777| 精品人妻系列无码专区久久| 小说区 亚洲 自拍 另类| 欧美性久久久久| 亚洲大尺度在线| 思思热精品在线8| 欧美啪啪精品| 五月激情婷婷综合| 丁香五月亚洲综合在线| 国产色婷婷| 国产精品99r8在线观看| 久久久久国产精品免费免费不卡| 噜噜噜久久| 激情影院内射美女| 国产高清精品在线91| 日韩在线播放欧美字幕| 一级毛片网| 欧美国产精品拍自| 日日拍夜夜操| 午夜a级毛片| 1769国产精品免费视频| 午夜a视频| 女高中生自慰污污网站| 国产97视频在线观看| 无码中文字幕乱码免费2| 91一级片| 全部毛片免费看| 国产欧美一区二区三区视频在线观看| 久久国产热| 亚洲乱码在线视频| 18禁不卡免费网站| 欧美日韩成人在线观看| 免费无码又爽又黄又刺激网站| 精品国产一区91在线| 久久这里只精品国产99热8| 免费人成又黄又爽的视频网站| 国产在线观看第二页| 欧美亚洲欧美区| 成人在线不卡| 国产成人精品优优av| 激情综合激情| 日韩专区欧美| 在线观看91精品国产剧情免费| 亚洲国产AV无码综合原创| 女人毛片a级大学毛片免费| 99精品视频九九精品| 老司机精品久久| 91青青草视频| 欧美国产另类| 久久久久国产精品免费免费不卡| 被公侵犯人妻少妇一区二区三区| 亚洲男女在线| 久久性视频| 在线免费观看AV| 久久久久中文字幕精品视频| 国产一级精品毛片基地|