計(jì)算機(jī)系統(tǒng)結(jié)構(gòu) 第四章:數(shù)據(jù)級(jí)并行:向量體系結(jié)構(gòu)和GPU
本章知識(shí)結(jié)構(gòu)圖:
什么是數(shù)據(jù)級(jí)并行
數(shù)據(jù)級(jí)并行通常用于大規(guī)模數(shù)據(jù)處理的場(chǎng)景,比如:科學(xué)計(jì)算、圖形圖像處理。
網(wǎng)站的建設(shè)
成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為
成都花箱等企業(yè)提供專業(yè)服務(wù)。數(shù)據(jù)級(jí)并行與SPMD
- 無(wú)論是矩陣運(yùn)算還是圖形圖像處理,其共性是對(duì)大量的數(shù)據(jù)施加同種變換——數(shù)據(jù)級(jí)并行(DLP)
- 從軟件的角度,在編程模型上,我們期待SPMD:從軟件的角度上來(lái)講,用單個(gè)程序,可以處理不同的數(shù)據(jù)。
那么把一個(gè)SPMD的程序分別放在SISD的機(jī)器上,以及MIMD的機(jī)器上,會(huì)怎么樣?
- 在SISD上,和我們之前見(jiàn)過(guò)的指令流水線一樣,以流水線的方式完成指令級(jí)的并行, F(取指令)、D(譯碼讀寄存器)、E(執(zhí)行)……(單核,單線程,串行化執(zhí)行:把MD拆成多次SD,變?yōu)镾ISD)耗時(shí)
- 在MIMD上,每個(gè)core都在執(zhí)行指令流,也就是多個(gè)指令流水線在多個(gè)core上同時(shí)進(jìn)行 F、D、E……等。(多核,多線程,并行化執(zhí)行:把SP的每條I多次重復(fù),變?yōu)镸IMD)耗電
數(shù)據(jù)級(jí)并行——傳統(tǒng)器件的問(wèn)題
- 分析傳統(tǒng)的標(biāo)量CPU流水線可知,取址、譯碼等操作邏輯復(fù)雜,且開(kāi)銷不低;
- 對(duì)于SPMD任務(wù),無(wú)論是在SISD還是MIMD(多核)器件上運(yùn)行,其取址、譯碼操作都是有冗余的。
數(shù)據(jù)級(jí)并行——SIMD
SIMD器件:更多的ALU (Execute);更少的Fetch和Decode
- 更少的Fetch和Decode(甚至其他流水部件)意味著什么?——更少的器件,更低的能耗和時(shí)間開(kāi)銷
- 更多的ALU意味著什么?——一次流水能處理更多數(shù)據(jù),速度更快
- 增加數(shù)據(jù)寄存器的數(shù)量來(lái)一次存儲(chǔ)更多數(shù)據(jù),以減少存儲(chǔ)器訪問(wèn)延遲
向量體系結(jié)構(gòu)與GPU系統(tǒng)結(jié)構(gòu)的差別
向量體系結(jié)構(gòu)——“窄而深”
- 指令流水線深,ALU寬度窄
- 單次指令流水后能處理更多數(shù)據(jù),掩蓋不必要的流水線時(shí)間
GPU——“寬而淺”
- 指令流水線淺,ALU寬度寬
- 流水本身比較簡(jiǎn)單,直接對(duì)更多的數(shù)據(jù)進(jìn)行并行計(jì)算,同一時(shí)刻處理更多數(shù)據(jù)
向量體系結(jié)構(gòu)
向量這種數(shù)據(jù)結(jié)構(gòu),以及向量的運(yùn)算,和我們對(duì)SIMD的期待不謀而合。
向量的串行化計(jì)算方式
以計(jì)算 D=A×(B+C) 為例,A、B、C、D均為長(zhǎng)度為N的向量
- 橫向計(jì)算
- 縱向計(jì)算
- 縱橫(分組)計(jì)算
向量的計(jì)算方式 – 1. 橫向計(jì)算
- 向量計(jì)算是按行的方式從左到右橫向地進(jìn)行
先計(jì)算: d1←a1×(b1+c1)
再計(jì)算: d2←a2×(b2+c2)
……
最后計(jì)算: dN←aN×(bN+cN) - 組成循環(huán)程序進(jìn)行處理
ki←bi+ci
di←ki×ai
數(shù)據(jù)相關(guān):N 次 功能切換:2N 次 - 這種計(jì)算方式是在標(biāo)量處理器上對(duì)向量的一般計(jì)算方式,數(shù)據(jù)相關(guān)和功能切換隨著向量長(zhǎng)度增長(zhǎng)而增長(zhǎng),硬件開(kāi)銷過(guò)大,并不是最優(yōu)的向量計(jì)算方式,不適合于向量處理機(jī)的并行處理。
向量的計(jì)算方式 – 2. 縱向計(jì)算
- 向量計(jì)算是按列的方式從上到下縱向地進(jìn)行。
- 先計(jì)算
k1←b1+c1
……
kN←bN+cN
再計(jì)算
d1←k1×a1
……
dN←kN×aN - 表示成向量指令:
K=B+C
D=K × A
兩條向量指令之間:
數(shù)據(jù)相關(guān):1次 功能切換:1次
向量的計(jì)算方式 – 3. 縱橫(分組)計(jì)算
剛剛的縱向計(jì)算方式優(yōu)化了向量計(jì)算的硬件開(kāi)銷,但是每次計(jì)算都需要訪問(wèn)到向量中的全部元素;
考慮到當(dāng)前計(jì)算機(jī)體系結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)往往是層次化的,指令操作數(shù)一般都會(huì)加載到寄存器中,而寄存器的數(shù)量一般不會(huì)太多(相比于可以無(wú)限增長(zhǎng)的向量長(zhǎng)度N來(lái)說(shuō));
結(jié)合前面兩種計(jì)算方式,我們可以使用分組計(jì)算的方法。
把向量分成若干組,組內(nèi)按縱向方式處理,依次處理各組。
對(duì)于上述的例子,設(shè):
N=S × n+r
其中N為向量長(zhǎng)度,S為組數(shù),n為每組的長(zhǎng)度,r為余數(shù)。
若余下的r個(gè)數(shù)也作為一組處理,則共有S+1組。
先算第1組:
k1~n←b1~n+c1~n
d1~n←k1~n×a1~n
再算第2組:
k(n+1)~2n←b(n+1)~2n+c(n+1)~2n
d(n+1)~2n←k(n+1)~2n×a(n+1)~2n
依次進(jìn)行下去,直到最后一組:第S+1組。
每組內(nèi)各用兩條向量指令。
數(shù)據(jù)相關(guān):1次 功能切換:2次
向量體系結(jié)構(gòu)的總結(jié)
- 根據(jù)剛剛探討的串行化向量計(jì)算優(yōu)化方式,我們得到一種更適用于向量處理的體系結(jié)構(gòu)
- 向量體系結(jié)構(gòu)應(yīng)當(dāng)具有很大的順序寄存器堆 (Register File),可加載更多向量元素以支持縱向計(jì)算
- 向量體系結(jié)構(gòu)從內(nèi)存中收集散落的數(shù)據(jù),將其放入寄存器堆中,并對(duì)寄存器堆中的數(shù)據(jù)們進(jìn)行操作,然后將這些結(jié)果放回內(nèi)存(一次傳輸一組數(shù)據(jù),LD/ST流水化)
- 一條指令能夠?qū)σ粋€(gè)向量的數(shù)據(jù)進(jìn)行操作,也就對(duì)向量中諸多獨(dú)立數(shù)據(jù)元素進(jìn)行了操作(縱向計(jì)算,功能單元流水化)
向量體系結(jié)構(gòu)的一些優(yōu)勢(shì)
- 由于向量的Load與Store是深度流水線化的,大型寄存器堆充當(dāng)了Buffer的作用,因此其能夠掩蓋訪存延遲并充分利用內(nèi)存帶寬;
- 亂序的超標(biāo)量處理器往往具有復(fù)雜的設(shè)計(jì),且亂序程度越高,其復(fù)雜性和功耗也會(huì)越高,在此方向發(fā)展很容易觸及Power Wall;
- 將順序的標(biāo)量處理器擴(kuò)展為向量處理器則不會(huì)帶來(lái)復(fù)雜度和功耗的大幅升高,且開(kāi)發(fā)者也能很容易適應(yīng)和轉(zhuǎn)換到向量指令。
實(shí)例:VMIPS=標(biāo)量MIPS+邏輯向量擴(kuò)展
- 向量寄存器:
- 64bit * 64元素 * 8個(gè)VR,足夠多讀寫口
- 向量功能單元:
- 全流水化,每周期1操作
- 需要一個(gè)控制單元檢測(cè)結(jié)構(gòu)冒險(xiǎn)和數(shù)據(jù)冒險(xiǎn)
- 向量load/store單元:
- 全流水化,每周期1個(gè)字,可操作標(biāo)量
- 標(biāo)量寄存器集合:
- 32通用,32浮點(diǎn),可存地址和數(shù)據(jù)
- 可以為向量功能單元提供數(shù)據(jù),也可以為向量load/store單元提供地址
向量專用特殊寄存器
- 向量長(zhǎng)度寄存器VL
- 64位,每一位對(duì)應(yīng)于向量寄存器的一個(gè)單元
- VL控制所有向量運(yùn)算的長(zhǎng)度,包括ld/st
- 作用:將軟件層程序中實(shí)際向量長(zhǎng)度N與硬件層向量寄存器中的元素?cái)?shù)目64相適配
- 向量屏蔽寄存器VM
- 當(dāng)向量長(zhǎng)度小于64時(shí),或者條件語(yǔ)句控制下對(duì)向量某些元素進(jìn)行單獨(dú)運(yùn)算時(shí)使用
- 即使maskcode中有大量的0,使用VM的向量指令速度依然遠(yuǎn)遠(yuǎn)快于標(biāo)量計(jì)算模式
Vmips向量指令格式
VMIPS指令=MIPS指令+Op1類型+Op2類型.精度
- misp:add.d
- vmips:addvv.d(V1,V2,V3),addvs.d(V1,V2,F0)
向量體系結(jié)構(gòu)的相關(guān)概念
- 循環(huán)間相關(guān):對(duì)一個(gè)循環(huán)來(lái)說(shuō),如果各輪迭代之間存在相關(guān)性,則稱為循環(huán)間相關(guān),否則為循環(huán)間無(wú)關(guān)
- 可向量化:針對(duì)一組Mips指令描述的循環(huán),如果滿足循環(huán)間無(wú)關(guān),則循環(huán)稱為可向量化的,編譯器可為其生成向量指令。
- 指令編隊(duì)(convoy):由一組不包含結(jié)構(gòu)冒險(xiǎn)的向量指令組成,一個(gè)編隊(duì)中的所有向量指令在硬件條件允許時(shí)可以并行執(zhí)行。
向量體系結(jié)構(gòu)的性能優(yōu)化
多車道技術(shù)
- 剛剛討論的是向量計(jì)算在串行化中盡可能進(jìn)行優(yōu)化的結(jié)果
- 從并行的角度去考慮,增加功能單元(ALU)的數(shù)量也能大大提升向量的計(jì)算速度(多車道)
- 這就好像,將一條單車道的窄巷擴(kuò)寬成四車道的公路,吞吐量自然會(huì)提升
鏈接技術(shù)
- 鏈接技術(shù):當(dāng)兩條指令出現(xiàn)“寫后讀”相關(guān)時(shí),若它們不存在功能部件沖突和向量寄存器(源或目的) 沖突,就有可能把它們所用的功能部件頭尾相接,形成一個(gè)鏈接(長(zhǎng))流水線,進(jìn)行流水處理。
- 鏈接過(guò)程:無(wú)鏈接情況下,后面的功能需要等到前一個(gè)功能的n個(gè)結(jié)果都產(chǎn)生才能開(kāi)始;而鏈接情況下,后面的功能只需要等到前一個(gè)功能的第一個(gè)結(jié)果產(chǎn)生就可以開(kāi)始,即向量數(shù)據(jù)的生產(chǎn)與向量數(shù)據(jù)的消費(fèi)進(jìn)行延遲的重疊。
- 鏈接實(shí)質(zhì):把流水線定向的思想引入到向量執(zhí)行過(guò)程,對(duì)兩條流水線進(jìn)行聯(lián)合控制,沒(méi)有改變寄存器和運(yùn)算電路。
進(jìn)行向量鏈接的要求
- 保證:無(wú)向量寄存器使用沖突和無(wú)功能部件使用沖突
- 只有在前一條指令的第一個(gè)結(jié)果元素送入結(jié)果向量寄存器的那一個(gè)時(shí)鐘周期才可以進(jìn)行鏈接。
- 當(dāng)一條向量指令的兩個(gè)源操作數(shù)分別是兩條先行指令的結(jié)果寄存器時(shí),要求先行的兩條指令產(chǎn)生運(yùn)算結(jié)果的時(shí)間必須相等,即要求有關(guān)功能部件的通過(guò)時(shí)間相等。
- 要進(jìn)行鏈接執(zhí)行的向量指令的向量長(zhǎng)度必須相等,否則無(wú)法進(jìn)行鏈接。
- 一次鏈接行為通常僅發(fā)生在分組內(nèi)部,即不對(duì)整個(gè)N進(jìn)行鏈接,而對(duì)個(gè)分組內(nèi)的n個(gè)向量元素的計(jì)算過(guò)程進(jìn)行鏈接
編隊(duì)技術(shù)
- 幾條能在同一個(gè)時(shí)鐘周期內(nèi)一起開(kāi)始執(zhí)行的向量指令集合稱為一個(gè)編隊(duì);
- 同一個(gè)編隊(duì)中的向量指令之間
- 不存在結(jié)構(gòu)沖突;
- 不存在數(shù)據(jù)沖突;
- 存在數(shù)據(jù)沖突,但是可以鏈接。
分段開(kāi)采技術(shù)
- 當(dāng)向量的長(zhǎng)度N大于向量寄存器的長(zhǎng)度n時(shí),必須把長(zhǎng)向量N分成長(zhǎng)度固定為n的段,然后循環(huán)分段處理,每一次循環(huán)只處理一個(gè)向量段。這種技術(shù)稱為分段開(kāi)采技術(shù)。
- 由系統(tǒng)硬件和編譯軟件合作完成控制,對(duì)程序員是透明的。
向量體系結(jié)構(gòu)的性能影響因素
- 操作數(shù)向量的長(zhǎng)度
- 向量啟動(dòng)時(shí)間
- 操作之間的數(shù)據(jù)相關(guān),是否采用鏈接
- 操作之間的結(jié)構(gòu)性相關(guān),發(fā)射限制,車道數(shù)量,是否采用編隊(duì)
GPU結(jié)構(gòu)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享名稱:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第四章:數(shù)據(jù)級(jí)并行:向量體系結(jié)構(gòu)和GPU-創(chuàng)新互聯(lián)
文章位置:
http://weahome.cn/article/eiejd.html