基于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),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

溫馨提示

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

最新文檔

評論

0/150

提交評論