Thread i konflikti Thread predstavlja kontekst izvršavanja nekog programa Rešenje je prona deno u paralelizmu uvo denjem više Konflikt me du threadovima ne postoji ukoliko rade nad različitim jezgara u podacima jedan procesor ili nad disjunktnim celinama istih podataka/resursa Konflikt nastaje kada više threadova želi da vrši operacije nad Od sada istim pa podskupom na dalje posmatraćemo resursa sisteme koji u paralelno procesiranje
Bagovi Čak i kada konflikt postoji on se ne mora uvek ispoljiti Rešenje Zbog toga jebagove prona deno nije ulako paralelizmu reprodukovati uvo denjem više UPostoje obe prethodne problemi kao arhitekture deadlock, je postojala livelock i (i contention postoji) Debugging multi-thread programa je generalno veoma Od težak sada pa na dalje posmatraćemo sisteme koji u paralelno procesiranje
Thread safety U nastavku ćemo smatrati da su programi koje koristimo tačni To ne znači da oni neće izazvati konflikte kada se Uizvršavaju obe prethodne u više threadova arhitekture je postojala (i postoji) Zato treba da obezbedimo da oni budu thread-safe Od sada pa na dalje posmatraćemo sisteme koji u paralelno procesiranje
Primer arhitekture CPU CORE 1 CORE 2 CORE 8 RešenjeL1 jecache prona deno L1 CACHE u paralelizmu uvo L1 CACHE denjem više jezgara ul2 jedan CACHE procesor L2 CACHE L2 CACHE L3 CACHE MEMORY u paralelno procesiranje
Intel Haswell-E u paralelno procesiranje
Primer situacije Multi-thread program koji vrši neku komplikovanu Dostignut simulaciju teoretski maksimum single-thread performansi Za potrebe kasnije analize svaka iteracija simulacije se beleži u jedinstven log fajl koji je zajednički za sve threadove Rešenje je prona deno u paralelizmu uvo denjem više Samo beleženje se vrši pozivom konkretne funkcije writelog(text) U obe prethodne arhitekture je postojala (i postoji) Ceo mogućnost program multi-threadinga se izvršava na jednom CPU koji ima efektivno 8 jezgara podržavaju Koji su sve problemi multi-threading koje moramo da rešimo? Konkurentno pisanje u fajl? u paralelno procesiranje
writelog funkcija Najjednostavnija implementacija bila bi: jezgara u jedan void procesor writelog(char *text) { fprintf(out, "%s", text); U obe prethodne } arhitekture je postojala (i postoji) Od Šta sada je problem pa na ovde? dalje posmatraćemo sisteme koji u paralelno procesiranje
writelog funkcija cont d fprintf u ovom slučaju predstavlja critical section kod koji Dostignut samo jedan teoretski thread maksimum sme da single-thread izvršava u nekom performansi trenutku Stoga u kodu želimo da onemogućimo da više od jednog threada istovremeno piše u fajl Jedno potencijalno rešenje: void writelog(char *text) { U obe prethodne acquirelock(lock); arhitekture je postojala (i postoji) fprintf(out, "%s", text); releaselock(lock); Od sada pa} na dalje posmatraćemo sisteme koji Ali kako implementirati ove funkcije? u paralelno procesiranje
Prvi pokušaj void acquirelock(bool *lock) { while(true) Dostignut teoretski { maksimum single-thread performansi if(*lock == false) { *lock = true; Rešenje break; je prona deno u paralelizmu uvo denjem više jezgara } u jedan procesor } } void releaselock(bool *lock) { *lock Od sada = false; pa na dalje posmatraćemo sisteme koji } u paralelno procesiranje
Atomske operacije Kod sa prethodnog slajda nije tačan Potrebna Dostignutnam teoretski je posebna maksimum atomska single-thread (nedeljiva) performansi mašinska instrukcija! Za tu svrhu postoji compare_and_swap(destination, Rešenje Comparand, je prona Exchange) deno uatomska paralelizmu operacija uvokoja: denjem više jezgara postavi u jedan Exchange procesor na Destination ukoliko je prvobitna vrednost Destination bila jednaka sa Comparand U obe vrati prethodne trenutnu vrednost arhitekture Destination je postojala u suprotnom (i postoji) Ova instrukcija zavisi od arhitekture: Od sada InterlockedCompareExchange na dalje posmatraćemo MSDN sisteme operacija koji na podržavaju Windowsu multi-threading sync_val_compare_and_swap u slučaju GCC kompajlera na Linux sistemima u paralelno procesiranje
Test and set (TAS) lock void Dostignut acquirelock(bool teoretski maksimum *lock) { single-thread performansi while(cas(lock, false, true)) { /* Nothing */ } Rešenje je prona deno u paralelizmu uvo denjem više } void U releaselock(bool obe prethodne arhitekture *lock) { je postojala (i postoji) *lock mogućnost = false; multi-threadinga } u paralelno procesiranje
Test and test and set (TATAS) lock void Dostignut acquirelock(bool teoretski maksimum *lock) { single-thread performansi do { while(*lock) {} } Rešenje while(cas(lock, je prona deno false, u paralelizmu true)); uvo denjem više } void U releaselock(bool obe prethodne arhitekture *lock) { je postojala (i postoji) *lock mogućnost = false; multi-threadinga } u paralelno procesiranje
Problemi sa TATAS Izaziva takmičenje za isti resurs (cache liniju koja sadrži lock) blago poboljšanje u odnosu na TAS Ne postoji kontorla oko toga koji thread dobija lock (ne postoji jasna polisa zaključavanja kao na primer FCFS) Postoji problem stampeda svi threadovi istovremeno Od pokušaju sada pa da na dobiju daljelock posmatraćemo (kako ovo rešiti?) sisteme koji u paralelno procesiranje
Rešenje stampeda: TATAS Dostignut Možemo koristiti teoretski nekakav maksimum back-off single-thread algoritam: performansi Posmatramo lock s iteracija jezgara Ako u se jedan lock ne procesor oslobodi, čekamo lokalno w iteracija (bez posmatranja locka!) Generalno, vrednosti s i w biramo u zavisnosti od problema i Od to najčešće sada pa na koristeći dalje posmatraćemo ograničeni eksponencijalni sisteme koji back-off podržavaju (back-off se multi-threading resetuje kada se lock dobije) u paralelno procesiranje
Queue-based lockovi Svi threadovi koji žele da dobiju lock se postavljaju u red: odmah dobijamo first come first serve (FCFS) ponašanje Svaki thread se vrti lokalno na flagu u svom queue entry-ju: nemamo pristup dubljim slojevima memorije dok čekamo Osloba danje (release) locka budi sledeći thread direktno: Od nemamo sada pa stampeda na dalje posmatraćemo sisteme koji u paralelno procesiranje
MCS lock lock: Lock predstavlja rep liste QNode 1 QNode 2 QNode 3 mogućnost FALSE multi-threadinga FALSE FALSE OdGlava sada pa na dalje posmatraćemo sisteme koji Lokalni flag Rep u paralelno procesiranje
MCS lock acquire void acquiremcs(mcs *lock, QNode *qn) { QNode Dostignut *prev; teoretski maksimum single-thread performansi qn->flag = false; qn->next = NULL; while(true) Rešenje je prona { deno u paralelizmu uvo denjem više jezgara prev = u jedan lock->tail; procesor /* Label 1 */ U obe if(cas(&lock->tail, prethodne arhitekture prev, je postojala qn)) break; (i postoji) } if(prev!= NULL) { Odprev->next sada pa na= dalje qn; posmatraćemo /* Label 2 */ sisteme koji podržavaju while(!qn->flag) multi-threading { } // Spin } } u paralelno procesiranje
MCS lock release void releasemcs(mcs *lock, QNode *qn) { if(lock->tail = qn) { Rešenje if(cas(&lock->tail, je prona deno u paralelizmu qn, NULL)) return; uvo denjem više } while(qn->next == NULL) { } qn->next->flag U obe prethodne= arhitekture true; je postojala (i postoji) } u paralelno procesiranje
Proširimo problem Zamislimo da naš log fajl sada ima i programe koji on-line analiziraju (čitaju) log-fajl U jezgara ovom uslučaju jedan nam procesor nije dovoljno da imamo samo mutex (true/false lock) kao do sada (sem u slučaju jednog čitača) mogućnost Stoga uvodimo multi-threadinga koncept Reader-writer lockova lockova kod kojih omogućavamo da više čitača istovremeno Od pristupa sadafajlu pa na dalje posmatraćemo sisteme koji u paralelno procesiranje
Writer acquire i release void acquirewrite(int *lock) { do { if((*lock == 0) && (CAS(lock, 0, -1))) { break; } while(true); } void releasewrite(int *lock) { *lock = 0; } u paralelno procesiranje
Reader acquire i release void acquireread(int *lock) { do Dostignut { teoretski maksimum single-thread performansi int oldval = *lock; if((oldval >= 0) && Rešenje (CAS(lock, je prona deno oldval, u paralelizmu oldval+1))) uvo { denjem više jezgara break; u jedan procesor }} while (true); } void releaseread(int *lock) { FADD(lock, Od sada pa-1); na dalje // Atomic posmatraćemo fetch-and-add sisteme koji } u paralelno procesiranje
Drugi vidovi konkurentnog procesiranja Hijerarhijski lockovi uspostavljaju prostorno-lokalan redosled na threadove koji zahtevaju lock (npr. po jezgru na kome se izvršavaju) Čitanje U obe prethodne bez lockova arhitekture u slučajevima postojala gde se (i postoji) malo piše a puno mogućnost čita, koriste multi-threadinga se sheme kao verzioni brojevi (version number schemes) u paralelno procesiranje
Dodatni materijal "The art of multiprocessor programming", Herlihy & Shavit jako dobar pregled struktura podataka u deljenoj memoriji, sa praktične i teoretske tačke gledišta Uhttp://www.cs.rochester.edu/~scott/papers/1991_TOCS_ obe prethodne arhitekture je postojala (i postoji) mogućnost synch.pdf multi-threadinga orignialni Mellor-Crummey i Scott rad iz 1991. u kojem uvode MCS lockove u paralelno procesiranje
Ostale teme za superskalare i Rešenjechip pronamultiprocesore deno u paralelizmu uvo denjem više
Ubacivanje instrukcija u prozor In order, pa to radi programski brojač, ako se nije skočilo Skakanje na osnovu predikcije! Širina reči instrukcijskog keša danas 128 do 192 bita tipično nekoliko instrukcija U slučaju da je RISC, tada su cele instrukcije u reči (bloku) Ako mogućnost je CISC multi-threadinga tada ne moraju instrukcije na početku i na kraju široke reči da budu cele!!! Moramo podržavaju da multi-threading znamo granice instrukcija, a to se može uraditi tek nakon bar delimičnog dekodovanja!!
Šta se ubacuje po ciklusu u prozor - RISC Pravila: 1. Ako je PC pokazao na početak bloka i nema skokova, učitavaju se dalje sve instrukcije iz bloka i šalju na paralelno dekodovanje 2. Ako je PC pokazao početak bloka, a u bloku je 1 instrukcija skoka => ako je predikcija da nema skoka učitavaju se sve instrukcije, a ako je predikcija da ima, učitavaju se sve instrukcije do instrukcije skoka i instrukcija skoka, a ostale ne ulaze u prozor 3. Ako Odje sada doskakanje pa na dalje negde posmatraćemo u sredinu sisteme bloka, ne kojiučitava se deo do tačke uskakanja, a za ostatak važi 2., ali od tačke uskakanja 3
Dva skoka u bloku? Kompajler može da pravi razmak između instrukcija skoka (selidbe operacija) od najmanje onoliko instrukcija koliko ih ima u bloku Rešenje je prona deno u paralelizmu uvo denjem više Limit zbog jedne predikcije po ciklusu, maksimalni U obe prethodne instrukcijski arhitekture jeparalelizam postojala (i postoji) je 6-9 instrukcija po ciklusu! (Samo DoAll traže više) Eksperimenti Od sada pa na sa daljeprediktorima posmatraćemo sisteme koji rade koji dve predikcije podržavajupo multi-threading ciklusu 4
Šta raditi sa CISC? Lepiti delove instrukcija iz susednih blokova, jer zauzimaju 1-17 bajta! Raditi paralelno određivanje granica instrukcija u blokovima Kako to uraditi? Prediktor nam dozvoljava da se zalećemo i da radimo prefetching i delimično dekodovanje U obe prethodne većeg arhitekture broja reči jeinstrukcijskog postojala (i postoji) keša u kompleksni mogućnostfifo multi-threadinga (in order issue) zbog paralelnog određivanja granica instrukcija Radimo prefetching većeg broja bazičnih blokova na dinamičkom tragu još pre instrukcijskog prozora!!! 5
Posledice dohvatanja većeg broja bazičnih blokova Potreban je trace multiportni cache za pamćenje dinamičkog traga unapred Multiportni, jer se paralelno čita na više dekodera da bi se dobile mikrooperacije to Udodaje obe prethodne protočne arhitekture stepene je postojala i povećava (i postoji) kaznu zbog mogućnost greške multi-threadinga u predikciji nije previše značajno Imamo Od sada ograničenje pa na dalje posmatraćemo u propusnosti sistemezbog koji grananja 6
Predobrada za instrukcijski prozor Rešenje: dohvatati reči sa instrukcijama unapred nekoliko bazičnih blokova i obezbediti brže određivanje granica instrukcija nego što će se na kraju Rešenje ubacivati je pronau deno prozor u paralelizmu Intel 50% uvoviše denjem više Sve se to radi u pipeline-u: prediktor određuje šta se Uubacuje, obe prethodne u pipeline-u arhitekturese je postojala određuju (i postoji) granice instrukcija mogućnosti multi-threadinga zatim radi dekodovanje, a na kraju postoji i queue mikroinstrukcija koje se tek onda ubacuju Od sadau pa ROB, na dalje odnosno posmatraćemo instrukcijski sistemeprozor koji (ugrađenu dataflow mašinu) 7
Trace Cache Ključna ideja: Pakovati više nesusednih bazičnih blokova u jednu susednu keš reč BR BR BR BR Jedno dohvatanje je dohvatanje više bazičnih blokova gube se granice bazičnih blokova Trace cache indeksira na osnovu startne adrese i sledećih n predikcija podržavaju grananja multi-threading Korišćeno od Pentium 4 procesora za čuvanje dekodovanih mikrooperacija BR BR 8
Trace Cache za Haswell Otkrivanje granica instrukcija Trace cache 9
Zavisnosti po podacima preko memorije Prave zavisnosti, antizavisnosti i izlazne zavisnosti, jer nema dinamičkog preimenovanja za memoriju Store instrukcije treba po originalnom redosledu izvršavati Rešenje je i tek prona kada denosu u paralelizmu in order (commit) uvo denjem više mali ROB jezgara za store, u jedanpa procesor zbog redosleda nema izlaznih zavisnosti Antizavisnosti U obe prethodne praktično arhitekturene je postojala mogu nastati, (i postoji) ako postoji mogućnost load multi-threadinga buffer (load nije zavisan po podacima iz registara, pa kreće odmah u izvršavanje ako nema pravih zavisnosti preko memorije) Ali tada imamo store load store problem 10
Load-Store redovi Zavisnosti preko memorije bi mogli da značajno ograniče performanse, zbog velike dužine pipelina za Load i Store, upisa tek kada je commit Store instrukcije i sporosti memorije Mora jezgara se ugraditi u jedan procesor kompleksna load-store reordering tehnika da se smanji efektivno kašnjenje U obe prethodne memorije arhitekture dozvoljavanjem je postojala (i postoji) spekulativnih load-a Zašto su spekulativni? ne znamo da li neka ranija store instrukcija ne menja sadržaj lokacije, jer može još da se izračunava adresa 11
Spekulativni Store Buffer Store Store Ne sme se menjati sadržaj memorije dok store Address Data instrukcija nije komitovana. Zato spekulativni Speculative store buffer čuva podatke spekulativnih store Store Buffer Dostignut teoretski podataka maksimum single-thread performansi V S Tag Data Tokom dekodovanja se redom zauzimaju ulazi V S Tag Data (lokacije) po programskom redosledu V S Tag Data Rešenje je prona deno Store uoperacija paralelizmu se deli uvo na store denjemaddress više i store V S Tag Data data mikro-operacije - Store address izvršavanje upisuje tag, a Store data izvršavanje Store U obe prethodne arhitekture upisuje podatke Commit je postojala (i postoji) mogućnost Path multi-threadinga Store se komituje kada se podaci i adresa za najstariji store upišu i instrukcija je komitovana Tags Od sada Data pa na dalje (ROB): posmatraćemo sisteme koji Ukloni se 1 za spekulativni bit S i komitovani L1 Data Cache podaci se upisuju u cache Moguć store abort reset valid bita V 12
Load bypass iz spekulativnog store buffera Speculative Load Address Store Buffer Dostignut teoretski maksimum single-thread L1 Data performansi Cache V S V S V S V V V S Tag Tag Tag Tags Data S Rešenje Tag je prona Data deno u paralelizmu uvo denjem više S jezgara Tag u jedan Data procesor Tag Data Data Data Data Load Data Ako mogućnost i store buffer multi-threadinga i cache imaju podatak, koji uzeti? Spekulativni store buffer Ako Od je dva sada puta paista naadresa dalje posmatraćemo u store bufferu, sisteme koji upis uraditi? koji Najnoviji podržavaju store multi-threading (jer je podatak ranije store operacije pokupljen iz spekulativnog store buffer-a) 13
Memorijske zavisnosti sd x1, (x2) ld x3, (x4) Kada se može raditi load? 14
In-Order Memory Queue Sve Load i Store operacije moraju po programskom redosledu => Rešenje Load i jestore prona deno ne mogu u paralelizmu da napuste uvo denjem ROB više dok sve jezgara prethodne u jedan procesor Load i Store operacije ne završe izvršavanje Load i Store mogu spekulativno u odnosu na ostale instrukcije 15
Konzervativno O-o-O Load Izvršavanje sd x1, (x2) ld x3, (x4) Može load pre store-a ako se za adrese zna da je x4!= x2 Svaka U obe load prethodne adresa arhitekture se poredi je postojala sa adresama (i postoji) svih prethodno nekomitovanih store operacija Ne Od raditi sadaload, pa na dalje ako je posmatraćemo bilo koja od sisteme prethodnih koji adresa podržavaju store-a multi-threading nepoznata 16
Adresna Spekulacija sd x1, (x2) ld x3, (x4) Pretpostavimo Rešenje je pronada deno je ux4 paralelizmu!= x2 uvo denjem više Izvrši se load pre nego što je poznata store adresa Moraju U obe prethodne se čuvati arhitekture sve nekomitovane je postojala (iload/store postoji) adrese mogućnost u programskom multi-threadingaredosledu Ako se dogodi da je x4==x2, obustavi load i sve prateće Od sada instrukcije pa na dalje posmatraćemo (load exception) sisteme koji => Velika kazna za grešku zbog netačne pretpostavke o različitosti adresa 17
Load Store kod Haswell prozoru!!! Tri jedinice adresnih generatora 4 porta za memoriju u instrukcijskom 18
Haswell prozor, registri i FJ Vektorski registri AVX i vektorske ALU 19
Multithreading i Multicore 20
Šta razmatramo kod Multithreading-a Pregled Threading Algoritama Hyper-Threading Koncepti Hyper-Threading Arhitektura Prednosti i mane 21
Threading Algoritmi Time-slicing Procesor se prebacuje između niti u fiksnim vremenskim intervalima. Visoka cena, naročito ako je jedan od procesa u stanju čekanja. Fine grain Switch-on-event Niti se menjaju u slučaju da se događa bilo koje čekanje u niti koji se izvršava Ako se čekaju podaci sa sporog izvora, CPU se predaje nekom od drugih procesa (ne OS). Coarse grain 22
Threading Algoritmi (2) Multiprocesiranje Ukupan posao se distribuira na više procesora Značajan dodatni trošak Simultaneous Multi-Threading (SMT) Više niti se izvršavaju na jednom procesoru bez mogućnost izmene konteksta multi-threadinga Osnova za Intelovu Hyper-Threading tehnologiju. 23
Hyper-Threading Concept U svakom trenutku u vremenu, samo deo procesorskih resursa se koristi za izvršavanje programskog kôda niti Neiskorišćeni resursi mogu biti istovremeno iskorišćeni za paralelno izvršavanje druge niti/aplikacije Kod servera ili klijentskih računara često postoji puno niti, pa je veoma korisno 24
Quick Recall: Many Resources IDLE! For an 8-way superscalar. Od sada pa na dalje posmatraćemofrom: sisteme Tullsen, koji Eggers, and Levy, Simultaneous Multithreading: Maximizing On-chip Parallelism, ISCA 1995. 25
26
jezgara (a) u jedan procesor (b) (c) (d) (a) Superskalarni procesor bez multithreading-a (b) Superskalarni procesor sa coarse-grain multithreading-om (c) Superskalarni procesor sa fine-grain multithreading-om (d) Superskalarni procesor sa simultaneous multithreading-om (SMT) 27
Simultaneous Multithreading (SMT) Primer: novi Intel procesori sa Hyperthreading - om Osnovna Dostignut ideja: teoretski Iskoristiti maksimum instrukcijski single-thread nivo paralelizma performansinad više niti istovremeno; tj. pretvoriti paralelizam na nivou niti u dodatni instrukcijski nivo paralelizma Iskoristiti sledeće osobine modernih procesora: Više funkcionalnih jedinica, pa postoji znatan višak FJ u odnosu na prosečne potrebe jedne niti Preimenovanje registara i dinamičko raspoređivanje (ugrađena Od sadadata pa naflow daljemašina) posmatraćemo - Više sisteme instrukcija koji iz više nezavisnih podržavaju niti multi-threading mogu da koegzistiraju i da se istovremeno izvršavaju, uz veći ukupni paralelizam dva smanjena nepovezana dinamička DDG! 28
Hyper-Threading Arhitektura Prvo se pojavila kod Intel Xeon MP procesora Stvara iluziju kojom se jedan fizički procesor javlja kao više (2) logička procesora Svaki Rešenje logički je prona procesor deno uima paralelizmu kopiju arhitekturalnog uvo denjem više stanja Logički procesore dele jedan zajednički skup fizičkih resursa za izvršavanje 29
Hyper-Threading Arhitekture Operativni sistemi i korisnički konkurentni programi mogu da rasporede procese ili niti na logičke procesore kao da se raspoređuju na multiprocesorski Rešenje je prona deno sistem u paralelizmu sa istim uvo brojem denjem više fizičkih procesora Kako U obe logički prethodne procesori arhitekturemogu je postojala da koriste (i postoji) deljene resurse: Cache, izvršne jedinice, Prediktore grananja, kontrolnu logiku, OoO logiku, magistrale, fizičke registre,... 30
Power 5 dataflow... Zašto samo mogućnost dve niti? multi-threadinga Sa 4, neki od deljenih resursa (fizički registri, cache, memorijski propusni opseg) Od sada bi postao pa na usko dalje grlo posmatraćemo sisteme koji Cena: Power5 jezgro je oko 24% veći od Power4 jezgra zbog podrške za simultani multithreading 31
Prednosti Kod nekih procesora je dodatna površina na čipu oko 5% Nema gubitka performansi ako je samo jedna nit aktivna, a poboljšane performanse sa dve niti (dva manja nepovezana DDG niti istovremeno) Bolje iskorišćenje resursa 32
Mane Da se iskoristi, mora da bude konkurentni program Niti nisu determinističke i mora pažljivi dizajn jezgara aplikacije u jedan procesor Niti imaju dodatnu kontrolnu logiku Konflikti deljenih resursa cache i memorija pre svega Ukupni dobitak je mali, ali će rasti sa veličinama instrukcijskog prozora! 33
Multicore Multiprocesori na čipu UMA multiprocesori (symmetric multiprocessing) 34
Osnovna Shared Memory Arhitektura Procesori svi povezani na veliku deljenu memoriju Gde su cache memorije? P1 P2 Pn interconnect memory Koja su ograničenja, kako su napravljeni, limiti, programiranje? 35
Kako i gde Cache??? P 1 P n $ $ Bus Mem I/O devices Za visoke performanse sa deljenom memorijom: koristi cacheeve! Svaki jezgara procesor u jedan ima procesor jedan ili više svojih cache-eva Stavi podatke iz memorije u cache Writeback U obe prethodne cache: nemoj arhitekture slati sve jepodatke postojala preko (i postoji) bus-a u memoriju Cache-evi smanjuju srednje kašnjenje memorijskog sistema Automatska replikacija bliže procesoru Važnije podržavaju za multiprocesor multi-threading nego za jedan procesor: veća su kašnjenja Normalan uniprocesorski mehanizam za dohvatanje podataka Problem: Koherencija Cache-eva! 36
Primer problema koherencije Cache-a P 1 4 $ $ 5 $ P 2 P 3 u =? u =? 3 Dostignut u :5 teoretski maksimum single-thread performansi u :5 u = 7 Rešenje je prona deno u paralelizmu uvo I/O devices denjem više 1 2 jezgara u jedanu :5 procesor Memory Processori U obe prethodne mogu da vide arhitekture različite jevrednosti postojala u (inakon postoji) događaja 3 Sa write mogućnost back cache-evima, multi-threadinga vrednost upisana u memoriju zavisi od toga koji cache i kada da upiše u memoriju Kako Od ovo sada popraviti pa na dalje na bus-u: posmatraćemo Coherence sisteme Protocol koji Upotrebiti podržavajubus multi-threading da emituje (broadcast) upise ili invalidacije Jednostavni protokoli zasnovani na braodcast-u na bus-u Bus može do 32-64 processora (max) 37
Ograničenja Bus-Based Shared Memory 140 MB/s 5.2 GB/s I/O MEM MEM Dostignut teoretski maksimum => 1.2 GB/s single-thread data BW at 30% performansi load-store Assume: 1 GHz processor w/o cache => 4 GB/s inst BW per processor (32-bit) Suppose 98% inst hit rate and 95% data hit rate Rešenje je prona deno u => paralelizmu 80 MB/s inst BW uvo per denjem processor više jezgara cache u jedan cache procesor => 60 MB/s data BW per processor 140 MB/s combined BW PROC PROC Assuming 1 GB/s bus bandwidth \ 8 processors will saturate bus 38
39
Cache Organizacija za Multi-core L1 cache je uvek privatan za core L2 cache može biti privatan ili deljeni Prednosti deljenog L2 cache-a: efikasna dinamička alokacija prostora za svaki core Podaci deljeni od strane više core-ova se ne repliciraju Prednosti privatnog L2 cache-a: brzi pristup privatnom L2 dobro za male programe privatan je bus do privatnog L2 manje sačekivanja 40
Podsetnik: SMT (Simultaneous Multi Threading) SMT vs. CMP 41
A Single Chip Multiprocessor Superscalar (SS) SMT CMP 42
Superskalar i SMT vs. CMP Zašto Core-ovi: Problemi hardverskog projektovanja (za SS i SMT): Površina čipa raste kvadratno sa kompleksnošću core-a Broj registara O(Instruction window size) Broj registarskih portova - O(broj izdatih instrukcija po ciklusu) CMP rešava problem (~ linearna zavisnost od ukupno izdatih instrukcija) Sporiji takt Produžavaju se žice zbog puno MUX Veliki mogućnost bufferi, multi-threadinga redovi i registarski file-ovi Da bi stalo na IK, smanjuje se ILP, skraćuje Pipeline, pa Branch mispredication Od sada pa na kazne daljesu posmatraćemo manje sisteme koji CMP brži takt, manji, oslanja se više na kompiler i na load balancing Kompleksni dizajn i verifikacija 43
Budućnost TLP (Thread Level Paralelizam) i PLP (Process Level Paralelizam) postaju Dostignut neminovnost teoretski u budućnosti maksimumi favorizuju single-thread CMP performansi i SMT na procesorima. Kako iskoristiti - KDP, ali se mora obezbediti i balansiranje opterećenja Rešenje procesora je prona deno u paralelizmu uvo denjem više SMT jezgara (Hyperthreading) u jedan procesor se adaptira na broj procesa i dinamički hardverski i transparentno deli procesorske resurse prema zahtevima U obe2 prethodne procesa. arhitekture je postojala (i postoji) Kada mogućnost nema multiprocesnog multi-threadinga rada, superskalari i SMT procesori su bolji od jednostavnih procesora u CMP Kompajleri i dalje igraju veliku ulogu prevode tako da kod u instrukcijskom prozoru u svakom trenutku bude što paralelniji, ali ograničenje je nepoznavanje svih zavisnosti u vreme prevođenja 44
SMT Dual-core: sve četiri niti mogu da se izvršavaju konkurentno L1 D-Cache D-TLB L1 D-Cache D-TLB Integer Floating Point Integer Floating Point L2 Cache and Control Bus Schedulers Schedulers Uop queues Rename/Alloc Rename/Alloc BTB Trace Cache Od sada pa na daljerom posmatraćemo sisteme koji Decoder Decoder BTB and I-TLB ucode L2 Cache and Control Bus BTB Uop queues Trace Cache BTB and I-TLB ucode ROM 45 Thread 1 Thread 3 Thread 2 Thread 4
I7-4770 4 Haswell core-a 8 thread-ova (2 po core-u) Niz vektorskih instrukcija Multiply-Add Enkripcija i digitalno potpisivanje u hardveru postaju deo instrukcijskog seta Grafičke funkcije visokog nivoa kao instrukcije iako ima zaseban grafički procesor 46