Vektorisuoritin
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 | muokkaa wikitekstiä]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 | muokkaa wikitekstiä]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 | muokkaa wikitekstiä]Yksi ensimmäisistä vektorisuorittimia käyttävistä tietokoneista oli Illinois’n yliopiston kehittämä ILLIAC IV.[9]
Vektorisuorittimia käyttäneitä tietokoneita:[10][8]
- Texas Instrumentsin (TI) Advanced Scientific Computer (ASC)[11]
- Control Data Corporationin (CDC) STAR-100
- Cray Cray-1 (1976)
- Fujitsu FACOM VP-100 (1982)[12]
- Fujitsu FACOM VP-200 (1982)
- Hitachi HITAC S-810 (1982)[13]
- NEC SX-1 (1983)[14]
- NEC SX-2 (1983)
- Convex Computer C1 (1984)[10]
- Hitachi HITAC S-820 (1987)[15]
- Cray Cray J90 (1994)
- NEC SX-3 (1995)
- Fujitsu VP300 (1996)
- Cray Cray SV1 (1998)
Toteutuksia
[muokkaa | muokkaa wikitekstiä]Esimerkkejä itsenäisistä vektorisuorittimista:
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
[muokkaa | muokkaa wikitekstiä]Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ Vector Processors phy.ornl.gov. Viitattu 16.2.2017.
- ↑ Aldakheel, Eman & Chandrasekaran, Ganesh & Prof. Kshemkalyani, Ajay: VECTOR PROCESSORS cs.uic.edu. Viitattu 16.2.2017.
- ↑ a b c d Manadhata, Pratyusa & Sekar, Vyas: Vector Processors (PDF) cs.cmu.edu. Viitattu 9.9.2018.
- ↑ a b Chapter 2 Basics of SIMD Programming kernel.org. Viitattu 18.2.2017.
- ↑ https://nvidia.github.io/grace-cpu-benchmarking-guide/developer/vectorization.html
- ↑ https://www.globenewswire.com/en/news-release/2022/12/07/2569216/0/en/Andes-Announces-RISC-V-Multicore-1024-bit-Vector-Processor-AX45MPV.html
- ↑ Mutlu, Onur: Computer Architecture: SIMD/Vector/GPU ece.cmu.edu. Viitattu 16.2.2017.
- ↑ a b Welch, Eric & Evans, James: Vector and SIMD Processors meseec.ce.rit.edu. Arkistoitu 17.2.2017. Viitattu 16.2.2017.
- ↑ ILLIAC IV archive.computerhistory.org. Viitattu 16.2.2017.
- ↑ a b Patterson, David A.: Lecture 6: Vector Processing people.eecs.berkeley.edu. Viitattu 16.2.2017.
- ↑ Watson, W. J.: The TI ASC-A highly modular and flexible super computer architecture computer.org. Viitattu 16.2.2017.
- ↑ 【Fujitsu】 FACOM VP-100 Series IPSJ Computer Museum. Viitattu 16.2.2017.
- ↑ 【Hitachi】 HITAC S-810 IPSJ Computer Museum. Viitattu 16.2.2017.
- ↑ 【NEC】 SX-1, SX-2 IPSJ Computer Museum. Viitattu 16.2.2017.
- ↑ 【Hitachi】 HITAC S-820 IPSJ Computer Museum. Viitattu 16.2.2017.