Vektorisuoritin (toisinaan taulukkosuoritin, engl. array processor) 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ä.[1][2] Käskyjen operandit ovat kokonaisia vektoreita yksittäisen elementin sijaan.[3] Vektorien käyttö vähentää käskyjen haun (engl. fetch) ja purkamisen (engl. decode) aiheuttamaa kuormaa koska käsiteltäviä käskyjä on vähemmän.[3]

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[4]).

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.[5]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.[6]

Käyttökohteet muokkaa

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

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:[4]

__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.[8]

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 muokkaa

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

Historia muokkaa

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

Vektorisuorittimia käyttäneitä tietokoneita:[10][8]

Toteutuksia muokkaa

Esimerkkejä itsenäisistä vektorisuorittimista:

Käskykantalaajennoksia:

Katso myös muokkaa

Lähteet muokkaa

  1. Vector Processors phy.ornl.gov. Viitattu 16.2.2017.
  2. Aldakheel, Eman & Chandrasekaran, Ganesh & Prof. Kshemkalyani, Ajay: VECTOR PROCESSORS cs.uic.edu. Viitattu 16.2.2017.
  3. a b c d Manadhata, Pratyusa & Sekar, Vyas: Vector Processors (PDF) cs.cmu.edu. Viitattu 9.9.2018.
  4. a b Chapter 2 Basics of SIMD Programming kernel.org. Viitattu 18.2.2017.
  5. https://nvidia.github.io/grace-cpu-benchmarking-guide/developer/vectorization.html
  6. https://www.globenewswire.com/en/news-release/2022/12/07/2569216/0/en/Andes-Announces-RISC-V-Multicore-1024-bit-Vector-Processor-AX45MPV.html
  7. Mutlu, Onur: Computer Architecture: SIMD/Vector/GPU ece.cmu.edu. Viitattu 16.2.2017.
  8. a b Welch, Eric & Evans, James: Vector and SIMD Processors meseec.ce.rit.edu. Viitattu 16.2.2017.
  9. ILLIAC IV archive.computerhistory.org. Viitattu 16.2.2017.
  10. a b Patterson, David A.: Lecture 6: Vector Processing people.eecs.berkeley.edu. Viitattu 16.2.2017.
  11. Watson, W. J.: The TI ASC-A highly modular and flexible super computer architecture computer.org. Viitattu 16.2.2017.
  12. 【Fujitsu】 FACOM VP-100 Series IPSJ Computer Museum. Viitattu 16.2.2017.
  13. 【Hitachi】 HITAC S-810 IPSJ Computer Museum. Viitattu 16.2.2017.
  14. 【NEC】 SX-1, SX-2 IPSJ Computer Museum. Viitattu 16.2.2017.
  15. 【Hitachi】 HITAC S-820 IPSJ Computer Museum. Viitattu 16.2.2017.