Számítógép Architektúrák

Hasonló dokumentumok
SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Számítógép Architektúrák

Heterogén számítási rendszerek

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

egy szisztolikus példa

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Számítógép Architektúrák

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

Számítógépek felépítése

SzA19. Az elágazások vizsgálata

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Számítógép Architektúrák

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

Számítógép Architektúrák

Számítógép felépítése

Adatok ábrázolása, adattípusok

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

Processzor (CPU - Central Processing Unit)

Operandus típusok Bevezetés: Az utasítás-feldolgozás menete

Számítógép Architektúrák

Számítógépek felépítése, alapfogalmak

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Számítógép Architektúrák

VLIW processzorok (Működési elvük, jellemzőik, előnyeik, hátrányaik, kereskedelmi rendszerek)

Magas szintű optimalizálás

Architektúra, megszakítási rendszerek

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

Digitális rendszerek. Utasításarchitektúra szintje

Digitális rendszerek. Mikroarchitektúra szintje

Számítógép architektúrák. A mai témák. A teljesítmény fokozás. A processzor teljesítmény növelése

FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Bevezetés az informatikába

Labor gyakorlat Mikrovezérlők

Labor gyakorlat Mikrovezérlők

VEZÉRLŐEGYSÉGEK. Tartalom

Párhuzamos és Grid rendszerek

A mai témák. Számítógép architektúrák. CISC és RISC. A teljesítmény fokozás. További előnyök. A RISC gondolat

Hardver Ismeretek IA32 -> IA64

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Számítógép architektúra

Összetett feladatok megoldása

GPU Lab. 3. fejezet. Az X86 Utasításkészlet. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Számítógép Architektúrák

Grafikus csővezeték 1 / 44

Heterogén számítási rendszerek

Assembly. Iványi Péter

ARM Cortex magú mikrovezérlők

Vezérlésfolyam gráf és X86 utasításkészlet

Grafikus processzorok általános célú programozása (GPGPU)

Számítógép architektúrák I. Várady Géza

Digitális rendszerek. Digitális logika szintje

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Számítógépek felépítése, alapfogalmak

Mikrorendszerek tervezése

Csoportos üzenetszórás optimalizálása klaszter rendszerekben

Mintavételes szabályozás mikrovezérlő segítségével

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

Digitális technika HF2 Elkészítési segédlet Gépi szintű programozás

Digitális technika VIMIAA01

Assembly Utasítások, programok. Iványi Péter

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Számítógép architektúrák

Aritmetikai utasítások I.

Informatika érettségi vizsga

1. Jelölje meg az összes igaz állítást a következők közül!

Központi vezérlőegység

Az INTEL D-2920 analóg mikroprocesszor alkalmazása

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Matematikai programok

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Nagy Gergely április 4.

Architektúra, cache. Mirıl lesz szó? Mi a probléma? Teljesítmény. Cache elve. Megoldás. Egy rövid idıintervallum alatt a memóriahivatkozások a teljes

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

Számítógép architektúrák. A processzor teljesítmény növelése

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

Számítógép Architektúrák I-II-III.

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Komputeralgebrai Algoritmusok

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

Labor gyakorlat Mikrovezérlők

Máté: Számítógép architektúrák

DSP architektúrák dspic30f család

I. el adás, A számítógép belseje

Összeadás BCD számokkal

Alaplap: közös kapcsolódási felület a számítógép részegységei számára

Programozás alapjai. 10. előadás

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

A mikroszámítógép felépítése.

Átírás:

SIMD feldolgozás Horváth Gábor 2016. május 20. Budapest docens BME Hálózati Rendszerek és Szolgáltatások Tanszék ghorvath@hit.bme.hu

Hatékony utasításfeldolgozás Hogyan tettük eddig hatékonnyá az utasítás-végrehajtást? Utasítás szintű párhuzamosítással Egyszerű pipeline: átlapoltuk több utasítás végrehajtását Szuperskalár: a CPU több, általa párhuzamosíthatónak talált utasítást hajt végre egyszerre VLIW/EPIC: a CPU több, a fordító / programozó által párhuzamosíthatónak talált utasítást hajt végre egyszerre Megvannak a korlátai: Minél több utasítás áll feldolgozás alatt egyszerre, annál nagyobb a sansz az egymásrahatásra Sok műveleti egység sok forwarding út kell Ciklusidő nem lehet tetszőlegesen rövid Időnként becslés / spekuláció szükséges ha rosszul sikerül, kárba ment egy csomó idő 2

Hatékony utasításfeldolgozás Ennyi korlát mellett miért szeretjük az utasításszintű párhuzamosítást? Mert egyszerű programozni! A programozó Fejében folyamatábra Szekvenciális algoritmust ír Skalár változókon A párhuzamosítási lehetőségeket a CPU és/vagy a fordító fedi fel Módja: függőségi analízis, adatáramlásos elv El van rejtve a programozó elől 3

Flynn taxonómia Flynn felosztása az utasítások és adatok viszonya szerint: SISD (single instruction, single data): Egy utasítássorozat végrehajtása skalár adatokon Ezt tanultuk eddig SIMD (single instruction, multiple data) Egy utasítássorozat több adaton végez műveletet egyszerre Vektorprocesszorok/tömbprocesszorok, stb. Ezt tanuljuk meg ma MIMD (multiple instruction, multiple data) Több utasítássorozat több adaton dolgozik Multiprocesszoros rendszerek Ezt tanuljuk meg hamarosan MISD (multiple instruction, single data) Hibatűrő rendszerekben 4

Vektorprocesszorok 5

Vektorprocesszorok Klasszikus skalár adattípus és műveletek mellett / helyett Vektor adattípus Vektorkezelő utasítások Minden modern szuperszámítógép ilyen 6

Példa C program: for (i0; i<64; i++) C[i] A[i] + B[i]; Klasszikus (skalár) megoldás: R4 64 loop: D1 MEM[R1] D2 MEM[R2] D3 D1 + D2 MEM[R3] D3 R1 R1 + 8 R2 R2 + 8 R3 R3 + 8 R4 R4 1 JUMP loop IF R4!0 Vektoros megoldás: VLR 64 V1 MEM[R1] V2 MEM[R2] V3 V1 + V2 MEM[R3] V3 7

Példa Miért is jobb vektorprocesszorral? Rövidebb, tömörebb kód Nincs szükség ciklusra! Mi a baj a ciklussal? Minden körben újra és újra» Le kell hívni» Dekódolni» Végrehajtani a ciklusmag utasításait. Minden körben procedurális egymásrahatás» 64-szer kell elágazásbecslést végezni! A vektorműveletek implicit feltételezik, hogy a vektorelemek függetlenek Sok műveleti egységgel vagy/és igen mély pipeline-al nagy teljesítmény érhető el 8

Vektorprocesszorok felépítése Típusok: Regiszter-regiszter Memória-memória Mostantól csak regiszter-regiszter: 9

Vektorprocesszorok működése Miért csak a skalár operandusoknak jár cache? Vektorok-műveleteken máshogy gyorsítunk: Spéci memóriakezeléssel Miért lassú egy skalár memóriaolvasás? Cím kiadás és adat megérkezése között több órajelciklus telik el Miért szerencsések a vektor memóriaműveletek? Vektor beolvasás: fix (nagy) számú memóriaművelet Kiadom az egyik elem címét Következő ciklusban még nem jön meg, de attól még kiadhatom egy másik elem címét Stb. pipeline-szerű megoldás Ehhez kell, hogy az egymás utáni elemek külön memória-bankban legyenek 10

Fésüs címzés Bank 1 0 Órajel 2 3 4 5 1 15636 2 3 4 5 adat[0] 15640 15648 15652 6 15656 7 15660 8 15664 9 15668 10 adat[4] 15672 adat[5] 15676 adat[6] adat[7] 11 12 15680 13 adat[1] 15644 15684 adat[2] adat[2] adat[3] 11

Műveleti egységek Vektorműveletek gyorsítása: Műveleti egységek többszörözésével Vektorelemek függetlenek pl. 4 műveleti egység egyszerre 4 elem számolása Mély adat-pipeline alkalmazásával Adatpipeline? Az mi? Lebegőpontos számok: Szám (-1)s * c * bq Példa: lebegőpontos összeadás (4 fázis): Ellenőrizzük, valamely operandus nulla-e A 2 operandus azonos karakterisztikára hozása Összeadás elvégzése Eredmény normál alakra hozása 12

Adat-pipeline Példa: lebegőpontos szorzás (5 fázis) Ellenőrizzük, valamely operandus nulla-e Karakterisztikákat összeadjuk Mantisszákat összeszorozzuk Eredmény előjel bitjét előállítjuk Eredményt normál alakra hozzuk Ha egy vektorelemre az első fázis kész, rögtön kezdi a következő elemre is az első fázist futószalag 13

Adat-pipeline V2[0] V0[0]+V1[0] V2[1] V0[1]+V1[1] V2[2] V0[2]+V1[2] V2[3] V0[3]+V1[3] V2[4] V0[4]+V1[4] V2[5] V0[5]+V1[5] V2[6] V0[6]+V1[6] V2[7] V0[7]+V1[7] 1 2 3 4 5 6 7 8 9 10 A0 A1 A2 A3 A0 A1 A2 A3 A0 A1 A2 A3 A0 A1 A2 A3 A0 A1 A2 A3 A0 A1 A2 A3 A0 A1 A2 A3 A0 A1 A2 11 A3 14

Adat-pipeline 2 műveleti egységgel: 1 2 3 4 V2[0] V0[0]+V1[0] A0 A1 A2 A3 V2[1] V0[1]+V1[1] A0 A1 A2 A3 V2[2] V0[2]+V1[2] A0 A1 A2 A3 V2[3] V0[3]+V1[3] A0 A1 A2 A3 V2[4] V0[4]+V1[4] A0 A1 A2 A3 V2[5] V0[5]+V1[5] A0 A1 A2 A3 V2[6] V0[6]+V1[6] A0 A1 A2 A3 V2[7] V0[7]+V1[7] A0 A1 A2 A3 5 6 7 8 9 10 11 15

Adat-pipeline Nagyon fontos: Ez egy olyan pipeline, melyben Nincs egymásrahatás! Nem kell egymásrahatást vizsgáló és kezelő logika Emiatt tetszőleges mély lehet Emiatt tetszőleges széles lehet Egyetlen korlátozó tényező: Hány részfázisra tudunk bontani egy aritmetikai műveletet 16

Példa 1. Berkely T0 (Torrent-0, 1995) 32 hosszú regiszterek 1 sáv: 4 elem kezelése (ábrán 8 függőleges sáv) Minden sávban 2 ALU de csak az egyik tud szorozni 17

Példa 2. NEC SX-9 szuperszámítógép processzorra 2008-as év leggyorsabb szuperszámítógépe Német meteorológiai központ ezzel dolgozik (2 db) 2011-ben: 224 db vektorprocesszor + 7 TB memória 1 processzor: 256 hosszú vektorokat kezel 8 pipeline szervezésű műveleti egysége van Vektor ALU: 3.2 GHz Skalár egység (4 utas out-of-order): 1.6 GHz 18

Példa 2. A NEC SX-9 felépítése: 19

Vektorprocesszorok jellegzetes megoldásai 20

Strip-mining Támogatott vektor méret hardveresen kötött: MVL (Maximum Vector Length) Ritkán kell pont ekkora vektor Ha kisebbel számolunk: VLR beállítása (Vector Length Register) Kisebb VLR kisebb futási idő Ha nagyobbal számolunk: Vektorunk MVL méretű darabokra szeletelése Minden szeletre a művelet végrehajtása ez a Strip-mining 21

Strip-mining példa C kód: Vektorizálva: for (i0; i<n; i++) C[i] A[i] + B[i]; VLR R0 % MVL loop: V1 MEM[R1] V2 MEM[R2] V3 V1 + V2 MEM[R3] V3 R4 VLR * 8 R1 R1 + R4 R2 R2 + R4 R3 R3 + R4 R0 R0 VLR VLR MVL JUMP loop IF R0!0 22

Feltételes vektorműveletek Maszk regiszter: Ahol 0, arra az elemre a köv. vektorművelet nem vonatkozik C program: Vektorprocesszorral: for (i0; i<n; i++) if (B[i]>0) C[i] A[i] / B[i]; V1 MEM[R1] MASK V1>0 V0 MEM[R0] V2 V0 / V1 MEM[R2] V2 Kétféleképpen valósítható meg: Naív: Vektor ALU mindig minden elemre számol, de a maszkolt elemek eredményét nem tárolja Hatékony: A Load/Store és az ALU a maszkolt elemeket kihagyja gyorsabb végrehajtás 23

Művelet láncolás RAW egymásrahatások vektorprocesszorban is vannak: V1 MEM[R1] V3 V1 + V2 V5 V3 * V4 A forwarding vektorprocesszoros megfelelője: Művelet láncolás (vector chaining) Függő utasításnak nem kell megvárnia az előző utasítás végét Ahogy V1 első eleme megvan, V3 első eleme el is kezdhető Amint V3 első eleme megvan, V5 első eleme el is kezdhető 24

Műveletláncolás példa Utasítás 1 2 V1[0] MEM[R1+0] T0 T1 V1[1] MEM[R1+8] T0 T1 3 V1[2] MEM[R1+16] T0 T1 V1[3] MEM[R1+24] T0 T1 4 5 6 V1[4] MEM[R1+32] T0 T1 V1[5] MEM[R1+40] T0 T1 V3[0] V1[0]+V2[0] A0 A1 A2 V3[1] V1[1]+V2[1] A0 A1 A2 V1[6] MEM[R1+48] T0 T1 V1[7] MEM[R1+56] T0 T1 V3[2] V1[2]+V2[2] A0 A1 A2 V3[3] V1[3]+V2[3] A0 A1 A2 7 8 9... 25

Műveletláncolás példa Utasítás 1 2 3 4 5 6 7 8 9 V1[8] MEM[R1+64] T0 T1 V1[9] MEM[R1+72] T0 T1 V3[4] V1[4] + V2[4] A0 A1 A2 V3[5] V1[5] + V2[5] A0 A1 A2 V1[10] MEM[R1+80] T0 T1 V1[11] MEM[R1+88] T0 T1 V3[6] V1[6] + V2[6] A0 A1 A2 V3[7] V1[7] + V2[7] A0 A1 A2 V5[0] V3[0] * V4[0] M0 M1 M2 M3 V5[1] V3[1] * V4[1] M0 M1 M2 M3... 26

SIMD utasításkészlet-kiegészítések 27

SIMD utasításkészlet kiegészítések Vektor utasítások otthoni használatra is hasznosak Képfeldolgozási célokra 3D grafikai alkalmazásokban / játékokban Egyszerű tudományos alapfeladatok is jól vektorizálhatók Számos processzor támogat vektorműveleteket De attól még nem lesznek vektorprocesszorok! Nagyon kicsi a vektorméret (legjobb: 256 bites) Nincs VLR Nincs maszk regiszter Nincs művelet láncolás Nincs adat-pipeline Annyi műveleti egység van, amekkora a vektorméret 28

SIMD utasításkészlet kiegészítések Utasítások fajtái: Vektor-vektor műveletek: Inter-vektor: 2 vektor között. Eredmény: vektor pl. 2 vektor összeadása Intra-vektor: 1 vektor elemein. Eredmény: skalár pl. vektor elemeinek összeadása Vektorelemek átrendezése (shuffling) Skalár-vektor műveletek: pl. minden elem megszorzása egy skalárral Vektor load/store műveletek: Memória vektorregiszterek közötti adatmozgatás 29

SIMD utasításkészlet kiegészítések Vektor kieg. Utasításkészlet Vekt.reg. száma...hossza Elemek típusa MMX x86 8 64 bit Int: 8x8, 4x16, 2x32 bit 3DNow x86 8 64 bit Float: 2x32 bit SSE x86/x64 8 128 bit Float: 4x32 bit SSE2-4 x86/x64 8/16 128 bit Int: 16x8, 8x16, 4x32 bit. Float: 4x32, 2x64 bit AVX x86/x64 16 256 bit Float: 8x32, 4x64 bit AltiVec Power 32 128 bit Int: 16x8, 8x16, 4x32 bit Float: 4x32 bit NEON ARM 32/16 64/128 bit Int: 8x8, 4x16, 2x32 bit Float: 2x32 bit 30

SIMD műveletek magas szintű nyelven Az SIMD műveletek magas szintű nyelvből is elérhetők! intrinsic utasítások Platformfüggő Használat: Megfelelő C header fájlok beemelésével Vektor adatípusok jelennek meg ( m128, float32x4_t) Vektorokon dolgozó függvények jelennek meg 31

Példa SIMD utasításkészletre Színtelítettség növelése, SIMD nélkül: void saturate () { float r, g, b, p, val; for (int i0; i<height*width; i++) { r *srcr; g *srcg; b *srcb; p sqrt (r*r + g*g val p + (r p) * *dstr val>255.0? val p + (g p) * *dstg val>255.0? val p + (b p) * *dstb val>255.0? + b*b); 1.5f; 255.0 : val<0? 0 : val; change; 255.0 : val<0? 0 : val; change; 255.0 : val<0? 0 : val; srcr++; srcg++; srcb++; dstr++; dstg++; dstb++; } } 32

Példa SIMD utasításkészletre Színtelítettség növelése, SSE2 utasításkészlettel: #include <xmmintrin.h> void saturatesse2 () { r1 r1 r1 r1 r1 float p, val; m128 r0, r1, r2, r3, r4; const m128 r5 {1.5f, 1.5f, 1.5f, 1.5f}; const m128 r6 {0.0f, 0.0f, 0.0f, 0.0f}; const m128 r7 {255f, 255f, 255f, 255f}; _mm_sub_ps _mm_mul_ps _mm_add_ps _mm_min_ps _mm_max_ps (r1, (r1, (r1, (r1, (r1, r0); r5); r0); r7); r6); _mm_store_ps (dstr, r1); r2 r2 r2 r2 r2 for (int i0; i<height*width; i+4) { r1 _mm_load_ps (srcr); r0 r1; r0 _mm_mul_ps (r0, r1); _mm_sub_ps _mm_mul_ps _mm_add_ps _mm_min_ps _mm_max_ps (r2, (r2, (r2, (r2, (r2, r0); r5); r0); r7); r6); _mm_store_ps (dstg, r2); r2 r4 r4 r0 _mm_load_ps (srcg); r2; _mm_mul_ps (r4, r2); _mm_add_ps (r0, r4); r3 r4 r4 r0 _mm_load_ps (srcb); r3; _mm_mul_ps (r4, r3); _mm_add_ps (r0, r4); r3 r3 r3 r3 r3 _mm_sub_ps _mm_mul_ps _mm_add_ps _mm_min_ps _mm_max_ps (r3, (r3, (r3, (r3, (r3, r0); r5); r0); r7); r6); _mm_store_ps (dstb, r3); srcr+4; srcg+4; srcb+4; dstr+4; dstg+4; dstb+4; r0 _mm_sqrt_ps (r0); } } 33

Példa SIMD utasításkészletre Színtelítettség növelése, NEON utasításkészlettel: #include <arm_neon.h> void saturateneon () { r1 r1 r1 r1 r1 float p, val; float32x4_t r0, r1, r2, r3, r4; const float32x4_t r5 vdupq_n_f32 (1.5f); const float32x4_t r6 vdupq_n_f32 (0.0f); const float32x4_t r7 vdupq_n_f32 (255.0f); vsubq_f32 vmulq_f32 vaddq_f32 vminq_f32 vmaxq_f32 (r1, (r1, (r1, (r1, (r1, r0); r5); r0); r7); r6); vst1q_f32 (dstr, r1); r2 r2 r2 r2 r2 for (i0; i<height*width; i+4) { r1 vld1q_f32 (srcr); r0 vmulq_f32 (r1, r1); r2 vld1q_f32 (srcg); r4 vmulq_f32 (r2, r2); r0 vaddq_f32 (r0, r4); vsubq_f32 vmulq_f32 vaddq_f32 vminq_f32 vmaxq_f32 (r2, (r2, (r2, (r2, (r2, r0); r5); r0); r7); r6); vst1q_f32 (dstg, r2); r3 vld1q_f32 (srcb); r4 vmulq_f32 (r3, r3); r0 vaddq_f32 (r0, r4); r3 r3 r3 r3 r3 vsubq_f32 vmulq_f32 vaddq_f32 vminq_f32 vmaxq_f32 (r3, (r3, (r3, (r3, (r3, r0); r5); r0); r7); r6); r0 vrecpeq_f32 (vrsqrteq_f32 (r0)); vst1q_f32 (dstb, r3); srcr+4; srcg+4; srcb+4; dstr+4; dstg+4; dstb+4; } } 34

Példa SIMD utasításkészletre Futási idők: Intel Core i7-2600 Intel Pentium 4 ARM Cortex A9 SIMD nélkül 15,166 ms SSE2 3,829 ms AVX 3,698 ms SIMD nélkül 139,758 ms SSE2 36,355 ms SIMD nélkül 155,012 ms NEON 44,026 ms 35

Tömbprocesszorok 36

Klasszikus tömbprocesszorok SIMD egy másik formája Elemei: 1 db vezérlőegység Sok-sok feldolgozóegység Lokális memóriával Többiek felé összeköttetéssel Működése: Vezérlőegység minden ciklusban kiad egy utasítást Üzenetszórással, megkapja minden feldolgozóegység Minden feldolgozóegység végrehajtja a saját adatain (maszkregiszter van, aki nincs engedélyezve, az nem csinál semmit) 37

Klasszikus tömbprocesszorok Más és más feladat más és más összeköttetéseket igényel Célszerű konfigurálhatóvá tenni 38

Klasszikus tömbprocesszorok Hatékonysági problémák, ha sok a feldolgozóegység: Üzenetszórással mennek ki az utasítások: Sokáig tart, mire mindenkihez elér Hosszú vezetékek: fogyasztás, melegedés Távoli feldolgozóegységek adatcseréje: Sokáig tart, mire célba ér Hosszú vezetékek: fogyasztás, melegedés Nagy teljesítményű, sok feldolgozóegységgel rendelkező tömbprocesszorhoz speciális struktúra kell! 39

Szisztolikus tömbprocesszorok Olyan speciális tömbprocesszorok, melyekben Minden feldolgozóegység csak a közvetlen szomszédokkal van összekötve Feldolgozóegységek közötti kommunikációt közös órajel hajtja Nincs központi vezérlőegység: minden ciklusban mindenki ugyanazt a műveletet hajtja végre A tömb csak a széleken kapcsolódik a külvilághoz Működés: Minden órajelciklusban mindenki Elveszi a szomszédoktól a bemenetét Végrehajtja a műveletet (mindenki ugyanazt) Továbbítja a szomszédainak az eredményt 40

Szisztolikus tömbprocesszorok Tipikus elrendezések: 41

Szisztolikus tömbprocesszorok Kedvező tulajdonságok: Rendkívül rövid jelutak Kis fogyasztás Magas órajel Gyártástechnológiai előnyök Ismétlődő, szabályos mintázatot hatékonyan lehet gyártani Könnyen bővíthető: csak a széleihez kell tenni pár új feldolgozóegységet Kedvezőtlen tulajdonságok: Globális órajelhálózat Nagy rendszerekben egyesekhez hamarabb ér az órajel, mint másokhoz kavarodást okozhat 42

Hullámfront tömbprocesszorok Hullámfront tömbprocesszorok: Mint a szisztolikus, de: Teljesen aszinkron Nincs órajel Adatfolyam alapú: Egy feldolgozóegység akkor végzi el a műveletet, ha minden input megjött Szomszédok közötti adatcsere összetettebb protokollt igényel Cserébe megússzuk az órajel-hálózatot még nagyobb sebesség érhető el 43

Tömbprocesszorok tervezése 44

Tömbprocesszorok tervezése Többé-kevésbé mechanikus eljárás Példa: vektor-mátrix szorzás N c A b ci j1 Ai, j b j C kód: for (int i0; i<m; i++) { C[i] 0; for (int j0; j<n; j++) C[i] C[i] + A[i][j] * B[j]; } Hagyományos processzoron N*M lépés 45

Tömbprocesszorok tervezése Tervezési lépések: 1) Teljes függőségi gráf felrajzolása 2) Lokalizált függőségi gráf felrajzolása 3) Projekció szisztolikus tömbprocesszorra 4) Ütemezés megadása 46

Projekció diagonál irányban, ütemezés 61

Projekció diagonál irányban, ütemezés 62

Projekció diagonál irányban, ütemezés 63

Projekció diagonál irányban, ütemezés 64

Projekció diagonál irányban, ütemezés 65

Projekció diagonál irányban, ütemezés 66

Projekció diagonál irányban, ütemezés 67

Projekció diagonál irányban, ütemezés 68

Projekció diagonál irányban, ütemezés 69

Projekció diagonál irányban, ütemezés 70

Projekció diagonál irányban, ütemezés 71

Projekció diagonál irányban, ütemezés 72

Tömbprocesszorok hibatűrése 74

Tömbprocesszorok hibatűrése Tömbprocesszorok hibatűrése: Rossz. Ha valaki elromlik, rossz az eredmény kuka Van, ahol fontos a hosszú ideig hibamentes működés (műholdak, nehezen megközelíthető helyek, stb.) Jó lenne tartalék feldolgozóegységeket betenni De akkor átkonfigurálhatóvá kell tenni az összeköttetéseket 75

Tömbprocesszorok hibatűrése Egy lehetséges megoldás: Üzemi és tartalék feldolgozóegységek Kapcsoló csomópontok 76

Tömbprocesszorok hibatűrése Átkonfigurálás: Kapcsolók 4-féle lehetséges állásba állíthatók Rossz feldolgozóegységek rövidzárhatók Input rögtön továbbmegy a kimenetre 77

Példa hibaállapotra 78

SIMD konklúzió Nagy számítási teljesítmény egy módja: Több adaton is elvégezzük ugyanazt az utasítást Két SIMD megoldást néztünk Vektorprocesszort Vektorregiszterek + vektorműveletek Speciális, vektorprocesszorra jellemző technikák Tömbprocesszort A szisztolikus és a hullámfront fajtája a nyerő Nem könnyű ráhúzni egy algoritmust De ha sikerül, nincs az a CPU, amire ne verne pár nagyságrendet 79