Monday, June 20, 2011

HW: Pokrocile prudove spracovanie, superpipeline, VLIW a vektorove CPUs

Dnes sa vsetky moderne pocitace snazia vyuzit nejaku formu paralelizmu medzi instrukciami (ILP). Vykonavanie instrukcii sa teda moze plne, alebo ciastocne, prekryvat. ILP je ale obmedzene datovymi, riadiacimi a mennymi zavislostami, ktore musia byt v programoch dodrazane.

Zvysovanie vykonnosti robime tak, ze napriklad snizujeme instruction count programu. Snazime sa zaradit viac pararelnych operacii do jednej instrukcie. Toto vyuziva VLIW. Znizenie Tclk vyuziva superpipelining, ktory vyuziva viac stupnov pipeline a rychlejsie technologie. Znizenie clock per instruction zase vyuziva superskalar a to pomocou pararelneho vykonavania viacerych operacii. Mozme sa posnazit aj o znizenie stalls per instruction a to prekryvanim stallov uzitocnym vypoctom (predikcia skoku, dynamicke planovnie a spekulativne vykonavanie vypoctov). Vsetko to vychadza z vykonnostnej rovnice CPU

                                             Tcpu = IC * ( CPIideal + SPI ) * Tclk


Superpipeline procesory vyuzivaju viac stupnov pipeline

  • IF, kde dojde k prvej polovicke nacitania instrukcie a vyberu PC a zacne sa pristup do instrukcnej cache
  • IS, kde dojde k druhej polovicke pristupu do instruction cache 
  • RF, kde je instrukcia dekodovana, citaju sa registre, kontroluju hazardy a detekuje uspesnost nacitania z cache 
  • EX, kde je vykonavana instrukcia, spocitana ef. adresa a vypocitana cielova adresa skoku. 
  • DF, kde sa zacne pristup do datovej cache 
  • DS, kde sa dokonci pristup ku kache 
  • TC, kde detekujeme uspesnost nacitania z cache 
  • WB, write back pre instrukcie load a register-register operacie 


Dovod k rozdeleniu IF a MEM fazy je pristup k pamatiam. Pristup ku cache v IF faze teraz trva 2 takty, ale akonahle je ukoncena IF1, tak moze zacat IF1 dalsej instrukcie aj napriek tomu, ze IF2 1.instrukcie je stale v behu (prenos udajov ?). Takto sme pipelinovali pristup do cache. 

Mame teda 8-st. pipeline. Stupne IF - EX mozme nazvat frontend pipeline a stupne EX - WB zase backend pipeline. Takisto, ako IF a MEM, mozme rozdeli EX stupne a to preto, ze ak je operacia prilis zlozita na jeden takt, tak ju vykoname vo viacerych taktoch a tym neobmedzime Tclk. 

Tym, ze sme na frontend pipeline zvysili pocet stupnov, tak sme zvysili aj latenciu skoku a zvysenim poctu stupnov na backend pipeline, sme zvysili latenciu vykonavania programu. Skratenie Tclk vedie k narastu Miss Penalty, pretoze vybavovacia doba pamate je = MP * Tclk. 

Superskalarne procesory 
Prve superskalary boli planovane staticky, takze len instrukcie v sekvencnom poradi mohli byt pararelne spracovane. Paralelne spracovanie mohla zahajit iba urcita sada instrukcii, napriklad 1 integer a 1 floating point operacia. Takyto procesor je len o nieco zlozitejsi, ako konvencny skalarny procesor. Najtypickejsim pre prvu generaciu superskalarnych procesorov bolo paralelne vykonavanie celociselnej a FP instrukcie. Prikladom je staticky superskalar DLX, viac tu a tu


Celociselny superskalar s floating point operaciami je na obrazku vpravo. Za jeden takt sa nacitaju 2 instrukcie. 1 FP a jedna ina. Tak sa mozu spustit dve instrukcie naraz. Aj napriek tomu, ze spustenie FP a INT instrukcie je jednoduche pre HW, bude fungovat len pre vyvazene programy (50% FP a 50% INT). Superskalar zavisi na kvalitnom prekladaci. Pre mnozstvo aplikacii je vyhovujuci a zo staticky planovaneho superskalarneho procesoru dostaneme podobnu vykonnost, ako z dynamicky planovaneho. Samozrejme, ak mame dobry prekladac. 

Ak chceme spustat viac instrukcii pararelne, tak sa komplikuje stupen spustania a dekodovania. Dekodovat treba 2 operacne znaky, registre a rozhodnut, kolko instrukcii bude spustenych => kvoli komplexnej ID stage mozme mat horsie Tclk. 





VLIW procesory alebo Very Long Instruction Word CPUs, je prikladom, kedy sa problem riesenia hazardov presunul do SW prekladaca. Format instrukcie je pevny a obsahuje kod niekolkych operacii, ktore sa mozu vykonat pararelne. HW nemusi kontrolovat hazardy - tym padom je jednoduchy, rychly a skalovatelny. 


Stalls per instruction sa stane zodpovednostou prekladaca a snizime aj IC. VLIW ma samozrejme aj problemy a to 
  • synchronizacne NOPY
  • niektore zavislosti, ktore v dobe prekladu nemusia byt rozpoznatelne (aliasing, pointre, dynamicke linkovanie)
  • niektore latencie nie su odhadnutelne v dobe prekladu (cache hit/miss)
  • VLIW nie su spatne SW kompatibilne 
VLIW procesory su pouzivane v embedded systemoch a media procesoroch.