




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于DSP的軟件流水優(yōu)化基于DSP的軟件流水優(yōu)化基于DSP的軟件流水優(yōu)化基于DSP的軟件流水優(yōu)化摘要:本文通過(guò)研究軟件流水相關(guān)技術(shù),結(jié)合TIDSPC6000系列DSP的硬件特性,探討了DSP軟件流水的相關(guān)優(yōu)化方法.通過(guò)性能比較,說(shuō)明這些方法具有普遍的應(yīng)用價(jià)值.關(guān)鍵詞:DSP軟件流水循環(huán)展開線性匯編1.引言數(shù)字信號(hào)處理器DSP(DigitalSignalProcessing)是一種運(yùn)算密集型處理器,采用哈佛結(jié)構(gòu)設(shè)計(jì),即數(shù)據(jù)總線和地址總線分開,使程序和數(shù)據(jù)分別存儲(chǔ)在不同的空間,允許取指令和執(zhí)行指令完全重疊.DSP芯片內(nèi)部嵌有硬件乘法器、累加器等功能單元,采用流水線結(jié)構(gòu),具有良好的并行特性。然而,在DSP算法中存在大量的循環(huán)操作,要提高系統(tǒng)的并行性,就必須發(fā)掘循環(huán)中各循環(huán)體之間的指令級(jí)并行性。目前,在這方面己經(jīng)提出的技術(shù)有循環(huán)展開和軟件流水等。其中,循環(huán)展開是通過(guò)多次復(fù)制循環(huán)體和調(diào)整循環(huán)中止代碼,從而優(yōu)化ILP和增大指令調(diào)度的作用范圍。這種方法有兩個(gè)缺點(diǎn):(1)指令調(diào)度不能越過(guò)新的循環(huán)體,在產(chǎn)生的代碼中就會(huì)有過(guò)多的注滿與清空流水線的部分,效率不高;(2)展開次數(shù)不易確定,太少并行度不夠,太多會(huì)導(dǎo)致代碼長(zhǎng)度過(guò)大。而軟件流水則避免了這些問題[1].本文將通過(guò)研究軟件流水相關(guān)技術(shù),從代碼和編譯器的角度提出DSP軟件流水的一些優(yōu)化方法。2。軟件流水技術(shù)軟件流水是一種重要的指令調(diào)度技術(shù),它通過(guò)編排循環(huán)指令,重疊地執(zhí)行不同的循環(huán)體來(lái)提高ILP[2]。此法主要應(yīng)用于具有多個(gè)功能部件的并行處理器,例如VLIW(VeryLongInstructionWord)、超標(biāo)量等多發(fā)射體系結(jié)構(gòu)處理器,以及可以同時(shí)執(zhí)行整數(shù)和浮點(diǎn)指令、但不同時(shí)對(duì)這兩種指令初始化的單發(fā)射體系結(jié)構(gòu)。目前,針對(duì)軟件流水己經(jīng)提出了一系列的調(diào)度算法,主要包括模調(diào)度(ModuloScheduling)、核心識(shí)別(KernelRecognition)及增強(qiáng)流水線調(diào)度(EnhancedPipelineScheduling,EPS)等三類[1]。其中,模調(diào)度是其他大部分軟件流水調(diào)度算法的基礎(chǔ)。核心識(shí)別方法是循環(huán)展開與無(wú)環(huán)調(diào)度的延伸.它將循環(huán)看作是完全展開的,所有循環(huán)體中的操作均參與調(diào)度,如果在調(diào)度的過(guò)程中,系統(tǒng)兩次到達(dá)某個(gè)完全相同的狀態(tài),則可以確定其后的調(diào)度將是前面模式的重復(fù),那么這兩點(diǎn)之間的代碼,就構(gòu)成了新的循環(huán)體(即循環(huán)核)。EPS方法從全局代碼移動(dòng)的角度來(lái)看待軟件流水問題.復(fù)雜的軟件流水問題被簡(jiǎn)化為全局無(wú)環(huán)調(diào)度的問題,因而大大降低了實(shí)現(xiàn)的復(fù)雜性.這一方法主要的缺點(diǎn)是不能處理多周期操作,修改調(diào)度好的顯式并行代碼是很困難的,可見的(多周期)延遲使得插入和刪除指令都成問題。EPS方法假設(shè)所有操作都是單周期操作,實(shí)際上是繞過(guò)了這一問題,由于很多操作難以在單個(gè)周期內(nèi)完成,因而這一缺點(diǎn)影響了EPS方法的實(shí)用性。3。DSP軟件流水優(yōu)化在過(guò)去的幾年中,數(shù)字信號(hào)處理器發(fā)展迅速,由于對(duì)提高性能及解決大范圍應(yīng)用程序的持續(xù)需要,許多廠商推出了基于VLIW的DSP處理機(jī),為了充分利用這些VLIWDSP處理機(jī)的指令級(jí)并行性,DSP程序一般都要經(jīng)過(guò)軟件流水的優(yōu)化,而且編譯器總是力爭(zhēng)使用軟件流水技術(shù)[]。本節(jié)將結(jié)合TIDSPC6000器件特性,探討其軟件流水的優(yōu)化方法。3.1DSP軟件流水代碼優(yōu)化由于代碼循環(huán)出現(xiàn)在關(guān)鍵性能區(qū)域,因此為改進(jìn)代碼性能,需要對(duì)DSP軟件流水進(jìn)行優(yōu)化[2]。本節(jié)將介紹一些主要的軟件流水代碼優(yōu)化方法。循環(huán)計(jì)數(shù)器用來(lái)保存當(dāng)前已經(jīng)循環(huán)的次數(shù),當(dāng)循環(huán)計(jì)數(shù)器中的值等于一個(gè)循環(huán)的總次數(shù)時(shí),循環(huán)就結(jié)束.最有效的軟件流水循環(huán)一般按遞減形式對(duì)循環(huán)進(jìn)行計(jì)數(shù)。通常即使源代碼中沒有按這種形式編寫,編譯器也能轉(zhuǎn)換成遞減形式。當(dāng)某些編譯器不能肯定最小循環(huán)迭代次數(shù)大于最小安全循環(huán)迭代次數(shù)時(shí),編譯器就會(huì)產(chǎn)生兩種執(zhí)行循環(huán)程序的輸出版本:(1)一個(gè)不用軟件流水的版本,在循環(huán)迭代次數(shù)小于最小安全循環(huán)迭代次數(shù)時(shí)運(yùn)行;(2)一個(gè)用軟件流水的版本,在循環(huán)迭代次數(shù)大于或等于最小安全循環(huán)迭代次數(shù)時(shí)運(yùn)行。冗余循環(huán)產(chǎn)生的存在使代碼尺寸增加,也對(duì)代碼性能有些影響.可以通過(guò)設(shè)置編譯器選項(xiàng)-ms0或者ms1,只產(chǎn)生一種版本的循環(huán)。也可以通過(guò)MUST_ITERATE偽指令或者-pm選項(xiàng)來(lái)幫助編譯器確定最小循環(huán)次數(shù).3。1.1循環(huán)展開循環(huán)展開有兩種形式:(1)把內(nèi)層循環(huán)全部展開;(2)把小循環(huán)的迭代展開,使得新循環(huán)體內(nèi)出現(xiàn)多次重復(fù)的舊迭代,從而減小循環(huán)次數(shù)。循環(huán)展開后,通過(guò)對(duì)新循環(huán)體的指令進(jìn)行軟件流水,以此增加并行執(zhí)行的指令數(shù)。有三種使循環(huán)展開的方法:(1)編譯器自動(dòng)執(zhí)行循環(huán)展開;(2)在程序中使用UNROLL偽指令建議編譯器做循環(huán)展開;(3)用戶自己在C/C++代碼中展開?!猰h選項(xiàng)有助于編譯器消除軟件流水循環(huán)的填充與排空,間接地減輕寄存器的壓力.在可能減少排空代碼和消除冗余循環(huán)的情況下,使用該選項(xiàng)可以獲得更簡(jiǎn)潔的代碼和更佳的性能。此選項(xiàng)可以導(dǎo)致循環(huán)讀取出數(shù)組結(jié)尾的數(shù)據(jù),因而用戶要保證其安全性。3。2DSP軟件流水編譯器優(yōu)化C6000編譯器提供業(yè)界最好的"解包"C程序。除了實(shí)現(xiàn)許多通常的DSP優(yōu)化之外,還可以對(duì)各種運(yùn)算密集的循環(huán)實(shí)現(xiàn)流水操作.編譯器的這一特性對(duì)任何使用流水操作的超長(zhǎng)指令集的機(jī)器的實(shí)現(xiàn)都很重要.為了充分利用8個(gè)可用的獨(dú)立功能單元,由軟件流水對(duì)每個(gè)循環(huán)的依賴關(guān)系進(jìn)行分析并預(yù)先安排進(jìn)程。編預(yù)器得到的關(guān)于依賴關(guān)系曲線的信息越多,其對(duì)進(jìn)程的安排就越好。3。2.1存儲(chǔ)體(bank)沖突避免C6000系列的各款DSP的片內(nèi)存儲(chǔ)器的結(jié)構(gòu)不同,大多數(shù)采用交叉存取存儲(chǔ)體(interleavedmemorybank)結(jié)構(gòu),按字節(jié)從0開始依次編址,如果地址為0,那么字節(jié)加載指令(LDB)會(huì)從bank0中加載一個(gè)字節(jié)的內(nèi)容,而半字指令性計(jì)劃(LDH)會(huì)從bank0中加載字節(jié)0和字節(jié)1,同樣,字加載指令(LDW)將從bank0和bank1中加載字節(jié)0至字節(jié)3.但是,由于每個(gè)存儲(chǔ)體都是一個(gè)單口存儲(chǔ)器,若一個(gè)周期內(nèi)同時(shí)有兩條指令對(duì)同一個(gè)存儲(chǔ)體進(jìn)行訪問,就會(huì)導(dǎo)致存儲(chǔ)器存取延遲,使流水線操作暫停一個(gè)周期。如果對(duì)于存儲(chǔ)區(qū)(memoryspace)多于1個(gè)的DSP,就不會(huì)使流水線暫停。一般通過(guò)以下方法來(lái)來(lái)判斷存儲(chǔ)體沖突:(1)如果兩個(gè)存取都沒有存儲(chǔ)體信息,則它們沒有沖突;(2)如果兩個(gè)存取有相同的基址,則它們有沖突;(3)偏移量、步長(zhǎng)、存取寬度和迭代差(iterationdelta)等信息用來(lái)確定是否會(huì)出現(xiàn)存儲(chǔ)體沖突。匯編優(yōu)化器對(duì)這些存取方式采用一種直接的分析方法來(lái)確定它們是否曾經(jīng)存取同一存儲(chǔ)體.其中迭代差為軟件流水中的步長(zhǎng)。通過(guò)在線性匯編中使用。mptr偽指令,使存儲(chǔ)器指令暗含存儲(chǔ)體的信息。若.mptr偽指令指定一個(gè)寄存器時(shí),就表示編譯器自動(dòng)控制確定兩個(gè)存儲(chǔ)器操作是否有塊沖突。如果存在沖突,編譯器就不會(huì)讓這兩次操作并行。3。2。2存儲(chǔ)器相關(guān)消除為使代碼達(dá)到最大效率,C6000編譯器將盡可能將指令安排為并行執(zhí)行。為使指令并行執(zhí)行,編譯器必須確定指令間的關(guān)系,也就是相關(guān)性,即一條指令必須發(fā)生在另一條指令之前。編譯器如果能確定兩條指令是不相關(guān)的,就會(huì)安排它們并行執(zhí)行。否則,就會(huì)假設(shè)存在相關(guān),禁止并行.然而,當(dāng)兩條指令存取相同的存儲(chǔ)器位置時(shí),就會(huì)出現(xiàn)存儲(chǔ)器相關(guān)(memorydependence)。為了消除存儲(chǔ)器相關(guān)可能通過(guò)向編譯器提供足夠的信息讓編譯器消除這種相關(guān),一般有四種方式:(1)使用關(guān)鍵字restrict限定指針、引用或者數(shù)組。restrict是對(duì)指針、引用或者數(shù)組的一種限定,可以確保限定的指針在聲明的范圍內(nèi),是指向一個(gè)特定對(duì)象的惟一指針,即這個(gè)指針不會(huì)和其他指針指向同一個(gè)存儲(chǔ)器地址;(2)使用-mt選項(xiàng)來(lái)表示沒有處理存儲(chǔ)器引用是相互依賴的;(3)在.(c)proc函數(shù)中的任何位置設(shè)置。no_mdep偽指令,表示在該函數(shù)中肯定不存在任何的存儲(chǔ)器相關(guān);(4)使用。mdep偽指令明確聲明相應(yīng)的存儲(chǔ)器引用是相關(guān)的.3。2。3利用雙數(shù)據(jù)通道平衡資源每個(gè)存儲(chǔ)器需要一個(gè).D功能單元來(lái)計(jì)算地址,同時(shí)要求一個(gè)。T地址通道來(lái)從存儲(chǔ)器向外發(fā)送地址。因?yàn)閷?duì)每個(gè)特定的周期中C6000都有兩個(gè)。D功能單元和兩條。T地址通道可用,編譯器必須至少分配兩個(gè)操作給其中一側(cè)。這不意味著這些操作成為資源的瓶頸。通常,都是由于把奇數(shù)次操作映射到機(jī)器的兩側(cè)造成的。為了對(duì)奇數(shù)條指令進(jìn)行平衡,可以采用循環(huán)展開,使操作數(shù)變?yōu)榕紨?shù),前提要求循環(huán)次數(shù)是2的倍數(shù).否則,會(huì)使程序錯(cuò)誤地執(zhí)行過(guò)多或過(guò)少的次數(shù)。為此,可以通過(guò)MUST_ITERATE偽指令向編譯器傳遞迭代信息,告知循環(huán)次數(shù)是2的整數(shù)倍。這樣一旦編譯器獲得此信息,就會(huì)自動(dòng)展開循環(huán)。展開一個(gè)循環(huán)可能會(huì)導(dǎo)致循環(huán)設(shè)置上的一些小開銷.編譯器不會(huì)打開循環(huán)次數(shù)很小的循環(huán),這么做可能不能減少總的循環(huán)次數(shù)。3.2.4優(yōu)化存儲(chǔ)器對(duì)齊通常,對(duì)存儲(chǔ)器的訪問極大地限制了資源的利用.C62x定點(diǎn)系列芯片可在每個(gè)時(shí)鐘周期加載和存儲(chǔ)32比特?cái)?shù)據(jù),C67x浮點(diǎn)系列芯片和C64x定點(diǎn)系列芯片可在每個(gè)時(shí)鐘周期加載兩個(gè)64比特?cái)?shù)據(jù).所以,可以通過(guò)提高存儲(chǔ)器訪問帶寬進(jìn)一步改善軟件流水的性能.為了能在DSP內(nèi)核上執(zhí)行高訪問帶寬的指令LDW,地址必須是按字對(duì)齊的,否則將加載錯(cuò)誤的數(shù)據(jù),。但是,編譯器不會(huì)自動(dòng)地進(jìn)行字對(duì)齊優(yōu)化,必須通過(guò)偽指令_nassert來(lái)實(shí)現(xiàn)。3.2。5寫線性匯編代碼(linearassemblycode)線性匯編是一種未編排的(unscheduled)匯編代碼,可以為指令分配寄存器。編譯優(yōu)化器通過(guò)分配寄存器和使用循環(huán)優(yōu)化,把線性匯編代碼轉(zhuǎn)化為高度并行的指令序列,提高軟件流水性能。4.總結(jié)本文通過(guò)研究軟件流水相關(guān)技術(shù),提出了DSP軟件流水優(yōu)化的一系列方法。對(duì)于多發(fā)射體系結(jié)構(gòu)的DSP芯片,通過(guò)應(yīng)用這些方法可以顯著提高芯片的并行性能。在具體的應(yīng)用中,可以選擇那些耗時(shí)的循環(huán)運(yùn)算進(jìn)行軟件流水優(yōu)化,運(yùn)用本文所介紹的優(yōu)化方法,可以非常容易而且有效地提高系統(tǒng)的性能。參考文獻(xiàn)[1]吳承勇.指令級(jí)并行編譯的關(guān)鍵技術(shù)研究[D],北京:中國(guó)科學(xué)院計(jì)算機(jī)技術(shù)研究所,2000.1.[2]TexasInstrumentsIncorporated.TMS320C6000系列DSP編程一具與指南[M]。田黎育,何佩琨,朱夢(mèng)宇.北京:清華大家出版社,2006。9.[3]WillianStallings.計(jì)算機(jī)組織與體系結(jié)構(gòu)[M].張昆藏等譯.北京:清華大家出版社,2006。3.Proceedingsofthe27
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45859-2025耐磨鑄鐵分類
- 廢鋼船買賣合同協(xié)議
- 2025年工業(yè)水處理工(高級(jí))職業(yè)技能認(rèn)定考試題庫(kù)(附答案)
- 2025年保密知識(shí)測(cè)試題題庫(kù)附有答案
- 2025年安全培訓(xùn)試題及答案
- 重難點(diǎn)2 閱讀理解詞義猜測(cè)題-2024年高考英語(yǔ)復(fù)習(xí)專練(新高考專用)原卷版
- 浙江省寧波市七校聯(lián)考2023-2024學(xué)年八年級(jí)上學(xué)期12月月考數(shù)學(xué)試卷(含解析)
- 內(nèi)陸?zhàn)B殖產(chǎn)業(yè)鏈上下游企業(yè)調(diào)研考核試卷
- 圓錐曲線大題綜合五個(gè)方程型(原卷版)
- 家禽養(yǎng)殖信息化對(duì)農(nóng)業(yè)勞動(dòng)力技能需求的變化分析考核試卷
- 心理咨詢師考試試題及答案
- 廣州廣百商場(chǎng)消費(fèi)者問卷調(diào)查報(bào)告Oct
- 大疆性格測(cè)試附有答案
- 充電樁的建設(shè)合作方案兩
- 反歧視培訓(xùn)課件
- 膠水培訓(xùn)課件
- 竣工資料移交清單
- 農(nóng)業(yè)綠色發(fā)展背景下我國(guó)化肥減量增效研究
- (完整版)十八項(xiàng)核心制度考試題庫(kù)
- 北京版初一數(shù)學(xué)知識(shí)點(diǎn)梳理
- 幼兒園園長(zhǎng)掛名免責(zé)協(xié)議書
評(píng)論
0/150
提交評(píng)論