向量處理機(jī)結(jié)構(gòu)原理教程
向量處理機(jī)結(jié)構(gòu)原理教程
學(xué)習(xí)目標(biāo):???
?? ?理解向量的三種處理方式及其特點(diǎn);
??? 掌握CRAY-I的向量處理;
??? 掌握鏈接技術(shù)的基本思想;
??? 掌握鏈接流水線示意圖的畫(huà)法及性能計(jì)算。
??? 正文:
??? 3.5向量處理機(jī)
??? 3.5.1向量處理方式和向量處理機(jī)
??? 這里,舉一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明向量處理方式。考慮以下向量計(jì)算:
??? D = A *(B + C)
??? 其中A、B、C、D是長(zhǎng)度為 N 的向量。
??? 水平處理方式也就是逐個(gè)求d[i]的方式,為此,先計(jì)算:d[1] = a[1]*(b[1] + c[1]);再計(jì)算:d[2] = a[2]*(b[2] + c[2]);……;最后計(jì)算:d[N] = a[N]*(b[N] + c[N])。一般的計(jì)算機(jī)就是采用這種方式組成循環(huán)程序進(jìn)行處理的。在每次循環(huán)中,至少要用到如下幾條機(jī)器指令:
??? ……
??? ki = bi + ci
??? di = ki * ai
??? ……
??? BE(等于"0"分支成功)
??? 上面程序計(jì)算共需N次循環(huán),其中N-1次分支成功,在每次循環(huán)中有一次數(shù)據(jù)相關(guān)。如果用靜態(tài)流水線,則要進(jìn)行2次乘和加的功能轉(zhuǎn)換,所以共出現(xiàn) N 次數(shù)據(jù)相關(guān)和 2N 次功能切換。因此,這種水平處理方式不適合于對(duì)向量進(jìn)行流水處理。
2. 垂直(縱向)處理方式
??? 垂直處理方式是將整個(gè)向量按相同的運(yùn)算處理完之后,再去執(zhí)行別的運(yùn)算。對(duì)于上式,則有:
??? K = B + C
??? D = K * A
??? 可以看出,這種處理方式僅用了兩條向量指令,且處理過(guò)程中沒(méi)有出現(xiàn)分支指令,每條向量指令內(nèi)無(wú)相關(guān),兩條向量指令間僅有1次數(shù)據(jù)相關(guān)。如果仍用靜態(tài)多功能流水線,也只需1次功能切換,所以這種處理方式適合于對(duì)向量進(jìn)行流水處理。
在這種處理方式中,由于向量長(zhǎng)度N是不受限制的,無(wú)論N有多大,相同的運(yùn)算都用一條向量指令完成。因此,向量運(yùn)算指令的源向量和目的向量都存放在存儲(chǔ)器內(nèi),這使這種處理機(jī)流水線運(yùn)算部件的輸入、輸出端都直接(或經(jīng)向量數(shù)據(jù)緩沖器)與存儲(chǔ)器相聯(lián),從而構(gòu)成所謂存儲(chǔ)器-存儲(chǔ)器型操作的運(yùn)算流水線,其結(jié)構(gòu)如圖3.5.4所示。這種結(jié)構(gòu)對(duì)存儲(chǔ)器帶寬的要求很高。CDC公司的STAR-100、CYBER-205等中央處理機(jī)都是采用這種結(jié)構(gòu)。
??? 3. 分組(縱橫)處理方式
分組處理方式是把長(zhǎng)度為N的向量,分成若干組,每組長(zhǎng)度為 n ,組內(nèi)按縱向方式處理,依次處理各組。
??? 為了減少循環(huán)的影響,每組內(nèi)各用兩條向量指令,各組內(nèi)僅有一次向量指令的數(shù)據(jù)相關(guān)。如果也用靜態(tài)多功能流水線,則各組需2次功能切換,比水平處理方式要少。所以,這種處理方式也適合于對(duì)向量進(jìn)行流水處理。
??? 這種處理方式對(duì)向量長(zhǎng)度N的大小亦不限制,但是,每一組的長(zhǎng)度最大不能超過(guò)n。因此,可設(shè)置長(zhǎng)度為n的向量寄存器,使得每組向量運(yùn)算的源向量和目的向量都在向量寄存器中,運(yùn)算流水線的輸入、輸出端都與向量寄存器相聯(lián),從而構(gòu)成所謂寄存器-寄存器型操作的運(yùn)算流水線。
這種結(jié)構(gòu)要求有容量足夠大的向量寄存器組。它們不但能存放源向量,而且能保留中間結(jié)果,從而大大減少訪問(wèn)存儲(chǔ)器的次數(shù);此外,可降低對(duì)存儲(chǔ)器帶寬的要求,亦可減少因存儲(chǔ)器訪問(wèn)沖突而引起的等待時(shí)間,從而提高處理速度。
??? 3.5.2向量處理機(jī)實(shí)例分析
??? 七十年代中期問(wèn)世的CRAY-1向量機(jī)是向量處理機(jī)的典型代表,其向量流水處理部件簡(jiǎn)圖如圖3.5.6所示??蔀橄蛄窟\(yùn)算使用的功能部件有:整數(shù)加、邏輯運(yùn)算、移位、浮點(diǎn)加、浮點(diǎn)乘、浮點(diǎn)迭代求倒數(shù)。它們都是流水處理部件,且六個(gè)部件可并行工作。向量寄存器組的容量為512個(gè)字,分成8塊。每個(gè) Vi 塊可存元素個(gè)數(shù)達(dá)64的一個(gè)向量。
??? 為了能充分發(fā)揮向量寄存器組和可并行工作的六個(gè)功能部件的作用以及加快向量處理, CRAY-1設(shè)計(jì)成每個(gè) Vi 塊都有單獨(dú)總線可連到六個(gè)功能部件,而每個(gè)功能部件也各自都有把運(yùn)算結(jié)果送回向量寄存器組的輸出總線。這樣,只要不出現(xiàn) Vi 沖突和功能部件沖突,各個(gè) Vi 之間和各個(gè)功能部件之間都能并行工作,大大加快了向量指令的處理,這是CRAY-1向量處理的顯著特點(diǎn)。
??? 所謂 Vi 沖突指的是并行工作的各向量指令的源向量或結(jié)果向量的 Vi 有相同的。除了相關(guān)情況之外,就是出現(xiàn)源向量沖突,例如:
??? V4 = V1 + V2
??? V5 = V1 ∧ V3
??? 這兩條向量指令不能同時(shí)執(zhí)行,需在第一條向量指令執(zhí)行完,釋放 V1 后,第二條指令才能執(zhí)行。這是因?yàn)檫@兩條指令的源向量之一雖然都是取自 V1 ,但二者的首元素下標(biāo)可能不同,向量長(zhǎng)度也可能不同,難以由V1同時(shí)提供兩條指令所需的源向量。這種沖突和前面所討論的結(jié)構(gòu)相關(guān)是一樣的。所謂功能部件沖突指的是同一個(gè)功能部件被一條以上的并行工作向量指令所使用。例如:
??? V4 = V2 * V3
??? V5 = V1 * V6
??? 這兩條向量指令都需用到浮點(diǎn)相乘部件,那就需在第一條指令執(zhí)行完畢,功能部件釋放后,第二條指令才能執(zhí)行。
??? CRAY-1有如圖3.5.7所示的四種向量指令。第1種,每拍從 Vi 、Vj 塊順序取得一對(duì)元素送入功能部件。各種功能部件執(zhí)行的時(shí)鐘周期數(shù)不同,其輸出也是每拍送進(jìn) Vk 塊一個(gè)結(jié)果元素。元素對(duì)的個(gè)數(shù)由VL(向量長(zhǎng)度)寄存器指明。向量屏蔽寄存器(VM)為64位,每位對(duì)應(yīng)V的一個(gè)元素。在向量合并或測(cè)試時(shí),由VM控制對(duì)哪些元素進(jìn)行合并和測(cè)試。一條指令至多只能處理64對(duì)元素(對(duì)應(yīng)每塊的容量)。若向量的長(zhǎng)度大于64,需用向量循環(huán)程序?qū)⑵浞侄?,各段中向量元素個(gè)數(shù)要小于等于64,然后以段為單位從存儲(chǔ)器中調(diào)入并進(jìn)行處理。第2種和第1種的差別只在于它的一個(gè)操作數(shù)取自標(biāo)量寄存器 Si 。大多數(shù)向量指令都屬這兩種。由于它們不是由存儲(chǔ)器,而是由向量寄存器取得操作數(shù),所以流水速度可很高,CRAY-1的時(shí)鐘周期時(shí)間為12.5ns(一拍)。第3、4種是控制存儲(chǔ)器與V向量塊之間的數(shù)據(jù)傳送,Load、Store一個(gè)字(元素)需花6拍。
? CRAY-1向量處理的另一個(gè)顯著特點(diǎn)是,只要不出現(xiàn)功能部件沖突和源向量沖突,通過(guò)鏈接結(jié)構(gòu)可使相關(guān)的向量指令也能并行處理。
??? 例如,對(duì)上述向量運(yùn)算 D = A * (B + C),若 N ≤64,向量為浮點(diǎn)數(shù),則在B、C取到 V0 、V1 后,就可用以下三條向量指令求解:
??? 1、V3 ← 存儲(chǔ)器(訪存,載入A)
??? 2、V2 ← V0 + V1(浮點(diǎn)加)
??? 3、V4 ← V2 * V3(浮點(diǎn)乘,存D)
??? 第1、2條指令無(wú)任何沖突,可以并行執(zhí)行。第3條指令與第1、2條指令之間存在數(shù)據(jù)相關(guān),不能并行執(zhí)行,但是如果能夠?qū)⒌?、2條指令的結(jié)果元素直接鏈接到第3條指令所用的功能部件,那么第3條指令就能與第1、2條指令并行執(zhí)行。其鏈接過(guò)程如圖3.5.8所示。
??? 由此可見(jiàn),所謂鏈接特性,實(shí)質(zhì)上是把流水線“定向”的思想引入到向量執(zhí)行過(guò)程的結(jié)果。 CRAY-1在把元素送往功能部件及把結(jié)果存入 Vi 時(shí)都需一拍。由于第1、2條指令之間沒(méi)有任何沖突,可以同時(shí)執(zhí)行,而“訪存”拍數(shù)正好與“浮加”的一樣,因此,從訪存開(kāi)始,直至把第一個(gè)結(jié)果元素存入 V4 ,所需拍數(shù)(亦稱為鏈結(jié)流水線的流水時(shí)間)為:
??? 1(送) + 6(訪存) + 1(入) + 1(送) + 7(浮乘) + 1(入) = 17拍
此后,就是每拍取得一個(gè)結(jié)果元素存入V4。顯然,這要比第1、2條指令全執(zhí)行完,所有元素全進(jìn)入V2、V3后,才開(kāi)始執(zhí)行第3條指令要快得多。通過(guò)這種鏈接技術(shù)使得 CRAY-1 流水線能靈活組織,從而更能發(fā)揮流水技術(shù)的效能。
??? CRAY-1 的向量指令還可做到“源V”和“結(jié)果V”是同一個(gè),這種向量遞歸操作和前述的鏈接特性對(duì)于實(shí)現(xiàn)諸如求向量點(diǎn)積等是很有好處的。
??? 上面我們結(jié)合 CRAY-1 介紹了向量流水機(jī)器的結(jié)構(gòu)特點(diǎn)。然而,要使軟件能充分發(fā)揮硬件所提供的這些特點(diǎn)卻是很不容易的,它必然要對(duì)語(yǔ)言結(jié)構(gòu)和編譯程序提出新的要求。例如,它希望高級(jí)語(yǔ)言能增設(shè)向量運(yùn)算符(如向量加、向量乘等),不然,程序設(shè)計(jì)者在編制高級(jí)語(yǔ)言程序時(shí),要把向量運(yùn)算通過(guò) DO LOOP 實(shí)現(xiàn),而編譯程序反過(guò)來(lái)卻又要把 DO LOOP 型語(yǔ)句變換成向量型的機(jī)器語(yǔ)言去執(zhí)行。例如
??? C = A + B
??? 的向量運(yùn)算,程序設(shè)計(jì)者是用
??? DO 20 I = 1,N
??? 20 C(I) = A(I) + B(I)
??? 實(shí)現(xiàn),但編譯程序卻又要把它編譯成
??? VECT_BEGIN
??? A,B,C = VECTOR(1…N)
??? C = A + B
??? VECT_END
??? 去執(zhí)行。
?
??? 另外,優(yōu)化的目標(biāo)程序必然要和向量流水機(jī)器的具體結(jié)構(gòu)特點(diǎn)密切相關(guān),這會(huì)使編譯程序的設(shè)計(jì)復(fù)雜化。例如,對(duì)圖3.1.7所示的 ASC 結(jié)構(gòu),那就要求把目標(biāo)程序中的相加指令和相乘指令分別集中在一起,以減少流水線功能切換所費(fèi)時(shí)間。然而,CRAY-1 卻無(wú)此要求,因?yàn)樗歇?dú)立的能并行執(zhí)行的相乘、相加功能部件。但是,它卻要求編譯程序能充分發(fā)揮多功能部件和上述鏈接能力所能提供的多條向量指令可并行執(zhí)行的特點(diǎn)。
?
非常好我支持^.^
(489) 97.2%
不好我反對(duì)
(14) 2.8%
相關(guān)閱讀:
( 發(fā)表人:admin )