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

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx

基于Open64上的特殊指令合成策略研究與實現

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

陳金娥 黃勝兵

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

關鍵詞:Open64編譯器;特殊指令合成;超長指令字

中圖分類號:TP311.54 文獻標識碼: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是一款采用分簇架構、支持SIMD的16發射的VLIW數字信號處理器。根據其面向的計算領域提供了大量的特殊指令[1,2],包括復數指令、累加指令、乘累加指令和平方和指令等。

本文以Open64作為面向BWDSP體系結構的編譯器研究框架。Open64是一個運行在Linux下的C、C++、Fortran編譯器基礎設施[3],其前端將源程序轉化為中間表示WHIRL,后端讀入中間語言WHIRL,經過翻譯生成CG階段(Code Generation)的中間表示(CGIR),再經過一系列優化,最終CGIR經過代碼輸出生成匯編程序[4]。Open64編譯器的架構如圖1所示。

本文主要解決如何將高級程序語言代碼通過編譯器直接生成BWDSP指令系統中的特殊指令,并在Open64編譯基礎設施上提出并實現了面向BWDSP體系結構的特殊指令合成策略,能夠較好地利用BWDSP的特殊指令來提高應用程序的性能。

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

2.1 復數指令合成

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

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}

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

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

原Open64編譯器基礎設施中累加和乘累加類指令通常是由數條匯編指令組成,如下所示(以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上生成的累加操作直接進行指令注釋,并不需要在其中插入相應的特殊規約處理指令。如下所示:

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>

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

2.3 平方和類指令合成

平方和類指令合成與上述的兩類特殊指令合成策略有所不同。由于Open64編譯器基礎設施中并沒有提供相應的平方和類指令表示,因此需要在中間語言WHIRL中增加相應的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 代碼生成內部模塊改進(Improvement of theinternal modules in code generation)

面向BWDSP的Open64編譯器后端的代碼生成模塊部分是與BWDSP體系結構最為密切相關的階段,因此需要對代碼生成內部的各個階段進行相應的擴展和重定向,具體包括四個階段。

3.1 機器描述

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

3.2 指令注釋

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

(1)復數指令注釋

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

Rm+1:m=[Um+=2,0] //復數a

Rn+1:n=[Un+=2,0] //復數b

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

//插入運算指令

FRs+1=FRn+FRm

FRs=FRn+1-FRm+1

[Us+=2,0]=Rs+1:s //存儲復數c

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

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

Clr Macc //初始化清零

Rm=[Um+=1,0] //源操作數a

Rn=[Un+=1,0] //源操作數b

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

Rs=Macc0

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

(3)平方和類指令注釋

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

3.3 寄存器分配

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

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

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

3.4 匯編代碼輸出

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

4 結論(Conclusion)

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

本文采用加速比來表示程序優化前后性能的好壞,加速比越大,表示程序經過特殊指令合成前后周期之間的差距越大,程序的優化性能越顯著;相反則表示程序的優化性能不夠明顯。實驗結果詳見表2。

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

參考文獻(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,Fred Chow G.Chakrabarti,F.Chow.Structure Layout Optimizations in the Open64 Compiler:Design,Implementation and Measurements.Gautam Chakrabarti,Open64 Wor kshop at CGO,2008.

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

[5] 蔣奕.龍芯1編譯器中的指令調度相關優化[D].北京:中國科學院研究生,2004:8-11.

作者簡介:

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

黃勝兵(1990-),男,碩士,工程師.研究領域:系統軟件開發.

404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
主站蜘蛛池模板: 91亚洲精品第一| 99ri精品视频在线观看播放| 97视频在线精品国自产拍| 亚洲IV视频免费在线光看| 欧美成人影院亚洲综合图| 高清欧美性猛交XXXX黑人猛交| 亚洲国产精品日韩欧美一区| 亚洲成网777777国产精品| 国产在线观看一区精品| 中文字幕人成乱码熟女免费| 亚洲妓女综合网995久久| 久久精品国产国语对白| 亚洲第七页| 丰满人妻久久中文字幕| 国产白丝av| 日韩资源站| 欧美性猛交一区二区三区| 中文字幕调教一区二区视频| 免费 国产 无码久久久| 全色黄大色大片免费久久老太| 日韩AV无码免费一二三区| 久久这里只精品热免费99 | 亚洲专区一区二区在线观看| 国产一区二区网站| 国产h视频免费观看| 精品在线免费播放| 亚洲大尺度在线| 色综合五月| 最新日本中文字幕| 国产区福利小视频在线观看尤物| 亚洲伊人天堂| 午夜老司机永久免费看片| 亚洲无限乱码| 日韩欧美网址| 99视频国产精品| 伊人久久影视| 国产成人高清亚洲一区久久| 91麻豆精品视频| 色婷婷亚洲综合五月| 久久久久久久97| 欧美在线天堂| 色偷偷综合网| 无码精油按摩潮喷在线播放 | 中文字幕伦视频| AV老司机AV天堂| 久久精品视频一| 日本人又色又爽的视频| 免费人成视网站在线不卡| 亚洲色图欧美| 国产中文在线亚洲精品官网| 亚洲国产综合精品中文第一| 欧美.成人.综合在线| 黄色一级视频欧美| P尤物久久99国产综合精品| 97青青青国产在线播放| 97综合久久| 亚洲黄色网站视频| 国产1区2区在线观看| 4虎影视国产在线观看精品| 国产91九色在线播放| 国产资源免费观看| 99r在线精品视频在线播放| 国产交换配偶在线视频| 99久久精品国产精品亚洲| 国产菊爆视频在线观看| 色综合网址| 亚洲成人免费看| 成人免费午夜视频| 国产亚洲欧美日韩在线观看一区二区| 国产精品无码AⅤ在线观看播放| 国产无码高清视频不卡| 欧美三級片黃色三級片黃色1| 成人在线不卡| 国内精品自在欧美一区| 美女被操黄色视频网站| 美女啪啪无遮挡| 欧美午夜在线观看| 色妞www精品视频一级下载| 日本一本在线视频| 91色爱欧美精品www| 精品一區二區久久久久久久網站| 亚洲香蕉伊综合在人在线|