1 / 47

Compilatoare

Compilatoare. Arhitectura Calculatoarelor. Despre curs. Am facut Analiza sintactica, semantica Mai avem Generare de cod IR ( FE ) Optimizari high-level Generare de cod asamblare Optimizari low-level Garbage collection Cursul acesta vorbim despre arhitecturi

midori
Download Presentation

Compilatoare

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Compilatoare Arhitectura Calculatoarelor

  2. Despre curs • Am facut • Analiza sintactica, semantica • Mai avem • Generare de cod IR ( FE ) • Optimizari high-level • Generare de cod asamblare • Optimizari low-level • Garbage collection • Cursul acesta vorbim despre arhitecturi • Hennessy, Patterson, “Computer Architecture – A Quantitative Approach”.

  3. Arhitectura ‘standard’ • Von Neumann: • Majoritatea procesoarelordin ziua de azi • Harvard • Procesoare industriale - microcontrollere (PIC), DSP (Hawk, Blackfin) • Mixt – memorii cache separate de instructiuni si date

  4. Nu este singura arhitectura • Arhitecturi vectoriale • Masiv paralele; fine threading – e.g. GPU DirectX 10 – sursa: David Blythe Microsoft

  5. General Purpose GPU Sursa: NVidia

  6. Computer architecture A computer architecture is a contract between the class of programs that are written for the architecture and the set of processor implementations of that architecture. • Computer Architecture = Instruction Set Architecture + Machine Organization + ….. • ISA ... the attributes of a [computing] system as seen by the programmer, i.e. the conceptual structure and functional behavior, as distinct from the organization of the data flows and controls the logic design, and the physical implementation. – Amdahl, Blaaw, and Brooks, 1964 • “Portiunea din calculator vizibila unui programator” • ISA vs. ABI

  7. Tipuri de ISA • Stack, acumulator, register • register-memory –x86, • register-register (load/store) –PPC • Memory-memory (VAX) • Compilatoarele vor in general ‘general purpose registers’ • Decizia influenteaza encodarea instructiunilor si numarul de instructiuni necesare pentru a face ceva

  8. Adresarea memoriei • Endianess • Dimensiunea accesului; aliniament • Moduri de adresare • Registru, immediate • Indirect, displacement, indexat (cu registru) • Autoincrement/decrement • Direct(absolut) • Memory indirect – add r1,@(r3) • Scalat – pt. array-uri. (poate fi implicit pt. toate modurile indexate) • Special (DSP) – modulo, bitreverse (*)

  9. Tipul si dimensiunea operanzilor • Toate procesoarele suporta intregi, (8/16/32/64 biti) • Floating-point (32/64/80 biti) • BCD (pt. aplicatii financiare) • Fixed-point (DSP- 16/32/40biti), saturare • Vertex, pixel (pt. procesare de imagini)

  10. Operatiile din setul de instructiuni • Tipice – aritmetice si logice, transfer (load/store), control (jump,call), • Floating-point • Sistem (OS call, VM management) • String (move, compare, search) • Grafice (operatii pe pixel/vertex) • Instructiuni vectoriale/SIMD • DSP – saturare, rounding, mac

  11. Codificarea setului de instructiuni (encoding) • Cerinte in conflict – multe resurse, code size mic • Restrictii de codificare • Restrictii de impachetare pe VLIW/EPIC • Instructiuni – cu dim. fixa sau variabila • Mai multe moduri de operare • x86/x64, PPC/VLE, ARM/Thumb/Thumb2/ARM V8 • Hardware dedicat pt. decomprimare La compilare: compromis intre dimensiune si performanta

  12. Exemplu de codificare ARM/Thumb16 LDR R0,[SP,#12] 1001 1 000 00001100 (Rt, imm8) ADD R0,R0,1 00 01110 001 000 000 (imm, Rn, Rd) STR R0,[SP,#12] 1001 0 000 00001100 (Rt, imm8) CMP R0,#7 001 01 000 00000111 (Rt, imm8) BNE PC+129 1101 0001 10000001 (cond, imm8) Limitari • Adresareastivei • Dimensiuneaconstantelor • Distanta maxima a unui salt

  13. Imbunatatirea vitezei de procesare • Suntem aproape de limita fizica • Ce distanta poate parcurge unda electromagnetica intr-un ciclu, la o frecventa de 3 GHz? • Legea lui Moore – densitate, nu viteza / consum • Pentru a sustine cresterea performantei trebuie exploatat paralelismul • ILP • Hardware – pipelines, forwarding, dynamic scheduling&renaming, branch prediction, multiple issue, speculare • Software – optimizari(unrolling, scheduling etc.) • SIMD, instructiuni vectoriale, MIMD chiar

  14. Pipelining • Mai multe instruct. se executa simultan • Bazat pe faptul ca intructiunile executa operatii diferite pe parcursul executiei • Important ca stagiile sa fie echilibrate • Altfel e nevoie de buffere • Pipelining-ul adauga overhead • 1/Frecv >clock skew+latch overhead F D E M W F D E M W

  15. RISC vs. CISC • RISC • Permite un pipeline echilibrat • Faciliteaza superpipelining – frecvente mari de executie • Cost hardware mai mic, mai simplu de implementat • CISC • Permite cod mai compact • Nu prea poate fi “pipelined” • Solutia x86 – transformarea “on the fly” in hardware a instructiunilor CISC in micro-instructiuni RISC • Solutia Transmeta – transformarea in software, executia pe VLIW • Low power

  16. Hazards • Sunt situatii care impiedica rularea cursiva – apar ‘pipeline stalls’ • Structural hazards – conflicte de resurse • De ex – memorie cu un singur port, pe pipeline-ul precedent • Apar din motive de ‘cost reduction’ • Data hazards – dependenta de rezultatul instructiunii precedente • Control hazards – din instructiunile de salt (trebuie golit pipeline-ul)

  17. Data hazards • Read After Write (mai rar WAW, WAR) • Forwarding (“bypassing”, “short-circuiting”) • Citirea rezultatului unei instructiuni direct din latch-urile intermediare, fara a astepta scrierea rezultatului in registru • Pipeline interlock • Cand nu se poate rezolva din Forwarding • Lasa rezolvarea in software • “e ilegal sa se foloseasca rezultatul” • NUAL (Non-Unit Assumed Latency)

  18. Control hazards • Procesorul nu stie de unde sa faca ‘fetch’ • ‘pipeline freeze’ sau ‘flush’ • La ‘flush’ tb. avut grija sa nu schimbam ‘starea procesorului’ • Compilatorul poate imbunatati performanta rearanjand codul • Delayed branches – o forma de NUAL • Cancelling/nullifying branches • Branch prediction • Prezice taken/not taken • Prezice unde se sare • Predication

  19. Branch prediction • Predictori simpli – tabela de ‘istorie’ care tine minte daca e ‘taken’ sau ‘not taken’ • 1 bit vs. 2 bit • Predictori corelati (pe 2 nivele) • Tine minte daca ultimul salt executat a fost ‘taken’ sau ‘not taken’ • Practic am 2 predictori simpli, aleg pe baza istoriei globale • Branch target buffers • Memoreaza si adresa la care se sare

  20. Branch prediction • Sugestii din partea compilatorului • Eliminarea branch-urilor prin predicare CMP R1,R2 ADDNE R3,R4,R5 • Mai multe coduri de conditii CMPW CR0, R1,R2 • Registri de predicate – IA64 cmp.ne p2,p3 = r5,r0 ;; (p2) add r6 = 8, r5 (p3) add r6 = 12, r5

  21. Probleme ridicate de pipelining • Tratarea exceptiilor • Mai multe instruct. simultan, exceptiile pot aparea ‘out of order’ • Set complex de instructiuni, instructiuni multiciclu • Se face pipeline pe microinstructiuni • Instruct. multiciclu ‘bucleaza’ pe acelasi stagiu • Pt. exceptii – history file/future file

  22. Dynamic scheduling • Pe baza de ‘scoreboard’ • Issue in-order, execute out-of-order, complete in-order • Se executa doar daca nu depinde de instruct. precedente • Pe baza de ‘reservation station’ • Face ‘register renaming’ • “algoritmul lui Tomasulo” • Controlul e distribuit

  23. Algoritmul lui Tomasulo FP Registers From Mem FP Op Queue Load Buffers Load1 Load2 Load3 Load4 Load5 Load6 Store Buffers Add1 Add2 Add3 Mult1 Mult2 Reservation Stations To Mem FP adders FP multipliers Common Data Bus (CDB)

  24. Reservation Station Components Op: Operatia ce se executa (de ex., + sau –) Vj, Vk: Valoarea operanzilor sursa • Store buffers au un singur V Qj, Qk: RS care produc registrii sursa (valoarea din operanzi) • Nota: Nu exista ‘ready flag’; Qj,Qk=0 => ready • Store buffers au un singur Qi Busy: Indica RS sau FU ocupat Register result status— Indica ce FU va scrie fiecare registru (daca e cazul). E gol cand nu exista instructiuni in executie ce urmeaza sa scrie acel registru

  25. Stagii in Algoritmul Tomasulo 1. Issue—ia instructiuni din FP Op Queue Daca RS e liber (nu exista hazard structural) lanseaza instructiunea & trimite operanzii 2. Execution— executa operatia propriu-zisa (EX) Cand valoarea ambilor operanzi e cunoscuta; daca nu e cunoscuta, urmareste Common Data Bus 3. Write result—termina executia(WB) Scrie rezultatul pe Common Data Bus pentru toate unitatile care asteapta; marcheaza RS ca ‘ready’ • Normal data bus: data + destination (“go to” bus) • Common data bus: data + source (“come from” bus) • 64 bits data + 4 bits Functional Unit source address

  26. Exemplu (Tomasulo)

  27. Exemplu(Tomasulo) ciclul 1

  28. Exemplu(Tomasulo) ciclul 2 Pot exista mai multe instructiuni load in executie

  29. Exemplu(Tomasulo) ciclul 3 • Nota: registrii nu mai sunt folositi ulterior (“register renaming”) • Load1 se termina; cine asteapta dupa Load1?

  30. Exemplu(Tomasulo) ciclul 4 • Load2 se termina; cine asteapta dupa Load2?

  31. Exemplu(Tomasulo) ciclul 5

  32. Exemplu(Tomasulo) ciclul 6 • La scoreboard, ADDD nu ar fi putut fi executata

  33. Exemplu(Tomasulo) ciclul 7 • Add1 se termina; cine asteapta dupa el?

  34. Exemplu(Tomasulo) ciclul 8

  35. Exemplu(Tomasulo) ciclul 9

  36. Exemplu(Tomasulo) ciclul 10 • Add2 se termina; cine asteapta rezultatul?

  37. Exemplu(Tomasulo) ciclul 11 • ADDD poate scrie rezultatul acum(la scoreboard nu) • Toate instructiunile ‘rapide’ se termina acum

  38. Exemplu(Tomasulo) ciclul 12

  39. Exemplu(Tomasulo) ciclul 13

  40. Exemplu(Tomasulo) ciclul 14

  41. Exemplu(Tomasulo) ciclul 15

  42. Exemplu(Tomasulo) ciclul 16

  43. Exemplu(Tomasulo) • s.a.m.d – se termina si DIV-ul • Tomasulo: • Issue in-order • Executie, completare out-of-order • Slabiciunea principala – CDB • Multe scrieri asociative, la viteza mare

  44. Multiple issue • Implicit (Dinamic, Hw) • Explicit(static, Sw) VLIW/VLES/EPIC • TI/StarCore/Itanium (IA64) • Instructiuni EPIC - semantica + restrictii • SuperScalar • Poate fi out-of-order sau nu! • N-way superscalar – cate poate lansa in executie simultan • Ciclul de ‘issue’ e pe critical path. Cum poate fi impartit?

  45. Executia speculativa • Executia speculativa. • Retragerea instructiunilor in ordine • Probleme: exceptii • Ex: acces invalid la memorie • Unele exceptii trebuie sa fie precise (ex. floating point) • Implementare: Reorder Buffer • Issue, Execute, Write, Commit • Ce se intampla cand un branch e prezis incorect?

  46. Memorii • Principiul localitatii • Registri – Cache – Memorie – I/O • Tipul de cache • Mapat direct, complet asociativ, set-asociativ pe n cai • Politici de inlocuire – random, LRU, FIFO • Write through, write back

  47. Ierarhia de memorie • Ne intereseaza cache pt. a optimiza accesul la variabile • Instructiuni de control explicit al cache-ului • Reg – de multe ori sunt mai multi reg. hw. decat “registri vizibili arhitectural”. • I/O – memorie virtuala

More Related