procesor Vector

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Cray Y-MP vector supercomputer carte de procesor

Un procesor procesor vector sau matrice este un procesor proiectat pentru a efectua operații matematice pe mai multe date elementare, în același timp.

Caracteristici

Acest lucru este în contrast cu arhitectura clasica a unui procesor scalar care implică prelucrarea unei singure date la un moment dat. Cele mai multe procesoare sunt scalar (sau extern arata ca ea). Procesoarele vectoriale sunt comune în aplicații științifice și au fost adesea baza supercomputere începând din anii 1980 . Cu sfârșitul anilor 1990 microprocesoare au crescut în performanță și multe procesoare de uz general , s- au echipat cu unități de vector sau au devenit vector în cadrul acestora. În 2000, IBM , Toshiba și Sony a început dezvoltarea Cell procesor, un microprocesor de înaltă performanță , echipate cu mai multe unități de vector și care vizează aplicații de la console de la supercalcul.

În prezent , practic fiecare procesor modern , include instrucțiuni vectoriale de obicei , cunoscut sub numele de SIMD instrucțiuni. Console de jocuri și plăci grafice să folosească pe scară largă de procesoare vectoriale ca video în timp real și procesare audio este un domeniu care se pretează bine la procesarea vectorului.

Istorie

Primele evoluții de procesoare vectoriale au avut loc la sfârșitul anilor 1960 la Westinghouse în timpul proiectului Solomon. Proiectul Solomon a avut drept scop creșterea substanțială a performanței matematice prin utilizarea unui număr mare de simple , coprocesoare matematice (sau UMA ) sub controlul unui singur procesor . Procesorul ar fi trebuit să trimită operații matematice comune tuturor Alus, a Alus ar fi preluat datele și după ce le-au procesat le-ar fi salvat. Acest lucru ar fi permis un singur algoritm pentru a rula pe mai multe date în același timp. În 1962 Westinghouse a decis să anuleze proiectul , dar unii cercetători care fugiseră de la compania a convins Universitatea din Illinois (Urbana-Champaign) la cercetarea și dezvoltarea de repornire ILLIAC IV . Inițial , aparatul a fost să fie echipate cu 256 de procesoare elementare și a fost de a dezvolta 1 gigaflops dar , în 1972 , când a fost introdus aparatul a fost echipat cu 64 de procesoare si dezvoltat numai 100 megaflopi (vârf de 150 megaflopi). Deși ILLIAC IV este considerată un eșec în aplicații care tratate cu cantități mari de date , cum ar fi dinamica fluidelor, aparatul a fost cel mai rapid supercomputer de pe planetă.

Prima implementare cu succes a procesoare vectoriale a venit cu CDC STAR-100 și Texas Instruments Advanced Computer științific . ALU de baza a ASC a folosit o arhitectură de conducte pentru a efectua operațiuni de vector și scalare și a fost capabil să dezvolte 20 megaflopi de vârf în timpul execuției operațiilor vectoriale. Extended UMA manipulate două sau patru conducte, și astfel performanța dublate sau de patru ori. Lățimea de bandă furnizată de către subsistemul de memorie a fost capabil pentru a se potrivi UMA extinse. Pe de altă parte, STAR a fost mai lent decât alte CDC masini , cum ar fi CDC 7600 , deoarece decodarea ei a fost lentă în cazul executării instrucțiunilor scalare. În cazul executării instrucțiunilor vectoriale, pe de altă parte, aparatul a fost rapid în decodare și, prin urmare, acest lucru compensat pentru încetineala operațiunilor scalare.

Tehnica vector a fost pe deplin exploatat de celebrul Cray-1 . Acest computer, spre deosebire de STAR sau ASC nu a păstrat date exclusiv în memorie, dar, de asemenea, a avut 8 registre vector pe 64 de biți în CPU. Instrucțiunile vectoriale au fost realizate pe baza datelor stocate în registre și , prin urmare , au fost mult mai rapid decât cele realizate prin accesarea memoriei principale. În plus, proiectul a implicat diferite conducte pentru diferitele operațiuni și, prin urmare, adăugare / conducta de scădere a fost diferită de conducta de multiplicare. Deci, mai multe instrucțiuni vectoriale ar putea fi concatenate și executate simultan. Cray-1 a fost capabil să execute 80 MIPS, dar prin înlănțuirea până la trei seturi de instrucțiuni pe care le-ar putea ajunge la 240 MIPS un număr respectabil de operațiuni chiar și astăzi.

Alte exemple au urmat. CDC a urmat din nou calea vectorului de calcul cu ETA-10 o mașină care nu vinde bine și a convins compania să părăsească sectorul supercomputerelor. Unele companii japoneze ( Fujitsu , Hitachi si NEC ) au prezentat mașini bazate pe vector de registre care au fost mai rapid decât mașinile mai mici din SUA și. Oregon Floating Punct Systems au fost folosite pentru a construi matrice de procesoare pentru minicalculatoare înainte de a dezvolta sale minisupercomputers . Cu toate acestea, Cray a continuat să domine scena cu superinformatică sale Cray-2 , Cray X-MP și Cray Y-MP mașini. Mai târziu , piața sa concentrat pe masiv paralele sisteme , mai degrabă decât sistemele vectoriale.

computerele moderne de astăzi sunt capabile să decodifice un flux video pe care un supercomputer 1970 ar avea dificultăți de decodare. Acest lucru este posibil atât pentru frecvențele înalte de funcționare și pentru adăugarea de unități vectoriale în microprocesoare care accelerează operațiunile multimedia. De obicei , aceste unități sunt denumite SIMD unități. În aceste implementări, unități vectoriale sunt incluse în procesoare scalare și sunt folosite doar de programe care le solicită în mod explicit.

Operațiune

Comparație între o serie de instrucțiuni scalare și o instrucțiune de vector.

CPU-uri sunt, în general, capabile de a manipula una sau două bucăți de date la un moment dat. De exemplu, cele mai multe procesoare au o instrucțiune care spune în esență „adăuga la A la B și stoca rezultatul în C“ , în timp ce altele , cum ar fi MOS 6502 nevoie de doua sau trei instrucțiuni pentru a realiza acest tip de operațiune. Datele pentru A, B și C poate fi, teoretic, conținută în instrucțiunea în sine; Cu toate acestea, lucrurile sunt rareori atât de simplu. În general, datele nu sunt trimise în formă brută, dar este în schimb „a subliniat“, prin trecerea unei adrese în locația de memorie care conține datele. Decodarea această adresă și obtinerea de date din memorie are nevoie de timp. Odată cu creșterea vitezei CPU, această memorie latenta a devenit un impediment tot mai mare pentru performanțe de ultimă generație .

Pentru moment optimizarea, cele mai multe procesoare moderne folosesc o tehnică cunoscută ca o instrucțiune de conducte , în care instrucțiunea trece prin diferite subunități , la rândul său. Prima Subunitatea citește adresa și decodifică, următoarea găsește valorile situate la adresa respectivă, iar următoarea procesează calculul matematic actuale. Conducta „truc“ este de a începe decodarea instrucțiunii următoare , chiar înainte de cea anterioară a fost efectiv procesat de CPU, în stilul unei linii de asamblare , astfel încât decodarea adreselor este constantă. Fiecare instrucțiune specială are aceeași cantitate de timp pentru a finaliza, dar procesorul poate procesa o serie întreagă de operațiuni mult mai repede decât ar fi de calcul la un moment dat.

Procesoarele vectoriale ia acest concept un pas mai departe. In loc de a folosi tehnica de conducte doar cu instrucțiuni, ei, de asemenea, utiliza pe ea însăși datele; Prin urmare, ei sunt capabili să aplice aceleași instrucțiuni pentru un lot mare de date în paralel, fără a decodificarea fiecare singură instrucțiune din memorie. Acest lucru de multe ori, cum ar fi în aplicații multimedia, salvează cantități mari de timp.

Un procesor vector conține o partajată de memorie , diferite unități de calcul, precum și o unitate de control care gestionează paralelismul dintre unitățile de calcul. Paralelismul este gestionat la hardware nivel și nu este vizibil programatic.

Pentru a ilustra ceea ce un vector face diferenta de prelucrare, să ia în considerare sarcina simpla de a adăuga două grupuri de numere de zece. Într-un limbaj de programare normală v-ar scrie un „ciclu“, care ia primul număr pentru fiecare pereche și adaugă-l la al doilea.

Aici este un exemplu în pseudocod:

 face acest ciclu de 10 ori
   citiți următoarea instrucțiune
   decodeze instrucțiunea de citire
   să ia acest număr
   să ia acest număr
   adăugați-le
   salva rezultatul aici
 sfârșitul ciclului

Dar pentru un procesor vector, această sarcină este diferită:

 citiți următoarea instrucțiune
 decodeze instrucțiunea de citire
 ia aceste 10 numere
 ia cele 10 numere
 adăugați-le
 salva rezultatul aici

Există mai multe motive pentru această abordare care să conducă la economii de timp. În primul rând, sunt necesare doar două traduceri de adrese; în funcție de arhitectura, acest lucru poate reprezenta o economii semnificative în sine. O altă economie este dată de recuperarea și decodarea instrucțiunii în sine, care are nevoie doar să se facă o dată în loc de zece. Codul în sine este, de asemenea, mai compact, care poate duce la utilizarea memoriei mai eficientă.

Dar dincolo de aceasta, procesorul vectorial are de obicei o superscalara formă de punere în aplicare, ceea ce înseamnă că sarcina se face prin UMA multiplă , mai degrabă decât doar unul. Având în vedere că producția de o singură comandă vector nu depinde de intrare de oricare altul, „blocuri“ de date pot fi apoi prelucrate separat, înmulțind valoarea timpului economisit. După cum sa menționat mai sus, punerea în aplicare a Cray aduce aceasta tehnica la o mai mare rafinament, care să permită diferite tipuri de operațiuni care urmează să fie „efectuate“ în același timp. Să considerăm codul care adaugă două numere și le multiplică de o treime; în Cray acestea au fost recuperate dintr-o dată, și ambele adăugate și multiplicat într-o singură operație. În același pseudocod ca mai sus, în esență, arată astfel:

 citit și educație decodarea
 ia aceste 10 numere
 ia cele 10 numere
 ia mai mult de 10 numere
 adăugați-le și să le multiplice
 a pus rezultatul aici

Operațiile matematice sunt astfel completate mult mai rapid, singurul factor de limitare fiind timpul necesar pentru a prelua datele din memorie.

Memorie

Exemplu diagramă a unei arhitecturi tipic procesor vector.

Există două moduri de un procesor vector accesează operanzilor, în funcție de designul său intern. În memoria organizării de memorie, operanzii sunt preluate din memorie, procesate și salvate direct în memorie. În organizarea-registru la registru (registru pentru a înregistra) operanzii sunt în schimb, mai întâi segmentat, și apoi încărcate în registre vector; în timpul prelucrării, rezultatele sunt apoi salvate într-un registru al treilea vector. Abia mai târziu sunt ele apoi stocate în memorie.

Avantajul managementului memoriei la memorie este că permite procesorului să calculeze vectori foarte lungi , fără a mai oprire la „pauză“ le în sub-vectori, dar ori de memorie de latență sunt mai mari decât cele ale registrelor; Acest lucru conduce la o încetinire a timpilor de recuperare a datelor din memorie.

Exemple ale acestei arhitecturi sunt cele de mai sus Texas Instruments Inc Advanced Computer științific și alte mașini construite în anii șaptezeci . Mai târziu, această tehnică a fost abandonată din cauza latenta prea mare de memorie, ceea ce a făcut aceste procesoare prea lent în operațiuni pe vectori mici, chiar și de 100 de elemente. procesoare vectoriale Register-to-registru, pe de altă parte, sunt mult mai eficiente în operațiunile de pe vectori relativ mici, iar acest lucru este strategia cea mai adoptată până în prezent.

Utilizare

Nu toate problemele pot fi optimizate cu acest tip de soluție. În primul rând, adăugarea acestui tip de instrucțiuni face arhitectura procesorului mai complexe, care complexitatea ar putea face alte instrucțiuni mai lent. Instrucțiunile mai complexe adăuga, de asemenea complexitate în continuare la decodoare, care pot, prin urmare, să fie mai lentă în decodificarea instrucțiunilor mai comune cum ar fi o sumă simplă. De asemenea, procesoare vectoriale funcționează cel mai bine numai atunci când există cantități mari de date pentru a lucra la. Din aceste motive, acest tip de CPU este utilizat în principal în supercomputere, și nu în aplicații utilizate în mod obișnuit, deoarece supercomputere înșiși sunt amplasate în general în laboratoare meteorologice sau laboratoare fizice, în cazul în care cantități mari de date sunt adesea lucrat. În cele din urmă, realizarea acestor procesoare este costisitoare; fiind utilizate numai în scopuri foarte specifice, costurile de proiectare sunt o mare parte din costul total, iar acest tip de arhitectură necesită cantități mari de memorie cache de mare viteză, de asemenea, costisitoare.

Bibliografie

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT