亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Open64上的特殊指令合成策略研究與實(shí)現(xiàn)

        2018-03-28 06:03:14陳金娥黃勝兵
        軟件工程 2018年2期

        陳金娥 黃勝兵

        摘 要:Open64是一個擁有GNU通用公共許可證的開源高性能編譯器,設(shè)計(jì)結(jié)構(gòu)好,分析優(yōu)化全面,是編譯器高級研究的理想平臺。本文針對BWDSP處理器所提供的高效特殊運(yùn)算指令,在Open64基礎(chǔ)上研究并實(shí)現(xiàn)了面向BWDSP中的特殊指令合成策略。該策略通過擴(kuò)展并重定向編譯器后端模塊,能夠充分地利用BWDSP中的復(fù)數(shù)指令、累加指令、乘累加指令和平方和指令等特殊指令。實(shí)驗(yàn)結(jié)果表明,本文提出的特殊指令合成策略能夠很大程度上提高程序的性能。

        關(guān)鍵詞:Open64編譯器;特殊指令合成;超長指令字

        中圖分類號:TP311.54 文獻(xiàn)標(biāo)識碼:A

        Abstract:As an open-source high-performance compiler with GNU General Public License (GPL),Open64 is a good compiler for advanced research.Aiming at the special instructions provided by BWDSP,the paper researches and implements the special instruction synthesis strategy based on Open64.Extending and redirecting the compiler back-end,the strategy fully utilizes the special instructions of BWDSP,including complex,accumulation,multiply accumulation and sum-of-squares operations.The experimental results show that the program performance can be greatly improved with this special instruction synthesis strategy proposed in this paper.

        Keywords:Open64 compiler;special instruction synthesis;Very Long Instruction Word (VLIW)

        1 引言(Introduction)

        BWDSP是一款采用分簇架構(gòu)、支持SIMD的16發(fā)射的VLIW數(shù)字信號處理器。根據(jù)其面向的計(jì)算領(lǐng)域提供了大量的特殊指令[1,2],包括復(fù)數(shù)指令、累加指令、乘累加指令和平方和指令等。

        本文以O(shè)pen64作為面向BWDSP體系結(jié)構(gòu)的編譯器研究框架。Open64是一個運(yùn)行在Linux下的C、C++、Fortran編譯器基礎(chǔ)設(shè)施[3],其前端將源程序轉(zhuǎn)化為中間表示W(wǎng)HIRL,后端讀入中間語言WHIRL,經(jīng)過翻譯生成CG階段(Code Generation)的中間表示(CGIR),再經(jīng)過一系列優(yōu)化,最終CGIR經(jīng)過代碼輸出生成匯編程序[4]。Open64編譯器的架構(gòu)如圖1所示。

        本文主要解決如何將高級程序語言代碼通過編譯器直接生成BWDSP指令系統(tǒng)中的特殊指令,并在Open64編譯基礎(chǔ)設(shè)施上提出并實(shí)現(xiàn)了面向BWDSP體系結(jié)構(gòu)的特殊指令合成策略,能夠較好地利用BWDSP的特殊指令來提高應(yīng)用程序的性能。

        2 特殊指令合成策略(Special instruction synthesis strategy)

        2.1 復(fù)數(shù)指令合成

        原Open64編譯基礎(chǔ)設(shè)施內(nèi)部提供了浮點(diǎn)復(fù)數(shù)類型,因此編譯器前端能夠直接處理浮點(diǎn)復(fù)數(shù)類型源代碼。然而編譯器后端為了能夠生成處理復(fù)數(shù)形式的匯編代碼,在中間語言WHIRL的Middle WHIRL上又將復(fù)數(shù)類型C4下降為Float類型來進(jìn)行處理。為了充分利用BWDSP處理器的特點(diǎn),必須將復(fù)數(shù)類型到浮點(diǎn)類型的轉(zhuǎn)換過程進(jìn)行屏蔽,使其直接處理復(fù)數(shù)類型的中間語言WHIRL,指令如下所示(以復(fù)數(shù)加法為例):

        C4C4LDID 0 <2,1,a> T<17,.predef_C4,4>

        C4C4LDID 0 <2,2,b> T<17,.predef_C4,4>

        C4ADD

        C4STID 0 <2,3,c> T<17,.predef_C4,4> {line: 1/6}

        這種帶復(fù)數(shù)類型C4的中間語言WHIRL在后端的代碼生成階段(CG_Generate_Code)直接將其注釋為BWDSP體系結(jié)構(gòu)中的復(fù)數(shù)指令。

        2.2 累加和乘累加類指令合成

        原Open64編譯器基礎(chǔ)設(shè)施中累加和乘累加類指令通常是由數(shù)條匯編指令組成,如下所示(以c+=a*b為例):

        I4I4LDID 0 <2,1,a> T<4,.predef_I4,1>

        I4I4LDID 0 <2,2,b> T<4,.predef_I4,1>

        I4MPY

        I4I4LDID 0 <2,3,c> T<4,.predef_I4,1>

        I4ADD

        I4STID 0 <2,3,c> T<4,.predef_I4,1> {line: 1/6}

        面向BWDSP的Open64編譯器在中間語言WHIRL上生成的累加操作直接進(jìn)行指令注釋,并不需要在其中插入相應(yīng)的特殊規(guī)約處理指令。如下所示:

        I4I4LDID 0 <2,1,a> T<4,.predef_I4,1>

        I4I4LDID 0 <2,2,b> T<4,.predef_I4,1>

        I4REDUCE_ADD

        I4STID 0 <2,3,c> T<4,.predef_I4,1>

        該類指令與復(fù)數(shù)指令的處理類似,將生成帶累加操作的中間語言WHIRL,在后端代碼生成階段直接將其注釋為BWDSP體系結(jié)構(gòu)中的累加和乘累加類指令。

        2.3 平方和類指令合成

        平方和類指令合成與上述的兩類特殊指令合成策略有所不同。由于Open64編譯器基礎(chǔ)設(shè)施中并沒有提供相應(yīng)的平方和類指令表示,因此需要在中間語言WHIRL中增加相應(yīng)的WHIRL操作。面向BWDSP的Open64編譯器中的平方和類特殊指令的合成策略框架如圖2所示。

        例如,平方和操作(例如c=a*a+b*b)在中間語言WHIRL上合成的中間表示如下所示:

        I4I4LDID 0 <2,1,a> T<4,.predef_I4,1>

        I4I4LDID 0 <2,2,b> T<4,.predef_I4,1>

        I4SQURA

        I4STID 0 <2,3,c> T<4,.predef_I4,1> {line: 1/6}

        3 代碼生成內(nèi)部模塊改進(jìn)(Improvement of theinternal modules in code generation)

        面向BWDSP的Open64編譯器后端的代碼生成模塊部分是與BWDSP體系結(jié)構(gòu)最為密切相關(guān)的階段,因此需要對代碼生成內(nèi)部的各個階段進(jìn)行相應(yīng)的擴(kuò)展和重定向,具體包括四個階段。

        3.1 機(jī)器描述

        Open64中的機(jī)器描述文件稱為Knobsfile[5],可將其按照硬件資源信息分為指令集描述、運(yùn)算資源描述、寄存器描述和匯編輸出描述等四類信息。Open64的機(jī)器描述采用的是二次編譯的方式設(shè)計(jì)的,編譯器通過采用Intel提供的可解析特點(diǎn)格式的信息文件工具KAPI來生成BWDSP使用的數(shù)據(jù)和文件,即只需在v11-itanium-extra.knb和v12-itanium-extra.knb文件中添加相應(yīng)特殊指令的機(jī)器描述,就可以生成相應(yīng)動態(tài)鏈接庫供編譯器在使用過程中調(diào)用。

        3.2 指令注釋

        Open64中的指令注釋主要是將中間語言WHIRL轉(zhuǎn)換為代碼生成內(nèi)部的中間表示CGIR,該過程位于CG_Expand中,特殊指令的注釋主要分為如下幾類。

        (1)復(fù)數(shù)指令注釋

        原Open64框架中并沒有提供復(fù)數(shù)寄存器對的概念,因此需要擴(kuò)展虛擬寄存器的數(shù)據(jù)結(jié)構(gòu)TN,在其中增加數(shù)據(jù)域TN_Pair用來表示復(fù)數(shù)寄存器對。指令注釋過程中直接將帶復(fù)數(shù)類型C4的WHIRL節(jié)點(diǎn)注釋成為復(fù)數(shù)指令。此外,對于復(fù)數(shù)乘法運(yùn)算(如c=a*b),BWDSP指令系統(tǒng)并沒有提供完整的復(fù)數(shù)指令,因此需要在其中插入兩條運(yùn)算指令,如下所示:

        Rm+1:m=[Um+=2,0] //復(fù)數(shù)a

        Rn+1:n=[Un+=2,0] //復(fù)數(shù)b

        qFRm+1:m_n+1:n=CFRm+1:m*CFRn+1:n

        //插入運(yùn)算指令

        FRs+1=FRn+FRm

        FRs=FRn+1-FRm+1

        [Us+=2,0]=Rs+1:s //存儲復(fù)數(shù)c

        (2)累加和乘累加類指令注釋

        對于該類指令的注釋,需要在虛擬寄存器數(shù)據(jù)結(jié)構(gòu)TN中增加表示累加信息的數(shù)據(jù)域TN_Acc和乘累加信息的數(shù)據(jù)域TN_Macc,以便后面的寄存器分配處理。另外還需要在該類指令前面插入一條初始化指令。例如c+=a*b運(yùn)算的指令注釋如下所示:

        Clr Macc //初始化清零

        Rm=[Um+=1,0] //源操作數(shù)a

        Rn=[Un+=1,0] //源操作數(shù)b

        Macc0+=Rm*Rn //乘累加操作

        Rs=Macc0

        [Us+=1,0]=Rs //存儲目的操作數(shù)c

        (3)平方和類指令注釋

        平方和指令的注釋與普通指令的注釋完全一致,只需按照普通指令的注釋方式進(jìn)行指令注釋即可。

        3.3 寄存器分配

        寄存器分配階段是根據(jù)虛擬寄存器TN中的相關(guān)寄存器信息為每個虛擬寄存器TN分配相應(yīng)的物理寄存器。Open64中的寄存器分配包括全局寄存器分配和局部寄存器分配[5]。傳統(tǒng)的通用處理器中并沒有提供A/B面寄存器,即復(fù)數(shù)寄存器對,故該處需要考慮寄存器對信息并進(jìn)行相應(yīng)的特殊處理。

        面向BWDSP的Open64編譯器沿用并擴(kuò)展了原Open64中的寄存器分配算法,這里采用的策略是優(yōu)先考慮A/B面寄存器等特殊情況。通過TN中的TN_Pair數(shù)據(jù)域,將TN寄存器對作為一個整體來處理,在寄存器分配時給其分配連續(xù)并且低位寄存器編號為偶數(shù)的兩個物理寄存器,即復(fù)數(shù)寄存器對。

        對于累加指令和乘累加指令的寄存器分配,則只需要根據(jù)虛擬寄存器TN中的數(shù)據(jù)域TN_Pair和TN_Macc分別分配相應(yīng)的累加寄存器ACC和乘累加寄存器MACC即可。

        3.4 匯編代碼輸出

        面向BWDSP的Open64編譯器中的匯編代碼輸出模塊主要是根據(jù)BWDSP中的指令集特點(diǎn),按照其相應(yīng)的匯編格式輸出相應(yīng)的匯編代碼程序。該過程位于cgemit.cxx文件中。對于復(fù)數(shù)指令的匯編代碼,其中的兩個寄存器對之間必須用”:”來表示,并且低位寄存器編號必須有偶數(shù);對于累加指令則需要在累加寄存器的編號前面加上標(biāo)識Acc;對于乘累加指令,則加上標(biāo)識Macc等。

        4 結(jié)論(Conclusion)

        本文在Open64編譯基礎(chǔ)設(shè)施上設(shè)計(jì)并實(shí)現(xiàn)了上述的特殊指令合成策略,為了驗(yàn)證該方案的效果,我們選取用于測試DSP編譯器性能的、在DSP數(shù)字信號處理領(lǐng)域具有典型應(yīng)用的部分運(yùn)算作為測試集,詳見表1。

        本文采用加速比來表示程序優(yōu)化前后性能的好壞,加速比越大,表示程序經(jīng)過特殊指令合成前后周期之間的差距越大,程序的優(yōu)化性能越顯著;相反則表示程序的優(yōu)化性能不夠明顯。實(shí)驗(yàn)結(jié)果詳見表2。

        從表2中可以看出,針對表1中的7個基準(zhǔn)測試用例,采用本文提出的特殊指令合成策略,其平均加速比大約為1.05。因此,通過本文提出的特殊指令合成策略,能夠使得DSP中一些常用的特殊操作運(yùn)算程序的性能得到很大的提升。

        參考文獻(xiàn)(References)

        [1] Jordans R,Jówiak L,Corporaal H,et al.Automatic instruction-set architecture synthesis for VLIW processor cores in the ASAM project[J].Microprocessors and Microsystems,2017:114-133.

        [2] Choi H,Kim J S,Yoon C W,et al.Synthesis of application specific instructions for embedded DSP software[J]. IEEE Transactions on Computers,1999,48(6):603-614.

        [3] Gautam Chakrabarti,F(xiàn)red Chow G.Chakrabarti,F(xiàn).Chow.Structure Layout Optimizations in the Open64 Compiler:Design,Implementation and Measurements.Gautam Chakrabarti,Open64 Wor kshop at CGO,2008.

        [4] 王昊,黃光紅,王向前.基于BWDSP100的傳播分簇算法研究與實(shí)現(xiàn)[J].中國集成電路,2014,23(8):24-28.

        [5] 蔣奕.龍芯1編譯器中的指令調(diào)度相關(guān)優(yōu)化[D].北京:中國科學(xué)院研究生,2004:8-11.

        作者簡介:

        陳金娥(1979-),女,碩士,助教.研究領(lǐng)域:軟件工程.

        黃勝兵(1990-),男,碩士,工程師.研究領(lǐng)域:系統(tǒng)軟件開發(fā).

        国产成人户外露出视频在线| 亚洲精品第一国产综合精品| 日夜啪啪一区二区三区| 亚洲日韩乱码中文无码蜜桃臀 | 亚洲精品乱码久久久久久金桔影视| 日本a天堂| 日韩狼人精品在线观看| 亚洲国产精品久久无人区| 亚洲熟妇久久国产精品| 精品国产福利一区二区在线| 黄色三级视频中文字幕| 丰满人妻中文字幕一区三区| 最新国产福利在线观看精品| 日韩www视频| 亚洲老女人区一区二视频 | av无码国产在线看免费网站| 中文字幕精品无码一区二区| 亚洲精品国产不卡在线观看| 一本色道久久88加勒比综合| 欧美精品videosse精子| 亚洲深深色噜噜狠狠爱网站 | 国产激情视频在线观看首页| 无码人妻精品中文字幕| 毛茸茸的中国女bbw| 91中文人妻丝袜乱一区三区| 全部亚洲国产一区二区| 国产av无码专区亚洲avjulia| 国产亚洲精品aaaa片app| 亚洲精品高清av在线播放 | 久久人妻av一区二区软件| 天堂а√在线最新版中文| 老肥熟女老女人野外免费区| 亚洲av成熟国产一区二区| 国产婷婷色综合av蜜臀av| 亚洲第一无码精品久久| 亚洲女人毛茸茸的视频| 精品伊人久久大线蕉色首页| 国产精品久久久久免费a∨| 加勒比熟女精品一区二区av| 中文字幕国产精品一二三四五区| 怡红院a∨人人爰人人爽|