1 / 29

Instructie set: principes

Instructie set: principes. classificatie van instructie sets. classificatie gebaseerd op type intern geheugen op CPU zie fig. 2.1 stapel-architectuur (impliciete operanden) accumulator-architectuur (één operand is impliciet) register-architectuur (expliciete operanden)

Download Presentation

Instructie set: principes

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. Instructie set: principes

  2. classificatie van instructie sets • classificatie gebaseerd op type intern geheugen op CPUzie fig. 2.1 • stapel-architectuur (impliciete operanden) • accumulator-architectuur (één operand is impliciet) • register-architectuur (expliciete operanden) • register-geheugen-architectuur • register-register-architectuur • geheugen-geheugen-architectuur • verdere verdeling van register-architectuur (fig. 2.2) • aantal operanden die uit het geheugen mogen komen • 2 of 3 operanden voor een ALU operatie • voor en nadelen van deze varianten: fig. 2.3

  3. classificatie van instructie sets • voordelen van registers • gemakkelijker te gebruiken voor compiler dan stapel of accumulator • efficiënter dan stapel of accumulator voor lange expressies • registers kunnen variabelen bevatten • minder verkeer met geheugen • vermindert de geheugen-bottleneck • sneller • compactere code • geen echte lange instructies • vermindert de geheugen-bottleneck

  4. classificatie van instructie sets • aantal registers • nodig voor evaluatie van expressies, doorgeven van parameters, bijhouden van variabelen • voor compiler: liefst allemaal algemeen bruikbaar • indien teveel: veel werk bij saven bij procedure oproepen

  5. geheugen adressering • little endian ; big endian (2143 ; 1234) • bytes, half-woorden, woorden, dubbel-woorden • aligneren • adresseringsmodes • fig. 2.5 geeft een mooi overzicht • meest gebruikte: immediate, displacement, register indirect • keuze van adressingsmodes beïnvloeden: • aantal instructies in een programma (IC) • complexiteit van de processor • gemiddelde duur van een instructie (CPI)

  6. geheugen adressering (vervolg) • adresseringsmodes (vervolg) • fig. 2.6-2.9 tonen statistieken van gebruik van deze adresseringsmodes • fig 2.6: immediate, displacement, register deferred of indirect stellen 75% tot 99% van de adresseringsmodes voor • displacement: de grootte die aangeboden wordt beïnvloedt direct de instructielengte (fig 2.7) • immediate: • aangeboden in welke operaties ? (fig. 2.8) • de grootte die aangeboden wordt beïnvloedt direct de instructielengte (fig 2.9)

  7. operaties • verschillende categorieën: zie fig. 2.10 • nieuwe categorie: multimedia instructies • enkele eenvoudige instructies maken vaak een heel groot deel uit van de gebruikte instructies • bv intel : 10 instructies worden 96% van de tijd gebruikt (zie fig. 2.11) • instructies voor control flow • voorwaardelijke sprongen • sprongen • procedure-oproepen • procedure-terugkomst • fig 2.12 toont hun relatief gebruik

  8. operaties (vervolg) • adres specifiëren • relatief aan de programma teller (PC) is meest gebruikte • gebruikt weinig bits • is onafhankelijk van plaats van code • moet gekend zijn op moment van compilatie • maakt de code adres-onafhankelijk • sprongafstand beïnvloedt weer instructielengte (fig. 2.13) • dynamisch adres: meestal register indirect jump • terugkeer van procedure • case bevelen • dynamisch gedeelde bibliotheken • virtuele functies in OO-talen

  9. operaties (vervolg) • 3 belangrijke technieken voor het specifiëren van spronginstructie (fig. 2.14) • met behulp van conditiecode • met behulp van een conditieregister • compare and branch instructie • fig 2.15 toont de frequentie van het gebruik van verschillende soorten testen bij voorwaardelijke sprongen • twee belangrijke methoden voor het saven van registers • caller saving • callee saving • soms gebruikt de compiler een combinatie van de twee

  10. type en grootte van de operanden • twee alternatieven om types te specifiëren • in de opcode van de instructie • als een veld bij de operand (bv symbolics machine), zie museums • floating point: IEEE standard 754 • heel soms nog 4-bit-binary coded decimal • voorlopig is een woord nog typisch 32 bit • in de toekomst zal dat 64 bit worden

  11. codering van instructie set • codering bepaalt • grootte van het gecompileerde programma • implementatie van de CPU • elementen met invloed op grootte van instructie • aantal registers • aantal adresseringsmodes • fig 2.17: drie klassieke keuzen voor encodering • handige lengtes • zeker een veelvoud van bytes • liefst een veelvoud van woorden • vaste lengte: geeft eenvoudigere implementatie maar grotere programma’s

  12. de rol van compilers • vroeger: architectuurbeslissingen moesten het programmeren in assembler gemakkelijk maken • nu: architectuurbeslissingen moeten het werk van de compiler vergemakkelijken • de structuur van een moderne compiler (fig. 2.18) • bestaat uit meerdere passen • vermindert de complexiteit van compilers • geeft soms problemen: sommige hoog-niveau optimisaties moeten gebeuren voordat bepaalde details gekend zijn • bevat taal-onafhankelijke delen die gedeeld kunnen worden door meerdere talen

  13. de rol van compilers (vervolg) • doelstellingen van compilers • correcte code • snelheid van gecompileerde code • snelle compilatie • ondersteuning voor debugging • code van meerdere talen samen gebruiken

  14. de rol van compilers (vervolg) • classificatie van optimisaties (zie fig. 2.19) • hoog-niveau optimisaties: op source code niveau • lokale optimisaties: in stukken code zonder sprongen (basic block) • globale optimisaties: in stukken code over sprongen heen • toekenning van registers: gebruikt een algoritme van grafen kleuren dat goed werkt vanaf 16 registers • machine-afhankelijke optimisaties: maken gebruik van kennis van de architectuur • fig 2.20: vb van effect van optimisaties

  15. de rol van compilers (vervolg) • allocatie van variabelen en hun impact (1) • stapel: • gebruikt voor lokale variabelen • deze worden relatief van stapelwijzer geadresseerd • deze zijn meestal enkelvoudig: geschikt voor register behalve indien een pointer er naar kan wijzen • stapel wordt niet gebruikt om uitdrukkingen te evalueren • globale gegevens-ruimte: • vaak complexere gegevensstructuren en bereikbaar via pointers • niet geschikt voor registers

  16. de rol van compilers (vervolg) • allocatie van variabelen en hun impact (2) • heap: • vaak complexere gegevensstructuren en bereikbaar via pointers • niet geschikt voor registers

  17. de rol van compilers (vervolg) • basisprincipe van compilerconstructie • maak het veelvoorkomend geval snel • maak het zeldzame geval correct • goede architectuur voor een compiler • is regelmatig • weinig uitzonderingen, voorziet alle gevallen • orthogonaal (bv operaties en adresseringsmodes) • biedt primitieven, geen zogenaamde oplossingen (RISC vs CISC) • laat geen moeilijke keuzen tussen alternatieven • wat gekend is bij compilatie moet als constante kunnen opgenomen worden

  18. fouten en valstrikken • fout: er bestaat zoiets als een typisch programma • fig. 2.31: vb van de grootte van gegevens gebruikt in4 programma’s van SPEC92 • fout: een architectuur met fouten kan niet succesvol zijn • vb: de Intel 80x86 • ondersteunt segmentatie en niet paginatie, heeft een accumulator en niet algemene registers, gebruikt een stapel voor FP-data, ... • fout: je kunt een foutloze architectuur ontwerpen • wat een goede architecturale beslissing lijkt vandaag zal binnen een paar jaar als een architecturale fout aanzien worden

  19. fouten en valstrikken (vervolg) • valstrik: CISC aanpak (Complex Instruction Set Computer) • doel: verkleinen van de semantic gap (= afstand tussen semantische waarde van assembler-instr. en hogere programmeertaal-instructies) • grote stijging van kost software in jaren 70 (software crisis) • meer gebruik van hogere programmeertaal • hoe: ontwerp van complexe instructies om hogere programmeertalen te ondersteunen • complexe instructies werden uitgevoerd door microprogrammatie

  20. fouten en valstrikken (vervolg) • CISC aanpak mislukte omdat • moeilijk om instructies te ontwerpen goed voor alle HLL • instructies doen vaak meer dan nodig • instructies slechts gebruikt in beperkte context (semantic clash) • CISC compilers gebruiken uiteindelijk vaak vooral de meer eenvoudige instructies (dus het zogenaamde voordeel van de complexe instructies wordt niet gebruikt) • complexe instructies compliceren de controle eenheid op de CPU, en dit resulteert in tragere simpele instructies

  21. karakteristieken van RISC architecturen 1 klein aantal instructies (nog steeds waar ???) • kleinere opcodes • gemakkelijker te decoderen 2 klein aantal adresseringsmodes • doe complexe adressering in software • dit vergemakkelijkt de instructie set, het decoderen en de controle-eenheid 3 klein aantal instructie-formaten • vaste lengte, veelvoud van woordlengte, vaste lay-out • instructies mogen niet over pagina’s heengaan • tegelijk decoderen en registers ophalen • eenvoudigere controle-eenheid

  22. karakteristieken van RISC architecturen (vervolg) 4 één machine-instructie per klokcyclus • RISC instructies zijn niet ingewikkelder dan de microinstructies in een CISC-architectuur • vereenvoudigt de pipeline 5 geheugen-adressering enkel via LOAD/STORE instructies • eenvoudigere instructie set

  23. karakteristieken van RISC architecturen (vervolg) 6 CPU heeft een relatief groot aantal registers • meeste operaties zijn register-register • vereenvoudigt de instructie set en de controle-eenheid (vgl: VAX: 25 ADD instructies; RISC I en RISC II: 1 of 2 ADD's) • registers zijn bij RISC het algemeen geval, bij CISC waren ze de uitzondering 7 controle-eenheid volledig in hardware (geen microprogrammatie) 8 gerichte inspanning om HLL te ondersteunen • procedures • lokale variabelen • arrays

  24. voordelen van RISC-filosofie • RISC en VLSI realisatie • relatief weinig instructies, weinig adresseringsmodes, weinig instructie formaten • eenvoudig decoderings- en uitvoerings-subsysteem in hardw (= controle eenheid is kleiner) • RISC I 6% • RISC II 10% • MC68020 68% • CISC >50% (in het algemeen) • meer plaats op de chip vrij voor andere doeleinden (registers, cache, I/O poorten, delen van het hoofdgeheugen) • minder verschillende soorten elementen op de chip maakt de chip gemakkelijker te ontwerpen • attractief om op 1 chip te implementeren

  25. voordelen van RISC-filosofie (vervolg) • RISC en snelheid • eenvoudigere en kleinere controle-eenheid is sneller • kleinere instructie set, weinig adresseringsmodes en instructie-formaten betekent een snellere decodering • een groot aantal registers betekent minder geheugentoegangen • register-register operaties zijn sneller dan operaties met geheugentoegang • veel registers maken het mogelijk om parameters via registers door te geven • gestroomlijnde instructieafhandeling is heel geschikt voor een implementatie met pipeline (zie H3 en H4)

  26. voordelen van RISC-filosofie (vervolg) • RISC en ontwerpkost, betrouwbaarheid • eenvoudige controle-eenheid • algemene ontwerpkosten verlagen • minder kans op ontwerpfouten • gemakkelijk om de fouten te vinden en te verbeteren • kortere tijd om een ontwerp te maken • goedkoper • minder kans dat het product verouderd is als het klaar is • eenvoudiger ontwerp van Virtual Memory Management Unit omdat instructies pagina-grenzen niet overschrijden

  27. voordelen van RISC-filosofie (vervolg) • RISC en ondersteuning voor hogere programmeertalen • compilers zijn gemakkelijker te schrijven • omdat er minder instructies zijn om tussen te kiezen • compilers kunnen af zijn als de machine af is • je kunt beter optimiseren in compilers omdat er meer mogelijkheden zijn om code te herorganiseren • groter aantal registers: mogelijk om hun gebruik te optimiseren

  28. overzicht van RISC architecturen • Appendix C: • Hewlett Packard PA-RISC • IBM en Motorola PowerPC • SGI MIPS • Sun SPARC • DLX: voorbeeld-machine van Patterson en Hennessy • figuur C.1: • overzicht van de belangrijkste kenmerken van de eerste versies van deze architecturen • merk de grote gelijkenis op • figuur C.12 • overzicht van dezelfde kenmerken bij enkele CISC-architecturen

  29. overzicht van RISC architecturen (vervolg) • figuur C.14: toegevoegde kenmerken aan de verschillende architecturen • stamboom van de bestaande RISC-architecturen (fig. C.13) • Patterson (auteur van het boek) is de vader van de Berkeley RISC • Hennessy (auteur van het boek) is de vader van de Stanford MIPS

More Related