TDT4160: Datamaskiner og digitalteknikk
# Kapittel 1
# Kapittel 2
Superscalar prosessor
: Innfører flere av en eller flere enheter i en prosessor med samlebånd, for eksempel felles fech og decode, flere ALUer.
SIMD-prosessor
: Single Instruction stream Multiple Data streams. Parallelprosessorklasse der multiprosessorer utfører samme insturksjon på forskjellige data. Typisk array prosessorer, graffikk er et egnet datsett for en slik type arkitektur.
## Innføring av hurigbuffer (cache)
Gjennomsnittlig akssesstid ved innføring av en hurtigbuffer er gitt ved:
$$mean access time = c + (1-h)*m$$
Hvor c er hurtigbufferens aksesstid, h er trefforholdstall (hit ratio) for systemet, og m er minnets aksesstid.
# Prosessorer
Prosessesorer kan referer til flere forskjellige styre- og behandlingsenheter i elektroniske maskiner. I all hovedsak prater man om prosessorer i sammenheng med CPU (Central Prosessing Unit) og mikroprosessorer. Slike enheter utgjør kjernen av en moderne datamaskin, som står for all behandling av digitale og analoge signaler som mottas og sendes ut igjen til datamaskinen.
##CPU
En Central Processing Unit (CPU) er "hjernen" til moderne datamaskiner. Hovedfunksjonen til en CPU er å utføre instruksjoner som er gitt av et dataprogram. Disse dataprogrammene er lagret i hovedlageret til CPUen. Dette gjøres ved at instruksjoner hentes inn til hovedprosessoren hvor den inspiserer og så sekvensielt kjører hver instruks. Hver av disse "instruksjonsettene" ligger i en _buss_.
###Buss
En buss er en samling med parallelle ledninger som overfører adresser, rå data og kontrollsignaler. En buss kan eksistere som både en intern og ekstern komponent til en CPU.
###Organisering i CPU
En CPU består av 3 hoveddeler, en aritmetisk logisk enhet (ALU), en rekke registere og en kontrollenhet. prosessoren består også av et hovedminne som inneholder midlertidige resultater fra utregninger gjort i hovedprosessoren.
####ALU
En Aritmetisk logisk enhet er en enhet som gjør utregninger på de inputene i fra et dataregister. Disse registerene ligger sammen med ALUen i det som heter datapath. Operasjoner foregår ved at en instruksjon forteller ALUen at den skal gjøre operasjoner på to registere som ligger i data path. Disse to registeren hentes inn som input hvor det gjøres en operasjon på de, før resultatet blir enten lagret tilbake til registeret, eller at det lagres på minnet til maskinen. ALU kan gjøre grunnleggende aritmetiske operasjoner som addisjon og subtraksjon.
## Array processor
Mange identiske prosessorer som synkront gjør de samme operasjonene på datasett med lik struktur og ulikt innhold. Dette lar maskinen utføre store mengder arbeid parallellt, nyttig f.eks. for å analysere vitenskapelig data.
## Vector processor
Lignende idé som _array processor_. Dataene som skal jobbes med puttes i en vektor og sendes samlet gjennom en prosessor spesialdesignet for å håndtere slike vektorer.
# Hurtigbuffer | Cache
Hurtigbufferet holder informasjon på samme måte som hovedminnet. Det er mye mindre plass til informasjon i hurtigbufferet, men det går også mye raskere å hente informasjon fra det til prosessoren.
##Ord | Word
En benevnelse som benyttes om den naturlige datastørrelsen i en gitt datamaskin. Et ord er ganske enkelt en samling av bit som håndteres samtidig av maskinen. Antallet bit i et ord, kalt ordstørrelsen, er et viktig kjennetegn ved enhver datamaskinarkitektur. Vanlige ordstørrelser i dagens PC-er er 32 og 64 bit. De fleste registrene i en datamaskin har størrelsen til et ord.
## Locality of reference | Lokalitetsprinsippet
Når man ber om ett ord fra hovedminnet, antar man at man kommer til å trenge det ordet flere ganger, og at man også kommer til å trenge noen av naboene. Derfor blir ordet sammen med noen av naboene kopiert til hurtigbufferet.
## Gjennomsnittlig minneaksesstid | mean memory access time
Lokalitetsprinsippet betyr at for å bruke ett ord `k` ganger trenger man ett tregt kall til hovedminnet og deretter `k - 1` raske kall til hurtigbufferet. Ved hjelp av `k` kan man regne seg fram til et gjennomsnitt på hvor raskt prosessoren kan jobbe.
mean access time = c + (1 - h) * m
- `c` er _cache access time_, tiden det tar programmet å hente informasjon fra hurtigbuffer.
- `m` er _memory access time_, tiden det tar å hente informasjon fra hovedminnet.
- `h = (k - 1)/k` er _trefforholdstall_ (_hit ratio_), andelen av referanser som kan hentes fra hurtigbufferet i stedet for hovedminnet. `(1 - h)` er dermed _miss ratio_, andelen som må hentes fra hovedminnet.
# Logiske kretser
## Adderere
||__A__ (inn)||__B__ (inn)||__Sum__ (ut)||__Mente__ (ut)||
||0||0||0||0||
||0||1||1||0||
||1||0||1||0||
||1||1||0||1||
Når man adderer to bits sammen har man de fire mulighetene som tabellen viser. Kretskomponenten som adderer to bits kaller man en __halvadderer__ (_half adder_).
For å addere et ord som består av flere bits, må man ha en __ripple-carry adder__. Det kan man lage ved å lenke sammen flere __fulladderere__.
Fulladdereren består av en halvadderer som adderer de to bitene, og en annen halvadderer som adderer resultatet fra den første halvaddereren med carry-biten fra addisjonen av de forrige bitene. Summen herfra lagres som resultat-bit, og hvis en eller begge av addisjonene i dette steget produserte en carry-bit sendes en cassy-bit videre til neste fulladderer.
# Arkitektur
## Pipelining
### Raw dependence / true dependence
Når ett steg vil lese en verdi som ikke enda er ferdig skrevet at ett annet sted. _RAW, Read After Write_. Da må vi bare vente til verdien er klar før nye steg kan starte.
# Andre ressurser
<http://datagk.stianj.com>