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

基于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-),男,碩士,工程師.研究領域:系統軟件開發.

主站蜘蛛池模板: 色呦呦手机在线精品| 日韩欧美中文| 久久中文电影| 国产精品自在在线午夜区app| 欧美va亚洲va香蕉在线| 国产高清在线丝袜精品一区| 国产一区二区色淫影院| 91久久国产成人免费观看| 国产视频一区二区在线观看 | 成人免费网站久久久| 国产精品开放后亚洲| 亚洲无线观看| 久久男人资源站| m男亚洲一区中文字幕| 国产精品九九视频| 欧美激情视频二区| 国产高清国内精品福利| 国产专区综合另类日韩一区 | 在线精品亚洲一区二区古装| 国产精品手机在线观看你懂的| 热久久这里是精品6免费观看| 精品无码一区二区在线观看| 九九热精品视频在线| 亚洲日韩精品综合在线一区二区| 亚洲精品无码日韩国产不卡| 国产成人亚洲日韩欧美电影| 99久久无色码中文字幕| 久久综合成人| 国产成人AV男人的天堂| 色综合激情网| 香蕉国产精品视频| 亚洲欧美成人综合| 国产精品亚洲一区二区在线观看| 二级毛片免费观看全程| 91色在线观看| 99久久国产综合精品2023| 精品剧情v国产在线观看| 色综合久久88| 久久国产精品影院| 色欲不卡无码一区二区| 亚洲第一国产综合| 国产探花在线视频| 国产一级在线观看www色| 91探花在线观看国产最新| 婷婷午夜影院| 波多野结衣久久高清免费| 中文字幕久久波多野结衣 | 热re99久久精品国99热| 国产性生大片免费观看性欧美| 伊人激情综合网| 国产成人综合久久精品尤物| 尤物视频一区| 久久黄色影院| 三上悠亚精品二区在线观看| 人妻无码AⅤ中文字| 亚洲天堂视频在线免费观看| 欧美一区二区精品久久久| 国产视频资源在线观看| 久久久久夜色精品波多野结衣| 国产精品成人AⅤ在线一二三四| vvvv98国产成人综合青青| 久久国产黑丝袜视频| 激情网址在线观看| 一本无码在线观看| 国产性爱网站| 91黄视频在线观看| 四虎永久在线视频| 国产大片黄在线观看| 久久久久久久蜜桃| a天堂视频| 干中文字幕| 麻豆国产精品一二三在线观看| 国产成人欧美| 久久精品人人做人人爽| 在线高清亚洲精品二区| 国产精品三级av及在线观看| 国产精品永久不卡免费视频| 最新国产成人剧情在线播放| 欧美精品一区在线看| 无码日韩人妻精品久久蜜桃| 九九九精品成人免费视频7| 青青草欧美|