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 .
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 cicluluiPentru 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ă rezultatulImplementarea 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ă rezultatulAstfel, operațiile matematice sunt efectuate mult mai rapid, principalul factor limitator fiind timpul necesar pentru a prelua datele din memorie.
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] .
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină | |||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |