【轉(zhuǎn)】計(jì)算機(jī)指令集架構(gòu) – 超長(zhǎng)指令字(VLIW)

計(jì)算機(jī)指令集架構(gòu) – 超長(zhǎng)指令字(VLIW)

jacob
閑人散鶴
提高CPU性能的一個(gè)關(guān)鍵方向是如何提高指令級(jí)的細(xì)粒度并行。目前指令級(jí)細(xì)粒度并行性的一些方法有:
流水線:流水線已經(jīng)普遍應(yīng)用于處理器中,通過改進(jìn)單個(gè)流水線的實(shí)現(xiàn),幾乎無法再獲得更多的收益。
多處理器:使用多個(gè)處理器僅對(duì)有限的應(yīng)用程序能夠起到提高性能的效果。
超標(biāo)量體系結(jié)構(gòu):超標(biāo)量架構(gòu)可以提高所有類型程序的性能。超標(biāo)量體系結(jié)構(gòu)意味著一次能夠完成多個(gè)指令的執(zhí)行
每條指令完成多個(gè)獨(dú)立操作:即超長(zhǎng)指令字架構(gòu)(Very Long Instruction Word – VLIW)。
VLIW架構(gòu)
VLIW架構(gòu)是由Josh Fisher在20世紀(jì)80年代早期提出,當(dāng)時(shí)集成電路制造技術(shù)和高級(jí)語言編譯器技術(shù)出現(xiàn)了巨大的進(jìn)步。其主要思想是:
將多個(gè)相互無依賴的指令封裝到一條超長(zhǎng)的指令字中
CPU中有對(duì)應(yīng)數(shù)量的ALU完成相應(yīng)的指令操作
指令之間的依賴性和調(diào)度由編譯器來完成
由于在一條指令中封裝了多個(gè)并行操作,其指令的長(zhǎng)度比RISC或CISC的指令要長(zhǎng),因此起名為超長(zhǎng)指令集。

VLIW的設(shè)計(jì)思想與RISC類似,即采用簡(jiǎn)單的指令和硬件。不同之處在于,VLIW并行執(zhí)行多條指令。VLIW架構(gòu)中,指令級(jí)并行的發(fā)現(xiàn)與指令執(zhí)行順序的調(diào)度(硬件中最困難的部分)完全交由編譯器完成。這樣,硬件可以盡可能的保持簡(jiǎn)單,并采用流水線,從而使得CPU的設(shè)計(jì)簡(jiǎn)化,并達(dá)到較高的主頻。在某種程度上,可以將VLIW架構(gòu)看作是多條RISC流水線并行起來的結(jié)果。
VLIW實(shí)現(xiàn)的功能與超標(biāo)量處理器也有相似之處 —— 一次發(fā)射并完成多個(gè)操作,但他們之間有一個(gè)重要的區(qū)別:VLIW硬件不負(fù)責(zé)發(fā)現(xiàn)并發(fā)執(zhí)行多個(gè)操作的工作。對(duì)于VLIW實(shí)現(xiàn),很長(zhǎng)的指令字已經(jīng)對(duì)并發(fā)操作進(jìn)行了編碼,這通常是由編譯器來完成的。與RISC或CISC的高度超標(biāo)量實(shí)現(xiàn)相比,這種顯式編碼極大地降低了硬件的復(fù)雜性。
因此,VLIW的最大優(yōu)勢(shì)是,與同等并行的RISC或CISC芯片相比,高并發(fā)(并行)實(shí)現(xiàn)要簡(jiǎn)單得多,構(gòu)建成本也低得多。RISC或CISC通常需要復(fù)雜邏輯發(fā)現(xiàn)指令之間的數(shù)據(jù)依賴關(guān)系,以及亂序執(zhí)行邏輯和超標(biāo)量架構(gòu)來實(shí)現(xiàn)多指令的并行發(fā)射。VLIW是構(gòu)建超標(biāo)量微處理器的一種更簡(jiǎn)單的方法。
RISC、CISC和VLIW架構(gòu)區(qū)別
架構(gòu)特征CISCRISCVLIW指令長(zhǎng)度變長(zhǎng)固定,通常32 bits固定指令格式字段布局可變字段布局固定一致字段布局固定一致指令語義指令從簡(jiǎn)單到復(fù)雜變化,每條指令可能有許多依賴操作每個(gè)指令的語義幾乎總是一個(gè)簡(jiǎn)單的操作多數(shù)指令是簡(jiǎn)單、獨(dú)立的操作寄存器較少,部分為專用寄存器較多通用寄存器較多通用寄存器內(nèi)存引用方式與許多不同類型指令中的操作捆綁在一起不與操作捆綁在一起,如,Load/Store架構(gòu)不與操作捆綁在一起,如,Load/Store架構(gòu)硬件設(shè)計(jì)利用微碼實(shí)現(xiàn)采用單條流水線、不使用微碼采用多條流水線、不使用微碼和復(fù)雜的指令調(diào)度邏輯

從原理上看一下CISC、RISC和VLIW的區(qū)別,注意,實(shí)際上的代碼不會(huì)是這樣的,這里只是說明三種架構(gòu)的區(qū)別。
一個(gè)C語言函數(shù):
function( long j) {
? ?long i;
? ?j = j + I;
}



VLIW指令架構(gòu)優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
不需要?jiǎng)討B(tài)調(diào)度硬件 ?簡(jiǎn)化硬件電路
不需要在VLIW指令中進(jìn)行依賴項(xiàng)檢查 ?簡(jiǎn)單的指令多發(fā)射硬件
取指后分發(fā)到不同能單元,不需要進(jìn)行指令對(duì)齊/分配 ?簡(jiǎn)化硬件電路
缺點(diǎn):
編譯器需要找到N個(gè)獨(dú)立的操作
如果無法找到,需要在一個(gè)VLIW指令中插入NOP
降低并行性,增加代碼大小
當(dāng)執(zhí)行寬度(N)、指令延遲、功能單元改變時(shí)需要重新編譯(超標(biāo)量架構(gòu)不需要重新編譯)
同步執(zhí)行會(huì)導(dǎo)致獨(dú)立操作停止
在延遲時(shí)間最長(zhǎng)的指令完成之前,任何指令都不能執(zhí)行
典型商用VLIW架構(gòu)芯片
Intel IA-64
Intel IA-64是Itanium系列64位微處理器的指令集體系結(jié)構(gòu),基于VLIW設(shè)計(jì)思想,稱為EPIC(Explicitly Parallel Instruction Computing)架構(gòu)。指令之間可以存在依賴關(guān)系,指令編碼中使用幾個(gè)bit指明哪幾條指令之間存在著依賴關(guān)系。

ATI GPU
相對(duì)于Nvidia GPU采用了SIMT架構(gòu),ATI GPU采用了VLIW架構(gòu)。以ATI Radeon HD 5800為例,GPU由20個(gè)SIMD計(jì)算引擎組成,每個(gè)SIMD計(jì)算引擎由16個(gè)線程處理器單元(Thread Processor - TP)組成。而每個(gè)TP則是一個(gè)5-way的VLIW Processor。

VLIW架構(gòu)在嵌入式市場(chǎng),如DSP,領(lǐng)域獲得了成功應(yīng)用。
總而言之,VLIW指令集架構(gòu)簡(jiǎn)化了硬件設(shè)計(jì),將最復(fù)雜的工作推給了編譯器。
通常,常用的應(yīng)用中,發(fā)現(xiàn)足夠的并行指令填滿VLIW的可執(zhí)行單元是非常困難的。這就導(dǎo)致VLIW的利用率較低,即出現(xiàn)設(shè)計(jì)/宣稱處理能力很高,但是實(shí)際的性能卻較低的現(xiàn)象。
發(fā)布于 2020-12-18 01:26