Centrale verwerkingseenheid

0 Comments
zie ook: processorontwerp

blokdiagram van een eenvoudige uniprocessor-CPU-computer. Zwarte lijnen geven de gegevensstroom aan, terwijl rode lijnen de controlestroom aangeven; pijlen geven de stroomrichtingen aan.

Hardwired in een CPU”s circuits is een set van basisbewerkingen die het kan uitvoeren, genaamd een instructieset. Dergelijke bewerkingen kunnen bijvoorbeeld bestaan uit het optellen of aftrekken van twee getallen, het vergelijken van twee getallen of het springen Naar een ander deel van een programma., Elke basisbewerking wordt vertegenwoordigd door een bepaalde combinatie van bits, bekend als de machinetaal opcode; tijdens het uitvoeren van instructies in een machinetaalprogramma, bepaalt de CPU welke bewerking moet worden uitgevoerd door de opcode te “decoderen”. Een complete machinetaalinstructie bestaat uit een opcode en, in veel gevallen, extra bits die argumenten voor de operatie specificeren (bijvoorbeeld de getallen die moeten worden opgeteld in het geval van een optelling). Op de schaal van complexiteit, een machinetaal programma is een verzameling van machinetaal instructies die de CPU uitvoert.,

de werkelijke wiskundige bewerking voor elke instructie wordt uitgevoerd door een combinationele logische schakeling binnen de processor van de CPU, bekend als de rekenkundige logische eenheid of ALU. In het algemeen voert een CPU een instructie uit door het uit het geheugen te halen, de ALU te gebruiken om een operatie uit te voeren, en vervolgens het resultaat op te slaan in het geheugen., Naast de instructies voor integer wiskunde en logische bewerkingen bestaan er diverse andere machine-instructies, zoals die voor het laden van gegevens uit het geheugen en het terug opslaan, vertakkingen en wiskundige bewerkingen op floating-point getallen uitgevoerd door de floating-point unit (FPU) van de CPU.

Control unitEdit

hoofdartikel: Control unit

De control unit (CU) is een onderdeel van de CPU dat de werking van de processor stuurt., Het vertelt de computer ‘ s geheugen, rekenkundige en logische eenheid en input en output apparaten hoe te reageren op de instructies die zijn verzonden naar de processor.

Het stuurt de werking van de andere eenheden door het verstrekken van timing-en besturingssignalen. De meeste computerbronnen worden beheerd door de CU. Het stuurt de stroom van gegevens tussen de CPU en de andere apparaten. John von Neumann nam de besturingseenheid op als onderdeel van de von Neumann-architectuur., In moderne computerontwerpen is de besturingseenheid typisch een intern onderdeel van de CPU met zijn algemene rol en werking onveranderd sinds zijn introductie.

Arithmetic logic unitEdit

Main article: Arithmetic logic unit

symbolische representatie van een ALU en zijn in-en uitvoersignalen

De arithmetic logic unit (ALU) is een digitaal circuit binnen de processor dat gehele rekenkundige en bitwise logische bewerkingen uitvoert., De ingangen naar de ALU zijn de te bedienen gegevenswoorden (zogenaamde operanden), statusinformatie van eerdere bewerkingen en een code van de regeleenheid die aangeeft welke bewerking moet worden uitgevoerd. Afhankelijk van de instructie die wordt uitgevoerd, kunnen de operanden afkomstig zijn van interne CPU registers of extern geheugen, of ze kunnen constanten zijn gegenereerd door de ALU zelf.

wanneer alle ingangssignalen zich hebben gestabiliseerd en zich via het ALU-circuit hebben verspreid, verschijnt het resultaat van de uitgevoerde bewerking op de ALU-uitgangen., Het resultaat bestaat uit zowel een data woord, dat kan worden opgeslagen in een register of geheugen, en statusinformatie die meestal wordt opgeslagen in een speciale, interne CPU register gereserveerd voor dit doel.

Address generation unitEdit

Main article: Address generation unit

Address generation unit (AGU), ook wel address computation unit (ACU) genoemd, is een uitvoeringseenheid binnen de CPU die adressen berekent die door de CPU worden gebruikt om toegang te krijgen tot het hoofdgeheugen., Door adresberekeningen te laten verwerken door aparte circuits die parallel met de rest van de CPU werken, kan het aantal CPU-cycli dat nodig is voor het uitvoeren van verschillende machine-instructies worden verminderd, waardoor prestatieverbeteringen worden bereikt.

tijdens het uitvoeren van verschillende bewerkingen moeten CPU ‘ s geheugenadressen berekenen die nodig zijn voor het ophalen van gegevens uit het geheugen; bijvoorbeeld, in-memory posities van array elementen moeten worden berekend voordat de CPU de gegevens van de werkelijke geheugenlocaties kan ophalen., Deze adresgeneratieberekeningen omvatten verschillende gehele rekenkundige bewerkingen, zoals optellen, aftrekken, modulobewerkingen of bitverschuivingen. Het berekenen van een geheugenadres impliceert vaak meer dan één algemene machineinstructie, die niet noodzakelijk decoderen en snel uitvoeren. Door het integreren van een AGU in een CPU-ontwerp, samen met de introductie van gespecialiseerde instructies die de AGU gebruiken, kunnen verschillende adresgeneratieberekeningen worden gelost van de rest van de CPU, en kunnen vaak snel worden uitgevoerd in een enkele CPU-cyclus.,

De mogelijkheden van een AGU zijn afhankelijk van een bepaalde CPU en zijn architectuur. Dus sommige AGUs implementeren en bloot meer adres-berekening operaties, terwijl sommige ook meer geavanceerde gespecialiseerde instructies die kunnen werken op meerdere operanden tegelijk. Bovendien bevatten sommige CPU-architecturen meerdere Agu ‘ s, zodat meer dan één adresberekeningsoperatie tegelijkertijd kan worden uitgevoerd, waardoor verdere prestatieverbeteringen worden bereikt door gebruik te maken van het superscalaire karakter van geavanceerde CPU-ontwerpen., Bijvoorbeeld, Intel bevat meerdere AGUs in de Sandy Bridge en Haswell microarchitectures, die verhoog de bandbreedte van de CPU geheugen subsysteem door het toestaan van meerdere geheugen-toegang instructies te worden uitgevoerd in parallel.

Memory management unit (MMU)bewerken

Main article: Memory management unit

De meeste high-end microprocessors (in desktop, laptop, server computers) hebben een memory management unit, die logische adressen omzet in fysieke RAM-adressen, geheugenbescherming en paging mogelijkheden biedt, handig voor virtueel geheugen., Eenvoudigere processors, vooral microcontrollers, bevatten meestal geen MMU.

CacheEdit

een CPU-cache is een hardware-cache die wordt gebruikt door de centrale verwerkingseenheid (CPU) van een computer om de gemiddelde kosten (tijd of energie) te verminderen om toegang te krijgen tot gegevens uit het hoofdgeheugen. Een cache is een kleiner, sneller geheugen, dichter bij een processorkern, die kopieën van de gegevens van veelgebruikte belangrijkste geheugenlocaties opslaat. De meeste CPU ‘ s hebben verschillende onafhankelijke caches, met inbegrip van instructie en data caches, waar de data cache is meestal georganiseerd als een hiërarchie van meer cache niveaus (L1, L2, L3, L4, enz.,).

alle moderne (snelle) CPU ‘ s (met enkele gespecialiseerde uitzonderingen) hebben meerdere niveaus van CPU-caches. De eerste CPU ‘ s die een cache gebruikten, hadden slechts één cacheniveau; in tegenstelling tot de latere caches van niveau 1 werd deze niet opgesplitst in L1d (voor data) en L1i (voor instructies). Bijna alle huidige CPU ‘ s met caches hebben een gesplitste L1 cache. Ze hebben ook L2 caches en, voor grotere processors, L3 caches ook. De L2 cache is meestal niet gesplitst en fungeert als een gemeenschappelijke repository voor de reeds gesplitste L1 cache. Elke kern van een multi-core processor heeft een speciale L2 cache en wordt meestal niet gedeeld tussen de cores., De L3 cache, en caches op een hoger niveau, worden gedeeld tussen de cores en worden niet gesplitst. Een L4 cache is momenteel ongewoon, en is over het algemeen op dynamic random-access memory (DRAM), in plaats van op static random-access memory (SRAM), op een aparte die Of chip. Dat was historisch ook het geval met L1, terwijl grotere chips integratie van het en over het algemeen alle cache levels hebben toegestaan, met de mogelijke uitzondering van het laatste level. Elk extra niveau van cache heeft de neiging groter te zijn en anders te worden geoptimaliseerd.,

andere typen caches bestaan (die niet worden meegeteld voor de “cachegrootte” van de belangrijkste hierboven genoemde caches), zoals de translation lookaside buffer (TLB) die deel uitmaakt van de memory management unit (MMU) die de meeste CPU ‘ s hebben.

Caches zijn over het algemeen groot in bevoegdheden van twee: 4, 8, 16 enz. KiB of MiB (voor grotere niet-L1) maten, hoewel de IBM z13 een 96 KiB L1 instructie cache heeft.

kloksnelheid

Main article: kloksnelheid

De meeste CPU ‘ s zijn synchrone circuits, wat betekent dat ze een kloksignaal gebruiken om hun sequentiële operaties te versnellen., Het kloksignaal wordt geproduceerd door een extern oscillatorcircuit dat een consistent aantal pulsen per seconde genereert in de vorm van een periodieke vierkante golf. De frequentie van de klokpulsen bepaalt de snelheid waarmee een CPU instructies uitvoert en, bijgevolg, hoe sneller de klok, hoe meer instructies de CPU elke seconde zal uitvoeren.

om een goede werking van de CPU te garanderen, is de klokperiode langer dan de maximale tijd die nodig is voor alle signalen om zich door de CPU te verspreiden., Bij het instellen van de klokperiode op een waarde ruim boven de worst-case propagatie vertraging, is het mogelijk om de hele CPU en de manier waarop het beweegt gegevens rond de “randen” van de stijgende en dalende klok signaal te ontwerpen. Dit heeft het voordeel dat de CPU aanzienlijk vereenvoudigd wordt, zowel vanuit een ontwerpperspectief als vanuit een component-telling perspectief. Echter, het draagt ook het nadeel dat de hele CPU moet wachten op de traagste elementen, hoewel sommige delen van het zijn veel sneller. Deze beperking is grotendeels gecompenseerd door verschillende methoden van toenemende CPU parallellisme (zie hieronder).,

architecturale verbeteringen alleen lossen echter niet alle nadelen van globaal synchrone CPU ‘ s op. Een kloksignaal is bijvoorbeeld onderhevig aan de vertragingen van een ander elektrisch signaal. Hogere kloksnelheden in steeds complexere CPU ‘ s maken het moeilijker om het kloksignaal in fase (gesynchroniseerd) te houden in de Gehele unit. Dit heeft ertoe geleid dat veel moderne CPU ‘ s meerdere identieke kloksignalen moeten worden verstrekt om te voorkomen dat het vertragen van een enkel signaal aanzienlijk genoeg om de CPU defect te veroorzaken., Een ander belangrijk probleem, als kloksnelheden dramatisch toenemen, is de hoeveelheid warmte die wordt afgevoerd door de CPU. De voortdurend veranderende klok zorgt ervoor dat veel componenten om te schakelen, ongeacht of ze worden gebruikt op dat moment. In het algemeen gebruikt een component die schakelt meer energie dan een element in een statische toestand. Daarom neemt de kloksnelheid toe, dus ook het energieverbruik, waardoor de CPU meer warmteafvoer nodig heeft in de vorm van CPU-koeloplossingen.,

een methode om om te gaan met het schakelen van onnodige componenten wordt clock gating genoemd, waarbij het kloksignaal wordt uitgeschakeld naar onnodige componenten (effectief uitschakelen). Dit wordt echter vaak als moeilijk te implementeren beschouwd en ziet daarom geen algemeen gebruik buiten ontwerpen met een zeer laag vermogen. Een opmerkelijke recente CPU-ontwerp dat gebruik maakt van uitgebreide klok gating is de IBM PowerPC-gebaseerde Xenon gebruikt in de Xbox 360; op die manier, stroomvereisten van de Xbox 360 zijn sterk verminderd., Een andere methode om een aantal van de problemen met een globaal kloksignaal aan te pakken is het verwijderen van het kloksignaal helemaal. Terwijl het verwijderen van het globale kloksignaal het ontwerpproces op veel manieren aanzienlijk complexer maakt, bieden asynchrone (of klokloze) ontwerpen duidelijke voordelen in stroomverbruik en warmteafvoer in vergelijking met soortgelijke synchrone ontwerpen. Hoewel enigszins ongewoon, hele asynchrone CPU ‘ s zijn gebouwd zonder gebruik te maken van een wereldwijde klok signaal. Twee opmerkelijke voorbeelden hiervan zijn het ARM compliant AMULET en de MIPS R3000 compatibele MiniMIPS.,

in plaats van het kloksignaal volledig te verwijderen, staan sommige CPU-ontwerpen toe dat bepaalde delen van het apparaat asynchroon zijn, zoals het gebruik van asynchrone Alu ‘ s in combinatie met superscalar pipelining om enige rekenkundige prestatiewinst te behalen. Hoewel het niet helemaal duidelijk is of volledig asynchrone ontwerpen kunnen presteren op een vergelijkbaar of beter niveau dan hun synchrone tegenhangers, is het duidelijk dat ze op zijn minst uitblinken in eenvoudigere wiskundige bewerkingen., Dit, in combinatie met hun uitstekende stroomverbruik en warmteafvoer eigenschappen, maakt ze zeer geschikt voor embedded computers.

spanningsregelaar moduledit

Main article: Spanningsregelaarmodule

veel moderne CPU ‘ s hebben een geïntegreerde vermogensbeheermodule die de spanning op aanvraag regelt naar de CPU-circuits waardoor deze een evenwicht kan houden tussen prestaties en energieverbruik.

Integer rangedit

elke CPU vertegenwoordigt numerieke waarden op een specifieke manier., Bijvoorbeeld, sommige vroege digitale computers vertegenwoordigd getallen als bekende decimale (basis 10) Cijfer systeemwaarden, en anderen hebben gebruikt meer ongewone representaties zoals ternaire (basis drie). Bijna alle moderne CPU ‘ s vertegenwoordigen getallen in binaire vorm, waarbij elk cijfer wordt vertegenwoordigd door een of andere twee-gewaardeerde fysieke hoeveelheid zoals een “hoge” of “lage” spanning.

Een zes-Bits woord dat de binaire gecodeerde weergave van decimale waarde 40 bevat. De meeste moderne CPU ‘ s gebruiken woordgroottes die een kracht van twee zijn, bijvoorbeeld 8, 16, 32 of 64 bits.,

gerelateerd aan numerieke representatie is de grootte en precisie van gehele getallen die een CPU kan vertegenwoordigen. In het geval van een binaire CPU, wordt dit gemeten door het aantal bits (significante cijfers van een binaire gecodeerde integer) dat de CPU in één verrichting kan verwerken, die gewoonlijk woordgrootte, bitbreedte, breedte van het gegevenspad, integer precisie, of integer grootte wordt genoemd. Een CPU ‘ s integer grootte bepaalt het bereik van integer waarden kan direct werken op., Bijvoorbeeld, een 8-bit CPU kan direct gehele getallen manipuleren vertegenwoordigd door acht bits, die een bereik van 256 (28) discrete gehele getallen hebben.

Integer bereik kan ook van invloed zijn op het aantal geheugenlocaties dat de CPU direct kan adresseren (een adres is een integer waarde die een specifieke geheugenlocatie vertegenwoordigt). Bijvoorbeeld, als een binaire CPU 32 bits gebruikt om een geheugenadres weer te geven, dan kan het direct 232 geheugenlocaties benaderen. Om deze beperking te omzeilen en om diverse andere redenen, gebruiken sommige CPU ‘ s mechanismen (zoals bank switching) waarmee extra geheugen kan worden aangepakt.,

CPU ‘ s met grotere woordgroottes vereisen meer circuits en zijn bijgevolg fysiek groter, kosten meer en verbruiken meer stroom (en genereren dus meer warmte). Als gevolg hiervan worden kleinere 4 – of 8-bit microcontrollers vaak gebruikt in moderne toepassingen, hoewel CPU ‘ s met veel grotere woordgroottes (zoals 16, 32, 64, zelfs 128-bit) beschikbaar zijn. Wanneer echter hogere prestaties vereist zijn, kunnen de voordelen van een grotere woordgrootte (Grotere gegevensbereiken en adresruimtes) opwegen tegen de nadelen. Een CPU kan interne gegevenspaden hebben die korter zijn dan de woordgrootte om grootte en kosten te verminderen., Bijvoorbeeld, hoewel de IBM System/360 instructieset een 32-bits instructieset was, hadden de System/360 Model 30 en Model 40 8-bits datapaden in de rekenkundige logische eenheid, zodat een 32-bits add vier cycli vereiste, één voor elke 8 bits van de operanden, en hoewel de Motorola 68000-serie instructieset een 32-bits instructieset was, hadden de Motorola 68000 en Motorola 68010 16-bits datapaden in de rekenkundige logische eenheid, zodat een 32-bits add twee cycli vereiste.,

om enkele van de voordelen van zowel lagere als hogere bitlengtes te verkrijgen, hebben veel instructiesets verschillende bitbreedtes voor integer-en floating-point-gegevens, waardoor CPU ‘ s die die instructieset implementeren verschillende bitbreedtes hebben voor verschillende delen van het apparaat. Bijvoorbeeld, de IBM System/360 instructieset was voornamelijk 32 bits, maar ondersteunde 64-bits floating point waarden om een grotere nauwkeurigheid en bereik in floating point getallen te vergemakkelijken., System / 360 model 65 had een 8-bits adder voor decimale en fixed-point binaire rekenkunde en een 60-bits adder voor floating-point rekenkunde. Veel latere CPU-ontwerpen gebruiken vergelijkbare gemengde bitbreedte, vooral wanneer de processor bedoeld is voor algemeen gebruik waar een redelijke balans van integer en floating point-mogelijkheden vereist is.,

ParallelismEdit

Main article: Parallel computing

Model van een SUBCALAIRE CPU, waarin het vijftien klokcycli vergt om drie instructies te voltooien

de beschrijving van de basisbewerking van een CPU die in de vorige paragraaf wordt aangeboden, beschrijft de eenvoudigste vorm die een CPU kan aannemen. Dit type CPU, gewoonlijk aangeduid als subscalar, werkt op en voert één instructie uit op één of twee gegevensstukken tegelijk, dat is minder dan één instructie per klokcyclus (IPC < 1).,

Dit proces leidt tot een inherente inefficiëntie in subscalaire CPU ‘ s. Aangezien slechts één instructie tegelijk wordt uitgevoerd, moet de gehele CPU wachten tot die instructie is voltooid alvorens door te gaan naar de volgende instructie. Als gevolg daarvan, de SUBSCALAR CPU krijgt “opgehangen” op instructies die meer dan een klok cyclus te nemen om de uitvoering te voltooien. Zelfs het toevoegen van een tweede uitvoeringseenheid (zie hieronder) verbetert de prestaties niet veel; in plaats van één weg die wordt opgehangen, worden nu twee wegen opgehangen en wordt het aantal ongebruikte transistors verhoogd., Dit ontwerp, waarin de CPU ‘ s uitvoering middelen kunnen werken op slechts één instructie tegelijk, kan alleen mogelijk bereiken scalaire prestaties (een instructie per klok cyclus, IPC = 1). De prestaties zijn echter bijna altijd subscalair (minder dan één instructie per klokcyclus, IPC < 1).

pogingen om scalaire en betere prestaties te bereiken hebben geresulteerd in een verscheidenheid aan ontwerpmethodologieën die ervoor zorgen dat de CPU zich minder lineair en meer parallel gedraagt., Wanneer wordt verwezen naar parallellisme in CPU ‘ s, worden over het algemeen twee termen gebruikt om deze ontwerptechnieken te classificeren:

  • instruction-level parallellism (ILP), dat tot doel heeft de snelheid waarmee instructies worden uitgevoerd binnen een CPU te verhogen (dat wil zeggen om het gebruik van on-die execution resources te verhogen);
  • task-level parallellism (TLP), dat tot doel heeft het aantal threads of processen te verhogen die een CPU gelijktijdig kan uitvoeren.,

elke methodologie verschilt zowel in de manier waarop ze worden geïmplementeerd, als in de relatieve effectiviteit die ze bieden bij het verhogen van de prestaties van de CPU voor een toepassing.

Instruction-level parallelismEdit

Main article: Instruction-level parallelisme

Basic five-stage pipeline. In het beste geval kan deze pijplijn een voltooiingspercentage van één instructie per klokcyclus ondersteunen.,

een van de eenvoudigste methoden die gebruikt worden om meer parallellisme te bereiken is om te beginnen met de eerste stappen van instructie Fetchen en decoderen voordat de vorige instructie klaar is met uitvoeren. Dit is de eenvoudigste vorm van een techniek die bekend staat als instructie pipelining, en wordt gebruikt in bijna alle moderne CPU ‘ s voor algemeen gebruik. Pipelining maakt het mogelijk om meer dan één instructie op een bepaald moment uit te voeren door het uitvoeringstraject in afzonderlijke fasen op te splitsen., Deze scheiding kan worden vergeleken met een assemblagelijn, waarin een instructie in elke fase completer wordt gemaakt totdat deze de uitvoeringspijplijn verlaat en wordt stopgezet.

Pipelining introduceert echter de mogelijkheid voor een situatie waarin het resultaat van de vorige operatie nodig is om de volgende operatie te voltooien; een voorwaarde die vaak data dependency conflict wordt genoemd. Om hiermee om te gaan, moet extra zorg worden genomen om te controleren op dit soort omstandigheden en vertragen een deel van de instructie pijplijn als dit gebeurt., Natuurlijk vereist dit extra circuits, dus pipelined processors zijn complexer dan subscalaire (hoewel niet erg significant zo). Een pipelined processor kan worden zeer bijna scalair, geremd alleen door pijpleiding kramen (een instructie besteden meer dan een klok cyclus in een fase).

een eenvoudige superschaalpijplijn. Door twee instructies tegelijk op te halen en te verzenden, kunnen maximaal twee instructies per klokcyclus worden voltooid.,

verdere verbetering van het idee van instructie pipelining leidde tot de ontwikkeling van een methode die de inactieve tijd van CPU-componenten nog verder vermindert. Ontwerpen waarvan wordt gezegd dat ze superscalar zijn, omvatten een lange instructiepijplijn en meerdere identieke uitvoeringseenheden, zoals load-store-eenheden, rekenkundig-logische eenheden, floating-point-eenheden en adresgeneratie-eenheden. In een superscalar pijplijn worden meerdere instructies gelezen en doorgegeven aan een dispatcher, die beslist of de instructies al dan niet parallel (gelijktijdig) kunnen worden uitgevoerd., Als dat het geval is, worden ze naar beschikbare uitvoeringseenheden verzonden, wat resulteert in de mogelijkheid om meerdere instructies gelijktijdig uit te voeren. In het algemeen, hoe meer instructies een SUPERSCALAR CPU in staat is om gelijktijdig te verzenden naar wachtende uitvoering eenheden, hoe meer instructies zullen worden voltooid in een bepaalde cyclus.

het grootste deel van de moeilijkheid in het ontwerp van een SUPERSCALAR CPU-architectuur ligt in het creëren van een effectieve dispatcher., De dispatcher moet snel en correct kunnen bepalen of opdrachten parallel kunnen worden uitgevoerd, en ze zo kunnen verzenden dat zoveel mogelijk uitvoeringseenheden bezig blijven. Dit vereist dat de instructie pijplijn wordt gevuld zo vaak mogelijk en geeft aanleiding tot de behoefte in superscalar architecturen voor aanzienlijke hoeveelheden CPU cache. Het maakt ook risico-vermijden technieken zoals branch voorspelling, speculatieve uitvoering, register hernoemen, out-of-order uitvoering en transactioneel geheugen cruciaal voor het handhaven van hoge niveaus van prestaties., Door te proberen te voorspellen welke tak (of pad) een voorwaardelijke instructie zal nemen, kan de CPU het aantal keren minimaliseren dat de hele pijplijn moet wachten totdat een voorwaardelijke instructie is voltooid. Speculatieve uitvoering biedt vaak bescheiden prestaties verhoogt door het uitvoeren van delen van de code die niet nodig zijn nadat een voorwaardelijke operatie is voltooid. Out-of-order execution herschikt enigszins de volgorde waarin instructies worden uitgevoerd om vertragingen als gevolg van gegevensafhankelijkheden te verminderen., Ook in het geval van een enkele instructie stream, meerdere Data stream—een geval waarin veel gegevens van hetzelfde type moet worden verwerkt—, moderne processors kunnen delen van de pijplijn uit te schakelen, zodat wanneer een enkele instructie wordt uitgevoerd vele malen, de CPU slaat de fetch en decoderen fasen en dus sterk verhoogt de prestaties bij bepaalde gelegenheden, vooral in zeer eentonige programma motoren zoals video creatie software en foto-verwerking.,

in het geval dat een deel van de CPU superscalair is en een deel dat niet is, wordt het deel dat niet is een prestatiestraf opgelegd als gevolg van planningskramen. De Intel P5 Pentium had twee Superscalar Alu ‘ s die elk één instructie per klokcyclus konden accepteren, maar de FPU kon niet één instructie per klokcyclus accepteren. Dus de P5 was integer superscalar maar niet floating point superscalar. Intel ‘ s opvolger van de P5-architectuur, P6, voegde superscalaire mogelijkheden toe aan de floating point-functies, en zorgde daarmee voor een aanzienlijke toename van de floating point-instructieprestaties.,

zowel eenvoudige pipelining als superscalair ontwerp verhogen de ILP van een CPU doordat een enkele processor instructies kan uitvoeren met snelheden die één instructie per klokcyclus overschrijden. De meeste moderne CPU-ontwerpen zijn op zijn minst enigszins superscalar, en bijna alle algemene CPU ‘ s ontworpen in het afgelopen decennium zijn superscalar. In latere jaren is een deel van de nadruk bij het ontwerpen van high-ILP computers verplaatst uit de hardware van de CPU en naar de software-interface, of instruction set architecture (Isa)., De strategie van het zeer lange instructiewoord (VLIW) zorgt ervoor dat sommige ILP direct wordt geïmpliceerd door de software, waardoor de hoeveelheid werk die de CPU moet verrichten om ILP te stimuleren wordt verminderd en daarmee de complexiteit van het ontwerp wordt verminderd.

taak-niveau parallelismEdit

Main articles: Multithreading en Multi-core processor

een andere strategie om prestaties te bereiken is om meerdere threads of processen parallel uit te voeren. Dit onderzoeksgebied staat bekend als parallel computing. In Flynn ‘ s taxonomie staat deze strategie bekend als multiple instruction stream, multiple data stream (MIMD).,

Eén technologie die hiervoor werd gebruikt was multiprocessing (MP). De eerste smaak van deze technologie staat bekend als symmetric multiprocessing (SMP), waar een klein aantal CPU ‘ s een coherent beeld van hun geheugensysteem delen. In dit schema heeft elke CPU extra hardware om een constant up-to-date beeld van het geheugen te behouden. Door het vermijden van muf uitzicht op het geheugen, de CPU ’s kunnen samenwerken aan hetzelfde programma en programma’ s kunnen migreren van de ene CPU naar de andere., Om het aantal samenwerkende CPU ’s te verhogen tot meer dan een handvol, werden in de jaren negentig programma’ s zoals non-uniform memory access (NUMA) en Directory-based coherence protocollen geïntroduceerd. SMP-systemen zijn beperkt tot een klein aantal CPU ‘ s, terwijl NUMA-systemen zijn gebouwd met duizenden processors. In eerste instantie werd multiprocessing gebouwd met behulp van meerdere discrete CPU ‘ s en boards om de verbinding tussen de processors te implementeren., Wanneer de processors en hun interconnect allemaal worden geïmplementeerd op een enkele chip, staat de technologie bekend als chip-level multiprocessing (CMP) en de single chip als een multi-core processor.

later werd erkend dat fijner-grain parallellisme bestond met een enkel programma. Een enkel programma kan meerdere threads (of functies) hebben die afzonderlijk of parallel kunnen worden uitgevoerd. Enkele van de vroegste voorbeelden van deze technologie geïmplementeerd input/output verwerking zoals directe toegang tot het geheugen als een aparte thread van de berekening thread., Een meer algemene benadering van deze technologie werd geïntroduceerd in de jaren 1970, toen systemen werden ontworpen om meerdere berekeningen threads parallel lopen. Deze technologie staat bekend als multi-threading (MT). Deze aanpak wordt beschouwd als kosteneffectiever dan multiprocessing, omdat slechts een klein aantal componenten binnen een CPU wordt gerepliceerd om MT te ondersteunen in tegenstelling tot de volledige CPU in het geval van MP. In MT worden de uitvoereenheden en het geheugensysteem inclusief de caches gedeeld tussen meerdere threads., Het nadeel van MT is dat de hardwareondersteuning voor multithreading zichtbaarder is voor software dan die van MP en dus moeten supervisorsoftware zoals besturingssystemen grotere veranderingen ondergaan om MT te ondersteunen. Een type MT dat werd geà mplementeerd is bekend als temporal multithreading, waar een thread wordt uitgevoerd totdat het is vastgelopen wachten op gegevens om terug te keren uit extern geheugen. In dit schema zou de CPU dan snel context schakelen naar een andere thread die klaar is om te draaien, de switch vaak gedaan in een CPU klok cyclus, zoals de UltraSPARC T1., Een ander type MT is gelijktijdige multithreading, waarbij instructies van meerdere threads parallel worden uitgevoerd binnen één CPU-klokcyclus.

gedurende enkele decennia van de jaren zeventig tot het begin van de jaren 2000 was de focus bij het ontwerpen van hoogwaardige CPU ‘ s voor algemeen gebruik voornamelijk gericht op het bereiken van een hoog ILP door middel van technologieën zoals pipelining, caches, superscalar-uitvoering, out-of-order-uitvoering, enz. Deze trend culmineerde in grote, energie-hongerige CPU ‘ s zoals de Intel Pentium 4., Tegen het begin van de jaren 2000 werden CPU-ontwerpers gedwarsboomd van het bereiken van hogere prestaties van ILP-technieken als gevolg van de groeiende ongelijkheid tussen CPU-werkfrequenties en hoofdgeheugen-werkfrequenties, evenals escalerende CPU-vermogensdissipatie als gevolg van meer esoterische ILP-technieken.

CPU ontwerpers leende vervolgens ideeën van commerciële computing markten zoals transactieverwerking, waar de geaggregeerde prestaties van meerdere programma ‘ s, ook bekend als throughput computing, belangrijker was dan de prestaties van een enkele thread of proces.,

deze accentverschuiving blijkt uit de toename van dual en meer core processor ontwerpen en met name, Intel ‘ s nieuwere ontwerpen lijken op zijn minder superscalaire p6 architectuur. Late ontwerpen in verschillende processorfamilies vertonen CMP, waaronder de X86-64 Opteron en Athlon 64 X2, de SPARC UltraSPARC T1, IBM POWER4 en POWER5, evenals verschillende CPU ’s voor videogames, zoals de Xbox 360′ s triple-core PowerPC-ontwerp en de PlayStation 3 ‘ s 7-core Cell microprocessor.,

Data parallelismEdit

Main articles: Vector processor and SIMD

een minder gebruikelijk maar steeds belangrijker paradigma van processors (en inderdaad, computing in het algemeen) gaat over data parallellisme. De eerder besproken processors worden allemaal aangeduid als een soort scalair apparaat. Zoals de naam al aangeeft, behandelen vectorprocessoren meerdere gegevens in de context van één instructie. Dit contrasteert met scalaire processors, die voor elke instructie één stuk gegevens verwerken., Met behulp van Flynn ’s taxonomie worden deze twee schema’ s van het omgaan met gegevens over het algemeen aangeduid als single instruction stream, multiple data stream (SIMD) en single instruction stream, single data stream (SISD), respectievelijk. Het grote nut in het creëren van processors die omgaan met vectoren van gegevens ligt in het optimaliseren van taken die de neiging hebben om dezelfde operatie (bijvoorbeeld, een som of een punt product) moeten worden uitgevoerd op een grote set van gegevens. Enkele klassieke voorbeelden van dit soort taken omvatten multimediatoepassingen (beelden, video en geluid), evenals vele soorten wetenschappelijke en technische taken., Terwijl een scalaire processor het hele proces van het ophalen, decoderen en uitvoeren van elke instructie en waarde in een set van gegevens moet voltooien, kan een vector processor een enkele bewerking uitvoeren op een relatief grote set van gegevens met één instructie. Dit is alleen mogelijk wanneer de toepassing de neiging heeft om veel stappen die een bewerking van toepassing op een grote set van gegevens vereisen.

De meeste vroege vectorprocessoren, zoals de Cray-1, werden bijna uitsluitend geassocieerd met wetenschappelijk onderzoek en cryptografische toepassingen., Aangezien multimedia echter grotendeels is verschoven naar digitale media, is de behoefte aan een of andere vorm van SIMD in algemene processors aanzienlijk geworden. Kort na het opnemen van floating-point eenheden begon gemeengoed te worden in algemene-purpose processors, specificaties voor en implementaties van SIMD uitvoering eenheden begon ook te verschijnen voor algemene-purpose processors. Sommige van deze vroege SIMD specificaties-zoals HP “s Multimedia Acceleration eXtensions (MAX) en Intel”s MMX – waren integer-only., Dit bleek een belangrijke belemmering te zijn voor sommige softwareontwikkelaars, omdat veel van de toepassingen die profiteren van SIMD voornamelijk te maken hebben met floating-point getallen. Geleidelijk verfijnden en remade ontwikkelaars deze vroege ontwerpen in enkele van de gemeenschappelijke moderne SIMD-specificaties, die meestal worden geassocieerd met one instruction set architecture (ISA). Enkele opmerkelijke moderne voorbeelden zijn Intel ‘ s Streaming SIMD Extensions (SSE) en de PowerPC-gerelateerde AltiVec (ook bekend als VMX).


Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *