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