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

BWDSP SIMD編譯的寄存器分配優化技術研究※

2015-08-15 06:26:03王昊王向前
單片機與嵌入式系統應用 2015年4期
關鍵詞:指令分配優化

王昊,王向前

(中國電子科技集團公司第三十八研究所,合肥230088)

BWDSP SIMD編譯的寄存器分配優化技術研究※

王昊,王向前

(中國電子科技集團公司第三十八研究所,合肥230088)

BWDSP是一款自主設計的國產VLIW(超長指令字)數字信號處理器,支持SIMD技術,其SIMD指令可以在4個宏上同時執行4個32位計算,對寄存器使用有特殊規則,Open64編譯器的寄存器分配策略并不適用于這種規則。本文對BWDSP SIMD指令的寄存器分配優化技術進行了研究,并在BWDSP的編譯器OCC上得以實現。

DSP;SIMD;寄存器分配

引言

BWDSP[1]是一款32位靜態超標量浮點數字處理器,采用超長指令字(Very Long Instruction Word,VLIW)架構,支持SIMD技術。BWDSP核內包含4個基本執行宏,代號是X、Y、Z、T,每個宏由算術邏輯單元(ALU)、乘法器(MUL)、移位器(SHF)、超算器(SPU)和一個通用寄存器組成。

BWDSP最多可以同時執行16條指令,其SIMD指令有其特殊性,本質上就是多條相同的指令并發執行,下面將對其特性進行分析,說明BWDSP編譯器的寄存器分配需要特殊的優化技術來滿足SIMD指令的要求。

1 BWDSP SIMD指令的特性分析

BWDSP計算指令的通用格式如下:

[Macro]Rm=Rnop Rs

Macro是執行宏的代號,op是操作,符號“||”連接多個可并行指令,比如:xRm=Rn+Rs是Scalar指令,表示在X宏上執行整數加法操作;xyztRm=Rn+Rs是SIMD指令,表示在X、Y、Z、T四個宏上同時執行整數加法操作,等同于xRm=Rn+Rs||yRm=Rn+Rs||zRm=Rn+Rs||tRm=Rn+ Rs。圖1是BWDSP SIMD add指令的執行示意圖。

圖1 BWDSP SIMD add指令執行示意圖

Intel x86-64 CPU[2]也有SIMD加法指令:

paddd xmmi,xmmk

表示xmmk=xmmi+xmmk,形式很像BWDSP的Scalar加法指令。圖2是Intel x86-64的paddd指令執行示意圖。

比較以上兩種類型的SIMD加法指令,總結4點區別如下:

① x86-64的 paddd指令只需要一個核執行;而BWDSP SIMD add指令需要多個宏同時執行。

②x86-64的paddd指令只需要使用一個加法器;而BWDSP SIMD add指令使用4個加法器。

圖2 Intel x86-64 paddd指令執行示意圖

③x86-64 CPU為支持128位SIMD數據操作,增加了128位全新的XMM寄存器,這些XMM寄存器屬于同一類;而BWDSP只有32位通用寄存器,BWDSP SIMD add指令需要的寄存器在多個宏上,分屬不同寄存器類。

④BWDSP SIMD add指令為相同位置的操作數分配的不同宏上的寄存器,其編號必須相同,如圖1中4個宏的結果寄存器的編號都是0,而x86-64沒有這種約束條件。

以上4點也是對BWDSP SIMD指令特性的分析,接下來本文將對OCC編譯器現有的寄存器分配策略進行分析,說明其還無法滿足BWDSP SIMD指令的這些特性,需要設計更有針對性的寄存器分配優化技術。

2 BWDSP Scalar指令的寄存器分配策略

在機器硬件結構中,寄存器的數量遠小于內存,但它們是存儲層次結構中最快的介質,也是關鍵資源之一。為提高程序運行速度,源程序中用戶定義的變量應該最大限度地映射到寄存器上。寄存器分配是編譯器后端的重要階段,在寄存器分配之前,中間代碼使用虛擬寄存器,數量不受限制,寄存器分配就是把這些虛擬寄存器映射到物理寄存器上的過程。

寄存器分配有一個重要的基本概念——生命期(Live Range,LR),是指一個值從定義到最后一次使用之間的活躍范圍,通常用活躍的基本塊的集合描述。寄存器分配就是為LR分配寄存器。BWDSP的編譯器OCC是以Open64[3]為基礎開發的,Open64編譯器的寄存器分配分為兩類:全局寄存器分配(Global Register Allocation,GRA)和局部寄存器分配(Local Register Allocation,LRA)。全局寄存器分配在一個函數范圍內,為活躍范圍超出一個基本塊的LR分配寄存器;局部寄存器分配在一個基本塊范圍內,為只活躍在基本塊內部的LR分配寄存器。

2.1 全局寄存器分配

OCC采用Chaitin/Briggs的圖著色算法[5]實現全局寄存器分配,流程如圖3所示。

GRA_Create過程創建全局寄存器分配的沖突圖,分為3個子過程:

圖3 圖著色算法實現全局寄存器分配流程

①Create_LRANGEs創建生命期;

②Create_LiveBB_Sets為每個生命期創建活躍基本塊集合;

③ Create_Interference_Graph創建沖突圖。

GRA_Color過程執行Chaitin/Briggs的圖著色算法為生命期分配寄存器,分為3個子過程:

①GRA_Grant_Some_Locals在全局寄存器分配之前為局部寄存器分配預留一些寄存器,這些寄存器不會參與全局寄存器分配;

②Simplify對沖突圖進行著色,能夠著色的結點會被分配寄存器;

③GRA_Note_Spill對不能著色的結點標記為溢出結點。

GRA_Spill過程對溢出的生命期在活躍范圍內插入相應的存取操作,在生命期的賦值操作后插入一條store指令,在該生命期的每個引用之前插入一條load指令。

2.2 局部寄存器分配

OCC采用線性掃描局部寄存器分配策略,從程序的開始向后依次掃描各個基本塊,流程如圖4所示。

Init_Avail_Regs初始化可用寄存器,Setup_Live_Ranges bb為基本塊bb中的局部TN創建生命期,Assign_Registers (bb,&spill_tn)遍歷bb中的所有操作,為其中的局部TN分配寄存器,成功則返回TRUE,失敗則返回FALSE,spill_tn是寄存器分配失敗的局部TN。如果失敗,調用Fix_LRA_ Blues,釋放一個已分配但在bb中沒有引用的全局寄存器(在bb的Entry部分插入store指令,在bb的EXIT部分插入load指令),然后把該寄存器分配給spill_tn。

圖4 線性掃描局部寄存器分配流程

3 BWDSP SIMD寄存器分配優化技術

3.1 Scalar指令寄存器分配策略的不足

第2節詳細介紹了BWDSP Scalar指令的寄存器分配策略,但它無法滿足BWDSP SIMD指令的寄存器分配要求,主要是因為Scalar指令的寄存器分配策略有如下兩點不足:

①無法同時在BWDSP四個宏上分配寄存器。根據第1節對BWDSP SIMD指令的特性分析可知,一個Scalar指令的某個操作數位置需要映射到對應宏(由分簇階段確定)上的一個寄存器,而一個SIMD指令的某個操作數位置需要映射到4個宏上的4個寄存器,并且要求編號相同。因此Scalar指令的寄存器分配策略目前無法滿足SIMD指令對寄存器分配的要求。

②SIMD指令的寄存器分配引入的寄存器溢出操作開銷太大。SIMD指令都是在for循環內部,操作數只活躍在一個基本塊內部,其寄存器分配是由局部寄存器分配完成的。由2.2節可知,當Assign_Registers(bb,&spill_tn)失敗時,需要溢出一個全局寄存器,如果Assign_Registers失敗多次,就需要溢出多個全局寄存器,而這些溢出操作都要插入到for循環體內部。一方面,SIMD指令對寄存器的需求量大(一個運算類SIMD指令最多需要12個通用寄存器),寄存器分配失敗可能會引入大量的溢出操作;另一方面,循環次數越多,溢出操作帶來的額外開銷就越大。由此帶來的副作用可能會抵消SIMD指令對程序的加速作用,因此應該想辦法彌補這個不足。

3.2 SIMD指令寄存器分配優化策略

BWDSP SIMD指令的寄存器分配優化策略是在Scalar指令寄存器分配策略基礎上有所創新,是對前者的補充,兩者綜合在一起滿足為兩類指令分配寄存器的需求。SIMD指令寄存器分配優化策略需要彌補Scalar指令寄存器分配策略的不足,一方面必須能同時在BWDSP四個宏上分配寄存器,另一方面要消除與SIMD指令相關的寄存器溢出操作。

OCC后端的SIMD指令產生過程如圖5所示,SIMD指令寄存器分配優化策略涉及其中3個階段,分別是SIMD指令WHIRL中間表示產生、全局寄存器分配和局部寄存器分配,下面將逐一對各階段的優化技術進行詳細介紹。

3.2.1 GRA為SIMD指令預留寄存器

SIMD指令的寄存器由LRA階段分配,只能分配caller-save寄存器(調用函數負責保存的寄存器),GRA先于LRA執行,因此GRA階段需要為LRA預留適量的callersave寄存器,保證 Scalar指令和SIMD指令有足夠的寄存器可供分配。但GRA又不能把所有callersave寄存器都預留給LRA,需要保障自身有充足的可分配寄存器。根據BWDSP的寄存器使用規則,每個宏上可供分配的caller-save寄存器有30個,根據經驗選取其中12個編號連續的寄存器預留給LRA使用,4個宏上一共有48個寄存器。

3.2.2 優化SIMD指令WHIRL中間表示產生模塊

圖5 編譯器后端SIMD指令產生過程

理論上,一個for循環體內的SIMD指令數量是沒有限制的,但由2.2節可知,當LRA失敗時會產生溢出操作,而且額外開銷很大,應當避免。考察BWDSP的指令集可知一個SIMD運算指令在一個宏上最多使用3個寄存器(4個宏上共使用12個寄存器)。為了不產生溢出操作,根據GRA預留的寄存器數量,每個for循環體內最多可以有4條SIMD運算指令。

當一個for循環體內的SIMD運算指令多于4個時,需要把該循環拆分成多個小循環,保證每個小循環體內最多只有4條 SIMD運算指令。這個判斷拆分過程要在SIMD指令的WHIRL中間表示產生模塊中進行,因此要對原有的產生模塊進行優化,圖6顯示了原有的 SIMD WHIRL中間表示產生過程,圖7顯示了為配合SIMD指令寄存器分配而做的優化過程。

圖6 原有的SIMD WHIRL中間表示產生過程

圖7 優化后的SIMD WHIRL中間表示產生過程

在優化過程中,如果一個Loop經過分析可以做SIMD優化,還要判斷其內部的Store操作(每個SIMD WN的頂層OPC都是Store)數量是否大于4。如果不大于4,直接執行SIMD(Loop),產生Loop的SIMD WHIRL中間表示;如果大于4,就要把Loop拆分成多個小循環,并對每個小循環分別執行SIMD處理過程,產生各自的SIMD WHIRL中間表示。以上的優化過程限制了小循環的體積,保證了SIMD指令在LRA階段不會產生額外的寄存器溢出操作。

3.2.3 優先為SIMD指令分配寄存器

經過上面兩個優化過程,保證在LRA階段有足夠的寄存器可以分配給SIMD指令,不會產生寄存器溢出操作,接下來就要解決LRA無法同時在BWDSP四個宏上分配寄存器問題。LRA階段為SIMD指令分配寄存器的優化方法的程序原型略——編者注。

針對BWDSP SIMD指令的特點,程序原型采取的優化方法解決了LRA的兩個關鍵問題:

①保證SIMD指令有足夠可分配的寄存器。函數Assign_Registers為基本塊bb中的操作(OP)分配寄存器,其中的函數Init_Insts_Vector為 bb生成 OP序列 Insts_ Vector,在Insts_Vector中,SIMD操作排在Scalar操作之前。接下來,函數Assign_Registers_For_OP按照Insts_Vector內的順序依次為各個OPs分配寄存器,因此SIMD指令會被優先分配寄存器,這就保證了SIMD指令有足夠可供分配的寄存器。

②保證SIMD指令的操作數能夠同時獲得4個宏上相同編號的寄存器。函數Allocate_Register為虛擬寄存器tn指派物理寄存器,其中的函數Get_Avail_Reg獲得一個可用的物理寄存器(reg是寄存器編號)。如果tn是SIMD指令的操作數,調用函數Delete_Avail_Reg把X、Y、Z、T四個宏上同為編號reg的寄存器都標記為已使用,這樣該tn所代表的SIMD指令的操作數就同時獲得了4個宏上相同編號的寄存器。

結語

本文詳細介紹了如何在編譯器 OCC上實現為BWDSP SIMD指令分配寄存器的優化技術,該技術緊密結合BWDSP SIMD指令的特殊規則,可以與已有的Scalar指令寄存器分配策略有機整合在一起,相輔相成,共同滿足為BWDSP的兩類指令分配寄存器的需求。

編者注:本文為期刊縮略版,全文見本刊網站www. mesnet.com.cn。

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

[2]Vernon Turner.White Paper Intel Announces Xeon Processor with 64-Bit Extensions[EB/OL].[2014-12].http://developer.intel.com/technology/64bitextensions/IDC_Intel_Xeon_ Whitepaper.pdf.

[3]University of Houston.Overview of the open64 Compiler Infrastructure[EB/OL].[2014-12].http://www2.cs.uh.edu/~dragon/Documents/open64-doc.pdf.

[4]SGI Inc.Whirl intermediate language specification[EB/OL]. [2014-12].http://open64.sourceforge.net.

[5]Briggs P,Cooper K,Torczon L.Improvements to Graph Coloring Register Allocation[J].ACM Transactions on Programming Languages and Systems,1994,16(3):428-455.

王昊(工程師),主要研究方向是DSP編譯器設計。

Register Allocation Optimization Technology Based on BWDSP SIMD Compilation※

Wang Hao,Wang Xiangqian
(No.38th Research Institute,China Electronic Technology Group Corporation,Hefei 230088,China)

BWDSP is a self-designed home made VLIW(Very Long Instruction Word)digital signal processor,which supports SIMD technology.BWDSP SIMD instructions can execute four 32-bit computing in four macros simultaneously.BWDSP SIMD instructions have special rules of register usage,but Open64 register allocation strategy is not fit for these rules.This paper carries out research on register allocation optimization of BWDSP SIMD instructions,and the actual process has been implemented on the BWDSP OCC compiler.

DSP;SIMD;register allocation

TP314

A

薛士然

2014-12-01)

猜你喜歡
指令分配優化
聽我指令:大催眠術
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
應答器THR和TFFR分配及SIL等級探討
遺產的分配
一種分配十分不均的財富
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
績效考核分配的實踐與思考
主站蜘蛛池模板: 思思99思思久久最新精品| 日韩专区第一页| 日韩视频免费| 国产麻豆福利av在线播放| 日本高清免费不卡视频| 欧洲亚洲一区| 欧美精品v| 在线欧美日韩国产| 亚洲一区毛片| 夜夜高潮夜夜爽国产伦精品| 亚洲第一中文字幕| 欧美精品亚洲精品日韩专区va| 日韩小视频在线播放| 老司机久久99久久精品播放 | 99在线视频免费观看| 一级毛片免费高清视频| 九九免费观看全部免费视频| 老色鬼久久亚洲AV综合| 2021国产v亚洲v天堂无码| 国产毛片片精品天天看视频| 日本AⅤ精品一区二区三区日| 亚洲视频在线青青| 91综合色区亚洲熟妇p| 青青青草国产| 亚洲香蕉久久| 国产精品视屏| 亚洲无码视频喷水| 国产女人喷水视频| 国产成人高清精品免费5388| 色综合五月婷婷| 国产成人a在线观看视频| 久久亚洲精少妇毛片午夜无码| 白浆免费视频国产精品视频| 欧美人与牲动交a欧美精品| 欧美日一级片| 成人小视频网| 狠狠色综合久久狠狠色综合| 国产地址二永久伊甸园| 国产十八禁在线观看免费| 日本不卡在线| 91精品国产自产91精品资源| 青青操视频免费观看| av在线人妻熟妇| 欧美一级色视频| 成人福利免费在线观看| 不卡无码h在线观看| 97久久超碰极品视觉盛宴| 日韩成人在线视频| 亚洲人成网站18禁动漫无码| 久久婷婷综合色一区二区| 久久特级毛片| 一区二区理伦视频| 一本久道久综合久久鬼色| 国产18在线| 成年人免费国产视频| av无码一区二区三区在线| 亚洲AⅤ永久无码精品毛片| 91精品国产无线乱码在线| 蜜臀av性久久久久蜜臀aⅴ麻豆| 欧洲亚洲一区| 91破解版在线亚洲| 91网址在线播放| 国产成人1024精品| 亚洲国产成人在线| 亚洲成人高清无码| 国产精品网址你懂的| 狠狠综合久久久久综| 精品夜恋影院亚洲欧洲| 欧美精品黑人粗大| 国产亚洲精品精品精品| 国产成人91精品免费网址在线| 久久久久久尹人网香蕉| 亚洲大学生视频在线播放 | 久久一色本道亚洲| 亚洲一区二区在线无码| 欧美区一区二区三| 2021国产精品自产拍在线| 69视频国产| 亚洲综合天堂网| 久久美女精品| 香蕉精品在线| 日韩精品毛片人妻AV不卡|