RSS-feed bekijken

apa

Central Processing Unit (CPU)

Dit artikel waarderen
by
apa
, 21 juli 2009 at 20:53 (3083 Bekeken)
Productie:
De productie begint met silicium-dioxide (ofte: ordinair zee-zand; hierna aangeduid als "silicium"). Silicium is een halfgeleider van elektriciteit.

Het silicium wordt in een eerste fase gezuiverd, gesmolten en laat men vervolgens terug stollen. Het resultaat zijn grote silicium-kristallen die men "boules" noemt. Iedere "boule" heeft een diameter van ongeveer 20cm, is meer dan 1m25 lang en weegt meerdere honderden kilo's.

In de volgende stap wordt de boule verwerkt tot een perfecte cilinder met een doorsnede van 200mm. Van de cilinder worden vervolgens dwarssneden genomen (die we wafers noemen). De wafers worden vervolgens gepolijst tot ze een spiegelachtig oppervlak krijgen.

Op de wafer wordt nu een laag lichtgevoelig materiaal aangebracht (die foto-resist heet). Deze foto-resist wordt oplosbaar wanneer het wordt blootgesteld aan ultraviolet licht.

De wafer wordt nu in een toestel geplaatst waarin de circuits op de wafer worden getraceerd (we noemen dit foto-litografie). Hiervoor wordt een zgn. masker gebruikt. Op dat masker staat de volledige blue-print voor de wafer vergroot uitgetekend. Het masker wordt beschenen met ultraviolet licht. Het licht gaat nu doorheen een systeem van lenzen en spiegels waardoor het beeld verkleind wordt om uiteindelijk de wafer te beschijnen.

Het foto-resist wordt nu oplosbaar op alle beschenen plaatsen, maar blijft hard op de donkere plaatsen. De oplosbare foto-resist wordt nu opgelost d.m.v. bepaalde chemicaliën. Wat overblijft is een wafer met dezelfde (doch verkleinde) circuits uitgetekend als op het masker. Deze wordt nu weggeëtst (we noemen dit etching). Het resultaat is een reeks richels over de wafer waar de circuits moeten plaatsnemen.

Een oplossing met ionen wordt nu over de wafer gestuurd (dit heet ion transplantation of doping). Uiteindelijk nemen die ionen plaats in de richels. Deze ionen zijn elektrische geleiders. In moderne processoren wordt hiervoor koper gebruikt (in oudere productie-procédés was dit aluminium).

Moderne CPU's bestaan uit circuits aangebracht op meerdere lagen binnen de chip (dit zijn de layers). Voor iedere laag wordt een apart masker aangemaakt en de wafer gaat dus meermaals het foto-litografie proces door vooraleer het afgewerkt is. Na iedere laag wordt terug een laagje silicium over de vorige laag aangebracht en worden de vorige stappen opnieuw uitgevoerd. Dit gaat door tot alle lagen aangebracht zijn.

Met één wafer worden zo veel chips geproduceerd als mogelijk. Omdat de wafer cirkelvormig is en de chips rechthoekig zijn, gaat er (aan de randen) steeds een stuk wafer verloren. De chips worden uit de wafer gesneden d.m.v. een diamanten zaag.

Door imperfecties in het productieproces zijn niet alle geproduceerde chips zijn identiek. Sommige chips zullen te veel van het standaard-ontwerp afwijken en zullen daarom niet bruikbaar zijn. De verhouding van het aantal werkende chips op het totaal aantal geproduceerde chips op 1 wafer noemen we de yield. Bij nieuw ontwikkelde chips die voor het eerst geproduceerd worden, is de yield vaak lager dan 50%. Na verbeteringen in het design van de chip (de maskers) en in het productieproces, stijgen de yields dan weer.

De zo geproduceerde chips worden nu op een verpakking aangebracht (die we het substraat noemen). Deze verpakking zorgt ervoor dat de chip kan communiceren met andere onderdelen. Het gekozen type verpakking hangt o.m. af van de snelheid waaraan de chip moet kunnen werken.

Het productieproces is natuurlijk niet iets statisch. De grote spelers op deze markt (Intel, TSMC, UMC, AMD, ...) ontwikkelen continu nieuwe technieken om kosten te besparen en beter presterende chips te produceren.
Een belangrijke (en bekende) kenmerk van een productieproces is de graad van miniaturisatie. Deze wordt aangeduid d.m.v. de lengte van de gebruikte transistoren. Bekende maten daarin zijn 180nm, 130nm, 90nm en 65nm. Deze techniek verlaagt de vereiste werkstroom van een chip en verhoogt ook het aantal geproduceerde eenheden per wafer. Aangezien de prijs van de wafer dezelfde blijft ongeacht het productieproces, zal de prijs per geproduceerde chip dalen. Miniaturisatie is dus ook een kostenbesparende techniek.
Andere toegepaste technieken dienen dan weer om de efficiëntie van de chip te verhogen. Recente ontwikkelingen hierin zijn o.m. Silicon On Insulator van AMD/IBM of Strained Silicon bij Intel.

Deze uitleg is gebaseerd op een eigen vertaling en interpretatie op basis van deze bron.

Meer over chip-verpakkingen kan je hier nalezen.



Instructiesets:
Een processor voert instructies uit. Een processor ondersteunt slechts een beperkt aantal instructies. De verzameling van instructies die door een CPU uitgevoerd kunnen worden noemen we de instructieset van die CPU.

De meerderheid der desktop CPU's ondersteunt de IA32 instructieset. Dit is een instructieset die ontwikkeld werd door Intel. AMD (e.a.) hebben deze instructieset in licentie genomen en produceren zelf CPU's die diezelfde instructieset ondersteunen.

Wanneer een processor data nodig heeft om een bepaalde instructie op uit te voeren, dan haalt de processor die data uit het RAM. Het RAM geheugen wordt daartoe ingedeeld in vakjes van elk 1 Byte groot. Al deze vakjes krijgen een nummer. Het maximaal aantal vakjes dat kan bestaan wordt eveneens bepaald door de instructieset (we noemen dat de Word-lengte). Voor gemaksredenen zijn dit steeds machten van 2. Voor de IA32 instructieset is de Word-lengte 32-bit wat betekent dat er 2^32 vakjes gedefinieerd kunnen worden in het geheugen. Op basis hiervan kan je bepalen hoeveel geheugen een IA32 computer maximaal kan aanspreken:
Code:
2^32 = 4294967296 Byte = 4 GB
AMD heeft IA32 verder uitgebreid en onder de naam AMD64 op de markt gebracht. AMD64 heeft o.m. de Word-lengte verhoogd tot 64-bit. Voor het geheugen worden momenteel echter "slechts" 40-bit adressen gebruikt. De maximale hoeveelheid RAM voor een AMD64 computer wordt dan:
Code:
2^40 = 1099511627776 Byte = 1 TB
Instructiesets kunnen geïmplementeerd worden op 2 verschillende manieren:
  • Reduced Instruction Set Computer (RISC): voor iedere uitvoerbare instructie bevat de processor afzonderlijke circuits. Dit betekent dat een RISC-processor verschillende instructies tegelijkertijd kan uitvoeren. Het betekent echter ook dat de instructieset gewoonlijk beperkt gehouden wordt. Een groot aantal instructies betekent namelijk dat de processor erg veel circuits/transistoren zal vereisen wat de kosten de pan doet uitschieten.
  • Complex Instruction Set Computer (CISC): een instructie bestaat uit meerdere logische bewerkingen. Veel van die opeenvolgingen van logische bewerkingen komen voor in meer dan 1 instructie. In een CISC-architectuur wordt maximaal hergebruik nagestreefd: een bepaalde combinatie van bewerkingen komt slechts 1 keer voor in de processor. Dat betekent meteen dat het erg moeilijk is om meerdere instructies tegelijk uit te voeren op een CISC processor. Het performance-verlies door het beperkte parallellisme wordt gecompenseerd doordat de uitvoerbare instructies erg complex kunnen zijn en dat een RISC-processor daarvoor vaak meerdere instructies moet combineren.

Tegenwoordig komen deze 2 implementatiewijzen nagenoeg nooit meer in zuivere vorm voor. Vroegere CISC architecturen vertalen de complexe instructies vaak naar eenvoudigere varianten om die dan door een RISC-architectuur te sturen (d.i. ondermeer zo in alle moderne x86-processoren sinds de Intel Pentium). RISC processoren ondersteunen dan weer een aantal complexere instructies die op hun beurt vertaald worden naar eenvoudige RISC instructies om in één keer uitgevoerd te kunnen worden.



Performance:
De CPU is het brein van een computer. Het voert instructies uit op gegevens (=input) en geeft nieuwe of bijgewerkte gegevens als resultaat (=output).

Alle moderne CPU's zijn synchrone chips: ze voeren nuttig werk uit aan een vast en continu ritme. Het ritme wordt aangeduid door de frequentie (="het aantal keer per seconde dat werk verricht kan worden"). De frequentie wordt in een computer aangegeven door een klok; daarom spreken we hier van de klokfrequentie (uitgedrukt in Hertz of een veelvoud daarvan (MegaHertz of GigaHertz). Hoe hoger de klokfrequentie van een bepaalde chip, hoe meer werk die per seconde kan verrichten en hoe performanter die is.

De kloksnelheid is een goede maatstaf om verschillende geklokte chips te vergelijken voor zover die chips verder identiek zijn. De kloksnelheid is echter een slechte maatstaf wanneer verschillende chip-architecturen met elkaar vergeleken worden.

De performance van een processor wordt ruwweg in 2 componenten onderverdeeld:
  • Het aantal keer per seconde dat de processor nuttig werk kan verrichten. Dit noemen we de kloksnelheid en wordt gemeten in Hz (of een factor daarvan zoals MHz of GHz).
  • De hoeveelheid werk dat de processor in 1 keer (dus in 1 kloktik) kan verrichten. Dit noemen we de IPC-graad (staat voor Instructions Per Cycle) en wordt aangeduid d.m.v. een reëel getal. Dit getal is trouwens nooit absoluut meetbaar; je kan enkel het maximum aangeven. Eventueel zou je het gemiddelde kunnen berekenen voor een bepaalde reeks bewerkingen.

Beiden worden bepaald door de architectuur van de processor. Eenvoudig gesteld verwerkt een processor instructies op data om verwerkte data als uitvoer te geven. In moderne processoren wordt een instructie opgedeeld in deel-instructies. Iedere deel-instructie wordt dan na elkaar uitgevoerd door een onderdeel van de processor (die we de pipeline stage noemen). Alle pipeline stages worden door alle instructies in een vaste volgorde doorlopen. De volledige opeenvolging van doorlopen stages noemen we de execution-pipeline. Eens alle stages van de execution-pipeline doorlopen zijn, is de instructie afgehandeld. De regel is dat iedere deel-instructie binnen 1 kloktik van de processor uitgevoerd moet kunnen worden. Op deze manier werkt een processor aan meerdere instructies tegelijkertijd (iedere pipeline stage kan werken aan een deel-instructie van een verschillende instructie).

Uit deze uitleg moet het duidelijk zijn dat de kloksnelheid van de processor bepaald wordt door de deel-instructie die de meeste tijd inneemt (d.i. de bottleneck).

Stel dat een ontwerper de maximaal haalbare kloksnelheid wil verhogen, dan kan die op zoek gaan naar de langzaamste deel-instructie en die optimaliseren. Stel dat die deel-instructie na optimalisatie nog steeds de langzaamste instructie is, dan kan de ontwerper kiezen om die deel-instructie op te splitsen in 2 deel-instructies. We zeggen dan dat de execution-pipeline verlengd wordt. De bedoeling is dat de 2 deel-instructies nu elk apart minder tijd innemen dan de oorspronkelijk deel-instructie (ideaal nemen beide deel-instructies 50% in van de oorspronkelijke deel-instructie).

Dit is de techniek die Intel gebruikt heeft bij het ontwerpen van de Pentium4 architectuur. Bij iedere nieuwe generatie Pentium4 heeft Intel deze techniek verder gebruikt en is de execution-pipeline sinds de eerste Pentium4 (de zgn. Wilamette core) verlengd van (dacht ik) een 20-tal stappen tot nu meer dan 30 in de Prescott-core.

Het nadeel van deze techniek is dat deze een zwaar negatieve invloed heeft op de tweede component van de performance (de IPC). Een programma bestaat uit een hele reeks instructies die achtereenvolgens (in een welbepaalde volgorde) uitgevoerd moeten worden. Sommige instructies in dat programma worden meermaals uitgevoerd (we noemen dit een iteratie/herhaling) en andere mogen pas uitgevoerd worden wanneer aan een conditie voldaan is (we noemen dit een selectie).

Wanneer de processor een selectie tegenkomt (we noemen dit een branch), dan moet in principe gewacht worden op de uitkomst van de selectie vóór de volgende instructies uitgevoerd worden. De selectie wordt opgesplitst in deel-instructies die elk 1 kloktik in beslag nemen. Op een processor met 30 deel-instructies, zal het "evalueren" van de conditie dus zeker 30 kloktikken in beslag nemen. De volgende instructie wordt pas nadien uitgevoerd waardoor de uitkomst ervan weer pas na 30 kloktikken verkregen wordt.

Om dit performance-verlies te beperken passen ontwerpers een truukje toe. Deze bestaat erin de uitkomst van de conditie te voorspellen (we noemen dit "branch prediction"). Op basis van die voorspelling voert de processor meteen ook de instructie (of opeenvolging van instructies) uit die hoort bij die uitkomst van de voorspelling. De selectie wordt m.a.w. door de execution-pipeline gestuurd en de eerstvolgende instructie die uit de execution-pipeline komt is de instructie die volgt op de voorspelde selectie-uitkomst.

Werd het resultaat van de conditie correct voorspeld, dan zijn de volgende instructies vrijwel meteen uitgevoerd na de evaluatie van de conditie.
Is het resultaat van de conditie verkeerd voorspeld, dan moet de correcte instructie (of opeenvolging van instructies) uitgevoerd worden. De correcte instructie moet dan nog alle pipeline stages doorlopen eer die uitgevoerd is. De kost van een verkeerde voorspelling is gelijk aan het aantal pipeline stages (in de Prescott is dat 30; je verliest dus 30 kloktikken bij iedere verkeerde voorspelling).

Natuurlijk kan het aantal voorspellingsfouten ingeperkt kunnen worden door een beter voorspellingsalgoritme te gebruiken. Maar geen enkel voorspellingsalgoritme is feilloos en er gebeuren dus zowieso voorspellingsfouten. Bij een processor met veel pipeline stages zal zo'n fout meer kosten dan bij een processor met weinig stages.

Zoals je nu kan inzien zal iedere foute voorspelling de hoeveelheid nuttig uitgevoerd werk per kloktik (IPC) sterk verlagen bij iedere foute voorspelling. De huidige Pentium4 heeft ongeveer 30 pipeline stages. De Pentium-M heeft er zo'n 12 à 13. De AthlonXP had er 10 en de Athlon64 heeft er 12. Op het IPC-vlak heeft de AthlonXP dus de beste troeven in handen. Dat de Athlon64 en de Pentium-M op gelijke kloksnelheid beter presteren ligt aan diverse andere optimalisaties (een beter voorspellingsalgoritme, ...) die de IPC opvoeren.



32-bit vs. 64-bit:
Je kan zoveel RAM stoppen in je systeem als je moederbord ondersteunt; of je nu een 32-bit operating system gebruikt of een 64-bit versie. Een 32-bit OS kan in principe niet meer dan 4 GB geheugen adresseren, maar er bestaan een aantal truukjes (ik heb het over Physical Address Extension (PAE)), maar die worden niet gebruikt/ondersteund op de meeste desktop-systemen (ik zou het ook niet aanraden).

De beperking van hoeveelheid geheugen komt van het feit dat iedere stukje geheugen een eigen "adres" moet krijgen. Een 32-bit systeem heeft 2^32 adressen (ofte 4294967296 verschillende adressen). Ieder stukje geheugen is 1 byte groot en je kan met een 32-bit systeem dus 4294967296 bytes aanspreken (of 4 GB).

In werkelijkheid zal je echter altijd minder dan 4 GB effectief kunnen gebruiken op een 32-bit systeem. Dat komt doordat een aantal andere onderdelen ook adressen nodig hebben (die uit dezelfde "adressenbak" wordt gehaald). Het gaat hier niet om de hoeveelheid geheugen op je videokaart, maar eerder over alle devices die via Direct Memory Access communiceren met je systeem (PATA/SATA controller, netwerkkaart, geluidskaart, ...). Uiteindelijk kan je ongeveer 3 à 3,5 GB maximaal effectief benutten...

Een 64-bit systeem kent in totaal 2^64 adressen (= 18446744073709551616) waarmee je 17179869184 GB kan adresseren (opnieuw verlies je ongeveer zo'n 0,5 à 1 GB door de DMA devices; maar dat zal je vermoedelijk niet merken tenzij je zoveel RAM in je systeem zou stoppen).

Een verdere beperking van de hoeveelheid RAM die effectief gebruikt kan worden komt van Windows. De 32-bit versie van Windows kan immers niet meer dan 2 GB voor programma's gebruiken. De rest van het RAM wordt dan gebruikt voor cache en andere systeem-processen. Ieder programma kan ook niet meer dan 2 GB geheugen gebruiken (als je geen 2 GB RAM over hebt, dan kan een programma toch 2 GB aanspreken -> pagefile).

Naast het feit dat een 64-bit operating system met veel meer RAM om kan, verdwijnt de beperking van 2 GB RAM voor programma's en de beperking van 2 GB per programma. Verder kan de CPU met grotere getallen werken dan voorheen waardoor die, voor zwaar wiskundige berekeningen, sneller kan werken (32-bit processoren moeten de berekeningen dan in meerdere stappen uitvoeren). AMD heeft er bij de overgang naar 64-bit ook voor gezorgd dat de processor met 2x zo veel data tegelijk kan werken. Voor bepaalde toepassingen kan dat dus een performance-verbetering verbeteren.

Op zich lijkt 64-bit tot hier de enige goede keuze. Echter:
  • Om van alle voordelen te genieten moet je ook 64-bit programma's draaien. 32-bit programma's/games zullen op een 64-bit operating system in "emulatie-mode" draaien. Daardoor verlies je een beetje performance. Bovendien verval je terug in de beperking van 2 GB per programma... In werkelijkheid is het performance-verlies klein en nagenoeg niet merkbaar.
  • In 64-bit mode verbruikt ieder programma ook iets meer geheugen dan voorheen. Je moet rekenen op zo'n 20% à 30% extra geheugenverbruik (omdat ieder "adres" die je in je RAM zet 2x zo veel plaats neemt als voorheen). Door dit verschil zal je nagenoeg geen verschil merken tussen 4 GB op een 32-bit operating system (waarvan je zo'n 3 à 3,5 GB kan gebruiken) en 4 GB op een 64-bit operating system.
  • Een 64-bit operating system vereist 64-bit drivers. Voor nieuwe hardware is dat minder een probleem, maar oudere hardware is heel wat minder zeker.

21 juli 2009 gewijzigd om 21:01 door apa

Categories
Computers , ‎ Hardware

Reacties

Trackback-signaleringen

Totaal aantal trackback-signaleringen 0
Trackback-link: