Model računanja
Sistem z enovitim skupnim pomnilnikom
Programski model večnitnega programiranja na večjedernem procesorju ali na računskem vozlišču s skupnim pomnilnikom je konceptualno precej preprost. Tak sistem je sestavljen iz večih procesorjev in iz enega samega, vsem procesorjem skupnega pomnilnika:
- Vsak procesor povsem samostojno izvaja svojo lastno kodo neodvisno od vseh ostalih procesorjev.
- Vsak procesor ima dostop do celotnega skupnega pomnilnika.
Po Flynnovi taksonomiji gre torej za čisti MIMD (multiple instruction multiple data) model računanja, na sliki 1 pa lahko vidimo skico takega sistema z osmimi procesorji:
Slika 1: Model sistema z enovitim skupnim pomnilnikom
Čeprav lahko tak sistem uporabljamo kot procesorsko farmo, kjer izvajamo več povsem ločenih programov, ga pogosteje raje uporabljamo za izvajanje večnitnih programov. To so programi, pri katerih kodo razdelimo tako, da se izvaja razdeljena na posamezne niti, te pa se izvajajo na posameznih procesorjih. Izdelava takih programov je zahtevnejša, saj moramo spretno razbiti problem na podprobleme, ki jih lahko rešujemo ločeno s posameznimi nitmi, pri tem pa moramo poskrbeti še za sinhronizacijo in konsistentnost podatkov v skupnem pomnilniku. Taki programi so seveda kompleksnejši, ampak hej, prav o tem bomo govorili v okviru te delavnice.
Zaradi povsem tehnoloških razlogov le redko srečamo sistem, v katerem bi bil vsak procesor fizično povsem ločeno realiziran. Danes pogosteje srečamo sisteme, kjer je sistem sestavljen iz večih procesorjev, vsak procesor pa iz večih jedr. Pogosto lahko vsako jedro izvaja več strojnih niti, a (skoraj) hkrati običajno kvečjemu dve. Procesorje iz zgornje slike zato razumemo kot strojno podporo za izvajanje posamezne strojne niti. Sistem z dvema procesorjema, od katerih ima vsak dve jedri, vsako jedro zmore izvajati dve strojni niti (skoraj) hkrati, zato pogosto izgleda v resnici tako, kot je prikazano na sliki 2.
Slika 2: Sistem z dvema procesorjema s po dvema jedroma, od katerih vsak podpira izvajanje dveh strojnih niti.
Besedna zveza '(skoraj) hkrati' se nanaša na dejstvo, da dve strojni niti na istem jedru pogosto ne tečeta enako hitro kot dve niti na dveh ločenih jedrih, saj procesorji uporabljajo hipernitenje. To je pristop, s katerim si dve strojni niti delita isto jedro in se zato medsebojno ovirata. Na sliki 3 je prikazan enak sistem kot na sliki 2, le da je tu označeno, da ne gre za osem enakovrednih strojnih niti, pač pa za 4 pare strojnih niti, pri katerih se strojni niti v istem paru medsebojno ovirata.
Slika 3: Sistem z dvema procesorjema s po dvema jedroma, od katerih vsak podpira izvajanje dveh strojnih niti z uporabo hipernitenja.
Sistem z neenovitim skupnim pomnilnikom.
Zaradi tehnoloških omejitev števila procesorjev, jeder in strojnih niti, ki lahko učinkovito uporabljajo enovit skupni pomnilnik, so se razvili sistemi z neenovitim skupnim pomnilnikom. V takem sistemu je pomnilnik razdeljen na pomnilniške bloke. Posamezna skupina jeder vsakega procesorja ima neposreden dostop do posameznega pomnilniškega bloka, do ostalih pomnilniških blokov pa le preko dodatne povezovalne infrastrukture.
Ne glede na fizično delitev pomnilnika na pomnilniške bloke je to to logično še vedno skupni pomnilnik: program ga vidi kot enoten naslovni prostor, le dostopni čas do podatkov na nekaterih naslovov je daljši. Zato je na takih sistemih še toliko pomembneje, da program in podatke ustrezno porazdelimo med niti in njihove lokalne pomnilniške bloke.
Slika 4: Sistem s štirimi procesorji, vsak procesor ima 4 jedra, 2 jedri pa si delita pomnilniški blok.