FLYNNOVA TAKSONOMIJA: VODNIK PO RAČUNALNIŠKIH ARHITEKTURAH
Avtor: Luka Leskovec
Uvod
Znanstveniki in inženirji imajo običajno neustavljivo potrebo po računski moči. Od znanstvenih simulacij do umetne inteligence – povpraševanje po hitrejšem in učinkovitejšem računanju nenehno raste. V zgodovini so to potrebo zadovoljevali z eksponentno rastjo računske moči, ki jo opisuje Moorov zakon:
Število tranzistorjev v integriranem vezju se približno vsakih dveh let podvoji.
Ker pa se vse bolj bližamo fizikalnim omejitvam pomanjševanja tranzistorjev (torej ne moremo več delati manjših vrat), je največjo računsko učinkovitost vse bolj odvisno od tega, kako dobro programska oprema izkorišča strojno opremo. Razumevanje arhitekture procesorjev je ključnega pomena za optimizacijo zmogljivosti in zagotavljanje učinkovitega delovanja programske opreme.
Začnimo z osnovnimi sestavinami računalnika:
- CPU (Central Processing Unit) – "možgani" računalnika, odgovorni za izvajanje ukazov.
- RAM (Random Access Memory) – zelo hiter pomnilnik, podoben kratkoročnemu človeškemu spominu.
- Pomnilnik za shranjevanje – tradicionalno trdi diski (HDD), dandanes pa večinoma pogoni SSD (Solid State Drive), ki jim še vedno pogovorno rečemo "trdi diski."
- GPU (Graphical Processing Unit) – procesor, zasnovan za upodabljanje slik, videoposnetkov in animacij. Odličen pri preprostih navodilih, slab pri zapletenih navodilih.
- Matična plošča (MB) – povezuje vse komponente.
- Napajalnik (PSU) – zagotavlja električno energijo.
- Ohišje računalnika – združuje vse komponente (namizni stolp ali prenosnik).
Glavni del vsakega računalnika je procesor (CPU), ki je ključen element vsake računske naprave, saj je odgovoren za izvajanje navodil – od premikanja miške po zaslonu do branja in obdelovanja podatkov, shranjenih v vaših datotekah. Druga pomembna komponenta je RAM – pomnilnik z naključnim dostopom, ki je zelo hiter pomnilnik, kamor shranjujemo podatke, do katerih želimo hitri dostop. V tem smislu je nekako podoben človeškemu kratkoročnemu spominu. Pomnilnik za shranjevanje se uporablja za shranjevanje velike količine podatkov (npr. znanstvenih podatkovnih zbirk). Včasih so bili to trdi diski (HDD) iz vrtečih se plošč, danes pa so v večini primerov pogoni SSD. Kljub temu jim še vedno pogosto rečemo kar "trdi diski." Pogosto – vendar ne pri vseh vrstah računalnikov – imamo tudi grafično kartico (GPU), ki vsebuje grafični procesor, pogosto skupaj z lastnim pomnilnikom. GPU je zelo dober pri linearni in tenzorski algebri – zato je odličen pri upodabljanju slik in umetni inteligenci. Vse te komponente povezuje matična plošča (MB), napaja jih napajalnik (PSU), vse skupaj pa je nameščeno v ohišju računalnika – to je lahko stolp (tower) na/pod vašo mizo ali prenosnik.
Flynnova taksonomija se osredotoča na procesor (CPU) in do neke mere tudi na GPU. Mi se bomo posvetili predvsem CPU-ju in na kratko komentirali GPU.
Procesorske cevovode
Procesor je sestavljen iz cevovoda (pipeline), ki je podoben tekočemu traku v tovarni. Za ponazoritev uporabimo analogijo s tekočim trakom v tovarni, da razložimo, kako delujejo cevovodi. V tovarni vsak delavec opravi specifično nalogo na sestavnih delih, ki potujejo po traku. Podobno ima tudi procesorski cevovod več stopenj, pri katerih vsaka stopnja opravi določeno operacijo na podatkih v skladu z navodili.
Primer: Poenostavljena sestava mobilnega telefona
Preprost primer je sestavljanje mobilnega telefona, ki vključuje štiri stopnje:
- Stopnja i: Namestitev baterije v ohišje.
- Stopnja ii: Povezava baterije z matično ploščo.
- Stopnja iii: Povezava zaslona z matično ploščo.
- Stopnja iv: Namestitev zaslona v ohišje.
Z vidika delavca:
- Delavec na stopnji i vzame baterijo in jo privije v ohišje, nato ohišje postavi nazaj na tekoči trak.
- Delavec na stopnji ii vzame ohišje z baterijo s tekočega traku in priklopi baterijske žice na matično ploščo; nato telefon vrne na tekoči trak.
- Delavec na stopnji iii vzame telefon s tekočega traku in na matično ploščo priklopi zaslon; nato telefon znova postavi na tekoči trak.
- Delavec na stopnji iv vzame telefon s tekočega traku in zaslon pritrdi v ohišje.
Primer: Aritmetični izračun v procesorju
Bolj zahteven, a lažje posplošljiv primer je izračun aritmetičnega izraza v procesorju. Predstavljajmo si izračun funkcije:
y = 3 * (2 - x) / 4
x = 3
so koraki naslednji:
- Stopnja i: Izračun
-x
, kar da-3
. - Stopnja ii: Dodamo
2
, kar da-1
. - Stopnja iii: Množimo z
3
, kar da-3
. - Stopnja iv: Delimo s
4
, kar day = 0.75
.
Vsaka stopnja v cevovodu je sestavljena iz različnih komponent, kot sta aritmetično-logična enota (ALU), ki izvaja aritmetične operacije, in krmilna enota (Control Unit), ki upravlja pretok podatkov med stopnjami. Glede na procesor ima cevovod lahko različno število stopenj, vsaka pa je optimizirana za določene naloge. V zgornjem primeru se vsaka stopnja izvaja zaporedno, izhod ene stopnje pa služi kot vhod naslednji. To je primer enojnih navodil, enojnih podatkov (SISD; Single Instruction, Single Data). Ko imamo velik nabor vrednosti x
, za katere želimo izračunati y
, postane cevovod SISD neučinkovit, saj bi trajalo zelo dolgo, da izračunamo vse vrednosti y
. In tu vstopi Flynnova taksonomija.
Flynnova taksonomija
Flynnova taksonomija, ki jo je leta 1966 predstavil Michael J. Flynn, razvršča zgradbe procesorskih cevovodov glede na število navodil, ki se izvajajo istočasno, in število podatkov, ki se obdelujejo.
1. Single Instruction, Single Data (SISD)
- Eno samo navodilo se izvaja na enem kosu podatkov.
- Primer:
y = (3 * (2 - x) / 4)
zax = 3
. - Najdemo v domačih računalnikih iz 90. let in zgodnjih 2000 (npr. Intel 386, 486, Pentium I, II, III).
2. Single Instruction, Multiple Data (SIMD)
- Eno samo navodilo se izvaja hkrati na več podatkovnih elementih.
- Primer: za
x = [1, 2, 3]
izračunamoy = (3 * (2 - x) / 4)
za vse vrednosti naenkrat. - Uporablja se v sodobnih CPU-jih (AMD & Intel) in GPU-jih (AMD & NVIDIA).
- V kontekstu delavca in telefonov imamo zdaj enega delavca, ki hkrati izdeluje več enakih telefonov.
3. Multiple Instruction, Single Data (MISD)
- Več navodil deluje na eni sami podatkovni vrednosti.
- Primer: izračun
y
z različnimi formulacijami: y = 0.75 * (2 - x)
y = 1.5 - 0.75 * x
y = (3 * (2 - x) / 4)
- Redko v uporabi; dober primer je vesoljski polet – npr. računalniki za krmiljenje leta v Space Shuttlu, kjer lahko sevanje povzroči napake v izračunu. Za toleranco na napake se ista vrednost podatkov obdela dvakrat ali trikrat.
- Analogija z delavcem in telefoni tu ni več enostavno uporabna, a ideja je jasna.
4. Multiple Instruction, Multiple Data (MIMD)
- Več navodil deluje na več podatkovnih elementih.
- Pogosto v večjedrnih procesorjih (npr. Ryzen 5 7600 ima 6 SIMD-jeder, ki lahko delujejo neodvisno ali skupaj).
GPU-ji v Flynnovi taksonomiji
Za boljši pregled Flynnove taksonomije na kratko poglejmo vlogo GPU-jev. Pomembno je poudariti, da to ni stroga razvrstitev, saj imajo GPU-ji lastnosti, ki jih lahko uvrstimo tako v SIMD kot v MIMD.
1. SIMD (Single Instruction, Multiple Data) – osnovna funkcionalnost
NVIDIA GPU-ji večinoma delujejo po načelu SIMD. Izvajajo ista navodila nad več podatkovnimi elementi hkrati. NVIDIA GPU je razdeljen na jedra CUDA, združena v Streaming Multiprocessors (SM), ki delujejo kot poenostavljeni CPU-ji, zmožni opraviti veliko operacij v kratkem času.
2. MIMD (Multiple Instruction, Multiple Data) – naprednejše obnašanje
Čeprav so v osnovi SIMD, lahko NVIDIA GPU-ji izkazujejo obnašanje, podobno MIMD, zaradi SIMT (Single Instruction, Multiple Threads) izvedbe. Nitke (threads) v enem Streaming Multiprocessorju (SM) lahko izvedejo različne poti izvajanja, kar omogoča delovanje, podobno MIMD.