Procesor vectorial

Un procesor vectorial  este un procesor în care operanzii unor instrucțiuni pot fi ordonați șiruri de vectori de date . Diferă de procesoarele scalare , care pot funcționa doar pe un singur operand la un moment dat. Marea majoritate a procesoarelor sunt scalare sau apropiate de acesta. Procesoarele vectoriale au fost comune în calculul științific, unde au stat la baza majorității supercalculatoarelor din anii 1980 până în anii 1990. Dar creșterea dramatică a performanței și dezvoltarea activă a noilor procesoare au dus la deplasarea procesoarelor vectoriale de pe tărâmul procesoarelor de zi cu zi .

Majoritatea microprocesoarelor moderne au extensii vectoriale (vezi SSE ). În plus, plăcile video moderne și acceleratoarele fizice pot fi considerate coprocesoare vectoriale .

Ilustrație a lucrării

Pentru a ilustra diferența dintre un vector și un procesor scalar, luați în considerare un exemplu simplu de adăugare în perechi a două seturi de 10 numere. În programarea „normală”, se folosește o buclă , care ia perechi de numere în succesiune și le adună:

repetați ciclul de 10 ori citiți următoarele instrucțiuni și decodați obține primul mandat obține al doilea mandat pliază salvează rezultatul sfârşitul ciclului

Pentru un procesor vectorial, algoritmul va fi semnificativ diferit:

citiți următoarele instrucțiuni și decodați obține primii 10 termeni obține termeni de 10 secunde pliază salvează rezultatul

Implementarea Cray a extins capacitățile de calcul permițând mai multe operațiuni diferite să fie efectuate simultan. De exemplu, luați în considerare codul care adună 2 seturi de numere și se înmulțește cu o treime, în Cray aceste operații ar fi efectuate astfel:

citiți următoarele instrucțiuni și decodați obține 10 numere obține 10 numere obține 10 numere adunați și înmulțiți-le salvează rezultatul

Astfel, operațiile matematice sunt efectuate mult mai rapid, principalul factor limitator fiind timpul necesar pentru a prelua datele din memorie.

Programare pentru arhitecturi de calcul eterogene

Au fost proiectate diverse mașini folosind atât procesoare tradiționale, cât și procesoare vectoriale, cum ar fi Fujitsu AP1000 și AP3000. Programarea pentru astfel de mașini eterogene poate fi dificilă, deoarece dezvoltarea de programe care utilizează cât mai bine caracteristicile diferitelor procesoare crește sarcina programatorului. Acest lucru crește complexitatea codului și reduce portabilitatea acestuia , deoarece secțiunile de cod necesare pentru fiecare dintre procesoare vor fi intercalate pe tot parcursul programului [1] . Echilibrarea sarcinilor de lucru ale aplicațiilor între procesoare poate fi problematică, mai ales având în vedere că acestea au de obicei caracteristici de performanță diferite. Există diverse modele conceptuale pentru rezolvarea acestei probleme, cum ar fi utilizarea unui limbaj de coordonare și a blocurilor de bază de programare ( biblioteci și/sau funcții de ordin superior ). Fiecare bloc poate avea implementări native diferite pentru fiecare tip de procesor. Programatorul folosește pur și simplu această abstractizare, iar compilatorul inteligent alege cea mai bună implementare în funcție de context [2] .

Vezi și

Note

  1. Kunzman, D.M.; Kale, LV (2011), Programming Heterogeneous Systems , 2011 Simpozionul internațional IEEE privind atelierele de lucru în procesare paralelă și distribuită și Forumul de doctorat , p. 2061, ISBN 978-1-61284-425-1 
  2. ^ John Darlinton , Moustafa Ghanem, Yike Guo, Hing Wing To (1996), Guided Resource Organisation in Heterogeneous Parallel Computing , Journal of High Performance Computing vol . 4 (1): 13–23 , < http://citeseerx.ist. psu.edu/viewdoc/summary?doi=10.1.1.37.4309 > Arhivat 8 iunie 2013 la Wayback Machine 

Link -uri