Datorsystem 2 CPU Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur CPU Visning av Akka (för de som är intresserade)
En dators arkitektur På en lägre nivå kan vi ha lite olika syn på vad en dator är: Frågor som rör instruktionsuppsättningsarkitektur (ISA) relaterar till programmeringen av datorn Frågor som rör hur olika logiska enheter är kopplade till varandra brukar benämnas mikroarkitektur. Mikroarkitekturen skall möjliggöra realiseringen av ISA. Systemdesign omfattar helheten vad gäller hårdvara för datorsystemet.
CPU En CPU (central processing unit) är ett mikrochip som innehåller det mesta en dator behöver för att bearbeta data Den aritmetiska enheten (ALU) sköter alla matematiska beräkningar på heltal och logiska uttryck Flyttalsenheten (FPU) sköter beräkningar på flyttal
CPU Kontrollenheten sköter om att läsa instruktioner och data för att rätt sak ska vara på rätt plats vid rätt tidpunkt De olika delarna kommunicerar med olika busar Databus Adress bus Kontroll bus Data lagras tillfälligt i olika register Animation om hur en CPU arbetar hittar du på http://courses.cs.vt.edu/~csonline/machi nearchitecture/lessons/cpu/sumprogram.html
Instruktionsuppsättningar En processor kan endast utföra relativt enkla operatorer Aritmetiska (addera, subtrahera, etc) Logiska (and, or, etc) Dataflyttning (move, input, store, etc) Programkontroll (goto, if, call, etc) Operatorerna tar typiskt sina argument från register och lägger oftast även resultaten i register Man kan tänka på registren som processorns kladdpapper I x86 finns det ca 35 olika heltalsregister av olika bit-längd 8 flyttalsregister organiserade som en stack
Mikroarkitektur Samma instruktionsuppsättningar (tex x86) kan realiseras på olika mikroarkitekturer Intels Pentium och AMD Athlon kör båda x86, men processorerna har olika mikroarkitektur
Pipelining Om instruktionerna är relativt enkla har man större kontroll över hur olika instruktioner skall lösas Ett exempel på steg som är typiska för utförandet av en typisk instruktion är: Hämta instruktion (IF, Instruktion Fetch) Dekoda (ID, Instruction decode and register fetch) Utför (EX, Execute) Minnesåtkomst (MEM, Memory access) Skriv tillbaks (WB, Register writeback)
Pipelining När vi identifierat specialiserade funktioner som skall utföras kan vi konstruera speciella kretsar i CPU:n som utför de olika delstegen parallellt. Det kallas för att processorn arbetar pipelinat Processorns arbete är strikt tidsstyrt med en klockpuls Varje delsteg tar ett fixt antal klockcykler att utföra Pipelining gör att alla stegen måste synkroniseras med varandra och cykeltiderna måste synkroniseras Detta ger att alla delsteg måste vänta på det delsteg som tar längst tid
INSTR 1 INSTR 2 INSTR 1 INSTR 2 INSTR 3 INSTR 4 INSTR 5
Pipelining I teorin ger pipelining nära nog samma uppsnabbning som antal steg i pipelinen I praktiken kommer det att finnas beroende mellan data etc som gör att uppsnabbningen blir något långsammare
CISC-RISC För att underlätta synkronisering mellan operatorer reducerade man antalet operatorer till ett fåtal relativt enkla (Reduced Instruction Set Computer, RISC) Exempel Motorolas PowerPC Fördelen är möjligheten till Pipelining, nackdelen är att det behövs fler operatorer för att lösa en given uppgift En annan approach är att ha komplexa operatorer (Complex Instruction Set, CISC) Exempel Intels i486 Fördelen är att det behövs relativt få operatorer för att lösa ett givet problem, nackdelen är att Pipelining blir svårare Moderna CISC processorer (tex Intel Pentium 4) bryter internt ner operatorerna för att kunna använda pipelining De senaste varianterna av Intel P4 har 31 stegs pipelining
Multicore Genom att lägga två eller fler CPU:er på samma chip kan beräkningskraften hos hela chipet öka CPU:erna delar vissa resurser, som businterface och cach-minnen Fördelen är att man med lägre klockfrekvens kan få bibehållen prestanda Nackdelen är att det kan bli databeroenden mellan CPU:erna En multicore CPU kan köra multithread utan multiplex!
Vektorprocessorer En vanlig CPU arbetar typiskt på ett tal (hel- eller flyt) i gången En vektorprocessor arbetar på många flyttal samtidigt Fram till 1990-talet var vektorprocessorer vanliga på superdatorer En Cray-1 hade 8 vektorregister med vardera 64 st 64 bitars tal Vektorprocessorer lämpar sig mycket bra för tekniska beräkningar På moderna datorer finns ofta Single Instructions Multiple Data (SIMD) möjligheter knutna till grafikprocessorerna
Beräkningskapacitet Hur snabb en dator är beror av en rad olika faktorer Klockfrekvens Ordstorlek Cachestorlek Instruktionsmängd (RISC, CISC) Bearbetningstekniker (pipelining, multicore) Hur man mäter
Klockfrekvens All digital elektronik (som en mikroprocessor) måste utföra sina operationer synkront Detta styrs med en klockpuls En klockcykel är den minsta tidsenhet vi kan ha på en dator Vissa operationer går att utföra på en cykel medan andra operationer tar flera cykler Generellt är gäller att en dator med högre klockfrekvens är snabbare CPU använder en högre frekvens än kringutrustning som minnen etc Klockfrekvensen mäts typiskt i GHz
Ordstorlek Ju fler bitar processorn kan arbeta med samtidigt, desto snabbare går det Registren, busarna och ALU sätter begränsningar för hur många bitar vi kan ha I dagsläget har de flesta datorer 32 eller 64 bitars ordstorlek
Cache Data som används i beräkningar används ojämt En del data används ofta och annat data sällan Genom att se till att det data som används ofta ligger i snabbare minne kommer hela datorn att kunna göra mer på mindre tid Registren är de snabbaste minnena följt av cache-minnen på olika nivåer
Att mäta hastighet Ett sätt att mäta prestanda är att räkna hur många flyttalsoperationer per sekund (flops) ett system kan prestera Detta sätt att räkna är relevant för tekniska beräkningar etc. Det är helt irrelevant för hur snabbt en tex kompilator kommer att gå på systemet Det tar inte heller hänsyn till snabbhet på kringutrustning som tex hårddiskar etc
Att mäta hastighet Ett annat sätt att mäta hastighet är att köra en applikation som känns relevant och klocka hur lång tid det tar att lösa en specifik uppgift Då mäter man hela systemets prestanda men repeterbarheten kan bli låg