Digitaalinen signaaliprosessori

Digitaalinen signaaliprosessori (engl. Digital Signal Processor, DSP) on erityisesti digitaalista signaalinkäsittelyä varten rakennettu suoritin. Se suorittaa digitaalisen signaalinkäsittelyn tehtäviä nopeasti ja kuluttaen vähemmän virtaa kuin samannopeuksinen yleissuoritin, mutta suoriutuu epäsäännöllisemmän ohjelmakoodin ajamisesta huonosti ja on ohjelmoitavuudeltaan rajoittuneempi eikä siten pysty esimerkiksi ajamaan nykyaikaisia käyttöjärjestelmiä.
Sen sijaan DSP voi hoitaa esimerkiksi ethernet prosessointia verkkokortin tai reitittimen ohjelmoitavana ytimenä, mihin yleissuoritin olisi aivan liian hidas.

Historiaa

Vuonna 1978 Intel julkaisi "analogisen signaaliprosessin" 2920. Se sisälsi AD/DA-muuntimet ja signaaliprosessin. Seuraavan vuonna AMI julkisti S2811-suorittimen, joka oli suunniteltu mikroprosessorin lisälaitteeksi, joten se ei toiminut itsenäisesti. Kumpikaan suoritin ei ollut kaupallinen menestys.
Vuonna 1979 Bell Labs esitteli ensimmäisen yhdelle piirille rakennetun digitaalisen signaaliprosessorin. Vuotta myöhemmin NEC ja AT&T esittelivät ensimmäiset itsenäiset ja täydelliset digitaaliset signaaliprosessorit. Molempiin suorittimiin oli saatu innoitusta julkisia kytkentäisiä televerkkoja koskevista tutkimuksista.
Texas Instrumentsin (TI) ensimmäinen DSP TMS32010 julkistettiin vuonna 1983. Se oli suuri menestys, ja TI onkin nykyään DSP markkinajohtaja. 
Toinen menestynyt suoritin oli aikoinaan Motorolan 56000, mutta sitä seuranneet mallit eivät myyneet yhtä hyvin.
Nykyaikana DSP on usein sisällytetty samalle piirille muun logiikan kanssa, esimerkiksi Creativen SB Audigy -äänikorttien käyttämällä EMU10k2-äänipiirillä on signaaliprosessori äänen käsittelyä varten muun logiikan ohella.

DSP:lle tyypillisiä piirteitä

DSP:n käskykanta ei tyypillisesti noudata kaunista oppikirjaesimerkkiä mistään suunnittelufilosofiasta, vaan käskykannassa on käskyjä ja ominaisuuksia sen mukaan, mikä juuri sillä hetkellä auttaa saamaan prosessorista parhaan tehon tai teho-suorituskykysuhteen. Monet uudet DSP:t ovat lähimpänä VLIW-suunnittelufilosofiaa, ja toisaalta useimpiin yleiskäyttösuorittimiin on viime vuosina lisätty paljon DSP-käskyjä.
DSP:n suorituskyvyssä on keskitytty nimenomaan nopeaan kerto- ja yhteenlaskuun sekä näiden yhdistelmään "multiply-accumulate". Useilta signaaliprosessoreilta löytyy erillinen akkumulaattorirekisteri, jossa olevaan arvoon kertolaskun tulokset saadaan suoraan lisättyä ilman erillistä yhteenlaskukäskyä.
DSP:llä ei myöskään aina ole välimuistia, koska käsiteltävä datamäärä on usein sen verran suuri, ettei se mahtuisi pieneen välimuistiin, mutta toisaalta myös tarpeeksi pieni ja ennalta tiedetty, että koko muistista voidaan tehdä niin nopea, että välimuistia ei tarvita. Lisäksi välimuisti aiheuttaisi epädeterminismiä suorittimen suorituskykyyn, mikä olisi huono asia reaaliaikajärjestelmissä, joissa signaaliprosessoreita usein käytetään.
Lähinnä samoista syistä DSP:t eivät myöskään tue virtuaalimuistia.
DSP:ltä löytyy myös usein useampi rinnakkainen kerto- ja yhteenlaskuyksikkö, sekä mahdollisesti myös useampia väyliä muistiin, jotta dataa saadaan ladattua käsiteltäväksi tarpeeksi nopeasti.
Liukulukuyksikköä ei joka mallista löydy.