基于VLIW的機(jī)器相關(guān)優(yōu)化編譯技術(shù)研究.doc_第1頁
基于VLIW的機(jī)器相關(guān)優(yōu)化編譯技術(shù)研究.doc_第2頁
基于VLIW的機(jī)器相關(guān)優(yōu)化編譯技術(shù)研究.doc_第3頁
基于VLIW的機(jī)器相關(guān)優(yōu)化編譯技術(shù)研究.doc_第4頁
基于VLIW的機(jī)器相關(guān)優(yōu)化編譯技術(shù)研究.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于VLIW的機(jī)器相關(guān)優(yōu)化編譯技術(shù)研究 摘要 VLIW體系結(jié)構(gòu)性能的發(fā)揮在很大程度上依賴于其相應(yīng)的編譯器。編譯優(yōu)化主要包括兩個(gè)方面:一方面是傳統(tǒng)的編譯器優(yōu)化技術(shù);另一方面是針對(duì)具體機(jī)器平臺(tái)特定的優(yōu)化技術(shù)。VLIW機(jī)器相關(guān)的編譯優(yōu)化技術(shù)應(yīng)該針對(duì)具體的機(jī)器平臺(tái),基于超長(zhǎng)指令字體系結(jié)構(gòu)的特點(diǎn),考慮如何充分利用機(jī)器提供的硬件資源,以達(dá)到軟件(編譯器)和硬件(CPU)的最大匹配,從而生成高效率高并行度的目標(biāo)代碼。本文從超長(zhǎng)指令字的特點(diǎn)出發(fā),探討了在VLIW體系結(jié)構(gòu)下與機(jī)器相關(guān)的編譯優(yōu)化的實(shí)現(xiàn)方案,同時(shí)提出了幾點(diǎn)在具體進(jìn)行與機(jī)器相關(guān)的優(yōu)化編譯時(shí)的優(yōu)化思路。關(guān)鍵詞 VLIW 超長(zhǎng)指令字 機(jī)器相關(guān) 優(yōu)化編譯 ILP 預(yù)測(cè) Research on architecture-dependent compiler optimization technology based on VLIW Abstract The performance of VLIW architecture heavily depends on the quality of relevant compilers. The compiler optimization technology consists of two aspects: one is traditional optimization technology; the other is architecture-dependent optimization technology. Before implementing architecture-dependent optimization, we should adequately analyze the architecture characters of machine platform concerned, and consider how to make the best of the hardware resources. Software (compiler) and hardware (CPU) must match well to produce object codes with high efficiency and high ILP. After analyzing the general characters of VLIW architecture, this paper develops a design of architecture-dependent compiler optimization scheme based on VLIW, and brings forward some optimization points during the actual implementation.Key wordsVLIW, architecture-dependent, compiler optimization, ILP, predication引言 1983年美國教授J.Fisher1受水平微代碼思想的啟示,提出了VLIW(超長(zhǎng)指令字)體系結(jié)構(gòu)。VLIW由編譯器將多個(gè)可以同時(shí)并行執(zhí)行的操作排在一條超長(zhǎng)指令字中,在一個(gè)指令周期內(nèi)由CPU并行發(fā)射,以減少對(duì)存儲(chǔ)器的訪問。與傳統(tǒng)結(jié)構(gòu)相比,這種體系結(jié)構(gòu)既可以提供較高的指令級(jí)并行度,同時(shí)又具有簡(jiǎn)單的硬件譯碼和控制邏輯。在近二十年內(nèi),從著名的FPS AP-120B,Multiflow、Cydrome Cydra 5發(fā)展到E2K,以及Intel公司推出的下一代處理器IA-64,使得VLIW成為繼CISC、RISC后的又一重要的體系結(jié)構(gòu)。 目前,國外針對(duì)VLIW結(jié)構(gòu)的研究主要有Illinois大學(xué)可靠性與高性能計(jì)算中心研制的IMPACT系統(tǒng)、斯坦福大學(xué)研制的SUIF系統(tǒng)框架,俄羅斯開發(fā)的E2K芯片及其系統(tǒng),以及Intel微處理器實(shí)驗(yàn)室研制的IA-64編譯器等。我國在這方面的研究Page: 1起步較晚,目前還沒有相應(yīng)的自主系統(tǒng)2。Page: 1太絕對(duì)VLIW體系結(jié)構(gòu)性能的發(fā)揮在很大程度上依賴于其相應(yīng)的編譯器,這對(duì)編譯器及其優(yōu)化技術(shù)提出了新的需求。因此,如何針對(duì)具體VLIW機(jī)器平臺(tái)的特點(diǎn),研究相應(yīng)的機(jī)器相關(guān)優(yōu)化技術(shù),在整個(gè)VLIW編譯技術(shù)研究中占有重要地位,并對(duì)快速提高國產(chǎn)VLIW編譯器性能有著重要的意義。1 VLIW體系結(jié)構(gòu)概述 VLIW體系結(jié)構(gòu)是將水平微碼和超標(biāo)量處理這兩種普遍采用的概念相結(jié)合的產(chǎn)物。從指令系統(tǒng)上講,VLIW指令系統(tǒng)的設(shè)計(jì)思想與水平微碼類似。VLIW機(jī)器具有較長(zhǎng)的機(jī)器指令字,機(jī)器指令字具有固定的格式(一種或者多種),每條指令字中包含著多個(gè)獨(dú)立的字段,字段中的操作碼被送往不同的功能部件。為了與通常的指令區(qū)別,我們稱這種操作為算子(或者微操作)。通常,在編譯過程需要將算子拚裝成超長(zhǎng)指令字,這是VLIW編譯系統(tǒng)實(shí)現(xiàn)過程中的一個(gè)重要任務(wù)。從結(jié)構(gòu)上講,VLIW與超標(biāo)量的RISC機(jī)類似,機(jī)器內(nèi)部提供多個(gè)可以并發(fā)的功能部件, 所有功能部件共享使用大型寄存器堆,CPU在一個(gè)時(shí)鐘周期內(nèi)可發(fā)射多條指令。與傳統(tǒng)的RISC技術(shù)不同的是VLIW采用靜態(tài)指令調(diào)度技術(shù),它的流水線是非保護(hù)的,沒有用于防止資源沖突和隱藏流水線延時(shí)的硬件的互鎖機(jī)制,完全依賴編譯器靜態(tài)地分析程序中指令的依賴關(guān)系,來決定指令是否可以并行執(zhí)行以及執(zhí)行順序,而超標(biāo)量機(jī)是在指令運(yùn)行時(shí)由硬件來進(jìn)行并行檢測(cè)和指令調(diào)度的。因此,VLIW并行性能的提高在很大程度上依賴于VLIW編譯系統(tǒng)的實(shí)現(xiàn),支持此結(jié)構(gòu)的編譯器應(yīng)該在保證并行執(zhí)行的操作不會(huì)超過機(jī)器提供的并行資源最大限度的前提下,盡可能的提高算子的并行度,這是系統(tǒng)實(shí)現(xiàn)的又一重要任務(wù)。 因此,綜上所述,VLIW體系結(jié)構(gòu)的特點(diǎn)主要是:l 具有較長(zhǎng)的機(jī)器指令字,一般為128位甚至上千位。機(jī)器指令字具有固定的格式,并且被劃分成多個(gè)控制字段,每個(gè)字段可以直接獨(dú)立的控制相應(yīng)的功能部件。一條指令字可以填入多個(gè)獨(dú)立的并行操作,為了與通常的機(jī)器區(qū)別,我們稱這種操作為算子,把按照機(jī)器指令字格式將算子組成超長(zhǎng)指令字的過程稱為拼裝2。超長(zhǎng)指令字中的多個(gè)可并行執(zhí)行的算子的調(diào)度和拼裝是由編譯器來完成的。l 含有大量的數(shù)據(jù)通路和多個(gè)可以并行的運(yùn)算部件,由于數(shù)據(jù)相關(guān)和資源相關(guān)性是通過編譯器來進(jìn)行處理,因此硬件本身具有較簡(jiǎn)單的控制邏輯3。l 控制部件每個(gè)周期啟動(dòng)一條機(jī)器指令,但同時(shí)發(fā)射其中的一條或多條算子。其并發(fā)操作主要是在流水的執(zhí)行階段進(jìn)行的。l 用大量的全局共享寄存器,存儲(chǔ)單元,寄存器堆來連接多個(gè)功能部件。2 VLIW體系結(jié)構(gòu)下機(jī)器相關(guān)編譯優(yōu)化的實(shí)現(xiàn)方案編譯優(yōu)化的主要任務(wù)是使編譯出來的代碼能夠以更快的速度、使用更少的空間進(jìn)行運(yùn)行。代碼優(yōu)化首先必須保持代碼原有的語義,其次必須能夠顯著的提高程序運(yùn)行的速度,最后優(yōu)化過程應(yīng)當(dāng)具有一定的效率。優(yōu)化主要包括兩個(gè)方面:一方面是傳統(tǒng)的編譯器優(yōu)化技術(shù);另一方面是針對(duì)具體機(jī)器平臺(tái)特定的優(yōu)化技術(shù)。 傳統(tǒng)的編譯優(yōu)化技術(shù)包括三個(gè)部分:控制流分析,數(shù)據(jù)流分析和轉(zhuǎn)換??刂屏骱蛿?shù)據(jù)流分析是為轉(zhuǎn)換做準(zhǔn)備的。轉(zhuǎn)換則是進(jìn)行一定代碼的變更、替代、移動(dòng)和重組。代碼優(yōu)化的具體辦法很多,通常包括:公共子表達(dá)式的刪除,循環(huán)語句的優(yōu)化,死代碼的刪除,代碼移動(dòng),減少變量和重復(fù)等。這部分優(yōu)化主要集中在中間代碼上進(jìn)行,而且一般與具體硬件平臺(tái)無關(guān)。傳統(tǒng)的優(yōu)化技術(shù)國內(nèi)外的研究已經(jīng)很多,而且比較成熟,在現(xiàn)有的許多編譯系統(tǒng)中也都有相關(guān)的實(shí)現(xiàn)。機(jī)器相關(guān)的編譯優(yōu)化技術(shù)則應(yīng)該針對(duì)具體的機(jī)器平臺(tái),基于超長(zhǎng)指令字體系結(jié)構(gòu)的特點(diǎn),考慮如何充分利用機(jī)器提供的硬件資源(通用寄存器,寄存器堆,冗余運(yùn)算部件等),以達(dá)到軟件(編譯器)和硬件(CPU)的最大匹配結(jié)合,從而生成高效率高并行度的目標(biāo)代碼。如上節(jié)所述,VLIW指令系統(tǒng)上最小的單位是算子(即超長(zhǎng)指令字里各個(gè)字段對(duì)應(yīng)的微操作),由編譯器把算子拼裝起來完成通常匯編指令的功能。一條匯編指令既可以對(duì)應(yīng)著單個(gè)的算子,也可以對(duì)應(yīng)著多個(gè)算子。對(duì)于一些功能比較單一的運(yùn)算類的匯編指令,一條匯編指令就對(duì)應(yīng)著一個(gè)算子,只填入超長(zhǎng)指令字的一個(gè)字段里;但是,對(duì)于功能比較復(fù)雜的指令,特別是一些系統(tǒng)指令,一條匯編指令就可以對(duì)應(yīng)著多個(gè)算子,由多個(gè)算子聯(lián)合起來完成這一條匯編指令的功能,當(dāng)然這就需要填入超長(zhǎng)指令字的多個(gè)字段里。例如:最常用的PUSH REG 指令,就需要由下列三個(gè)算子聯(lián)合起來完成 修改堆棧指針?biāo)阕?| 寫內(nèi)存算子 | 數(shù)據(jù)來源選通算子 每個(gè)算子也就對(duì)應(yīng)了在執(zhí)行階段具體發(fā)射時(shí)機(jī)器的最小執(zhí)行單元。編譯器拼裝起來放在一條超長(zhǎng)指令字當(dāng)中的多個(gè)算子,即可以聯(lián)合起來實(shí)現(xiàn)我們通常意義上的匯編指令,也可以互不相干,各自獨(dú)立。因此,在VLIW編譯系統(tǒng)里,如何通過優(yōu)化來決定實(shí)現(xiàn)程序功能的最小數(shù)目算子集,以及如何將這最小數(shù)目的算子集最大可能的并行拼裝在一條超長(zhǎng)指令字當(dāng)中以生成最小數(shù)目的機(jī)器指令,是與機(jī)器相關(guān)的編譯優(yōu)化工作的關(guān)鍵。鑒于VLIW體系結(jié)構(gòu)指令系統(tǒng)的這種特點(diǎn), 這里給出一種優(yōu)化方案來實(shí)現(xiàn)與機(jī)器相關(guān)的編譯優(yōu)化工作。我們的優(yōu)化方案從兩個(gè)層次來展開。第一個(gè)層次是在匯編指令級(jí),主要進(jìn)行指令歸并,常數(shù)傳播,依賴和數(shù)據(jù)相關(guān)分析及消除,寄存器重命名等等優(yōu)化的工作。上述這些具體優(yōu)化的技術(shù)正是國內(nèi)外現(xiàn)在研究的熱點(diǎn),可以根據(jù)機(jī)器平臺(tái)的實(shí)際情況有選擇的采用和實(shí)現(xiàn)。通過這一層的優(yōu)化,可產(chǎn)生最精簡(jiǎn)的匯編程序,從而決定了最小數(shù)目的算子集合(微操作集合)。我們把經(jīng)過這一層優(yōu)化產(chǎn)生的匯編程序轉(zhuǎn)換成算子形式的程序(這一轉(zhuǎn)化必須要保證語義上的完全一致性),然后,再傳遞給第二個(gè)優(yōu)化層次:算子級(jí)。這一層的優(yōu)化工作主要是將上一層傳遞來的算子序列進(jìn)行數(shù)據(jù)依賴及相關(guān)性分析,并做算子調(diào)度,從而進(jìn)行優(yōu)化拼裝和重排,要充分利用超長(zhǎng)指令字以及硬件的并行資源,盡最大可能的在一條超長(zhǎng)指令字里填入多個(gè)算子,減少超長(zhǎng)指令字當(dāng)中無效的位數(shù),以提高超長(zhǎng)指令字的利用效率,從而生成最小數(shù)目的機(jī)器指令,同時(shí)還必須保證邏輯以及時(shí)序上的正確性。整個(gè)方案的流程圖如圖1:總的來說,優(yōu)化方案體現(xiàn)在時(shí)間和空間兩個(gè)方面。在時(shí)間上,應(yīng)該最大可能的減少目標(biāo)代碼的執(zhí)行周期數(shù),這是匯編指令層優(yōu)化的重點(diǎn)。在空間上,應(yīng)該最大可能的減少機(jī)器指令的條數(shù),這是算子層優(yōu)化的重點(diǎn)。當(dāng)然,時(shí)間和空間總是交織在一起的,在兩個(gè)層次的優(yōu)化工作里必然都會(huì)涉及到。 C程序匯編程序指令級(jí)優(yōu)化模塊AS匯編翻譯模塊AS算子翻譯模塊 C compiler匯編到算子轉(zhuǎn)化模塊 算子級(jí)優(yōu)化模塊 優(yōu)化過的算子 助記符程序 算子 助記符程序 精簡(jiǎn) 匯編程序不帶機(jī)器相關(guān)優(yōu)化選項(xiàng)帶機(jī)器相關(guān)優(yōu)化選項(xiàng)算子級(jí)調(diào)度,算子優(yōu)化拼裝,重排指令歸并,依賴及數(shù)據(jù)相關(guān)分析常數(shù)傳播 二進(jìn)制機(jī)器碼文件圖1: VLIW體系結(jié)構(gòu)下機(jī)器相關(guān)編譯優(yōu)化的實(shí)現(xiàn)方案3 在機(jī)器相關(guān)優(yōu)化編譯具體實(shí)施時(shí)的幾點(diǎn)思路Page: 4方法 目前,國內(nèi)外具體針對(duì)于VLIW體系結(jié)構(gòu)的優(yōu)化編譯技術(shù)研究大部分都集中在提高指令并行度(ILP)上,其基本出發(fā)點(diǎn)是利用硬件提供的各種并行資源,在一個(gè)周期內(nèi)執(zhí)行盡可能多的指令,從而提高程序運(yùn)行效率。其中通常采用的優(yōu)化技術(shù)有:循環(huán)優(yōu)化,指令依賴檢測(cè)及刪除,指令調(diào)度,數(shù)據(jù)預(yù)讀,分支檢測(cè)與刪除,寄存器及功能部件的分配策略等等。VLIW體系結(jié)構(gòu)為采用上述先進(jìn)的優(yōu)化編譯技術(shù)提供了可能,反過來說,只有采用這些先進(jìn)的編譯優(yōu)化技術(shù),才能充分發(fā)揮VLIW體系結(jié)構(gòu)的高性能5。上述這些優(yōu)化技術(shù)在實(shí)施的時(shí)候,都需要預(yù)先分析大量的匯編程序?qū)嵗?,以決定在具體實(shí)施時(shí)該如何操作,并檢驗(yàn)該種優(yōu)化技術(shù)對(duì)當(dāng)前的機(jī)器平臺(tái)是否能起到好的優(yōu)化效果。本文在這里不對(duì)這些優(yōu)化技術(shù)做具體探討,我們只是從實(shí)際開發(fā)或者移植一個(gè)VLIW編譯器的角度出發(fā),針對(duì)與機(jī)器相關(guān)的優(yōu)化,給出幾點(diǎn)在做具體工作時(shí)值得考慮的優(yōu)化思路。3.1 最大可能的利用超長(zhǎng)指令字的指令空間1) 延遲機(jī)制 VLIW體系結(jié)構(gòu)通常支持128位或者更多位數(shù)的指令字,還提供了相應(yīng)的指令格式,編譯器需要按照機(jī)器提供的機(jī)器指令格式來把指令(算子)進(jìn)行合并拼裝,以生成128位的機(jī)器代碼。當(dāng)不考慮優(yōu)化,只考慮正確性時(shí),編譯器當(dāng)然可以孤立的對(duì)匯編程序中每條指令按前后順序依次生成只完成該指令功能的機(jī)器代碼,這樣避免了相關(guān)性的分析,可保證運(yùn)行結(jié)果正確,但這顯然沒有體現(xiàn)VLIW結(jié)構(gòu)的特點(diǎn),造成了指令字極大的浪費(fèi)。因此如何在拼裝生成機(jī)器代碼的過程當(dāng)中充分利用超長(zhǎng)指令字的位數(shù)資源,在優(yōu)化工作中占有舉足輕重的地位。要想最大可能的利用超長(zhǎng)指令字空間,其總的原則當(dāng)然就是一條指令字中盡可能的多拼指令(算子)。VLIW通常是把在一個(gè)周期里可以并行執(zhí)行的指令,即不存在依賴和相關(guān)性的指令,并排在一條超長(zhǎng)指令字里,來同時(shí)發(fā)射,這種方式采用的最為廣泛,它的好處是邏輯上簡(jiǎn)單易行,但是這種拼裝方式導(dǎo)致了一個(gè)限制,就是即使當(dāng)前的超長(zhǎng)指令字還可以繼續(xù)容納其他的指令,但如果后繼的指令由于相關(guān)性而都不能跟當(dāng)前指令字中已經(jīng)填入的指令并行執(zhí)行時(shí),編譯器只能浪費(fèi)掉相應(yīng)的指令字空間。因此,為了能夠更靈活的使用超長(zhǎng)指令字的位數(shù)資源,我們除了前面提到的那種通常的并行拼裝方式以外,還可以考慮支持延遲的拼裝方式其做法可以是在指令正常的編碼里加入相應(yīng)的延遲位,來表明該指令延遲執(zhí)行的周期數(shù)。例如:對(duì)于常用的雙操作數(shù)運(yùn)算指令,其編碼為指令功能控制域操作數(shù)來源一選通域操作數(shù)來源二選通域如果支持延遲的拼裝方式的話,如下:指令功能控制域操作數(shù)來源一選通域操作數(shù)來源二選通域延遲位(2位)這樣,當(dāng)延遲位為00,表示該指令不延遲,01表示延遲1個(gè)周期執(zhí)行,10表示延遲2個(gè)周期執(zhí)行,11表示延遲3個(gè)周期執(zhí)行。如果支持延遲的話,即使兩條指令存在相關(guān)性,也可以同時(shí)放入一條超長(zhǎng)指令字中,這樣可以增加指令調(diào)度的靈活性,提高超長(zhǎng)指令字的利用效率。當(dāng)然,這種延遲的執(zhí)行及拼裝方式需要硬件譯碼的支持。 2) 指令字的控制粒度超長(zhǎng)指令字可控制的粒度會(huì)直接影響調(diào)度及優(yōu)化的效果。一般來說,我們?cè)趨R編指令級(jí)采取各種優(yōu)化技術(shù),然后將指令并行排入超長(zhǎng)指令字中,這時(shí)超長(zhǎng)指令字控制的粒度較粗,更靠近高層的匯編指令。如本文前節(jié)所述,有些功能較復(fù)雜的指令在實(shí)現(xiàn)時(shí),機(jī)器需要完成多個(gè)微操作,而這些微操作之間往往存在著相關(guān)性。如果超長(zhǎng)指令字的控制粒度停留在指令級(jí),功能復(fù)雜的指令所對(duì)應(yīng)的多個(gè)微操作則必須看成一個(gè)整體,固定了必須要由同一條超長(zhǎng)指令字來進(jìn)行發(fā)射。當(dāng)這種功能復(fù)雜的指令連續(xù)出現(xiàn)多條,而且彼此又有相關(guān)性時(shí),超長(zhǎng)指令字控制的粒度還停留在指令級(jí)就會(huì)大大限制我們的調(diào)度和優(yōu)化的效果。事實(shí)上,對(duì)于VLIW體系結(jié)構(gòu),超長(zhǎng)指令字控制的粒度越細(xì),越靠近機(jī)器的功能部件,調(diào)度及優(yōu)化的效果越好。同時(shí),我們還應(yīng)該打破一條匯編指令對(duì)應(yīng)的微操作必須排在同一條超長(zhǎng)指令字當(dāng)中,由同一條超長(zhǎng)指令字發(fā)射的思路,在把指令分拆成算子(微操作)之后,只考慮算子在執(zhí)行上的邏輯性和時(shí)序性,將其最大限度的填入超長(zhǎng)指令字當(dāng)中,而不必拘泥于匯編指令和超長(zhǎng)指令字之間的一一對(duì)應(yīng)關(guān)系。 事實(shí)上,隨著VLIW體系結(jié)構(gòu)繼續(xù)發(fā)展,有可能超長(zhǎng)指令字的粒度會(huì)進(jìn)一步細(xì)到電路微觀的層次上,由超長(zhǎng)指令字直接對(duì)部件的控制邏輯進(jìn)行編碼,這樣一來硬件中指令編碼的譯碼器數(shù)量會(huì)大大減少。硬件則完全開放給軟件,軟件和硬件的結(jié)合更為緊密,當(dāng)然也會(huì)導(dǎo)致超長(zhǎng)指令字的位數(shù)大大增加。3.2 匯編指令級(jí)部件不可見VLIW體系結(jié)構(gòu)通常同時(shí)提供多個(gè)可同時(shí)發(fā)射的功能相同的運(yùn)算部件,通過運(yùn)算部件的冗余,可以在同一時(shí)刻并行的完成某些功能,從而提高程序的運(yùn)行效率。因此相應(yīng)的在匯編手冊(cè)中,可能會(huì)提供多套匯編指令來完成同樣的功能。例如,如果硬件提供兩個(gè)浮點(diǎn)運(yùn)算部件,那么可能在匯編手冊(cè)中就有兩條指令FSADD和FSADD2,分別對(duì)應(yīng)這兩個(gè)浮點(diǎn)運(yùn)算部件,都來完成浮點(diǎn)加法運(yùn)算,在同一時(shí)刻可以完成兩個(gè)浮點(diǎn)加法運(yùn)算。但是,大多數(shù)編譯器在進(jìn)行從高級(jí)程序到匯編程序的翻譯時(shí),是很難實(shí)現(xiàn)這一想法的。事實(shí)上編譯器在生成匯編程序的時(shí)候,無法決定什么時(shí)候該使用哪一個(gè)運(yùn)算部件對(duì)應(yīng)的匯編指令。例如上述情況,即使有兩條指令來完成浮點(diǎn)加法,但在編譯器這一層次上無法決定什么時(shí)候該用FSADD,什么時(shí)候該用FSADD2。也就是說,在編譯器生成的匯編程序里,這些被多個(gè)運(yùn)算部件支持的功能還是只能由同一套指令來完成,即只使用了其中的一個(gè)運(yùn)算部件,其余的運(yùn)算部件都空閑,這顯然沒有充分利用VLIW的硬件資源。針對(duì)這種現(xiàn)況,在我們進(jìn)行優(yōu)化工作時(shí),必須要加以解決以充分利用硬件提供的硬件資源。如果上層編譯器的轉(zhuǎn)換機(jī)制不進(jìn)行修改的話,可以考慮在匯編指令一級(jí)讓部件不可見,即在匯編指令級(jí)上看不出有多少個(gè)運(yùn)算部件可以完成同樣的功能,將原來的多套指令都合并成為一套指令,這樣編譯器可以不進(jìn)行改寫,而在匯編器內(nèi)部來決定用哪一個(gè)運(yùn)算部件來完成該指令的功能,這樣就可以充分的均等的利用支持這些功能的所有運(yùn)算部件,從而提高并行性,達(dá)到優(yōu)化的目的。例如:硬件有兩個(gè)浮點(diǎn)運(yùn)算部件,完成浮點(diǎn)單精度加法有FSADD和FSADD2兩條指令, 現(xiàn)在我們可以將它們合并,即只提供一條指令FSADD來完成浮點(diǎn)單精度加法。這 樣每次遇到FSADD指令,編譯器內(nèi)部具體為其生成機(jī)器碼的時(shí)候,就可以采用輪循 的方式,用不同的運(yùn)算部件來完成這條FSADD指令。當(dāng)同時(shí)需要并行執(zhí)行兩個(gè)浮 點(diǎn)加法時(shí),可以保證使用上兩個(gè)浮點(diǎn)運(yùn)算部件,而在編譯器上層進(jìn)行編譯轉(zhuǎn)換時(shí)就 無須考慮了。3.3 支持帶預(yù)測(cè)的匯編指令(predicated execution) 在匯編指令級(jí)的優(yōu)化當(dāng)中,消除分支是經(jīng)常采用的技術(shù),因?yàn)榉种У拇嬖跁?huì)大大限制指令并行度,因此我們經(jīng)常采用預(yù)測(cè)技術(shù)來進(jìn)行分支的轉(zhuǎn)化和消除。盡管采用profile等靜態(tài)分析技術(shù)可以找出最常使用的分支以進(jìn)行預(yù)測(cè),但是錯(cuò)誤的預(yù)測(cè)也是時(shí)有發(fā)生的。因此,對(duì)于那些很難預(yù)測(cè)該走哪些分支的程序,在消除分支時(shí)往往需要有帶預(yù)測(cè)的匯編指令(predicated execution)的支持。例如:如下有四個(gè)基本塊的程序,采用帶預(yù)測(cè)的匯編指令之后,可消除分支,轉(zhuǎn)換為一個(gè) 基本塊,這樣在一個(gè)基本塊中可以更容易的提高指令并行度。4Inst1Inst2Cmp a=b p1, p2Inst3 p1 | inst5 p2Inst4 p1 | inst6 p2Inst 7Inst 8b0: Inst3Inst4Br b3Inst1Inst2Br a=b, b2采用predicated executionb1:Inst5Inst6b2:Inst7Inst8b3:cmp執(zhí)行之后將對(duì)p1和p2這兩個(gè)標(biāo)識(shí)進(jìn)行賦值,隨后再根據(jù)p1和p2的真假來決定是執(zhí)行inst3, inst4還是inst5, inst6。 帶預(yù)測(cè)的匯編指令就是由一般的指令帶上標(biāo)識(shí)位的判斷,根據(jù)對(duì)標(biāo)識(shí)位的判斷結(jié)果來決定是否執(zhí)行該指令。通常的RISC匯編指令集不提供帶預(yù)測(cè)的匯編指令,這滿足不了上述分支消除技術(shù)的要求。因此,VLIW編譯器應(yīng)該支持帶預(yù)測(cè)的匯編指令Page: 7?,以便實(shí)現(xiàn)上述這種常用的分支消除技術(shù)。具體做法是:在匯編指令助記符寫法上,如同上例,只需要多加上一個(gè)標(biāo)識(shí),指明該指令在執(zhí)行時(shí)依賴于對(duì)哪個(gè)標(biāo)識(shí)的判斷即可;在硬件具體實(shí)現(xiàn)上,則可以有兩種做法,一種是在指令本身的編碼中就加入需要判斷的標(biāo)識(shí)位,一種是由條件判斷算子配合指令一起完成。以常用的雙操作數(shù)運(yùn)算指令為例:通常的雙操作數(shù)運(yùn)算指令的編碼:指令功能控制域操作數(shù)來源一選通域操作數(shù)來源二選通域硬件實(shí)現(xiàn)方法一:將所需的標(biāo)識(shí)直接放入指令的編碼,不使用時(shí)為通常的指令,使用 時(shí)即成為帶預(yù)測(cè)的匯編指令。指令功能控制域操作數(shù)來源一選通域操作數(shù)來源二選通域P1P2P3 標(biāo)識(shí)IA64即采用這種方式來提供對(duì)預(yù)測(cè)的支持,但是這種方式會(huì)導(dǎo)致指令本身編碼位的增加,而且當(dāng)機(jī)器提供標(biāo)識(shí)較多的時(shí)候,這種方式有一定的局限。6硬件實(shí)現(xiàn)方法二:指令本身的編碼不做改變,硬件提供一個(gè)條件判斷算子,其編碼為真有效/假有效(1位)標(biāo)識(shí)來源選通域(N位)由標(biāo)識(shí)來源選通域來決定到底當(dāng)前判斷哪個(gè)具體的標(biāo)識(shí)( N = log2 機(jī)器標(biāo)識(shí)個(gè)數(shù) )這樣的話,一般指令的實(shí)現(xiàn)可不做變化,當(dāng)需要支持預(yù)測(cè)時(shí),用條件判斷算子加以配合,以決定指令是否需要執(zhí)行。結(jié)束語 筆者所在的實(shí)驗(yàn)室目前正在為一款我國自主設(shè)計(jì)的VLIW體系結(jié)構(gòu)的新型CPU開發(fā)優(yōu)化編譯器,本文提出的與機(jī)器相關(guān)的優(yōu)化方案及相關(guān)思路,從

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論