KIV/PPR Flashcards
Program, programový kód - definice
◦ statický popis výpočetního postupu, tj. co bude počítač provádět
◦ nemá stav
Assembler - definice
◦ Překladač do strojového kódu cílového procesoru
◦ I když formálně nesprávně, používá se i k označení jazyka symbolických adres, ve kterém budou některé ilustrativní příklady
x86/x86-64
◦ dokud neuvidíte, do čeho vlastně procesor nutíte, neznáte skutečné náklady kódu ve vyšším jazyku
Vlákno (fiber, thread, task) - definice
Thread - v kernel space, nejmenší jednotka plánovatelná schedulerem - preempitvní
Fiber - v user space, jejich vykonání není řízeno kernelem, naopak je samořízeno, fiber je přeplánován jen po zavolání yield - kooperativní
Task - Linux nedělá rozdíly mezi vláknem a procesem, vše je pro něj runnable task
◦ vykonávaný programový kód
◦ tj. aktivita v čase, která má svůj stav, který je určen
aktuálním místem v programu (CS:RIP),
obsahem registrů procesoru
a obsahem zpracovávaných dat
◦ vlákno v jednom časovém okamžiku běží pouze na jednom procesoru
Proces - definice
◦ Dynamická kolekce vláken => má stav daný vlákny
◦ Vždy obsahuje alespoň jedno vlákno, které vytvořil operační systém/interpret (např. JVM)
◦ Vlastní prostředky, které operační systém/interpret přidělil důsledkem činnosti některého vlákna
◦ Vlákna jednoho procesu mohou běžet současně, je-li k dispozici více než jeden procesor
Distribuovaná aplikace - definice
◦ Několik spolupracujících procesů
◦ Obvykle jsou distribuovány na uzly počítačové sítě
Jeden uzel má n procesorů
◦ V extrémním případě mohou být na jednom uzlu
Dříve, kdy ještě platilo 1 proces = 1 vlákno, se
spouštělo několik instancí jednoho programu
Paralelní výpočet - definice
◦ Buď vícevláknový program,
◦ Nebo distribuovaná aplikace
◦ Nebo kombinace obou
◦ Výpočet je dynamicky strukturován na procesy a vlákna
Paralelní program - definice
◦ Kód je staticky strukturován na podprogramy vláken
◦ Má deklarovaná sdílená data
Interakce + Synchronizace - definice
Interakce
◦ Spolupráce na úrovni vláken uvnitř procesů
◦ Spolupráce na úrovni procesů distribuované aplikace
◦ Výměna informací
Synchronizace
◦ Forma interakce
◦ Zajištění správné návaznosti operací
Symetrický multiprocesor (SMP)
Všechny procesory jsou identické
Vlákno může být alokováno na libovolný procesor
Pro plánovač OS je to jednodušší, než kdyby se procesory významně lišily
Front-Side Bus
◦ procesory sdílejí jednu sběrnici pro IO a paměť – uzké hrdlo
Point-To-Point
◦ Jednotlivé procesory jsou spojené přímo - odstraněné problému Front
Side Bus
◦ Hyper Transport Consortium (AMD)
◦ Intel QuickPath
NUMA
Non-Uniform Memory Access
DSM – Distributed Shared Memory
Další pokus o vylepšení škálovatelnosti, kde jedna sběrnice SMP systémů představuje limit
◦ Existuje několik sběrnic, které jsou vzájemně propojené
Zavádí pojem lokální a vzdálené paměti
Každý procesor má svůj „kus“ paměti
Doba přístupu do paměti procesorem se může lišit, podle toho, kde paměť fyzicky je => non-uniform
Problém, když proces odmigruje příliš daleko na jiný procesor
Asymetrický multiprocesor (ASMP)
Kromě sdílené paměti, každý procesor má vlastní lokální paměť a vlastní připojení I/O
◦ Každý procesor může mít jinou instrukční sadu
V extrémním případě na každém z nich běží jiný OS
OS nemůže alokovat libovolný proces na libovolný
procesor
Jednotlivé procesory mohou vykonávat specifické úkoly
Sdílená paměť může obsahovat pouze minimum dat
◦ Minimalizace úzkého hrdla sběrnice
- Buď integrovaná v procesoru -> část paměti vyhrazenu GPU část CPU
- Nebo dedikovaná -> má svojí paměť, výměna přes DMA
Multiprocesor s distribuovanou pamětí
Každý procesor má svou lokální paměť, sdílná paměť není
Každý uzel je v podstatě počítač s omezeným I/O
Komunikuje se zasíláním zpráv
Typické topologie jsou 2D cyklicky uzavřené mřížky, nebo n-rozměrná krychle
Výhodou je odstranění jedné sběrnice jako úzkého hrdla
Nevýhodou je však malá univerzálnost – výkonnost záleží na způsobu alokace procesů na uzly a použitém komunikačním schématu
Vhodné např. pro tzv. pipe-lines
Transputery - Occam
- Není stejné jako dedikovaná karta
- Více počítačů, komunikace po síti
Distribuovaný systém
De facto počítačová síť, která se může tvářit jako jeden stroj
Dědí problémy multiprocesoru s distribuovanou pamětí
Každý uzel je plnohodnotný počítač, na kterém může běžet několik procesů zároveň
Např. cluster
◦ Počítače propojené velmi rychlou lokální sítí
Vektorový paralelní počítač
Provádějí operace s vektory čísel na úrovni instrukcí
strojového kódu
Dříve doména superpočítačů jako Cray-1, dnes např.:
◦ MMX (Intel) – Matrix Math eXtension?
◦ SSE1-5 (Intel, AMD) – Streaming SIMD Extensions
◦ 3DNow! (AMD)
◦ AVX, AVX2, AVX-512 (Intel) – Advanced Vector Extensions
◦ AltiVec (IBM, Apple, Motorola)
- Vektorová instrukce = operace nad několika vektory místo čísly
Flynnova taxonomie
Single Data + Single Instruction = SISD
Single Data + Multiple Instruction = MISD
Multiple Data + Single Instruction = SIMD
Multiple Data + Multiple Instruction = MIMD
Uvedené jsou čtyři základní klasifikace podle Flynna
◦ Počet konkurenčně prováděných instrukcí
A někdy nesprávně používanému „programů“, např. SPMD, což ale není formálně správně právě podle Flynna
◦ Počet existujících dat (Data Streams)
SISD
Základní sériový přístup
Jeden princ, jedna princezna atp.
Urychlení:
◦ Turbo Boost – jestliže má procesor sníženou spotřebu energie a teplotu pod limity dané výrobcem, procesor dokáže dočasně zvýšit pracovní frekvenci a tím i výkon
◦ Využití jenom jednoho jádra to umožňuje
SIMD
Viz vektorový paralelní počítač
SIMT – Single Instruction, Multiple Threads
◦ Ta samá instrukce je zároveň provedena na několika procesorových jádrech
Thread of SIMD Instructions
◦ Např. GPGPU, když se vlákna povede správně naplánovat
Cílem je redukovat režii načítání identického kódu pro několik jader
(NVIDIA marketing)
Urychlení:
urychlení odpovídá velikosti vektoru, tj. počtu jeho prvků
◦ Analogicky SPMD a SIMT
MISD
Multiple Instruction (Program), Single Data Stream, linerání urychlení
Instruction: Používá se v tzv. Pipeline architektuře
◦ několik procesů zpracovává data v jednom datovém proudu
◦ Např. instrukční pipeline procesoru nebo analogicky montážní linka v továrně
Program: Používáno pro výpočty odolné proti poruchám (Fault Tolerant)
◦ Několik různých systémů zpracovává ty samá data a musejí se shodnout na výsledku – např. řízení letu raketoplánu, letadla, atd. – jedno o urychlení, ale o odolnost proti chybám
- Každá činnost dedikovaná jednotka, můžou jet paralelně
- Instrukce rozdělena na mikroinstrukce
- Analogie na výrobním pásu
- Urychlení x Redundance
Urychlení:
◦ Pipeline urychlení se může blížit počtu serverů v pipeline
◦ V případě fault-tolerant se výpočet neurychluje, ale duplikuje
MIMD
Procesory pracují asynchronně a nezávisle na sobě
Procesory buď mají sdílenou paměť,
◦ Programátorovi snáze srozumitelný přístup
◦ O zajištění integrity dat se stará OS
nebo distribuovanou
◦ má lepší škálovatelnost
Distribuovaný systém – viz výše i dále
MIMD programy lze odladit i na jednom počítači
◦ Virtualizace jednoho procesoru pro sdílenou paměť
◦ localhost a pro distribuovanou paměť
◦ Samozřejmě, některé chyby takto mohou uniknout, protože se neprojeví díky jinému komunikačnímu zpoždění, nebo díky virtualizaci jednoho procesoru, kdy žádná dvě vlákna neběží současně
MIMD – dále se dělí na
◦ SPMD – Single Program, Multiple Data Streams
◦ MPMD – Multiple Program, Multiple Data Streams
Používají se termíny funkční a datový paralelismus
Urychlení:
◦ Záleží na datech, programu i hw
◦ Je třeba odměřit a spočítat
SPMD
Single Program, Multiple Data Streams
Několik procesorů autonomně vykonává jeden program nad různými daty
Bod vykonávání programu nemusí být na všech procesorech stejný
Označuje se též jako dekompozice dat
Používá se ke zpracovávání velkých objemů dat
◦ k procesů běžících podle stejného programu zpracovává strukturně stejná, ale hodnotově různé části dat
◦ např. násobení matic – každý prvek, řádek, či sloupec matice lze spočítat jedním procesem/vláknem
Sleduje se čistě výkonnostní hledisko
Předpokládá se, že každý z procesorů je schopen vykonávat ten samý program