Instructie set: principes Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 1 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) 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 2 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 3 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 4 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) Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 5 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) Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 6 operaties verschillende categorieën: zie fig. 2.10 enkele eenvoudige instructies maken vaak een heel groot deel uit van de gebruikte instructies nieuwe categorie: multimedia 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 7 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 8 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 9 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 10 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 11 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 12 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 13 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 14 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: Yolande Berbers vaak complexere gegevensstructuren en bereikbaar via pointers niet geschikt voor registers Structuur en Organisatie van Computersystemen: deel 2 slide 15 de rol van compilers (vervolg) allocatie van variabelen en hun impact (2) heap: Yolande Berbers vaak complexere gegevensstructuren en bereikbaar via pointers niet geschikt voor registers Structuur en Organisatie van Computersystemen: deel 2 slide 16 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 17 fouten en valstrikken fout: er bestaat zoiets als een typisch programma fig. 2.31: vb van de grootte van gegevens gebruikt in 4 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 18 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 19 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 20 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 21 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 22 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 23 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 24 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) Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 25 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 26 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 27 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 28 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 Yolande Berbers Structuur en Organisatie van Computersystemen: deel 2 slide 29