Vektorisuoritin

Vektorisuoritin (toisinaan taulukkosuoritin, ) on alun perin erikoistarkoitukseen suunnattu suoritin supertietokoneissa. Nykyisin vektorisuoritin on toteutettu käskykantalaajennoksena tavallisessa suorittimessa.

Vektorisuorittimen määritelmä on suoritin, joka voi operoida kokonaisella vektorilla yhdellä käskyllä. Käskyjen operandit ovat kokonaisia vektoreita yksittäisen elementin sijaan. Vektorien käyttö vähentää käskyjen haun () ja purkamisen () aiheuttamaa kuormaa koska käsiteltäviä käskyjä on vähemmän.

Vektoriyksiköt ovat tyypillisesti SIMD käskykantoja, mutta myös MIMD tyyppisiä käskykantoja on käytetty sekä erilaisia yhdistelmiä, joissa tavanomainen suoritin jakaa tehtäviä SIMD-yksiköille (ks. Cell BE).

Käyttökohteet 

Vektorisuoritin soveltuu käyttökohteisiin jossa data on luontevasti rinnakkaista.

SIMD-tyyppisessä suorituksessa sama komento suoritetaan jokaiselle elementille:
 RGB-väriarvon muuttamiseksi voidaan lisätä jokaiseen komponenttiin (R, G, B) sama arvo. Pseudokoodilla:  ADD 1, r0, r1, r2 , jossa arvo 1 lisättään rekisterien r0-r2 arvoihin.
 Verteksin sijainnin tai asennon muuttamiseksi voidaan koordinaatit kertoa samalla arvolla. Pseudokoodilla:  MUL 0.2, r0, r1, r2 , jossa arvolla 0.2 kerrotaan rekisterien r0-r2 arvot.

Vektorisuorittimen etu voi esiintyä myös kahden lukusarjan käsittelyssä rinnakkain:
__vector signed int va1[] = { 1, 2, 3, 4}, va2[] = { 5, 6, 7, 8 };
__vector signed int vb = vec_add(va1, va2);

Tavanomaisessa käskykannassa on kaksi operandia kerrallaan:  ADD 1, r0  Tavanomaisella käskykannalla on siis suoritettava kolme erillistä komentoa kolmen operaation suorittamiseksi, joka SIMD-käskykannalla voidaan suorittaa yhdellä komennolla. Mikäli SIMD-komento vie yhden kellojakson nopeusero voi olla kolminkertainen tavanomaiseen verrattuna.

Toteutuksesta riippuen SIMD-komento voi vähentää myös muistista latausta ja talletusta (load and store), jolloin nopeutus voi olla nelinkertainen (16 komentoa -> 4 komentoa) skalaariseen verrattuna.

Useissa tapauksissa suorittimen vektorirekisterit ja käskykanta tukevat käsittelyä erikokoisina lohkoina. Esimerkiksi 128-bittistä rekisteriä voidaan käyttää joko kahtena 64-bittisenä operandina tai neljänä 32-bittisenä operandina.

Edut ja haitat 
Vektorisuorittimilla saadaan pienempi ohjelmakoko, koska yksittäinen komento voi piilottaa ehtorakenteen ja toistorakenteen. Toisaalta suoritin tarvitsee erikoistuneempaa laitteistoa (vähemmän yleisesti saatavia komponentteja), sekä piirille sijoitettavaa muistia, joka on kallista valmistaa.

Historia 

Yksi ensimmäisistä vektorisuorittimia käyttävistä tietokoneista oli Illinois’n yliopiston kehittämä ILLIAC IV.

Vektorisuorittimia käyttäneitä tietokoneita:
 Texas Instrumentsin (TI) Advanced Scientific Computer (ASC)
 Control Data Corporationin (CDC) STAR-100
 Cray Cray-1 (1976)
 Fujitsu FACOM VP-100 (1982)
 Fujitsu FACOM VP-200 (1982)
 Hitachi HITAC S-810 (1982)
 NEC SX-1 (1983)
 NEC SX-2 (1983)
 Convex Computer C1 (1984)
 Hitachi HITAC S-820 (1987)
 Cray Cray J90 (1994)
 NEC SX-3 (1995)
 Fujitsu VP300 (1996)
 Cray Cray SV1 (1998)

Toteutuksia 
Esimerkkejä itsenäisistä vektorisuorittimista:
 FR-V, Fujitsu 
 Cell BE, Sony, Toshiba, IBM
 Xetal, Philips

Käskykantalaajennoksia:
 HVX, Qualcomm Hexagon
 Altivec, PowerPC
 MSA, MIPS-arkkitehtuuri
 VIS, SPARC
 MAX, PA-RISC
 MVI, Alpha
 NEON, ARM
 3DNow!, AMD x86
 MMX, Intel x86
 SSE, x86
 AVX, x86

Katso myös 
 GPGPU
 Flynnin luokittelu

Lähteet

Aiheesta muualla 
 Englanninkielisen Wikipedian artikkeli aiheesta 

Suorittimet