Skjermkort

Et **skjermkort** eller **grafikkort** er en komponent i en datamaskin som konverterer en logisk representasjon av et bilde lagret i minnet, til et signal som kan vises på en skjerm. Funksjonalitet i skjermkort eksponeres gjennom grafikk-APIer som DirectX, OpenGL og Vulkan.

Det finnes to typer skjermkort: integrerte, og externe kort med direkte tilkoblinger. Den førstnevnte typen kommer integrert i CPU, mens sistnevnte er separate kort som man kobler til hovedkortet. Hvis ikke prosessoren har et integrert grafikkort, må man skaffe seg et externt grafikkort for å få bilde på skjermen. 

Moderne skjermkort er spesielt utviklet for parallelle kalkulasjoner og tredimensjonal grafikk. Dette er for å avhjelpe prosessoren ved ressurskrevende spill og rendering.

På skjermkortmarkedet er det tre selskaper som står for størstedelen av markedsandelen: AMD, Nvidia og Intel. Selskapene støtter viktige funksjoner som er nødvendig i spill, som Anti-Aliasing (AA) og Antisotropic Filtering (AF). Ofte brukes imidlertid en integrert grafikkprosessor fra Intel.

## Hvordan et skjermkort virker
En PC-skjerm er bygd opp av flere millioner små lyspunkter. Hvert lyspunkt består av én av tre primærfarger: rød, grønn eller blå (RGB). Til sammen utgjør en slik gruppe av de tre grunnfargene en piksel (additiv fargesyntese). Lyser alle tre like sterkt vil fargen (summen av alle tre) fremstå som hvit. Slukker alle, er punktet (naturligvis) svart. Lyser prikkene med ulik intensitet vil summen av dem gjengi en hvilken som helst farge.

Instruksjoner til skjermen forteller altså skjermen hvilke punkter som skal tennes og slukkes, og hvilken intensitet hvert enkelt tent punkt skal ha. Tar man et bilde med et digitalkamera, vil sensorbrikken lagre lysinformasjon. Sensorbrikken består av millioner av lysfølsomme punkter som kan registrere farge og lysintensitet. Når denne informasjonen gjengis på en skjerm i full oppløsning, vil skjermen benytte tre lyspunkter (RGB) for hvert sensorpunkt på kamerasensoren. Bildet vises da i full størrelse. 
Hvis du zoomer inn enda mer enn 1:1 visning, vil hver originale piksel (lyssensor fra kameraet) dekke mer enn én RGB-gruppe på skjermen. Zoomer du inn til tidobbel størrelse, vil altså informasjonen fra én av lyssensorene i kamerabrikken dekke 10x10 piksler på skjermen. Hver av disse skjermpikslene består altså av tre lysdioder, så i dette eksempelet er 300 lysdioder tent for hver originalpiksel fra kameraet. 

Dette bildet vil fremstå som en serie av synlige firkanter på skjermen, og ikke som et detaljert bilde. Når bilde vises i 1:1 skala (det vil si at én piksel fra kameraet tilsvarer én piksel (RGB) på skjermen), ser bildet detaljrikt og fint ut.
Poenget er altså at en skjerm med høy oppløsning som skal vise et bilde tatt med et kamera med lav oppløsning, bare vil vise bildet fint i en 1:1-oppløsning. I eksempelet vil et slikt bilde vises som et lite bilde midt på skjermen. Zoomer du inn slik at bildet fyller hele skjermen, vil du få et «pikselert» bilde, altså at hver enkel piksel fra kamerasensoren blir synlig i stedet for å gli sammen til et pent bilde.

Et 3D-spill operer på en annen måte. Bildene her er ikke et resultat av lagret informasjon fra en bildesensor, men konstrueres fortløpende av grafikkmotoren (programvare) i spillet. Har du en skjerm med høy oppløsning (2560×1600) og spiller et spill der du setter oppløsningen til 800x600, vil bildet fremstå som pikselert som i eksempelet med kameraet over. For å få en godt bilde på denne skjermen må altså spillet levere et like bilde med like høy oppløsning som skjermen (2560×1600). På en skjerm med lav oppløsning (1680x1059) vil bildet bli best når spillet leverer bildet i tilsvarende oppløsning.

Et grafikkort trenger å oversette de binære tallkjedene til lysdiodeinsstruksjoner for at bildet skal vises (altså hvilke dioder som skal tennes, og med hvilken styrke). Dette krever svært lite datakraft når bildeinformasjonen kommer som en strøm med instrukser fra hovedprosessoren (typisk et vanlig bilde/fotografi som skal vises på skjermen). Arbeidsbelastningen oppstår når bildet ikke eksisterer, men må konstrueres "on the fly" av grafikkortet, slik det må i spill.

Et todimensjonalt spill (slik som "space invaders" og de fleste Nintendo DS spillene), krever lite datakraft. Det er når spillet blir tredimensjonalt (3D) at beregningsmodellene og datamengden øker eksponensielt. Med 3D her menes ikke 3D som man opplever med 3d briller på kino (altså at man fysisk *kan se* i 3 dimensjoner/dybde), men at spillet må kunne presentere et tredimensjonalt miljø i 2D. Det betyr at du i et typisk "first shooter" spill kan bevege deg i alle tre dimensjoner i et kunstig miljø (du kan gå til høyre/venstre, opp/ned, inn/ut i bildet). Hvis du går forbi en bil i bildet, må altså grafikkmotoren beregne/tegne bildet av hele bilen, ikke bare den delen du ser. Nærmer du deg bilen forfra, ser du bare fronten og kanskje litt av den ene siden og taket på bilen. Bakparten, den andre siden og undersiden er skjult. Grafikkortet trenger ikke å beregne tekstur og overflate for disse skjulte sidene, men den må forholde seg til at de er der, ettersom hele bilen eksisterer i beregningsmodellene den jobber med. Grafikkortet kan imidlertid ikke beregne avanserte buede kurver og flater. Den bryter hele den kompliserte grafiske modellen ned i mangekanter (polygoner). Hadde den brukt ett polygon til å tegne hele bilen, hadde bilen sett ut som en pyramidevariant. Bruker den titalls millioner polygoner, kan summen av dem få bilen til å fremstå som et objekt med myke buede former.

Grafikkortet beregner aksjen på hvordan hvert polygon roterer i forhold til hvordan spilleren beveger seg innover i det virtuelle landsskapet. Disse beregningene er rent matematiske og ikke særlig komplekse. Det som gjør det vanskelig er det svære nummeret av polygoner som skal beregnes fortløpende (hundretalls millioner eller milliarder). I tillegg skal prosessoren bruke polygonenes posisjon til å bergene vektorgrafikk og farge/tekstur på synlige flater. I tillegg kommer beregnings av lys. Akkurat som i den virkelige verden, vil lys komme fra en lyskilde, Denne kilden kan være en taklampe, sola eller en rekke lyskilder som lyser samtidig fra flere steder. Grafikkprosessoren må altså beregne hvilke visuelle elementer den allerede har beregnet som skal ligge badet i lys, ligge i skygge, ligge delvis i skygge, osv. I tillegg må den kunstige overflatens refleksjonsevne gjengis. Er det en glatt/blank overflate, er den matt eller lysabsorberende, er det andre lyskilder til stede som også belyser objektet, eller blir objektet indirekte belyst av refleksen fra et annet objekt i nærheten som er opplyst av primærlyskilden?
I tillegg finnes det en rekke tilleggsalgoritmer som skal gjøre det visuelle bildet enda mer overbevisende ved hjelp av en rekke subrutiner, som beregner lysbryting og fraksjonering fra ulike overflater og objekter.

Det er ufattelige mengder data som skal beregnes med det samme et objekt blir beveget eller beveger seg i forhold til andre objekter i bildet.
Med det samme grafikkortet har fullført en komplett beregning av alle elementene i bildet inkludert lys/skygger og annet, blir det ferdige produktet levert skjermen som et stillbilde. Deretter gyver grafikkortet løs på beregning av neste bilde som så i sin tur leveres skjermen. 
Som de fleste vet fra film og video, består disse av en serie bilder som vises raskt etter hverandre. Man fant rakst ut at bildefrekvensen måtte være 24-25 bilder i sekundet for at bevegelsene skulle fremstå som myke og overbevisende. Dersom hastigheten ar lavere enn dette, beveget figurene i bildet seg rykkete og unaturlig.

Et grafikkort må altså levere ferdigberegede bilder i samme hastighet (altså 25 bilder per sekund eller mer) for at det skal se mykt og naturlig ut. Dette kalles bildehastighet eller "framerate" på engelsk. Lavere hastighet fører til rykkete og unaturlig bildestrøm.
Et grafikkort må også levere en oppløsning som matcher skjermoppløsningen, ellers ser bildet piksellert ut. Jo høyere oppløst skjerm, jo mer detaljert blir bildet, og antallet polygoner skjermkortet må beregne øker eksponensielt.
Blir grafikken for krevende (moderne ultrarealistiske spill) og skjermen for høyoppløst, vil ikke grafikkortet klare å regne raskt nok, og bildet rykker, fryser og hopper. Grunnen til at bildet ikke blir som gamle stumfilmer (jevnt hakkende) er at belastningen på grafikkprosessoren og grafikkminnet konstant varierer med hva som skal vises av bevegelser og detaljer i bildet. Et grafikkort som blir overbelastet kan altså vise alt fra relativt myke bevegelser til hakking og fullstendig frys, i en kontinuerlig variasjon.
Grafikkort med tilstrekkelig kapasitet for spillet og skjermoppløsningen, vil kontinuerlig vise en sømløs strøm av bilder. Kobler man et grafikktestprogram opp, kan man direkte lese av hvor mange bilder grafikkortet kalkulerer per sekund (Frames Per Second eller FPS for kort). Da vil man se at kortet leverer opptil hundrevis av bilder i sekundet i "rolige" scener, mens det i mer krevende partier med mye bevegelse og mange individuelt bevegelige objekter i billedflaten, kanskje synker til 24-30 bilder i sekundet.

## Skjermkortets betydning
Hvis man driver med lettere programmer som for eksempel Word, MSN, Office, Email osv, har man strengt tatt ikke bruk for et sterkt skjermkort. Unntaket kan være hvis man absolutt trenger høy oppløsning. Disse kan klare seg med et integrert skjermkort. 

De som spiller videospill og driver med videoredigering derimot, har et mye større behov for et bedre skjermkort. Ellers vil bildet fort ”lagge”. Dette vil si at det kommer færre bilder i sekundet enn det skulle gjort, eller sagt på en annen måte: bildet vil hakke og det vil bli umulig å spille. Men man trenger absolutt ikke det beste på markedet for å kunne spille et spill. Kun de som har behov for å kjøre de nyeste spill på markedet på full grafikk og stor oppløsning har behov for et dyrt skjermkort. 

## Skjermkortets fysiske tilkoblinger
Skjermkort kan kobles til en datamaskins hovedkort via tre porter: PCI, AGP, og PCI Express. Hvert enkelt skjermkort er tilpasset en av disse portene, og dersom man for eksempel ønsker å tilkoble et kort med AGP-grensesnitt, må man dermed ha et hovedkort som har en slik port. 
PCI er den eldste tilkoblingstypen og har en overføringsbegrensning på 133 MB/s. I 1997 ble AGP, som i motsetning til PCI er laget for skjermkort, lansert. AGP er i utgangspunktet overlegent bedre enn PCI, fordi den gir en egen forbindelse mellom porten og prosessoren, noe som gir muligheten til raskere overføring av data. AGP har en begrensning på 2133 MB/s. 
PCI express er den nyeste og kjappeste av de tre og gjør også at systemet har støtte for å bruke to, tre eller fire skjermkort sammenkoblet ved bruka av enten ATI's crossfire eller Nvidia's SLI som er videreutiklet av tidligere 3dfx sine voodoo PCI skjermkort. Denne porten har en overføringsbegrensning på 8 GB/s (versjon 1.1, port x32).
Enkelte nye skjermkort trenger mer strøm enn hovedkortet kan levere så de kommer med egne plugger som man kobler direkte til strømforsyningen.

Når det gjelder tilkoblingen til PC-skjermer, har de fleste skjermkort en DVI-kontakt for tilkobling til LCD-skjerm og en VGA-kontakt for tilkobling til CRT-skjermer. Imidlertid har svært mange kort også flere tilkoblinger som: S-Video, HDTV-utgang, HDMI, DisplayPort og USB-C.

## Komponenter
Som et hovedkort er skjermkortet et printkort som inneholder en prosessor, minne og en BIOS.
### Graphics processing unit (GPU)
En grafikkprosessor, GPU, *grafikkontroller* eller *grafikkbrikke* er en mikroprosessor som bestemmer hvordan hver enkelt piksel skal vises på skjermen til enhver tid. Dette betyr at GPUen mottar beskjeder fra prosessoren (CPU), som den så bearbeider og sender ut til skjermen. De fleste GPU-er inneholder flere transistorer enn CPU-er, og produserer derfor en god del varme, i noen tilfeller mer enn selve CPU-en. Derfor er god kjøling viktig. Det er ofte en vifte eller en kjøleribbe plassert på skjermkortet. Enkelte slike vifter gir sjenerende støy.

### Minnet
Når GPU-en komponerer et bilde, bruker den minnet for å lagre og holde på informasjon om bildet den nettopp har gjort ferdig. Her lagres informasjon om hver enkelt piksel, fargen og hvor på skjermen denne pikselen skal plasseres. Minnet kan også fungere som et slags skjermbuffer, noe som vil si at den holder på informasjonen om bildet helt til det er klart for å vises på skjermen. Disse lagringsprosessene gjør at minnets størrelse naturlig nok er viktig for skjermkortets ytelse, men dette er ikke den eneste viktige spesifikasjonen. De to andre viktige elementene er minnetype og hvilken størrelse minnet er på. De fleste kort bruker GDDR-minne, men en del eldre kort bruker DDR. Som oftest kjører video rammen på veldig høy klokkefrekvens.

Spesielt med hensyn til krevende programvare, slik som 3D-modellering og noen spill, er minnestørrelsen sentral, idet grafikkortet må holde «teksturer» (bildene som bidrar til å gi objekter på skjermen egenskaper som farge, dybde o.l.) i minnet for å oppnå en mest mulig effektiv skjermvisning.

### Random Access Memory Digital-to-Analog Converter, RAMDAC
Denne oversetter digitale signaler fra CPUen til analoge signaler som skjermen kan bruke. I 2000-årene begynte denne funksjonen å forsvinne fra nye skjermkort, i takt med LCD- og plasmaskjermenes økende popularitet. Disse skjermene kan sende digitale signaler, og det er dermed ikke nødvendig å konvertere signalene til analogt format.  
Noen skjermkort har flere DACer som gjør at ytelsen blir forbedret og at man har mulighet for å bruke flere skjermer samtidig.

### Video BIOS
Video BIOS-en er en chip som inneholder et basisprogram som overvåker skjermkortets operasjoner og gir de instruksjonene som er nødvendige for at kortet skal kunne kommunisere med PC-en.

## Grafikk APIer
Grafikk APIer som DirectX, OpenGL og Vulkan forteller maskin- og programvaren hvordan komplekse grafiske oppgaver, som visning av 3D-grafikk og 2D-bilder (spill, film osv) skal utføres. I noen tilfeller vil et skjermkort med støtte for en av standardene ikke bare være nødvendig for å optimalisere hastigheten på bildet, men også for at det i det hele tatt skal være mulig å kjøre programmet. De fleste skjermkort støtter minst OpenGL og DirectX, men ikke alle skjermkort støtter de nyeste versjonene.

## Forskjeller mellom skjermkort
I hovedsak er det GPU klokkehastigheten (MHz eller GHz), størrelsen på minnebussen (bits), mengde tilgjengelig minne, minneklokkehastighet (MHz), minnebåndbredde(GB/s), og eventuelt RAMDAC-hastighet (MHz), som forteller hvor bra et skjermkort er. Har et kort høyere spesifikasjoner på ett eller flere av disse områdene, er det i utgangspunktet et bedre kort.

Per i dag er det to store aktører som dominerer grafikkort-markedet: AMD og NVIDIA. Begge firmaene produserer hver sine serier av skjermkort, der kortene innen hver serie bygger på mye av den samme teknologien. Hver serie er videre delt inn i såkalte low-, mid- og high-end-kort, der high-end-kortene har den i utgangspunktet beste teknologien. Det er denne klassifiseringen, altså produsent, serie, X-end kort som utgjør benevnelsen grafisk prosessor/leverandør. En slik inndeling betyr at et kort i high-end kategorien i utgangspunktet skal være bedre enn et kort i low-end klassen, gitt samme spesifikasjoner og produsent. Imidlertid kan man ikke forvente at alle kortene i en serie skal være bedre enn alle kortene i den foregående serien. Kortets faktiske ytelse påvirkes også av drivernes kvalitet.

I tillegg spiller også resten av systemet en rolle. Prossesoren leverer alle instruksene til skjermkortet, så er den treg vil skjermkortet få færre instrukser enn den kunne ha fått, og dermed jobbe mindre effektivt. Noe annet som spiller inn er hvor mange watt strømforsyningen klarer å levere, imidlertid er ikke skjermkortenes strømkrav absolutte. Det er for eksempel mulig å kjøre enkelte kort med strømkrav på 400W på flere PC-er med strømforsyning helt ned mot 300W.

## Referanser