Processador vectorial: diferència entre les revisions

Contingut suprimit Contingut afegit
m aquesta anàlisi
Robot estandarditza i catalanitza referències, catalanitza dates i fa altres canvis menors
Línia 29:
# Augmentar l'amplada de banda de la memòria: això s'aconsegueix entrellaçant la memòria, de forma que aquesta tingui varis mòduls i es pugui accedir simultàniament a diverses posicions consecutives que es trobin en mòduls diferents
# Afegir una memòria intermèdia de major velocitat entre la memòria i el processador. Una forma de fer això, a més a més d'incorporar una memòria cau, és afegir un banc de registres vectorials.
Per a tot això, és habitual que els processadors vectorials disposin d'un banc (o múltiples bancs) de registres vectorials que facin de memòria intermèdia; es parla, llavors, de '''processadors vectorials registre-registre'''. Per altra banda, la majoria dels processadors vectorials actuen com coprocessadors d'un processador escalar convencional que tracta les instruccions no vectorials. Això fa que l'arquitectura d'un computador vectorial actual sigui la que es mostra a la figura 2. Com es pot veure, els computadors vectorials poden considerar-se com computadors del tipus [[SIMD]] en la [[Taxonomia de Flynn]], però, s'ha de tenir en compte que, si bé els computadors vectorials executen la mateixa instrucció sobre dades diferents, aquestes dades formen part del mateix flux. Per això, en alguns casos, a aquestes màquines se'ls anomenen SIMD-vectorials.<ref>{{Ref-llibre|cognom=Germain-Renaud, C., & Sansonnet, J.P.|nom=|títol=Les ordinateurs massivement paralleles.|url=|edició=|llengua=Francèsfrancès|data=1993|editorial=Armand Colin Editeur.|lloc=|pàgines=|isbn=}}</ref>
[[Fitxer:Processador_vectorial_registre-registre.png|vinheta|Fig 2. Processador vectorial registre-registre|520x520px]]
 
== Rendiment dels processadors vectorials ==
Basant-nos en l'anterior, es presenta un model per avaluar el rendiment dels processadors vectorials. Es prendrà per a fer aquesta avaluació, un càlcul vectorial sobre vectors de ''n'' components en un bucle que s'hagi de seccionar. En el càlcul d'aquest rendiment intervenen les següents variables:<ref>{{Ref-llibre|cognom=Hennessy, J.L., & Patterson, D.A.|nom=|títol=Computer Architecture. A Quantitative Approach.|url=|edició=|llengua=Anglèsanglès|data=1990|editorial=Morgan Kaufmann Publishers.|lloc=|pàgines=|isbn=}}</ref>
# El temps necessari per a processar cada component en una iteració del bucle. Denominarem aquest temps ''t<sub>p</sub>''.
# El temps d'inicialització de cada bucle provocat pel seccionament. Aquest temps es pot desglossar en dues parts: el temps del codi escalar necessari pel seccionament (''t<sub>s</sub>'') i el temps d'arrencada de la instrucció vectorial (''t<sub>a</sub>'').
Línia 65:
 
=== Exemple: Cilk Plus. ===
Intel [[:en:Cilk|Cilk Plus]] inclou un conjunt d'anotacions que permeten als usuaris expressar operacions d'alt nivell en matrius o seccions d'arrays sencers. Aquestes anotacions ajuden al compilador a vectoritzar eficaçment l'aplicació. Cilk Plus permet aplicar operacions C / C ++ a múltiples elements de la matriu en paral·lel, i també proporciona un conjunt de funcions internes que es poden utilitzar per dur a terme les operacions vectorials.<ref>{{Ref-web|url=https://www.cilkplus.org|títol=Pàgina oficial de Cilk Plus|consulta=|llengua=Anglèsanglès|editor=|data=}}</ref>
 
A tall d'exemple, a continuació es mostra un fragment de codi [[Llenguatge C|C]] que expressa la funció clàssica SAXPY (Single-Precision A·X Plus Y):<syntaxhighlight lang="c">
Línia 75:
}
}
</syntaxhighlight>El següent codi expressa la mateixa funció, però amb notació vectorial Cilk Plus. Cal destacar que en aquest fragment de codi es prescindeix de l'ús de bucles:<ref>{{Ref-web|url=https://www.cilkplus.org/tutorial-array-notation|títol=Exemples d'anotació vectorial amb Cilk Plus.|consulta=|llengua=Anglèsanglès|editor=|data=}}</ref><syntaxhighlight lang="c">
void Saxpy()
{
Línia 93:
* Trasllat d'expressions invariants: freqüentment els bucles més interns inclouen operacions que, en determinades condicions, poden ser traslladades a una zona més externa. Aquesta acció s'anomena trasllat de codi.
Alguns exemples de compiladors capaços de vectoritzar són:
* [[GNU Compiler Collection|GCC]].<ref>{{Ref-web|url=https://gcc.gnu.org/|títol=Pàgina oficial del compilador GCC.|consulta=|llengua=Anglèsanglès|editor=|data=}}</ref>
* ICC.<ref>{{Ref-web|url=https://software.intel.com/en-us/c-compilers|títol=Pàgina oficial del compilador ICC.|consulta=|llengua=Anglèsanglès|editor=|data=}}</ref>
 
== Exemples clàssics de computadors vectorials ==
A continuació es mostren alguns exemples clàssics de computadors vectorials. Alguns d'ells estan ja obsolets, però són exemples clàssics que s'han de mencionar per la importància que van tenir al seu moment.
 
=== El Cray-1 de Cray Reseach<ref>{{Ref-llibre|cognom=RUSSELL|nom=R.M.|títol=The CRAY-1 Computer System.|url=|edició=|llengua=Anglèsanglès|data=1978|editorial=|lloc=|pàgines=|isbn=}}</ref> ===
[[Fitxer:Cray-1-deutsches-museum.jpg|vinheta|Una Cray-1 preservada en el Deutsches Museum.]]
El Cray-1, operatiu des de 1976, es pot considerar com el primer computador vectorial. Com molts supercomputadors, necessitava un processador auxiliar per efectuar tasques d'administració, E/S, etc. D'aquesta forma, el Cray-1 només es dedicava a la computació pura. El Cray-1 posseïa tres seccions: la secció de computació, la secció de memòria i la secció d'E/S.
Línia 113:
Altres registres de la màquina són el VM (''vector mask'', registre de màscara per a vectors), que s'utilitza per a operacions d'empaquetament i desempaquetament de vectors.
 
=== El Cyber-205 de Control Data<ref>{{Ref-web|url=http://www.mirrorservice.org/sites/www.bitsavers.org/pdf/cdc/cyber/|títol=Cyber documentation.|consulta=|llengua=Anglèsanglès|editor=University of Kent|data=}}</ref> ===
Aquesta màquina és un curiós exemple de computador vectorial memòria-memòria. Per això, la memòria d'aquesta màquina és molt ràpida i està entrellaçada amb quatre vies. L'avantatge que aquest computador sigui del tipus memòria-memòria rau en què la longitud dels vectors pot ser molt gran. Concretament en el Cyber-204, la longitud màxima dels vectors és de 65635 paraules. El control de l'execució de les instruccions resideix en la unitat escalar, que rep i descodifica les instruccions procedents de la memòria i les reparteix entre els diferents blocs en funció del seu tipus: escalar, vectorial o de cadena (aquí la paraula cadena es refereix a cadenes de bits); a partir d'aquí, diferents instruccions poden executar-se de manera concurrent en diferents unitats funcionals. La unitat aritmètica escalar té cinc processadors aritmètics segmentats i treballa amb operands escalars de 32 i 64 bits. La unitat vectorial pot disposar d'1, 2 o 4 processadors aritmètics que també disposen de diverses lleres que poden efectuar diverses operacions sobre operands de 32 i 64 bits. La unitat de cadena serveix per a processar vectors de control, o vectors de màscara, que són molt útils per a treballar amb matrius i vectors dispersos. Aquests vectors de control també són útils per accedir a vectors no consecutius en memòria. Aquest processador està capacitat per a efectuar encadenament entre les diverses lleres, de forma que pot fer que la sortida d'una llera vagi directament a l'entrada d'una altra.
 
=== El IBM-3090<ref>{{Ref-web|url=https://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe_PP3090.html|títol=3090 Processor Complex|consulta=|llengua=Anglèsanglès|editor=IBM|data=}}</ref> ===
El processament vectorial d'aquesta màquina és una opció anomenada ''vector facility''. El sistema disposa de 16 registres de 32 bits que poden unir-se de dos en dos per a convertir-se en 8 registres de 64 bits. Qualsevol dels registres pot contenir tant nombres enters com representats en punt flotant (de 32 o 64 bits). En el disseny de l'arquitectura no es determina de forma concreta la longitud dels registres vectorials que poden oscil·lar entre 8 i 512. En la implementació del 3090 es va elegir el nombre de 128. Aquesta elecció es va deure a un compromís entre el temps perdut en les arrancades, que serà alt si els registres són petits, perquè s'hauria d'efectuar més arrancades d'instruccions vectorials si els vectors són llargs, i el temps empleat en la càrrega i emmagatzemament dels registres vectorials, que serà tant o més gran com més longitud tinguin. La màquina disposa d'alguns registres de control: el registre de màscara vectorial, el registre de l'estat vectorial i el comptador de l'activitat vectorial.