Architektura počítačů Paralelní zpracování http://d3s.mff.cuni.cz http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty faculty of of mathematcs mathematcs and and physics physics
Paralelní zpracování Dosavadní metody paralelizace Paralelizmus na úrovni instrukčních kroků Pipelining Paralelizmus na úrovni instrukcí Superskalární zpracování Další metody paralelizace Paralelizmus na úrovni dat Vektorové zpracování Masivně paralelní zpracování Paralelizmus na úrovni procesů 2/27
Proč je těžké psát paralelní programy? Paralelní program musí být rychlejší než sekvenční Jinak nedává smysl ho psát Očekává se, že bude škálovat s počtem procesorů S rostoucím počtem procesorů stále obtíněějí Plánování, synchronizace, load-balancing Připomenutí Amdahlův zákon Limit teoretckého zrychlení sekvenčního algoritmu při paralelním zpracování n... počet paralelně běíících vláken B <0, 1>... poměrná část neparalelizovatelné část algoritmu Speedup(n)= 1 (1 B) B+ n 3/27
Co brání zrychlování? Sekvenční část Jaký program mohu 90x zrychlit na 100 procesorech? Speedup(n)= 1 (1 B) B+ n n = 100, Speedup(n) = 90 B= Speedup (n) n 90 100 = =0.0012 99 90 ( n 1) Speedup (n) Sekvenční část můíe být pouze 0.1% programu. 4/27
Co brání zrychlování? Velikost problému (weak/strong scaling) Součet 10 proměnných (sekvenční) a součet dvou matc 10x10 (paralelní), čas na součet t. Na 1 procesoru: 100t + 10t = 110t Na 10 procesorech: (100/10)t + 10t = 20t Zrychlení 110t/20t = 5.5 (55% potenciálního zrychlení) Na 40 procesorech: (100/40)t + 10t = 12.5t Zrychlení 110t/12.5t = 8.8 (22% potenciálního zrychlení) Součet 10 proměnných a součet dvou matc 20x20. Na 1 procesoru: 400t + 10t = 410t Na 10 procesorech: (400/10)t + 10t = 50t Zrychlení 410t/50t = 8.2 (82% potenciálního zrychlení) Na 40 procesorech: (400/40)t + 10t = 20t Zrychlení 410t/20t = 20.5 (51% potenciálního zrychlení) 5/27
Co brání zrychlování? Load-balancing Součet 10 proměnných a součet dvou matc 20x20 na 40 procesorech. Předpoklad rovnoměrně rozdělené práce, tě. kaídý procesor vykonal 2.5% práce. Co kdyby ěeden procesor udělal 2x více (5%)? Jeden procesor udělá 20 součtů (5% ze 400), ostatních 39 se podělí o zbývaěících 380. Čas zpracování ěe Max (380t/39, 20t/1) + 10t = 30t Zrychlení klesá z 20.5 na 410t/30t = 14. Ostatních procesory ěsou vyuíity méně neí polovinu času, počítaěí pouze 380t/39 = 9.7t Co kdyby ěeden procesor udělal 5x více (12.5%)? Čas zpracování ěe Max (350t/39, 50t/1) + 10t = 60t Zrychlení klesá z 20.5 na 410t/60t = 7. Ostatních procesory ěsou vyuíity méně neí 20% času. 6/27
Flynnova taxonomie Architektura zpracování dat Michael J. Flynn (1966) SISDí Single Instructin, Single Data stream Tradiční skalární procesor (von Neumann) SIMDí Single Instructin, Multile Data streams Vektorový procesor MISDí Multile Instructin, Single Data stream [1] Potenciálně heterogenní systém odolný vůči výpadkům MIMDí Multile Instructin, Multile Data streams Víceprocesorový systém Programovací model pro MIMD: SPMD (Single Program Multple Data) Superskalární procesory na pomezí SISD/SIMD 7/27
Flynnova taxonomie (2) SIMD Instructons ALU Instructons MISD Data Data SISD Instructons ALU MIMD Instructons ALU ALU ALU ALU Data Data ALU ALU ALU 8/27
Vektorové zpracování Příkladí Sčítání tří dvojic jednobytových čísel Skalární zpracování for {0, 1, 2} i: mem_a[i] r1 (rizšíření na velikist sliva) mem_b[i] r2 (rizšíření na velikist sliva) add(r1, r2) r3 r3 mem_c[i] (restrikce na 8 bitů) Vektorové zpracování mem_a[0, 1, 2, 3] vr1 mem_b[0, 1, 2, 3] vr2 vector_add(vr1, vr2) vr3 (sčítání ii sližkách) vr3 mem_c[0, 1, 2, 3] 9/27
Vektorové zpracování (2) Vektorová rozšíření skalární instrukční sady IA-32 MMX (MultMedia extensiins, od Penta MMX) 64bitové registry MM0 aí MM7 (aliasy na FPU registry) 1 64bitový integer (ěen několik operací), 2 32bitový integer, 4 16bitový integer, 8 8bitový integer Logické operace, bitové posuny, sčítání, odčítání, násobení, porovnávání (vje po sloíkách), konverze formátů Saturační aritmetka Omezení výsledku na interval <min, max> 3DNow! (od K6-2) 2 32bitový single precision Floatng point aritmetka (po sloíkách), celočíselné průměrování, hledání maxima atd. 10/27
Vektorové zpracování (3) Vektorová rozšíření skalární instrukční sady IA-32/AMD64 SSE (Streaming SIMD Extensiins, od Penta III) SSE, SSE2, SSE3, SSSE3, SSE4, XOP, FMA4, CVT16 128bitové registry XMM0 aí XMM7, pozděěi aí XMM15 4 32bitový single precision 2 64bitový double precision, 2 64bitový integer, 4 32bitový integer, 8 16bitový integer, 16 8bitový integer Aritmetcké, logické, konverzní operace Kombinované aritmetcké operace (aritmetka po sloíkách do křííe apod.) Aritmetka s komplexními čísly Fused multply-add, permutace sloíek Výpočet CRC32, počet ěedničkových bitů 11/27
Vektorové zpracování (4) Vektorová rozšíření skalární instrukční sady IA-32/AMD64 AVX (Advanced Vectir Extensiins, od Sandy Bridge/Bulldozer) AVX2, AVX-512 (od Haswell) 256bitové registry YMM0 aí YMM15 AVX-512: 512bitové registry ZMM0 aí ZMM15 Tříoperandový formát instrukcí Power/PowerPC AltVec (od G4, POWER6) Přibliíně srovnatelné s SSE 12/27
Vektorové zpracování (5) Vektorová rozšíření skalární instrukční sady SPARC VIS (Visual Instructin Set, od UltraSPARC II) RISCová flozofe, ěednodujjí vektorové operace MIPS MDMX (MIPS Digital Media extensiin), MIPS-3D Přibliíně srovnatelné s MMX ARM Advanced SIMD/NEON Přibliíně srovnatelné s SSE 13/27
Víceprocesorové systémy Široké spektrum implementací Víceěádrové procesory Vlastně ěen důsledněěi oddělené pipelines superskalárního procesoru Některé část mohou být mezi ěádry stále sdílené (L2 cache) Víceprocesorové systémy Symmetric/Shared Memiry Multiricessing (SMP) Nezávislá obecná ěádra v oddělených pouzdrech Sdílený přístup do hlavní pamět (Unifirm Memiry Access, UMA) Specializované koprocesory Nezávislá ěádra, některá z nich velmi specializovaná (Cell) Nin-Unifirm Memiry Access (NUMA) Nezávislá ěádra s lokální hlavní pamět Přístup do nelokální pamět ěiného ěádra můíe být transparentní (ovjem draíjí) nebo netransparentní (řízen sofwarem) Clustery, některé typy cloudu (IaaS) 14/27
Masivně paralelní zpracování Základní myšlenka SIMD/MIMD architektura s (relatvně) ěednoduchými procesory a (relatvně) malou lokální pamět Omezená a řízená komunikace mezi procesory CM-1 Connecton Machine (1983) 65536 1bitových procesorů, kaídý 4 kb RAM Propoěovací síť topologie hyperkrychle Společná řídící logika, I/O procesor Vhodné pro extrémně dobře paralelizovatelné úlohy Umělá inteligence Symbolické manipulace [2] 15/27
Masivně paralelní zpracování (2) Evoluce grafckých procesorů (GPU) Původně koprocesory pro urychlování konkrétních grafckých operací Kreslení grafckých primitv (čáry, kruínice) Přesuny bloků obrazové pamět bez zásahu CPU (blit) Pozděěi implementace sloíitěějích operací pro 3D grafku Efektvní pipelining na úrovni ěednotlivých fází kreslení 3D scény Geometrické transformace Řejení viditelnost Mapování textur Úpravy na úrovni pixelů Algoritmy zadrátovány do hardware 16/27
Masivně paralelní zpracování (3) Evoluce grafckých procesorů (GPU) Programovatelný zásah do grafcké pipeline Vertex shaders, iixel shaders Původně ěen ěednoduchá a krátká sekvence vektorových operací (často bez moínost cyklů, omezené větvení) Paralelní aplikace steěného algoritmu na vjechny hrany scény (resp. vjechny pixely) současně První pokusy o vyuíit pro negrafcké výpočty Víceméně ěako vedleějí efekt velkého foatng-point výkonu Input Assembler Vertex Shader Geometry Shader Setup & Rasterizer Pixel Shader Raster Ops/ Out Merger 17/27
Masivně paralelní zpracování (4) Evoluce grafckých procesorů (GPU) General-Puriise Cimiutng GPU (GPGPU) Čím dál větjí část zadrátovaných grafckých algoritmů řejena SIMD kódem Masivně paralelní architektura Input Assembler Vertex Shader Unifed Processor Array Geometry Shader Setup & Rasterizer Pixel Shader Raster Ops/ Out Merger 18/27
Masivně paralelní zpracování (5) GeForce 8800 (NVIDIA Tesla) [4] 19/27
Masivně paralelní zpracování (7) GeForce 8800 (NVIDIA Tesla) Texture/Processor Cluster 2x Streaming Multprocessor 8x Streaming Processor 2x Special Functon Unit Texture Unit (texture cache) Streaming Processor 96 HW vláken 1024 32-bit FP registrů běžné FP operace Special Functon Unit transcendentní funkce interpolace atributů pixelů [4] 20/27
Masivně paralelní zpracování (8) [4] GeForce 8800 (NVIDIA Tesla) warp = skupina 32 vláken instrukce vykonána všemi vlákny ve 4 taktech plánování warpů podle dostupnost dat a priorit 21/27
Masivně paralelní zpracování (9) Odlišnost v cílech návrhu CPU a GPU CPU musí dobře zvládat různé typy úloh, ať uí paralelních, nebo sekvenčních u GPU se předpokládá (ideálně) datově paralelní úloha, vjechna vlákna vykonávaěí steěný program (kernel) GPU nepasuěe do Flynnovy taxonomie, v případě GPU se hovoří o SIMT datový paralelizmus identfkován dynamicky, na rozdíl od vektorového/simd zpracování (analogické k dynamické identfkaci instrukčního paralelizmu u superskalárních procesorů na rozdíl od VLIW) CPUí minimalizace latence pozorovatelná jedním vláknem Velké cache, hit rato > 99%, working set řádu ěednotek MB Jednotky/desítky vláken, sofstkované řízení GPUí maximalizace propustnost všech vláken Počet aktvních vláken omezen prostředky => velké mnoíství prostředků Masivní mult-threading maskuěe latence => malé cache, hit rato > 90% Working set v řádu stovek MB, nevykazuěe silnou časovou lokalitu Stovky vláken, sdílená řídící logika 22/27
Shrnut Aneb co si z předmětu odnést... Správné fungování vyšších vrstev abstrakce závisí na správném využit nižších vrstev abstrakce Vejkeré programy, ať uí ěsou napsány v čemkoliv, nakonec běíí ve stroěovém kódu na procesoru Základy vnitřního fungování procesoru se dají snadno pochopit Skutečné procesory se od těch z přednájky lijí ěen tm, íe několik set chytrých lidí mělo mnoho roků na přemýjlení, ěak z nich dostat maximum (za danou cenu) Občas je dobré podívat se do historie Nové inovatvní myjlenky stále přicházeěí, ale obvykle stoěí na dřívěějích zkujenostech, pokusech a omylech 23/27
Shrnut (2) Aneb co si z předmětu odnést... Moorův zákon není zákon Jeho udríování v platnost ěe pracné Neznamená automatcké zvyjování hrubého sekvenčního výkonu Je potřeba přemýjlet nad novými paradigmaty (paralelní zpracování) Zachytt výkonnost počítače nelze jedním číslem Občas ani dvě čísla nestačí Vídy ěe důleíité vědět, s ěakým workloadem pracuěi, zda ěeě můě benchmark správně aproximuěe, ěakou metriku vlastně optmalizuěi atd. 24/27
Shrnut (3) Aneb co si z předmětu odnést... Počítače jsou složeny jako stavebnice Sekvenční obvody, kombinační obvody, funkční bloky, logická hradla, logické operace Aplikační binární rozhraní (ABI) Sada konvencí společná hardwaru a sofwaru Kódování celých a necelých čísel, big/litle endian, kódování instrukcí, vyuíit registrů, vyuíit instrukční sady (volání podprogramů atd.) 25/27
Shrnut (4) Aneb co si z předmětu odnést... Optmalizace má největší účinek pro nejčastější případy Amdahlův zákon Pozor na marná očekávání Když nelze zvýšit hrubý výkon, je možné zvyšovat propustnost Vícecyklové zpracování, pipelining, paralelní zpracování, zpracování mimo pořadí, spekulatvní provádění, masivně paralelní architektury Na výkonnost se více či méně podíleěí vjechny část řetězce (programátor, překladač, procesor, paměťový subsystém atd.) Výkonnost programu na dnejních počítačích můíe extrémně ovlivnit (ne)správné vyuíit cache 26/27
Reference [1] [2] [3] [4] htp://upload.wikimedia.org/wikipedia/commons/0/0e/michael_flynn.ěpg htp://upload.wikimedia.org/wikipedia/commons/6/61/frostburg.ěpg D. A. Paterson, J. L. Hennessy. Computer Organizaton & Design. 5th ed., Elsevier, 2014 E. Lindholm et al. NVIDIA Tesla: A Unifed Graphics and Computng Architecture. IEEE Micro, 28(2):39-55, 2008 27/27