Vektorisuoritin

Vektorisuoritin (toisinaan "taulukkosuoritin", ) on alun perin erikoistarkoitukseen suunnattu suoritin supertietokoneissa.
Nykyisiin suorittimiin on toteutettu SIMD-tyyppisiä käskykantalaajennuksi samaan käyttöön.
SIMD-käskyt on suunnattu samaan tarkoitukseen (monta datayksikköä käsitellään samalla käskyllä) kuin vektorikäskyt, mutta niiden toteutus on erilainen.
Toisaalta esimerkiksi Intel käyttää SIMD-tyyppisistä käskyistään nimeä Advanced Vector Extensions (AVX ja AVX2).
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.
Olemassa olevat toteutukset 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).
Nykyisiä määritelmiä vektorikäskykannoille on olemassa ARM ja RISC-V-suorittimiin.
ARM-suorittimiin on kehitetty SIMD-käskykantalaajennus Advanced SIMD Instructions (NEON) ja myöhemmin myös vektorikäskyt Arm Scalable Vector Extensions (SVE). SVE on toteutettu esim. NVIDIA Grace, the AWS Graviton 3, Fujitsu A64FX -suorittimissa.
RISC-V-käskykannan suunnittelussa hylättiin SIMD-tyyppiset käskyt ja määriteltiin niiden sijaan vektorikäskykanta “V” Standard Extension for Vector Operations.
RISC-V-vektorisuorittimia on toteuttanut Andes Technology Corporation.
Käyttökohteet.
Vektorisuoritin soveltuu käyttökohteisiin jossa data on luontevasti rinnakkaista.
SIMD-tyyppisessä suorituksessa sama komento suoritetaan jokaiselle elementille:
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: codice_3 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 -&gt; 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:
Toteutuksia.
Esimerkkejä itsenäisistä vektorisuorittimista:
Käskykantalaajennoksia: