SIMD

Single Instruction stream, Multiple Data stream ( SIMD ) består av et stort antall identiske prosessorer som utfører samme sekvens av instruksjoner på forskjellige sett med data [1] . SIMD-prosessorer brukes ofte av superdatamaskiner og med noen variasjoner selv i moderne mikroprosessorer .

SIMD-modellen er sammensatt av en enkelt kontrollenhet som utfører en instruksjon om gangen ved å kontrollere flere ALUer som opererer synkront. Ved hvert trinn utfører alle elementene den samme skalarinstruksjonen, men hver på et annet datum. En datamaskin basert på denne modellen kalles også en Array-prosessor.

Tidligere ble det produsert et stort antall enheter dedikert til å utføre spesifikke oppgaver. Vanligvis var disse enhetene riktig programmerte DSP- er. Hovedforskjellen mellom SIMD-instruksjoner og DSP-er er at de kommer med et komplett instruksjonssett og derfor er i stand til praktisk talt alle oppgaver. I stedet er SIMD-instruksjonene designet for å manipulere store mengder data parallelt, og for de vanlige operasjonene er de avhengige av et annet sett med instruksjoner som vanligvis administreres av mikroprosessoren. Videre har DSP-er en tendens til å inkludere en rekke instruksjoner dedikert til å behandle spesifikke typer data som lyd- eller videodata, mens SIMD-instruksjoner brukes til å behandle generiske data.

Fordeler

I multimediedatabehandling støter man ofte på algoritmer som kan dra nytte av en SIMD-arkitektur. For å endre lysstyrken til et bilde, må for eksempel en mikroprosessor laste hver piksel som komponerer bildet inn i registrene, gjøre endringen i lysstyrke og deretter lagre resultatene i minnet. En SIMD-prosessor vil først utføre en instruksjon som vil laste et visst antall piksler med en enkelt operasjon (det nøyaktige antallet avhenger av arkitekturen ), deretter vil prosessoren modifisere alle dataene parallelt og deretter lagre dem alle samtidig i minnet. Å utføre operasjoner i blokker i stedet for enkeltpiksler gjør operasjoner mye mer effektive siden moderne datamaskiner er designet for å overføre data i blokker og er ineffektive i individuelle minnetilganger.

En annen fordel kommer fra det faktum at typisk SIMD-instruksjoner alltid er i stand til å manipulere alle data som lastes samtidig: Så hvis en SIMD-prosessor er i stand til å laste 8 data, vil den også kunne behandle dem alle samtidig. Superscalar mikroprosessorer er også i stand til å behandle flere data samtidig, men med lavere effektivitet.

Ulemper

SIMD-baserte arkitekturer krever et stort antall registre, og derfor bestemmer designere noen ganger å bruke registrene til FPU for å redusere kostnadene . Dette valget gjør det umulig å bruke SIMD- og FPU-instruksjoner samtidig med mindre sakte kontekst endres. Dette var Intels foretrukne tilnærming for MMX -instruksjoner som er notorisk trege når de er forbundet med flyttalloperasjoner. Det bør også tas i betraktning at parallell programmering generelt er mer kompleks enn skalær programmering og derfor krever mye mer tid og ferdigheter fra programmererens side.

Begrensninger

Den iboende grensen for SIMD-typearkitekturer er gitt av Amdahls lov om den parallelliserbare brøken. Loven uttrykker konseptet om at det maksimale nivået av parallellisering som kan oppnås begrenses øverst av den såkalte ikke-parallaliserbare brøkdelen av kode som er tilstede i kilden til programmet som skal kjøres. Derfor vil et program som kjører på en SIMD-arkitektur aldri kunne kjøres på kortere tid enn det som er nødvendig for å kjøre brøkdelen av koden som ikke er parallelliserbar.

Historie

Den første bruken av SIMD-instruksjoner skjedde i vektordatamaskiner, spesielt de som ble produsert av Cray på 1970-tallet.

Senere maskiner foretrakk å bruke et relativt stort antall enkle prosessorer. Eksempler på denne typen maskiner er:

Og mange andre mindre kjente maskiner

Nylige SIMD-datamaskiner

De siste årene har mange mikroprosessorer blitt produsert med mellomstore SIMD-instruksjoner (64 eller 128 bits). I 1994 ble PA-RISC-prosessorer utstyrt med MAX - instruksjoner . For øyeblikket er SIMD-instruksjoner inkludert i nesten alle mikroprosessorer, inkludert PowerPC , med AltiVec -instruksjoner , Intel MMX , SSE , SSE2 , SSE3 og SSE4 , AMD 3DNow! , ARM med NEON -teknologi, SPARC VIS - instruksjoner , PA-RISC MAX og MIPS MDMX og MIPS-3D .

Disse instruksjonene inkluderer generelt alle større prosesseringsoperasjoner på vektorer og matriser. Ofte inkluderer disse instruksjonene tredimensjonal prosessering. Moderne grafikkort er utstyrt med dedikerte SIMD-prosessorer som avlaster CPUen for kostbar prosessering knyttet til tredimensjonal skjerm. Noen prosessorer inkluderer instruksjoner dedikert til signalbehandling, disse operasjonene brukes til å kode / dekode videostrømmer for å øke hastigheten på komprimeringsalgoritmene.

Programvare

I personlige datamaskiner gikk utviklingen av SIMD-programvare i utgangspunktet sakte. Dette skyldtes to samtidige problemer. Det første problemet skyldtes det faktum at Intel og AMD for å spare penger hadde bestemt seg for å bruke registrene til FPU som registre for SIMD-instruksjonene , og dette designvalget reduserte ytelsen til SIMD-programvaren. Det andre problemet var den dårlige styringen av kompilatorene. Opprinnelig var ikke kompilatorene i stand til å effektivt administrere SIMD-instruksjonene, og derfor ble ofte programmererne som hadde til hensikt å bruke disse instruksjonene tvunget til å skrive store deler av koden i Assembly .

Til tross for den trege starten av SIMD-programvaren på x86 -maskiner , ble kompilatorene senere forbedret og Intel ga ut SSE-instruksjonene som løste de store problemene med de tidligere SIMD-instruksjonene. Faktisk sprer SIMD-programvaren seg raskt.

I systemer produsert av Apple spredte SIMD-programvaren seg derimot nesten umiddelbart. Prosessorene som ble brukt av Apple brukte AltiVec SIMD -instruksjoner , som er betydelig kraftigere enn Intels MMX -instruksjoner. I tillegg hadde Apple-systemprogrammerere nesten umiddelbart gode kompilatorer for SIMD-instruksjoner produsert av Motorola , IBM og GNU -prosjektet . I tillegg stolte Apple sterkt på SIMD-instruksjoner, faktisk bruker mange av programmene som QuickTime og iTunes SIMD-instruksjoner.

Kommersielle applikasjoner

SIMD-prosessorer brukes ofte til lyd-/videoapplikasjoner og for å administrere tredimensjonal grafikk. Faktisk er det montert en SIMD-prosessor inne i Sony PlayStation 2 -konsollen som bruker firedimensjonale vektorer og administrerer grafikken til videospill.

En vektorprosessor er cellen . Denne prosessoren utvikles av IBM i samarbeid med Toshiba og Sony. Prosessoren er utstyrt med en rekke SIMD-enheter utstyrt med uavhengig RAM og en klassisk prosessor som brukes til å utføre ikke-SIMD-instruksjoner. Denne prosessoren er utviklet for å brukes av applikasjoner som intensiverer bruk av tredimensjonal grafikk, faktisk ble den brukt av PlayStation 3 .

Merknader

  1. ^ Andrew S. Tanenbaum og Todd Austin, Architecture of Computers , sjette utgave, Pearson, s. 70.

Eksterne lenker