1-1 10. Přednáška 10. přednáška Vektorové procesory Róbert Lórencz
1-2 10. Přednáška Obsah Úvod DLXV Instrukční typy Adresace Proudové zpracování Časová náročnost vektorových instrukcí Výkonnostní rovnice
1-3 10. Přednáška Problémy konvenčního přístupu Hranice využití ILP 1. Hodinová frekvence pipeline: od určité úrovně každé zvyšování hodinové frekvence způsobuje zvýšení CPI (skoky a jiné hazardy) 2. Načtení a dekódování instrukcí: od určité hranice je obtížné načítat a dekódovat více instrukcí za jeden takt 3. Cache hit rate: pro dlouhodobě běžící (vědecké) aplikace s rozsáhlými datovými soubory je malý cache hit rate způsobený slabou prostorovou lokalitou dat; souvislé datové řetězce (multimédia) mají slabou časovou lokalitu dat
1-4 10. Přednáška Vektorový procesor (VP) základy 1 Koprocesor, který je speciálně navržen pro provádění vektorových výpočtů Často používaný ve vektorových superpočítačích, také může být připojen knějakému skalárnímu CPU Vykonává operace na vektorech, např. jeden průchod smyčkou ( 64-prvků FP vektor), počet načtených instrukcí rapidně klesá Vektorové instrukce: výpočet jednoho prvku výsledního vektoru je nezávislý na výpočtu jiných prvků vektoru hluboká pipeline je bez datových hazardů Vektorové prvky mají známy formát přístupu do paměti M prokládaná paměť M pracuje efektivně (nahrazuje cache) M latence je jen jednou pro první prvek vektoru Překládaná paměť M je dražší než paměti cache Řídící hazardy přítomné u skalárního zpracování se zde nevyskytují
1-5 10. Přednáška Vektorový procesor základy 2 Vektorové proudové zpracování Aritmetických operací Paměťových operací Efektivní výpočet adres pro jednotlivé elementy vektoru Současné vykonávání několika vektorových operací Základní architektura vektorových počítačů VP = obyčejná proudově pracující jednotka + vektorová jednotka Paměť paměť VP: neúspěšná architektura Procesor s vektorovými registry (L/S architektura)
1-6 10. Přednáška Vektorový procesor architektura DLXV Hlavní paměť Vektorová L/S jednotka FP add/subtract 1slovo/ takt + ini. latence Vektorové registry 8 registrů 16 R portů 8 W portů Každý registr 64 elementů 64 b / element (DP) Skalární registry 32 GP registrů 32 FP registrů Vícenásobné R/W porty FP multiply FP divide Integer Logical Cross-bar
1-7 10. Přednáška Vektorový procesor komponenty Vektorové registry: pevná délka, uchovává jeden vektor minimálně: 2 čtecí a 1 zapisovací port typicky: 8-32 vektorových registrů, každý z nich uchovává 64-128 64-bitových prvků Vektorové funkční jednotky - Vector Functional Units (FUs): plně proudově pracující, každý takt je startována nová operace Typicky: 4 až 8 FUs: FP add, FP mult, FP reciprocal (1/X), integer add, logical, shift; může být i více stejných jednotek Vektorové Load-Store Units (LSUs): plně proudově pracující jednotka, provádí load, nebo store nějakého vektoru; může být i více stejných jednotek LSUs Skalární registry: jeden element pro FP skalár nebo adresu Cross-bar propojuje FUs, LSUs, registry
1-8 10. Přednáška Vektorový procesor vektor-registr architektura Charakteristika vektorových procesorů Procesor rok Clock [MHz] Regs # prvků #FUs #LSUs Cray 1 1976 80 8 64 6 1 Cray C-90 1991 240 8 128 8 4 Convex C-4 1994 135 16 128 3 1 Fuj. VP300 1996 100 8-256 32-1024 3 2 NEC SX/4 1995 400 8+8K 256 var. 16 8 Cray J-90 1995 100 8 64 4 Cray T-90 1996 500 8 128 8 4 FP add, FP multiply, FP reciprocal, integer add, 2 logical shift, population count/parity
1-9 10. Přednáška Vektorový procesor typy instrukcí 1 Typy instrukcí pro architekturu procesoru: vektor - registr 1. vektor - vektor, 1 nebo 2 operandy f 1 : V i V j V 2 = sin(v 1 ) f 2 : V i x V j V k V 3 = V 1 + V 2 2. vektor - skalár f 3 : s x V i V j V 2 = s.v 1 3. vektor paměť f 4 : V M f 5 : M V 4. vektorová redukce f 6 : V i s Max, min, sum, střední hodnota f 7 : V i x V k s Skalární součin s = V 1. V 2 5. gather (sběr) f 8 : M x V 0 V 1 nenulové prvky řídkého vektoru V 1 jsou načtené s M s použitím předpisu ve vektoru V 0
1-10 10. Přednáška Vektorový procesor typy instrukcí 2 6. scatter (rozložení) f 9 : V 1 x V 0 M 7. maskování f 10 : V 0 x V m V 1 prvky hustého vektoru V 1 jsou uložené do řídkého vektoru v M s použitím předpisu ve V 0 komprese/expanze vektoru vektor vektor - vektor vektor - skalar Reg. V i V j V k Reg. V i V j Skalar reg. 1 2 n s 1 2 n Výkonní jednotka Výkonní jednotka
1-11 10. Přednáška Vektorový procesor typy instrukcí 3 gather (sběr) VL reg. V 0 V 1 M data/ adr. vektor paměť Load Reg. V 4 4 2 600 400 200 100 300 101 6 250 400 102 Paměť M Store A 0 0 200 500 103 600 104 100 100 105 Proudově pracující L/S jednotky Bázová adresa 250 106
1-12 10. Přednáška Vektorový procesor typy instrukcí 4 scatter (rozložení) maskování VL reg. V 0 V 1 M data/ adr. V 0 (testován) V 1 (výsledek) A 0 4 100 Bázová adresa 4 2 6 0 600 400 250 200 200 100 x 101 400 102 x 103 600 104 x 105 250 106 VL reg 8 0 20 0 5 0 11001010 0 24 VM reg. 13 01 03 06 07
1-13 10. Přednáška Vektorový procesor typy instrukcí DLXV 1 Aritmetické instrukce Instr. Operandy Operace Činnost ADDV V1,V2,V3 V1=V2 + V3 vektor + vektor ADDSV V1,F0,V2 V1=F0 + V2 skalar + vektor MULTV V1,V2,V3 V1=V2 x V3 vektor x vektor MULSV V1,F0,V2 V1=F0 x V2 skalar x vektor SUBV V1,V2,V3 V1=V2 V3 vektor vektor SUBVS V1, V2, F0 V1=V2 F0 vektor skalar SUBSV V1,F0,V2 V1=F0 V2 skalar vektor DIVV V1,V2,V3 V1=V2 / V3 vektor vektor DIVVS V1, V2, F0 V1=V2 / F0 vektor skalar DIVSV V1,F0,V2 V1=F0 / V2 skalar vektor
1-14 10. Přednáška Vektorový procesor typy instrukcí DLXV 2 Load / store instrukce Instr. Operandy Operace Činnost LV V1,R1 V1=M[R1..R1+63] load, stride=1 LVWS V1,(R1,R2) V1=M[R1..R1+63xR2] load, stride=r2 LVI V1,(R1,V0) V1=M[R1+V0(i),i=0..63] nepř.("gather") SVWS (R1,R2), V1 M[R1..R1+63xR2] = V1 store, stride=r2 SVI V1,(R1,V0) M[R1+V0(i),i=0..63] = V1 nepř.( scatter") CVI V1,R1 V1 =compr((i*r1) & VM) vytváří index vektor MOVI2S VLR,R1 Vec. Len. Reg. = R1 urči délku vektoru MOVS2I R1,VLR R1 = Vec. Len. Reg. R1 = délka vektoru MOV VM,R1 Vec. Mask = R1 vytváří mask. vektor
1-15 10. Přednáška Operace s pamětí - adresace Load/store operace přesouvají skupiny dat mezi registry a pamětí 3 typy adresace: Unit stride (jednotkový krok) = nejrychlejší Non-unit stride (konstatní krok) Indexed (indexový)=(gather-scatter) Vhodný pro řídké rozložení dat vektor stride Sousedící prvky vektoru v paměti nejdoucí po sobě do 10 i = 1,100 do 10 j = 1,100 A(i,j) = 0.0 do 10 k = 1,100 10 A(i,j) = A(i,j)+B(i,k)*C(k,j)
1-16 10. Přednáška Operace s pamětí vektor stride 1 Přístup k prvkům B nebo C v paměti není sekvenční Stride: vzdálenost sousedících elementů jednoho vektoru zapsaných v paměti vektor (cache - unit stride) LVWS (load vector with stride) instrukce Stride mohou způsobit konflikty bank (např.: stride = 32 a 16 bank) v[0] = M[x] Unit stride v[1] = M[x+1] v[n-1] = M[x+n-1] x v[0] v[4] v[1] v[5] v[2] v[6] v[3] v[7] Paměťové banky
1-17 10. Přednáška Operace s pamětí vektor stride 2 Konstantní stride v[0] = M[x] v[1] = M[x+s] x v[n-1] = M[x+(n-1)*s] v[0] v[2] v[4] v[6] S=2 v[1] v[3] v[5] v[7] Paměťové banky Příklad: 16 pam. modulů, čtecí latence = 12 taktů načíst 64-elementů vektoru se a) stride = 1 a b) stride = 32 Řešení: a) doba trvání: 12 + 63 = 75 taktů b) doba trvání: 12 x 64 = 768 taktů každý přístup koliduje s předchozím
1-18 10. Přednáška DAXPY loop Y = a X + Y - skalár vs. vektor Mějme vektory X, Y délky 64 elementů a skalár a DLX kód 600 vykonaných instrukcí MULD musí čekat na LD ADDD musí čekat na MULD SD musí čekat na ADDD LD F0,a ADDI R4,Rx,#512 ;last address to ld lp: LD F2, 0(Rx) ;load X(i) MULTD F2,F0,F2 ;a*x(i) LD F4, 0(Ry) ;load Y(i) ADDD F4,F2, F4 ;a*x(i) + Y(i) SD F4,0(Ry) ;store into Y(i) ADDI Rx,Rx,#8 ;inc. index to X ADDI Ry,Ry,#8 ;inc. index to Y SUB R20,R4,Rx ;compute bound BNZ R20,lp ;check if done DAXPY: malá část Linpack benchmarku, double precision
1-19 10. Přednáška DAXPY loop Y = a X + Y - skalár vs. vektor 64 vektorových operací + Bez režie cyklu a také 64x méně pipeline hazardů DLXV kód LD F0,a ;load scalar a LV V1,Rx ;load vector X MULTS V2,F0,V1 ;vector-scalar mult. LV V3,Ry ;load vector Y ADDV V4,V2,V3 ;add SV Ry,V4 ;store the result DLX vs. DLXV 578 (2+9*64) vs. 321 (1+5*64) operací 1.8x 578 (2+9*64) vs. 6 instrukcí 96x
1-20 10. Přednáška Vektorové proudové zpracování (pipeline) 1 Bez datových hazardů - stalls Není potřeba speciální HW na řešení stalls
1-21 10. Přednáška Vektorové proudové zpracování (pipeline) 2 Paralelní výpočet Bez datových hazardů -stalls Všechno nebo část je možné vykonávat paralelně
1-22 10. Přednáška Vektorové proudové zpracování (pipeline) 3 Paralelní & proudové zpracování
1-23 10. Přednáška Vektorové proudové zpracování (pipeline) 4 Chaining (řetězení) Způsob forwardingu rozšířeného na vektorové registry MULV V1, V2, V3 ; ADDV může začít hned když je V1(1) dostupné ADDV V4, V1, V5 MULV ADDV Bez řetězení Chaining Zkráceně MULV ADDV MULV
1-24 10. Přednáška Doba vektorových výpočtů 1 Time (čas) = f(vektorová délka, datové závislosti, strukt. hazardy) Initiation rate (četnost spouštění): míra schopnosti FU zpracovat více vektorových elementů současně (= # lanes; obyčejně 1, nebo 2 na Cray T-90) Convoy (konvoj): množina vektorových instrukcí, které mohou začít vykonávat v tom samém čase (žádné strukt. nebo datové hazardy), konvoje se nepřekrývají Chime: přibližný čas pro vektorovou operaci m convoys take m chimes; když délka vektorů je n, potom potřebuje přibližně m x n taktů na provedení výpočtu (ignoruje se overhead; dobra aproximace pro dlouhé vektory) 1: LV V1,Rx ;load vector X DLXV kód 2: MULV V2,F0,V1 ;vector-scalar mult. LV V3,Ry ;load vektor Y 3: ADDV V4,V2,V3 ;add Konvoje bez řetězení 4: SV Ry,V4 ;store the result
1-25 10. Přednáška Doba vektorových výpočtů 2 Předpokládejme: Frekvence, se kterou vektorová jednotka zpracuje operandy a vypočítá výsledky = 1/clock cycle Kombinovaná vektorová funkce (convoy) je provedena přibližně za n taktů Řetězení dat závislé instrukce Startovací čas (úměrný pipeline latence) konvoj 1 Jednotka takty konvoj 2 L/S 12 (1 x L/S access pipes) konvoj 3 12 7 n-1= 63 ADD 6 12 6 n-1= 63 MULT 7 12 n-1= 63 DIV 20 Konvoje s řetězením Jen 1 paměťová pipe 1: LV V1,Rx MULV V2,F0, V1 2: LV V3,Ry ADDV V4,V2,V3 3: SV Ry,V4 36 + 13 + 3 x n = 238 taktů 238/n = 3.72 taktů / element
1-26 10. Přednáška Doba vektorových výpočtů 3 1: LV V1,Rx MULV V2,F0, V1 LV V3,Ry ADDV V4,V2,V3 SV Ry,V4 2 load pipes & 1 store pipe Konvoj s řetězením konvoj 1 12 7 n-1 = 63 T(n) = 12 + 7 + 6 +12 + n = 37 + n 100/n = 1.56 taktů / element lim T ( n) / n = 1 n 12 6 n-1 = 63 12 n-1 = 63
1-27 10. Přednáška Délka vektoru Co dělat v případě, že vektorová délka není přesně 64 (DLXV)? vektor-length register (VLR) řídí vektorové operace podle délky vektorů jako: vektor load/store. (délka vektoru kapacita vektorového registrů ) do 10 i = 1, n 10 Y(i) = a * X(i) + Y(i) Neznáme n dokud program běží! Může se měnit v průběhu provádění programu n > max. vektor length (MVL)? vektor je delší než MVL strip mining technika strip vektorový segment, takový, že každý vektorová operace je vykonávána pro velikost MVL
1-28 10. Přednáška Délka vektoru strip mining Strip mining: generování takového kódu, že každá vektorová operace je prováděna pro velikost MVL 1. smyčka provádí n mod MVL část vektoru, pro zbytek výpočtu je VL = MVL low = 1 VL = (n mod MVL) /*nelezení zbývající části*/ do 1 j = 0, (n / MVL) /*vnější smyčka*/ do 10 i = low, low+vl-1 /*výpočet pro VL*/ Y(i) = a*x(i) + Y(i) /*výpočet*/ 10 continue low = low+vl /*start dalšího vektoru*/ VL = MVL /*délka pro zbytek výpočtu*/ 1 continue Vektorové části: 1. Segment má (n mod MVL) prvků n/mvl segmentů má každý MVL prvků
1-29 10. Přednáška Výkonnosní rovnice f = taktovací frekvence, n = vektorová délka, c = # konvojů T START = doba potřebná pro start, T LOOP = čas potřebný pro strip mining # taktů pro délku vektoru n T(n) = n /MVL x (T START + T LOOP ) + n x c Příklad: DAXPY na DLXV 200 MHz, n = 200, T START = 37, T LOOP = 15, c = 3 Řešení: T(n) = n /64 x (37 + 15) + n x 3 = 808 taktů 808*5 ns = 4.04 µs 808/n = 4.04 taktů / element
1-30 10. Přednáška Vektorová metrika R : MFLOPS odhadnuta na nekonečně dlouhém vektoru reálné problémy nemají nekonečně dlouhé vektory a navíc čas potřebný pro nastartování mají větší N 1/2 : vektorová délka potřebná pro dosažení poloviny R hodná pro měření vlivu času potřebného pro nastartování N V : vektorová délka potřebná pro učinění vektorového zpracování rychlejším než zpracování sekvenční skalární mód zahrnuje čas potřebný pro start, a také kvalitu propojení; vyjadřuje zrychlení skalárního zpracování oproti vektorovému
1-31 10. Přednáška Podmíněné vykonávání instrukcí Předpokládejme: do 100 i = 1, 64 if (A(i).ne. 0) then A(i) = A(i) B(i) endif 100 continue vector-mask control -- řízení pomocí maskování se provádí pomocí nějakého Booleovského vektoru: kde vector-mask register je načten z vektorového testu, vektorová instrukce se provádí pouze na těch vektorových elementech, pro které je na stejné pozici vector-mask registru logická 1.
1-32 10. Přednáška Výhody vektorového zpracování Lehce získat velký výkon; n operací: nezávislé používají stejnou funkční jednotku přístup k odděleným registrům přístup k sousledným paměťovým slovům nebo ke slovům se známým vzorem možnost využívat velké propustnosti při přístupu do paměti skrytá paměťová latence (a další typy latencí) Scalability (škálovatelnost): možnost zvýšit výkonnost když máme k dispozici více HW! Compact: zápis n operací s 1 krátkou instrukcí (v. VLIW) Predictable: reálný výkon vs. Statistická pravděpodobnost (cache) Multimedia: možnost výběru: N * 64b, 2N * 32b, 4N * 16b, 8N * 8b Vyspělost: vývoj překladačů Nevýhody: není in?!
1-33 10. Přednáška Aplikace Jsou ohraničené vědeckými výpočty? Multimedia processing ((de)compress, graphics, audio synth, image proc.) Standardní benchmarková jádra (násobení matic, FFT, konvoluce, řazení) Ztrátová komprese (JPEG, MPEG video a audio) Bezeztrátová komprese (Zero removal, RLE, Differencing, LZW) Kryptografie (RSA, DES/IDEA, SHA/MD5) Rozeznávání řeči a písma OS/Networking (memcpy, memset, parity, checksum) Databáze (hash/join, data mining, image/video serving) Language run-time support (stdlib, garbage collection) SPECint95
1-34 10. Přednáška Záludnosti Soustředění se na získání co největší výkonnosti a opomenutí času na startovací N V (délka rychlejší než skalár) > 100! Zvětšování výkonnosti bez znalosti Amdahlova zákona Slušná výkonnost, ale problém se šířkou paměťového přenášeného pásma s pamětí MMX?
1-35 10. Přednáška Vektorové počítače - shrnutí Alternativní model zahrnující velkou latenci paměti, nespoléhá na cache jako Out-of-Order, superskalární a VLIW architektury Mnohem jednodušší na hardware: výkonnější instrukce, předvídatelnější přístupy do paměti, méně hazardů, méně skoků, méně špatně předpovězených skoků, Kolik % výpočtu je vektorizovatelných? Hodí se vektorová architektura na nové aplikace, jako multimédia, DSP?