Procesori ų architekt riniai sprendimaidma.vgtu.lt/hps/Skaidres/hps4.pdf · RISC Reduced...
Transcript of Procesori ų architekt riniai sprendimaidma.vgtu.lt/hps/Skaidres/hps4.pdf · RISC Reduced...
Procesorių architektūriniai sprendimaiProcesorių architektūriniai sprendimai
ISA, daugelio gijų procesoriai4 paskaita
ISA sprendimai
� CISC Complex Instruction Set Computer � CISC Complex Instruction Set Computer
� RISC Reduced Instruction Set Computer
� ZISC Zero Instruction Set Computer
� OISC One Instruction Set Computer
� VLIW Very Long Instruction Word
� Vektorinis procesorius
� EPIC Explicitly Parallel Instruction Computing
EPICEPIC – Explicitly Parallel Instruction Computing
Našumas
EPIC
aparatūra atpažįsta neišreikštą lygiagretumąaparatūra inicijuoja komandas ir ne eilės tvarka
aparatūra pakeičia registrų vardus VLIW
paprastos, fiksuoto ilgio komandos
nuoseklumą valdo kompiliatorius
sudėtingos, įvairaus ilgio komandos
nuoseklumą valdo aparatūra
RISC
CISC
Laikas
Ankstesnių ISA trūkumai
� RISC vykdymo riba - 1 instrukcija per 1 ciklą� RISC vykdymo riba - 1 instrukcija per 1 ciklą
� Nepakankamai užpildomas konvejeris
� Sudėtingas galimai lygiagrečių instrukcijų vykdymas. Lygiagretumas nustatomas pačiame CPU.
� VLIW – instrukcijų rinkinys vykdomas nuosekliai
� Nauji VLIW procesoriai nesuderinamas su ankstesniaisankstesniais
� Lėtas duomenų atsisiuntimas iš CPU spartinančios atminties ir operatyvios atminties
Kodėl EPIC?
� Tranzistorių skaičius procesoriuose sparčiai auga ir viršija dešimtis milijonųviršija dešimtis milijonų
� Didėja spartinančiosios atminties dydis (L1, L2)
� Didėja funkcinių įrenginių skaičius procesoriuje� Didėja konvejerio pakopų skaičius� Reikalingas geresnis šakų spėjimo algoritmas� Didėja sankcijos neatspėjus šakosDidėja sankcijos neatspėjus šakos� Reikia daugiau registrų
� Kompiliatorius galėtų detektuotiir kontroliuoti lygiagrečias instrukcijas
Nuoseklus vykdymo modelis
Originalus išeities tekstas
Nuoseklus mašinos
kodastekstas kodas
Lygiagretintas kodas
APARATŪRA
FĮFĮFĮ
Kodo lygiagretinimas
FĮFĮFĮ
6 instrukcijos per taktą
Išreikštas lygiagretumas
Originalus išeities tekstas
Kompiliatorius
Lygiagretintas mašininis kodas
“Expose”
“Enhance”
“Exploit”
x86 architektūra
� Naudojamos sudėtingos A
� Naudojamos sudėtingos įvairaus ilgio komandos, apdorojamos po vieną
� Komandų srautą pertvarko (pakeičia eilės tvarką) ir optimizuoja vykdymo metu CPU
C
B
� Bando įspėti, kokia kryptimi bus vykdomas perėjimas ir spekulatyviai vykdo tik prognozuojamos šakos komandas ?
x86 architektūra
addCache
CPU
ld
sub
add
addCache
RAM
� Duomenis iš atminties įkrauna tik tuomet, kai jų prireikia; pirmiausia jų ieško spartinačiojoje atmintyje
CPU
IA-64 architektūra (EPIC)
Pagrindiniai IA-64 bruožai� labai ilgas instrukcijos žodis – VLIW� spekuliatyvumas� predikacija
� pirminė duomenų paieška vykdoma spart. atmintyje
IA-64 funkciniai įrenginiai
� I-Unit� Integer arithmetic� Integer arithmetic� Shift and add� Logical� Compare� Integer multimedia ops
� M-Unit� Load and store
� Between register and memory� Between register and memory� Some integer ALU
� B-Unit� Branch instructions
� F-Unit� Floating point instructions
Instrukcijų formatai
IA-64 komandų formatas
� 128 bitų grupė - “ilgas komandos žodis”:
T 1 komanda 2 komanda 3 komanda
OpK PR GPR GPR GPR
� T - Template laukas, identifikuojantis šio trejeto ir kitų trejetų � T - Template laukas, identifikuojantis šio trejeto ir kitų trejetų komandas, kurios gali būti vykdomos lygiagrečiai.
� PR - 6 bitų laukas; nurodo vieną iš 64 predikato registrų.� GPR - 7 bitų laukas; nurodo vieną iš 128 bendrųjų (sveikųjų
skaičių ar slankaus taško skaičių) registrų.
IA-64 architektūra (EPIC)
VLIW� Naudojamos paprastos
CBA� Naudojamos paprastos
fiksuoto ilgio komandos, sugrupuotos po tris
� Komandų srautą pertvarko (pakeičia eilės tvarką) ir optimizuoja kompiliavimo metu
PredikcijaVykdo abiejų šakų komandas
CPU
� Vykdo abiejų šakų komandas� Paaiškėjus perėjimo krypčiai,
atmeta kitos šakos komandų vykdymo rezultatus
PR[2]
PR[1]
IA-64 architektūra (EPIC)
Spekuliatyvumas
add
Spekuliatyvumas
� Spekulatyviai iš anksto įkrauna duomenis iš atminties; Šis procesas leidžia kompiliatoriui identifikuoti duomenis, kurių reikės ateityje. Tai leidžia išvengti procesoriaus prastovų. CPU
ld
sub
add
CPU
Spekulatyvaus įkrovimo principai
1 komanda
2 komanda2 komanda
Spekulatyvus įkrovimas
7 komanda4 komanda
3 komanda (šakojim.)
3
8 komanda (duom. Įkrov.)
Spekulatyvus tikrinimas
9 komanda (naudoja duomenis)
5 komanda
6 komanda
1
2 5
4
Spekulatyvaus įkrovimo principai
Kompiliatorius analizuoja toliau esantį kodą ir aptinka load komandą (Nr.8). Vietoje jos:
1
a) prieš komandą, kuriai reikia įkrautų duomenų, įterpiaspekulatyvią tikrinimo komandą;
IA-64 faktiškai perkėlė load komandą prieš šakojimąsib) spekulatyvią load komandą įterpia čia;
vykdymo metu ši komanda įkrauna vėliau reikalingus duomenis; jei įkrovimas iššaukia pertrauktį, CPU sulaiko jos signalą.
Kompiliatorius pakeitė šią load komandą aukščiau parodyta
2
3
Kompiliatorius pakeitė šią load komandą aukščiau parodyta spekulatyvia load komanda.
Ši komanda tikrina, ar duomenys tikri. Jei viskas tvarkoj, CPU apie pertrauktį nutyli.
5
4
Intel Itanium procesoriai
Intel Itanium procesorius
Superskaliarinio ir IA-64 lyginimas
Procesorių našumo didinimas taikant lygiagretinimą
� Bitų lygmens lygiagretumas (4, 8, 16, 32, 64 bitų žodžiai). � Bitų lygmens lygiagretumas (4, 8, 16, 32, 64 bitų žodžiai).
� Instrukcijų lygmens lygiagretumas (Instruction Level
Parallelism)
� Gijų lygmens lygiagretumas (Multi-Threading)� Branduolių lygmens lygiagretumas (Multi-core)� Procesorių lygmens lygiagretumas (Multi-processing)� Procesorių lygmens lygiagretumas (Multi-processing)
Gijos (Threads)
Gija vadiname trumpinį vykdymo gija (thread of execution).
Gijos – tai būdas, padalinti programos vykdymą į du dar daugiau vienu metu vykdomus darbus.
Gijos gali būti vykdomos lygiagrečiai keliuose procesoriuose arba klasteriuose. Gija panaši į procesą, tačiau gijos egzistuoja vieno proceso rėmuose ir dalinasi resursais, kurie skirti procesui, todėl daugiaprocesorinės užduotys yra lėtesnės už daugelio gijų darbus.
Gijos valdomos per sisteminių kvietimų (system calls) sąsają. (open, read, write, close, wait, exec, fork, exit, kill. Linux OS yra 319 skirtingų sisteminių kvietimų ).
Skirtumai tarp gijų ir procesų
� ProcesasProcesas� Atskira atminties adresų erdvė� Atskiras priėjimas prie I/O sistemos� Komunikacijos vykdomos tarp procesų naudojant tarprocesorinės
komunikacijas (MPI, sinchronizacija, bendra atmintis, RPC)� Gija
� Naudoja proceso, kuriam ji priklauso atminties adresų erdvę� Naudojami proceso priėjimo prie I/O sistemos kanalai� Komunikacijos vykdomos per procesui išskirtą atminties erdvę
� Gijų tipai: branduolio gijos (threads), vartotojo gijos (fibers).� Gijų valdymo būdai:
� prioritetinis (preemptive multithreading ), � kooperatyvinis (cooperative multithreading).
Daugelio gijų skaičiavimai
� Daugelio gijų skaičiavimai (multi-threading) –procesorius perjungiamas nuo vienos gijos prie kitos. procesorius perjungiamas nuo vienos gijos prie kitos.
Kadangi šiuolaikinės kristalų gamybos technologijos įgalina viename kristale sutalpinti dešimtis milijonų tranzistorių, atsirado galimybė į kristalo vidų perkelti net ir tokias sudėtingas schemas, kurios reikalingos dinaminei programos kodo analizei, gijų išskyrimui, jų sąlyginei programos kodo analizei, gijų išskyrimui, jų sąlyginei
inicializacijai bei kelių gijų palaikymui.
Daugelio gijų skaičiavimai(dalinimasis resursais)
� Kvantuojami daugelio gijų skaičiavimai (time-slice multithreading) – procesorius reguliariai perjungiamas nuo Kvantuojami daugelio gijų skaičiavimai (time-slice multithreading) – procesorius reguliariai perjungiamas nuo vienos gijos prie kitos (fiksuoto dydžio intervalais).
� Proginiai daugelio gijų skaičiavimai (switch-on-event multithreading) – procesorius perjungiamas nuo vienos gijos prie kitos, kai vykdytoje gijoje atsiranda priverstinė pauzė (pvz., nepataikius į spart. atmintyje esančius duomenis).
� Vienalaikiai daugelio gijų skaičiavimai (simultaneous multithreading) – procesorius vykdo skirtingas gijas “vienu metu”, be perjungimo nuo vienos gijos prie kitos. Resursai skirstomi dinamiškai (”nereikalingas tau – atiduok kitam”).
Daugelio gijų skaičiavimai
Daugelio gijų technologijos:
� Multi-threaded: vykdomos instrukcijos iš skirtingų gijų persijunginėjant nuo vienos gijos prie kitos.
� Simultaneous multithreading (SMT): vykdoma daug instrukcijų iš skirtingų gijų per vieną ciklą (superskaliariniai procesoriai).
� Chip-level multiprocessing (CMP arba Multi-core): integruojama du ar daugiau superskaliarinių procesorių/branduolių į vieną mikro-schemą. Kiekvienas branduolys vykdo atskirą giją nepriklausomai.schemą. Kiekvienas branduolys vykdo atskirą giją nepriklausomai.
� Kombinacija SMT/CMP
Daugelio gijų skaičiavimai leidžia geriau išnaudoti esamus ALU. Paprastai procesorius modifikuojamas didinant registrų skaičių, kad galėtų saugoti kelių gijų duomenis. Vykdomas vienu metu gijų skaičius būna 2, 4, 8.
Problema – konfliktų sprendimai naudojant bendra atmintį gijoms.
Hyper-Threading technologija
Pirmą kartą simultaneous multithreading technologija komerciškai sėkmingai panaudota buvo panaudotas Intel Xeon MP (Foster MP). Ji pavadinta Hyper-panaudota buvo panaudotas Intel Xeon MP (Foster MP). Ji pavadinta Hyper-Threading Technology. 2002 m. HTT pradėta naudoti ir Pentium 4 (nuo 3,0GHz). Kiti procesoriai su SMT: IBM POWER5, MIPS MP, SUN SPARC
Hyper-Threading technologija
Hyper-Threading technologijos nauda