Guide: DSP: Digitale signalprosessorer (del 3)
Alternative Arkitekturer
Denne artikkelserien tar for seg en mye brukt, men mindre synlig type prosessor: den digitale signalprosessoren.
Side 1: Innledning
Digitale signalprosessorer og andre prosessorer har igjennom
utviklingen påvirket hverandre, og idag fines det flere
alternativer til den klassiske DSP-arkitekturen som beskrevet
i forrige artikkel. Blant disse finner vi prosessorer med mange MAC
(Multiply and Accumulate) enheter, prosessorer med arrayer av
underprosessorer, FPGA-kretser, og ikke minst DSP-koprosessorer til
alminnelige prosessorer. Denne artikkelen gir en oversikt over disse.
DSP med FPGA
FPGA, Field Programmable Gate Array, er som navnet antyder en krets
der logiske porter ("gate") er lagt ut som en matrise ("array"), der
disse kan programmeres av en bruker. Dette i motsetning til en ASIC som
er designet på forhånd og produsert med en spesifik
funksjon (se tidligere artikkel om
kretsdesign). De logiske portene (CLB - Configurable Logical
Blocks) kan programmeres til forskjellige
funksjoner, oftest ved å definere verdier i en tabell (LUT - Look
Up Table) der inngangene er en indeks i tabellen.
Også andre og mer avanserte elementer kan legges inn, f.eks. DSP-enheter (f.eks DSP48), minne, prosessorer, kryptoenheter med mer. Selv om disse kan lages fra enkle logiske elementer som beskrevet over, vil det være langsommere og mer plasskrevende.
Rundt de forskjellige logiske blokkene ligger
høyhastighetslinjer, omtrent som flerfeltsveier rundt kvartaler
med logiske blokker, og kryssene er da som koblingspunkter for omruting.
Programmering skjer ved å definere funksjonene i blokkene
(blå firkanter), som
igjen betyr å definere innholdet i oppslagstabellene, og ved
å definere forbindelsene (orange utstikkere) mellom hver CLB og
høyhastighetslinjene (olivengrønne baner), og mellom
høyhastighetslinjene i
kryssene (lysegrønne kvadrater). Dette skjer typisk i et
høynivåspråk siden
det er en overveldende oppgave å holde styr på flere
hundrede tusener med blokker, tabeller med mer.
I bruk er en FPGA-løsning typisk langt raskere enn en
programmerbar DSP, av flere grunner. For det første er
komponentene stablet etterhverandre i den rekkefølgen data
prosesseres, der seksjoner med logiske blokker gjør sin del som
om det var et samlebånd. I en mobiltelefon kan dette være
demodulasjon, dekoding av protokolldata, dekoding av lyd,
balansering av lyd med mer. En kan også ha parallelle funksjoner
som f.eks. styring av sendereffekt og mottakerfrekvens. I en
programmerbar DSP måtte en prosessor gjøre alt, og bruke
interrupter for å kjøre parallelle funksjoner. I en FPGA
er
blokker koblet til hverandre med høyhastighetslinjer, så
det er ikke behov for å laste om data slik en DSP må
gjøre, og det er heller ikke behov for å dekode
instruksjoner om en bare bruker enkle logiske blokker.
En FPGA kan også utrustes med programmerbare funskjoner som er
lettere å debugge og oppgradere, eventuelt gjenbruke eksisterende
kode.
Ulempen med en FPGA er typisk høy innkjøpskostnad og
programmeringssystemer som er dyrere enn for tradisjonell DSP.
Debugging er også mer krevende, spesielt når det er mange
parallelle funksjoner som må samvirke.
Side 2: DSP med sub-prosessorer
DSP med sub-prosessorer
Nært beslektet med FPGA-tanken er en nyere prosessortype som
består av noen få styreprosessorer og et array av mange
sub-prosessorer,
der delene er tett knyttet sammen med bredbåndsbusser og avansert
busskontroll. Dette er en løsning for å tilveiebringe
enorm datakraft uten å måtte bruke høy
klokkefrekvens, noe en ønsker å unngå pga.
strømforbruk. Faktisk er strømforbruk i basestasjoner i
mobiltelefon-nettet regnet som en betydelig utgiftspost i
driftsbudsjettene det er verd
å gjøre noe med.
En tidlig variant var C80-serien fra Texas Instruments der en
32-bits
RISC, fire DSP-enheter og buss-styring var integrert på en chip.
Arkitekturen viste seg å være komplisert å
programmere, og serien ble etterhvert erstattet av andre arkitekturer.
Dette har ikke stoppet andre fra å forsøke, og blant
interessante nykommere finner man Sandblaster-arkitekturen
fra Sandbridge Technologies.
Etter hva leverandøren hevder, skal deres prosessorer være
istand til å kunne brukes i radiosystemer og dekode det meste fra
GSM
til GPS. Slike radioer (SDR - Software Defined Radio) kan dekode nye
signaler bare ved hjelp av reprogrammering. Et annet eksempel er MRC6011
fra Freescale. De kaller arkitekturen for "Reconfigurable Compute
Fabric", der hver krets består av 2 moduler, der hver modul
består av 3 kjerner, og der hver kjerne omfatter en
RISC-prosessor og 16 rekonfigurerbare celler. Kretsene kan settes
sammen i grupper, og en kan derved lage beowulf-cluster av
beowulfclustre, alt
knyttet sammen med høyhastighetsforbindelser.
Slike arkitekturer er krevende å programmere, og til tross for
gode
omtaler er det påfallende hvor mange av disse som har hatt
problemer med å forlate tegnebrettet og komme ut i alment bruk.
Så langt ser det ut til at PicoChip
er ganske alene om å ha kommersiell suksess, og deres
satsningsområde er basestasjoner for mobiltelefoni.
Også mediaprosessorer er ofte utstyrt med en rekke underprosessorer for effektiv koding og dekoding av mediafiler. Mange nyere formater oppnår god kompresjon på bekostning av behovet for mye datakraft, og for slike dekodere er det ofte et krav til at de skal operere i sann tid.
Cell-prosessoren er en slektning av denne type arkitektur, selv om
den ikke er først og fremst beregnet på digital
signalprosessering. Den har både en generell prosessor og flere
underprosessorer, alle knyttet sammen med et høyhastighetsnett
på chippen.
Side 3: SIMD
SIMD
Det har vært lansert mange alternativer til å øke ytelsen uten å øke klokkefrekvensen, og mye av dette har gått ut på å øke antall funksjonelle enheter. Blant de første grepene som ble tatt var å innføre flere MAC (Multiply and Accumulate) -enheter i arkitekturene, men det resulterte i minimale forbedringer. Noe av grunnen er at en digital signalprosessor opererer under harde sanntidskrav (mer om dette i en senere artikkel), der en på forhånd må vite hvor mye tid et program tar, og så kunne være sikker på at det alltid tar like lang tid. Tradisjonelle CPU-knep som speculative execution (der flere mulige alternativer kjøres før en vet hvilket alternativ som skal være korrekt) og out of order execution (der instruksjoner kjøres ut av rekkefølge og resultater omstables i henhold til programrekkefølgen) er derfor ikke aktuelle siden en da ikke på forhånd kan være sikker på tidsbruken, og i tillegg medfører betydelig økning i strømforbruk. Andre alternativer måtte til.
Ved å bruke en instruksjon på flere dataenheter samtidig
(SIMD -
Single Instruction Multiple Data), oppnår en
parallellprosessering uten store kostnader i form av antall
instruksjoner. Dette er et grep mye brukt i moderne prosessorer (MMX,
SSE1-4, 3DNow!, Altivec med fler) og som oppfyller sanntidskravene. Et
dataregister inneholder en rekke datafelter, og en enkelt instruksjon
kan da operere på en rekke datafelter (f.eks. 4) på en
gang:
SIMD_int_add(R3, R1, R2):
R3.a = R1.a + R2.a
R3.b = R1.b + R2.b
R3.c = R1.c + R2.c
R3.d = R1.d + R2.d
Registre R1, R2 og R3 er brede, typisk 64 eller 128 bit brede, og
hvert register inneholder en rekke under-registre a, b, c og d.
Det er vedt å merke seg at om det blir overflow i summeringen av R1.c med R2.c, så vil ikke dette påvirke resultatet i R3.b, noe som ville ha skjedd med alminnelig summering av R1 og R2.
SIMD er benyttet både i tallknusere, generelle prosessorer og
digitale signalprosessorer. Fordelen er enkel oppskalering av
datakraft, men er mest egnet til små datasett som passer inn i
registerfilen. Behandlig av store datasett, f,.eks.
fouriertransformasjoner med tusener av datapunkter, vil kreve bruk av
data-adressegeneratorer. Det er komplisert og koster raskt mye tid i
form av dataoverføringer.
SIMD kan også kombineres med sub-prosessorer, f.eks.
inngår AltiVec i styreprosessoren (Power Processing Element) i
Cell-prosessoren.
MAC som tillegg
En MAC er noe av det mest karakteristiske i en DSP, og var i lange
tider et sjeldent syn i generelle prosessorer. Selv om den typiske DSP
tidligere var adskillig raskere enn en typisk CPU, har CPU-ytelsen
blitt øket i større tempo enn for DSP. Noe av grunnen er
at en DSP er typisk mer prissensitiv enn en CPU, og er derfor så
enkel og så langsom som mulig innenfor rammene til kravene. I
tillegg er DSP-funskjoner også svært følsomme for
strømforbruk (bl.a. i battetridrevne applikasjoner som
mobiltelefoner) og for varmeproblemer der vifter ikke er en akseptabel
kjølemetode (mobiltelefoner, stereoanlegg med mer).
Siden CPU-utviklingen var mindre hemmet, har endel CPU-designer
fått muligheten til å legge til MAC som en funksjon for
spesielle applikasjoner, typisk mikrokontrollere som ARM (mye brukt i
mobiltelefoner) og Super-H (brukt i spill, multimedia og motorstyring).
Felles for disse er at bruksområdene dekker i stor grad
styringslogikk der DSP-arkitekturen ikke er spesielt godt egnet, med
innslag av signalprosessering der en MAC-enhet er tilstrekkelig til
å få jobben gjort.
DSP integrert med RISC
Det er også mulig å få i pose og i sekk med
ariktekturer som kombinerer RISC med DSP.
Et eksempel er Blackfin
fra Analog Devices.
DSP-egenskapene ivaretas av bl.a. en dobbel MAC
(grønn bakgrunn) med
data-adressegeneratorer (DAG0 og DAG1 i blått). Det som
gjør den uvanlig i
DSP-sammenheng er at den er tilstrekkelig velutstyrt og oppfyller
kravene mange avanserte operativsystemer stiller, slik at en kan
kjøre bl.a. Linux
på Blackfin.
Side 4: Utviklingen
Utviklingen
Et stadig større behov for datakraft med stadig større
krav til lavt strømforbruk, har ført til en stadig
utvikling i DSP-arkitekture. Selv om det finnes mange seiglivede
arkitekturer, slik som x86 er for generelle CPUer, er situasjonen langt
mer sammensatt for DSP-markedet. Det finnes en lang rekke tildels
svært spesialiserte arkitekturer, hver med store varisjoner, og
stadig nye kommer til.
Om en skal se etter trenger ser det ut til at DSP og CPU går i retning av flerkjerneløsninger, der kjernene blir stadig mer avanserte. Klokkefrekvens er ikke lengre hovedparameteret en arbeider mest med, istedet økes ytelsen ved bruk av flere kjerner med mer avanserte funksjoner, slik at en bruker forholdsvis mindre strøm for datakraften som systemet leverer.
I tillegg ser en at DSP-systemer ofte pakkes sammen med en
mikrokontroller, ofte i situasjoner der en ikke ønsker å
bruke plass ti en egen off-chip kontroller til å håndtere
ting som kommunikasjon som f.eks. USB-grensesnitt. Også
CPU-design har hentet inspirasjon fra DSP-verdenen, også dette
vil bli nærmere omtalt i en senere del.
Avslutningsvis skal det nevnet at også en GPU kan brukes til
signalprosessering, selv om dette ikke akkurat har tatt av.
Kraftforbruk er ikke blant de viktigste designparametre for en GPU,
hvilket begrenser bruksområdene.
Oppsummering
DSP- og CPU-verdnene er ganske forskjellige i sine grunnbehov, men
det er kommet til en god del felles elementer etter at
strømforbruket i alminnelige CPUer begynte å bli et
problem. Ikke overraskende bruker nå CPU-designere grep som er
velkjent fra DSP-bransjen. For mange år siden var en typisk DSP
langt raskere enn den tids CPUer, men ble etterhvert forbikjørt.
Nye behov er kommet til, og igjen er datakraften i en DSP raskt
voksende.
Nye kombinasjoner er kommet til, og en aner konturene av kampen
mellom Cell og GPU, og løsninger med mange sub-prosessorer er
på fremmars etter mange feilslag. DSP-floraen er også stdig
voksende ettersom nye behov i markedet kommer til, blant annet i nyere
og kommende generasjoner trådløse nettverkssystemer.