◆楊陽朝 呂相文 呂東岳
VLIW DSP處理器下復(fù)數(shù)乘法單元優(yōu)化方法
◆楊陽朝 呂相文 呂東岳
(中國電子科技集團(tuán)公司電子科學(xué)研究院 北京 100041)
當(dāng)今VLIW DSP處理器擁有的指令種類越來越多,它們大多利用單一指令來完成一組復(fù)雜的計(jì)算,從而提高相關(guān)操作的執(zhí)行效率。復(fù)數(shù)乘法在數(shù)字信號處理程序中占有很大的比例,現(xiàn)在很多DSP處理器并不能自動地利用自身攜帶的復(fù)數(shù)乘法模塊,不能充分利用復(fù)數(shù)乘法指令,編譯器如何自動高效地識別并合成處理器特有的累加指令就變得尤為重要。此外,乘法結(jié)果不經(jīng)安全性檢查的使用,也會帶來安全風(fēng)險(xiǎn)。本文提出一種基于BWDSP處理器自動識別合成帶有安全特征碼的復(fù)數(shù)乘法指令的算法,實(shí)驗(yàn)結(jié)果表明,本算法提高系統(tǒng)原有的復(fù)數(shù)乘法指令的使用效率和可靠度,從而提高相關(guān)數(shù)字信號處理程序在BWDSP處理器上的性能和安全性。
VLIW;DSP;復(fù)數(shù)乘法;安全性
DSP處理器程序中有很多復(fù)數(shù)乘法操作,在一次傳統(tǒng)復(fù)數(shù)乘法中需要4次乘法、1次加法和1次減法運(yùn)算,共6條指令。BWDSP處理器提供了在單個(gè)時(shí)間周期內(nèi)完成一個(gè)復(fù)數(shù)乘法的指令,大大減小了運(yùn)算時(shí)間開銷。指令包括了定點(diǎn)復(fù)數(shù)和浮點(diǎn)復(fù)數(shù)乘法。浮點(diǎn)復(fù)數(shù)乘法的指令形式為:
{Macro} QFRm+1:m_n+1:n=CFRm+1:m*CFRn+1:n
表示32位浮點(diǎn)復(fù)數(shù)CFRm+1:m和32位浮點(diǎn)復(fù)數(shù)CFRn+1:n相乘,其中FRm+1和FRn+1表示兩個(gè)實(shí)數(shù)的實(shí)部,F(xiàn)Rm和FRn表示兩個(gè)實(shí)數(shù)的虛部。F表示是浮點(diǎn)形式,C表示參與操作的是復(fù)數(shù)。輸出四個(gè)32位浮點(diǎn)復(fù)數(shù)相乘的中間四個(gè)分量,其中,Rm+1 * Rn+1放Rm+1;Rm+1 * Rn放在Rm;Rm * Rn放在Rn+1;Rm * Rn+1放在Rn。
定點(diǎn)復(fù)數(shù)的乘法指令形式如下:
{Macro} CRs+1:s=CRm+1:m*CRn+1:n
表示32位定點(diǎn)復(fù)數(shù)Rm+1:m和定點(diǎn)復(fù)數(shù)Rn+1:n相乘,結(jié)果放在Rs+1:s寄存器上。本文算法包括指令調(diào)度、指令識別、指令替換三個(gè)模塊。
本小節(jié)為指令調(diào)度模塊,將代碼進(jìn)行歸整,盡可能將復(fù)數(shù)相乘的操作集中在一起,利于相關(guān)指令的識別操作。算法分為以下兩個(gè)部分。
第一部分自上而下掃描程序的中間語言,判斷所有流程塊中的每條指令,如果當(dāng)前指令是load指令,且與之前計(jì)算操作指令沒有數(shù)據(jù)依賴,則在當(dāng)前cb塊中向前移動op以及與op有關(guān)的讀取指令,直到排在最前端的load指令列最后。
第二部分自下而上掃描程序的中間語言,判斷所有流程塊中的每條指令,如果當(dāng)前指令是store指令,且與之后計(jì)算操作指令沒有數(shù)據(jù)依賴,則在當(dāng)前cb塊中向后移動op以及與op有關(guān)的讀取指令,直到排在最后端的store指令列最前。
本小節(jié)對集中的計(jì)算主體代碼進(jìn)行識別,稱這部分代碼為主體代碼。算法包括逐條結(jié)構(gòu)性尋找、寄存器依賴判斷和指令安全特征標(biāo)注等,流程如下:
(1)主體代碼的指令數(shù)目是否大于等于6,如果不是,算法返回,提交已識別的指令;如果是,下一步;
(2)自上而下識別每條指令,直到找到兩條相連的定點(diǎn)或浮點(diǎn)乘法指令,且后一條加法或減法指令;
(3)從(2)中找到的乘法指令之后的指令自上而下識別,若碰到mov指令,則繼續(xù),若找到兩條相連的定點(diǎn)或浮點(diǎn)乘法指令,且后一條為加法或減法指令,進(jìn)入(4)。如果碰到其他計(jì)算指令或者除mov指令的特殊指令,則將此步驟中最后一條指令設(shè)置為起始指令,轉(zhuǎn)入(10);
(4)找到的4條乘法指令和2條加減法指令是否都是對浮點(diǎn)數(shù)或者定點(diǎn)數(shù)的操作,如果是,進(jìn)入(5);否則,設(shè)置后面組乘法指令的第一個(gè)指令為起始指令,進(jìn)入(10);
(5)判斷兩組乘法指令之后的加減法指令是否不同,即一個(gè)加法,另一個(gè)是減法,如果不同則進(jìn)入(6),否則設(shè)置第二組中加減法指令的下一條指令為起始指令,進(jìn)入(10);
(6)如果當(dāng)前兩組指令之間存在mov指令,則判斷其中的mov指令是否與后一組指令或第一組指令中的乘法指令之間存在數(shù)據(jù)依賴,如果存在,則設(shè)置后一組指令的下一條指令為起始指令,進(jìn)入(10),如果不存在,則進(jìn)入(7);
(7)判斷每組當(dāng)中的加減法指令的源操作數(shù)是否是當(dāng)前組之前兩條乘法指令的目的操作數(shù),且每組中的兩條乘法指令的源操作數(shù)各不相同,如果滿足條件,則進(jìn)入(8),否則設(shè)置后一組指令的下一條指令為起始指令,進(jìn)入(10);
(8)判斷每組指令中的兩條乘法指令的源操作數(shù)交叉后產(chǎn)生的4 種不同組合中,是否每個(gè)組合都是滿足兩條乘法指令的源操作數(shù)一個(gè)相同,另一個(gè)不同。若滿足,轉(zhuǎn)向(9),否則設(shè)置后一組指令的下一條指令為起始指令,進(jìn)入(10);
(9)識別當(dāng)前兩組6條指令為一次復(fù)數(shù)乘法指令,并在中間代碼增加安全特征碼,設(shè)置后一組指令的下一條指令為起始指令,進(jìn)入(10);
(10)判斷當(dāng)前起始指令是否超出當(dāng)前主體代碼,如果是,則算法返回,否則,將起始指令開始到主體代碼的最后一條指令設(shè)置為新的主體代碼,轉(zhuǎn)入(1)。
在對復(fù)數(shù)乘法指令識別之后,需要將復(fù)數(shù)乘法計(jì)算相關(guān)的指令替換成為處理器擁有的單條復(fù)數(shù)乘法指令。
對于定點(diǎn)復(fù)數(shù)乘法,BWDSP處理器上定點(diǎn)復(fù)數(shù)乘法指令可以直接計(jì)算出結(jié)果,所以將帶有標(biāo)志的復(fù)數(shù)乘法指令替換后,就完成了復(fù)數(shù)乘法指令的優(yōu)化。
對于浮點(diǎn)復(fù)數(shù)乘法,BWDSP處理器上的浮點(diǎn)單個(gè)復(fù)數(shù)乘法指令只能計(jì)算出復(fù)數(shù)乘法產(chǎn)生的4個(gè)中間值,需要一個(gè)減法指令來得出復(fù)數(shù)乘法結(jié)果復(fù)數(shù)的實(shí)部,需要一個(gè)加法指令來對應(yīng)的計(jì)算結(jié)果復(fù)數(shù)的虛部。因此,先利用浮點(diǎn)復(fù)數(shù)乘法指令替換原先的乘法指令,然后放在原先的減法和加法指令之前。
替換后的編譯器中間代碼均帶有安全特征碼,這樣便于用于編譯器后端各種安全策略對指令的識別,針對性地開展安全檢測和流程判斷,從而增強(qiáng)代碼的健壯性和安全性。
我們在BWDSP仿真平臺上實(shí)現(xiàn)本文復(fù)數(shù)乘法指令優(yōu)化,利用BWDSP處理器特有的復(fù)數(shù)乘法指令對程序進(jìn)行優(yōu)化。實(shí)驗(yàn)證明,利用本文化算法對FFT_radix2進(jìn)行優(yōu)化后與優(yōu)化前在BWDSP上執(zhí)行的性能結(jié)果對比,優(yōu)化后大約可以獲得10%到13%的性能提升。因?yàn)镕FT中有大量復(fù)數(shù)乘法,所以復(fù)數(shù)乘法指令優(yōu)化算法可以顯著提高FFT_radix2的執(zhí)行效率。這充分說明本文算法可以顯著提升復(fù)數(shù)乘法程序的執(zhí)行性能,從而提高在BWDSP處理器上對相關(guān)數(shù)字信號處理應(yīng)用程序時(shí)的處理能力。
[1]CETC38.BWDSP100軟件用戶手冊[M],2011.
[2]J.A.Fisher.Trace Scheduling: A Technique for Global Microcode Compaction,IEEE Transactions on Computers, vol. C-30, no. 7,1981.
[3]J.A.Fisher.Very Long Instruction Word Architectures and the ELI-512,Proceedings of the 10th Annual International Symposium on Computer Architecture, vol. 11,1983.
[4]J.A.Fisher,P.Faraboschi,and C.Young.Embedded Computing:A VLIW Approachto Architecture, Compilers and Tools. Morgan Kaufmann,2004.
[5]M. S. Schlansker and B. R. Rau.“EPIC: Explicititly Parallel Instruction Computing,” IEEE Computer, vol. 33. 2000.
[6]劉小明,朱艷.數(shù)字信號處理器的指令緩存器設(shè)計(jì)[J].中國集成電路,2013.