使用基于可編程邏輯的硬件方法實(shí)現(xiàn)算法加速
發(fā)布時(shí)間:2007/8/23 0:00:00 訪問(wèn)次數(shù):460
當(dāng)設(shè)計(jì)者試圖從算法中獲得最佳性能但軟件方法已無(wú)計(jì)可施時(shí),可以嘗試通過(guò)硬件/軟件重新劃分來(lái)進(jìn)行加速。FPGA易于實(shí)現(xiàn)軟件模塊和硬件模塊的相互交換,且不必改變處理器或進(jìn)行板級(jí)變動(dòng)。本文闡述如何用FPGA來(lái)實(shí)現(xiàn)算法的硬件加速。
如果想從代碼中獲得最佳性能,方法包括優(yōu)化算法、使用查找表而不是算法、將一切都轉(zhuǎn)換為本地字長(zhǎng)尺寸、使用注冊(cè)變量、解開(kāi)循環(huán)甚至可能采用匯編代碼。如果所有這些都不奏效,可以轉(zhuǎn)向更快的處理器、采用一個(gè)不同的處理器架構(gòu),或?qū)⒋a一分為二通過(guò)兩個(gè)處理器并行處理。不過(guò),如果有一種方法可將那些對(duì)時(shí)間有嚴(yán)格要求的代碼段轉(zhuǎn)換為能夠以5-100倍速度運(yùn)行的函數(shù)調(diào)用,而且如果這一方法是一種可供軟件開(kāi)發(fā)之用的標(biāo)準(zhǔn)工具,這可信嗎?現(xiàn)在,利用可編程邏輯作為硬件加速的基礎(chǔ)可使這一切都變成現(xiàn)實(shí)。
圖1:帶定制指令的可配置處理器架構(gòu)。
低成本可編程邏輯在嵌入式系統(tǒng)中應(yīng)用得越來(lái)越普遍,這為系統(tǒng)設(shè)計(jì)者提供了一個(gè)無(wú)需對(duì)處理器或架構(gòu)進(jìn)行大的改動(dòng)即可獲得更高性能的可選方案。可編程邏輯可將計(jì)算密集型功能轉(zhuǎn)換為硬件加速功能。從軟件的角度看,這只是簡(jiǎn)單地將一個(gè)函數(shù)調(diào)用做進(jìn)一個(gè)定制的硬件模塊中,但運(yùn)行速度要比通過(guò)匯編語(yǔ)言優(yōu)化的相同代碼或?qū)⑺惴ㄞD(zhuǎn)換為查找表要快得多。
硬件加速
首先探討一下什么是硬件加速,以及將算法作為定制指令來(lái)實(shí)現(xiàn)與采用硬件外圍電路的區(qū)別。硬件加速是指利用硬件模塊來(lái)替代軟件算法以充分利用硬件所固有的快速特性。從軟件的角度看,與硬件加速模塊接口就跟調(diào)用一個(gè)函數(shù)一樣。唯一的區(qū)別在于此函數(shù)駐留在硬件中,對(duì)調(diào)用函數(shù)是透明的。
取決于算法的不同,執(zhí)行時(shí)間最高可加快100倍。硬件在執(zhí)行各種操作時(shí)要快得多,如執(zhí)行復(fù)雜的數(shù)學(xué)功能、將數(shù)據(jù)從一個(gè)地方轉(zhuǎn)移到另一個(gè)地方,以及多次執(zhí)行同樣的操縱。本文后面將討論一些通常用軟件完成的操作,經(jīng)過(guò)硬件加速后這些操作可獲得極大的性能提高。
如果在系統(tǒng)設(shè)計(jì)中采用FPGA,那么在設(shè)計(jì)周期的任何時(shí)候都可以添加定制的硬件。設(shè)計(jì)者可以立刻編寫(xiě)軟件代碼,并可在最終定稿之前在硬件部分上運(yùn)行。此外,還可以采取增量法來(lái)決定哪部分代碼用硬件而不是軟件來(lái)實(shí)現(xiàn)。FPGA供應(yīng)商所提供的開(kāi)發(fā)工具可實(shí)現(xiàn)硬件和軟件之間的無(wú)縫切換。這些工具可以為總線邏輯和中斷邏輯生成HDL代碼,并可根據(jù)系統(tǒng)配置定制軟件庫(kù)及include文件。
帶一些CISC的RISC
精簡(jiǎn)指令集計(jì)算(RISC)架構(gòu)的目標(biāo)之一即是保持指令簡(jiǎn)單化,以便讓指令運(yùn)行得足夠快。這與復(fù)雜指令集計(jì)算(CISC)架構(gòu)正好相反,后者一般不會(huì)同樣快地執(zhí)行指令,但每個(gè)指令可完成更多處理任務(wù)。這兩種架構(gòu)應(yīng)用得都很普遍,而且各有所長(zhǎng)。
如果能根據(jù)特定的應(yīng)用將RISC的簡(jiǎn)單和快速特性與CISC強(qiáng)大的處理能力結(jié)合起來(lái),豈不兩全其美?其實(shí)這正是硬件加速所要做的。加入為某種應(yīng)用而定制的硬件加速模塊可以提高處理能力,并減少代碼復(fù)雜性和密度,因?yàn)橛布K取代了軟件模塊?梢赃@么說(shuō),是用硬件來(lái)?yè)Q取速度和簡(jiǎn)單性。
定制指令和硬件外圍電路方式
有兩種硬件加速模塊實(shí)現(xiàn)方式。其一是定制指令,它幾乎可在每一個(gè)可配置處理器中實(shí)現(xiàn),這是采用可配置處理器的主要優(yōu)點(diǎn)。如圖1所示,定制指令是作為算術(shù)邏輯單元(ALU)的擴(kuò)展而添加的。處理器只知道定制指令就像其它指令一樣,包括擁有自己的操作代碼。至于C代碼,宏可自動(dòng)生成,從而使得使用該定制指令跟調(diào)用函數(shù)一樣。
如果定制指令需要幾個(gè)時(shí)鐘周期才能完成,而且要連續(xù)調(diào)用它,則可以流水線式定制指令來(lái)實(shí)現(xiàn)。這樣可在每個(gè)時(shí)鐘周期產(chǎn)生一個(gè)結(jié)果,不過(guò)開(kāi)始時(shí)有些延遲。
硬件加速模塊的另一種實(shí)現(xiàn)方式是硬件外圍電路。在這一方式下,數(shù)據(jù)不是傳遞給軟件函數(shù),而是寫(xiě)入存儲(chǔ)器映射的硬件外圍電路中。計(jì)算是在CPU之外完成的,因此在外圍電路工作的同時(shí)CPU可以繼續(xù)運(yùn)行代碼。其實(shí)代替軟件算法的只是一個(gè)普通的硬件外圍電路。與定制指令的另一個(gè)不同之處是硬件外圍電路可以訪問(wèn)系統(tǒng)中的其它外圍電路或存儲(chǔ)器,而無(wú)須CPU介入。
根據(jù)硬件需要做什么、怎么工作以及需要多長(zhǎng)時(shí)間可以決定采用是定制指令還是硬件外圍電路更合適。對(duì)于那些在幾個(gè)周期內(nèi)就可完成的操作,定制指令一般更好些,因?yàn)樗a(chǎn)生的開(kāi)銷(xiāo)要更少。對(duì)于外圍電路,一般需要執(zhí)行幾個(gè)指令來(lái)寫(xiě)入控制寄存器、狀態(tài)寄存器和數(shù)據(jù)寄存器,而且需要一個(gè)指令來(lái)讀取結(jié)果。如果計(jì)算需要幾個(gè)周期,實(shí)施外圍電路比較好,因?yàn)樗粫?huì)影響CPU流水線;蛘撸部梢詫(shí)施前面所述的流水線式定制指令。
另一個(gè)區(qū)別是定制指令需要有限數(shù)目的操作數(shù),并返回一個(gè)結(jié)果。根據(jù)處理器指令集架構(gòu)的不同,操作數(shù)也各異。對(duì)某些操縱,這
當(dāng)設(shè)計(jì)者試圖從算法中獲得最佳性能但軟件方法已無(wú)計(jì)可施時(shí),可以嘗試通過(guò)硬件/軟件重新劃分來(lái)進(jìn)行加速。FPGA易于實(shí)現(xiàn)軟件模塊和硬件模塊的相互交換,且不必改變處理器或進(jìn)行板級(jí)變動(dòng)。本文闡述如何用FPGA來(lái)實(shí)現(xiàn)算法的硬件加速。
如果想從代碼中獲得最佳性能,方法包括優(yōu)化算法、使用查找表而不是算法、將一切都轉(zhuǎn)換為本地字長(zhǎng)尺寸、使用注冊(cè)變量、解開(kāi)循環(huán)甚至可能采用匯編代碼。如果所有這些都不奏效,可以轉(zhuǎn)向更快的處理器、采用一個(gè)不同的處理器架構(gòu),或?qū)⒋a一分為二通過(guò)兩個(gè)處理器并行處理。不過(guò),如果有一種方法可將那些對(duì)時(shí)間有嚴(yán)格要求的代碼段轉(zhuǎn)換為能夠以5-100倍速度運(yùn)行的函數(shù)調(diào)用,而且如果這一方法是一種可供軟件開(kāi)發(fā)之用的標(biāo)準(zhǔn)工具,這可信嗎?現(xiàn)在,利用可編程邏輯作為硬件加速的基礎(chǔ)可使這一切都變成現(xiàn)實(shí)。
圖1:帶定制指令的可配置處理器架構(gòu)。
低成本可編程邏輯在嵌入式系統(tǒng)中應(yīng)用得越來(lái)越普遍,這為系統(tǒng)設(shè)計(jì)者提供了一個(gè)無(wú)需對(duì)處理器或架構(gòu)進(jìn)行大的改動(dòng)即可獲得更高性能的可選方案?删幊踢壿嬁蓪⒂(jì)算密集型功能轉(zhuǎn)換為硬件加速功能。從軟件的角度看,這只是簡(jiǎn)單地將一個(gè)函數(shù)調(diào)用做進(jìn)一個(gè)定制的硬件模塊中,但運(yùn)行速度要比通過(guò)匯編語(yǔ)言優(yōu)化的相同代碼或?qū)⑺惴ㄞD(zhuǎn)換為查找表要快得多。
硬件加速
首先探討一下什么是硬件加速,以及將算法作為定制指令來(lái)實(shí)現(xiàn)與采用硬件外圍電路的區(qū)別。硬件加速是指利用硬件模塊來(lái)替代軟件算法以充分利用硬件所固有的快速特性。從軟件的角度看,與硬件加速模塊接口就跟調(diào)用一個(gè)函數(shù)一樣。唯一的區(qū)別在于此函數(shù)駐留在硬件中,對(duì)調(diào)用函數(shù)是透明的。
取決于算法的不同,執(zhí)行時(shí)間最高可加快100倍。硬件在執(zhí)行各種操作時(shí)要快得多,如執(zhí)行復(fù)雜的數(shù)學(xué)功能、將數(shù)據(jù)從一個(gè)地方轉(zhuǎn)移到另一個(gè)地方,以及多次執(zhí)行同樣的操縱。本文后面將討論一些通常用軟件完成的操作,經(jīng)過(guò)硬件加速后這些操作可獲得極大的性能提高。
如果在系統(tǒng)設(shè)計(jì)中采用FPGA,那么在設(shè)計(jì)周期的任何時(shí)候都可以添加定制的硬件。設(shè)計(jì)者可以立刻編寫(xiě)軟件代碼,并可在最終定稿之前在硬件部分上運(yùn)行。此外,還可以采取增量法來(lái)決定哪部分代碼用硬件而不是軟件來(lái)實(shí)現(xiàn)。FPGA供應(yīng)商所提供的開(kāi)發(fā)工具可實(shí)現(xiàn)硬件和軟件之間的無(wú)縫切換。這些工具可以為總線邏輯和中斷邏輯生成HDL代碼,并可根據(jù)系統(tǒng)配置定制軟件庫(kù)及include文件。
帶一些CISC的RISC
精簡(jiǎn)指令集計(jì)算(RISC)架構(gòu)的目標(biāo)之一即是保持指令簡(jiǎn)單化,以便讓指令運(yùn)行得足夠快。這與復(fù)雜指令集計(jì)算(CISC)架構(gòu)正好相反,后者一般不會(huì)同樣快地執(zhí)行指令,但每個(gè)指令可完成更多處理任務(wù)。這兩種架構(gòu)應(yīng)用得都很普遍,而且各有所長(zhǎng)。
如果能根據(jù)特定的應(yīng)用將RISC的簡(jiǎn)單和快速特性與CISC強(qiáng)大的處理能力結(jié)合起來(lái),豈不兩全其美?其實(shí)這正是硬件加速所要做的。加入為某種應(yīng)用而定制的硬件加速模塊可以提高處理能力,并減少代碼復(fù)雜性和密度,因?yàn)橛布K取代了軟件模塊?梢赃@么說(shuō),是用硬件來(lái)?yè)Q取速度和簡(jiǎn)單性。
定制指令和硬件外圍電路方式
有兩種硬件加速模塊實(shí)現(xiàn)方式。其一是定制指令,它幾乎可在每一個(gè)可配置處理器中實(shí)現(xiàn),這是采用可配置處理器的主要優(yōu)點(diǎn)。如圖1所示,定制指令是作為算術(shù)邏輯單元(ALU)的擴(kuò)展而添加的。處理器只知道定制指令就像其它指令一樣,包括擁有自己的操作代碼。至于C代碼,宏可自動(dòng)生成,從而使得使用該定制指令跟調(diào)用函數(shù)一樣。
如果定制指令需要幾個(gè)時(shí)鐘周期才能完成,而且要連續(xù)調(diào)用它,則可以流水線式定制指令來(lái)實(shí)現(xiàn)。這樣可在每個(gè)時(shí)鐘周期產(chǎn)生一個(gè)結(jié)果,不過(guò)開(kāi)始時(shí)有些延遲。
硬件加速模塊的另一種實(shí)現(xiàn)方式是硬件外圍電路。在這一方式下,數(shù)據(jù)不是傳遞給軟件函數(shù),而是寫(xiě)入存儲(chǔ)器映射的硬件外圍電路中。計(jì)算是在CPU之外完成的,因此在外圍電路工作的同時(shí)CPU可以繼續(xù)運(yùn)行代碼。其實(shí)代替軟件算法的只是一個(gè)普通的硬件外圍電路。與定制指令的另一個(gè)不同之處是硬件外圍電路可以訪問(wèn)系統(tǒng)中的其它外圍電路或存儲(chǔ)器,而無(wú)須CPU介入。
根據(jù)硬件需要做什么、怎么工作以及需要多長(zhǎng)時(shí)間可以決定采用是定制指令還是硬件外圍電路更合適。對(duì)于那些在幾個(gè)周期內(nèi)就可完成的操作,定制指令一般更好些,因?yàn)樗a(chǎn)生的開(kāi)銷(xiāo)要更少。對(duì)于外圍電路,一般需要執(zhí)行幾個(gè)指令來(lái)寫(xiě)入控制寄存器、狀態(tài)寄存器和數(shù)據(jù)寄存器,而且需要一個(gè)指令來(lái)讀取結(jié)果。如果計(jì)算需要幾個(gè)周期,實(shí)施外圍電路比較好,因?yàn)樗粫?huì)影響CPU流水線;蛘,也可以實(shí)施前面所述的流水線式定制指令。
另一個(gè)區(qū)別是定制指令需要有限數(shù)目的操作數(shù),并返回一個(gè)結(jié)果。根據(jù)處理器指令集架構(gòu)的不同,操作數(shù)也各異。對(duì)某些操縱,這
熱門(mén)點(diǎn)擊
- MMIC和RFIC的CAD 王紹東,高學(xué)邦,
- 幀存儲(chǔ)器AL440B及其在視頻回放系統(tǒng)中的應(yīng)
- D/A轉(zhuǎn)換器輸出波形的尖峰消除方案
- 帶硬件地址識(shí)別的UART IP 的設(shè)計(jì)和實(shí)現(xiàn)
- 單片機(jī)89C52并行I/O口實(shí)現(xiàn)多個(gè)LED顯
- SMT焊接常見(jiàn)缺陷及解決辦法
- EDA海外發(fā)展前景(上)
- 數(shù)字動(dòng)態(tài)偏置IC提供完整的功率放大器偏置解決
- 采用微流體背部冷卻技術(shù)實(shí)現(xiàn)芯片散熱(圖)
- 基于單片機(jī)的智能防腐電源的設(shè)計(jì)和實(shí)現(xiàn) 武漢理
推薦技術(shù)資料
- 按鈕與燈的互動(dòng)實(shí)例
- 現(xiàn)在趕快去看看這個(gè)目錄卞有什么。FGA15N120AN... [詳細(xì)]
- AMOLED顯示驅(qū)動(dòng)芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計(jì)
- GB300 超級(jí)芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個(gè)最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究