# SIMD

Taxonomia de Flynn :
| | Instrucció Simple | Múltiples Instruccions |
| Dada Simple | SISD | MISD |
| Múltiples Dades | SIMD | MIMD |
| Aquesta caixa: |||
En informàtica, SIMD (Single Instruction, Multiple Data) és una tècnica emprada per aconseguir el paral·lelisme a nivell de dades, com en processador vectorial. En primer lloc es va fer popular en supercomputadors de gran escala (contràriament a la parel·lització MIMD), operacions de petita escala SIMD s'han convertit en estesa en maquinari d'ordinadors personals. Avui en dia el terme s'associa quasi exclusivament a aquestes unitats més petites.

## Història

La primera era de les màquines SIMD es caracteritza pels supercomputadors com el Cray X-MP. Aquestes màquines també s'anomenen "processors vectorials". Aquestes màquines funcionen amb vectors llargs, per exemple la suma de dos vectors amb 100 nombres casdascun. La supercomputació s'allunya de l'enfocament SIMD quan l'enfocament de MIMD es va convertir en més poderós, i l'interès per SIMD disminueix. Després, es converteixen en més freqüents els ordinadors personals, i van tenir prouta potència per a poder donar suport als videojocs de temps real. Això va crear una gran demanda d'un tipus particular de potència als ordinadors, i els fabricants de microprocessadors es van dirigir cap a SIMD per a poder satisfer la demanda. El primer desplegament ampli de SIMD per als videojocs són les extensions MMX a l'arquitectura x86 per part d'Intel. Després IBM i Motorola afegeixen AltiVec a l'arquitectura POWER, hi ha hagut diverses extensions als conjunts d'instruccions SIMD per ambdues arquitectures. Tots aquests desenvolupaments s'han orientat cap al suport a gràfics de temps real, i per tant, orientat cap a vectors de dos, tres, o quatre dimensions. Quan s'han de distingir les noves arquitectures SIMD de les antigues, llavors les noves arquitectures es consideren arquitectures de vectors curts. Actualment un supercomputador és gairebé sempre un grup de màquines MIMD, cadascuna d'elles aplica intruccions SIMD amb vectors curts. Actualment un equip d'escriptori és sovint una màquina multiprocessador MIMD on cada processador pot executar instruccions vectorials SIMD curtes.

## DSPs

Existeix una classe separada de processadors destinats per a aquest tipus de tasca, es coneixen comunament com processadors digitals del senyal, o DSPs. La principal diferència entre els DSP i altres CPUs SIMD, és que els DSPs són processadors autocontinguts amb les seus propis repertoris d'instruccions, mentre que les extensions SIMD es basen en l'ús de porcions de la CPU per a gestionar els detalls del programa, i les intruccions SIMD gestionen solament la manipulació de dades. DSPs també tendeixen a incloure instruccions específiques per a gestionar el tipus de dades, instàcies per a so o vídeo, mentre els sistemes SIMD són considerablement més genèrics. Les DSPs generalment operen en Scratchpad RAM conduïda per transferències DMA iniciades des del sistema amfitrió i no poden accedir a memoria externa. Algunes DSP inclouen repertoris d'instruccions SIMD. La inclusió d'unitats SIMD en procesador de prpòsit general ha suplantat l'ús dels xips DSP en els sistemes informàtics, tot i que continuen sent utilitzats en aplicacions incrustades. A escala mòbil existeix - the Cell's SPUs i l'Ageia Physics Processing Unit poden ser considerades a mig camí entre les CPUs i les DSPs, en la mesura que estan optimitzats per a tasques numèriques i trebar en el emmagatzegament local, però poden controlar de forma autònoma les seves pròpies transferències, per tant, són en efecte CPUs.

## Avantatges

Una aplicació que pot prendre avantatges de SIMD és un on el mateix valor s'afegeix (o se sostrau) a un gran nombre de punts de dades, una operació comú en moltes aplicacions multimedia. Un exemple seria canviar el contrast d'una imatge. Cada pixel d'una imatge consta de tres valors per cada un dels nivells de color de vermell, verd i blau. Per canviar el contrast, els valors R G i B es llegeixen de memoria, se li suma un valor (o resta), i els resultats es tornen a escriure a memoria.
Amb un processador SIMD hi ha dues millores a aquest procés. Les dades s'entenen amb blocs, i un nombre de valors es poden carregar tots a la vegada. En lloc d'una sèrie d'instruccions dient "obté aquest pixel, ara obté el següent pixel", un processador SIMD tindrà una sola instrucció que efectivament diu "obté un conjunt de pixels" ("conjunt" és un nombre que varia depenent del disseny). Per una varietat de raons, això pot trigrar molt menys temps que "obtindre" cada pixel individualment, com per exemple els tradicionals dissenys amb CPU.
Un altre avantatge és que els sistemes SIMD típicament només inclouen aquelles instruccions que es poden aplicar a totes les dades en una sola operació. És a dir, si el sistema SIMD funciona per la càrrega de dades de fins a vuit punts diferents alhora, l'operació add s'aplica a les dades que es passen amb els vuit valors al mateix temps. Tot i que el mateix és cert per qualsevol disseny de processador superescalar, el nivell de paral·lelisme en un sistema SIMD sol ser molt més gran.

## Desavantatges

* Alguns dissenyadors de SIMD es veuen obstaculitzats per consideracions de disseny fora del seu control. Una d'aquestes consideracions és el cost d'afegir registres pel maneig de les dades que s'han de tractar. L'ideal seria que les unitats SIMD d'una CPU tinguessin els seus propis registres, però molts es veuen obligats, per raons pràctiques, a tornar a utilitzar els registres de la CPU, solen ser els registres de punt flotant. Aquests tendeixen a tenir 64-bits de llarg, massa petits que l'òptim per a l'ús SIMD, i dona lloc a problemes si el codi intenta utilitzar tant el SIMD, o bé instruccions de punt flotant, al mateix temps - punt en el qual les unitats es disputen els registres. Aquest sistema va ser utilitzat en Intel el primer intent de SIMD, MMX, i els problemes de rendiment eren tals que el sistema va veure molt poc ús. No obstant, els dissenys recents de processadors x86 d'Intel i d'AMD (a partir de novembre de 2006, o diversos mesos abans) han eliminat els problemes de competència entre SIMD i els registres de punt flotant matemàtics, proporcionant un nou separat banc de registres SIMD.
* Empaquetant i desempaquetant dades a/des del registres SIMD pot ser que consumeixen molt de temps en algunes aplicacions, reduint l'eficiència adquirida. Si cada dada (diu, un valor de 8-bits) cal recollir/dispersar per separat, en lloc de realitzar una càrrega en tot el registre d'operació, és aconsellable per reorganitzar les dades, si és possible, o estudiar la possibilitat de no utilitzar a tots els SIMD.
* Tot i que recentment hi ha hagut una sèrie d'activitats de recerca en tècniques per a l'eficient recopilació de SIMD, encara queda molt per fer. Per aquesta qüestió, l'estat de la tècnica per SIMD, des d'una perspectiva del compilador, no és comparable a la de processament vectorial.
* Degut a la manera en que SIMD treballa, les dades en els registres han d'estar ben alineades. Fins i tot en el cas de flux simple de processament de la convolució, pot ser una tasca difícil.
* No tots els algorismes es poden vectoritzar.

## Cronologia

La primera utilització d'instruccions SIMD va ser en els supercomputadors vectorials de començaments de la dècada de 1970 com el CDC Star-100 i el Texas Instruments ASC. El processament vectorial va ser popularitzat per Cray en les dècades de 1970 i 1980.
Màquines posteriors van utilitzar un nombre molt més gran de processadors relativament simples en un estil de configuració massively parallel processing. Alguns exemples d'aquest tipus de màquines inclouen:
* ILLIAC IV, circa 1974
* ICL Distributed Array Processor (DAP), circa 1974
* Burroughs Scientific Processor, circa 1976
* Geometric-Arithmetic Parallel Processor, de Martin Marietta, començaments de 1981, continuats a Lockheed Martin, després a Teranex i Silicon Optix
* Massively Parallel Processor (MPP), de NASA/Goddard Space Flight Center, circa 1983-1991
* Connection Machine, models 1 i 2 (CM-1 i CM-2), de Thinking Machines Corporation, circa 1985
* MasPar MP-1 i MP-2, circa 1987-1996
* Zephyr DTC computadors de Wavetracer, circa 1991
* Xplor, de Pyxsys, Inc., circa 2001
També va haver-hi molts altres en aquesta època.

## Maquinari

Els SIMD de petita escala (64 o 128 bits) s'han convertit en populars en les CPUs de pròsit general, a partir de 1989 amb la introducció del Digital Equipment Corporation VAX amb instruccions vectorals al sistema Rigel, i continuant a través de 1997 i més tard amb Motion Video Instructions (MVI) per a Alpha. Les instruccions SIMD poden trobar-se, en un grau o en un altre, en gairebé totes les CPUs, incloent AltiVec d'IBM i SPE per PowerPC, HP PA-RISC Multimedia Acceleration eXtensions (MAX), MMX and iwMMXt d'Intel, SSE, SSE2, SSE3 i SSSE3, 3DNow! d'AMD, Subsistema de video d'ARC, VIS de SPARC, MAJC de Sun, tecnologia NEON d'ARM, MDMX (MaDMaX) i MIPS-3D de MIPS. IBM, Sony i Toshiba van codesenvolupar el repertori d'instruccions SPU de Cell Processor, que està fortament basada en SIMD.
El repertori d'instruccions generalment inclou un conjunt complet d'instruccions vectorials, incloient multiplicació, inversió i traça. Aquestes són particularment útils per al processament de gràfics 3D, encara que les targetes graphics card modernes incorporades amb SIMD han assumit aquesta tasca de la CPU. Alguns sistemes també inclouen funcions de permutació que tornar a recompondre els elements dins els vectors, fent-los particularment útils per al processament i la compressió de les dades.
Les unitats de processament gràfic modernes són sovint implementacions molt àmplies de SIMD, capaces de ramificacions, càrregues, i emmgatzegament de 128 o 256 bits al mateix moment.

## Programari

L'adopció de sistemes de programari SIMD a l'ordinador personal ha set lenta, a causa d'una sèrie de problemes. Un d'ells era que molts dels principis dels repertoris d'instruccions de SIMD tendeixen a frenar el rendiment general del sistema, degut a la re-utilització dels registres de punt flotant. Altres sistemes, com MMX i 3DNow!, ofereixen suport a tipus de dades que no eren interessants per a un públic més ampli i amb un costós canvi de context de les instruccions per canviar entre utilitzar el FPU i els registres MMX. Els compiladors sovint també no tenen el suport que requereixen i els programadors han de recórrer a la programació en llenguatge ensamblador.
SIMD en x86 ha tingut un començament lent. La introducció de 3DNow! per part d'AMD i SSE per part d'Intel, sovint confoses, però en l'actualitat el sistema sembla haver-se estabilitzat (després que AMD adoptés SSE) i nous compiladors haurien de traduir-se en més habilitats de programari per a SIMD. Intel i AMD ara ambdós proporcionen tant les biblioteques matemàtiques optimitzades que utilitzen instruccions SIMD, i també han començat a aparèixer alternatives de codi obert com libSIMD i SIMDx86.
Apple Computer ha tingut una mica més d'èxit, tot i que va entrar al mercat SIMD més tard que la resta. AltiVec ofereix un sistema ric i pot ser programat utilitzant cada vegada més compiladors més sofisticats de Motorola, d'IBM i GNU, per tant, la programació en assemblador poques vegades és necessària. A més, molts dels sistemes que es beneficiarien de SIMD van ser subministrats pel mateix Apple, per exemple iTunes i QuickTime. No obstant, el 2006, Apple computers es mou cap a processadors x86 d'Intel. Les APIs d'Apple i les eines de desenvolupament (XCode) van ser rescrites per utilitzar SSE2 i SSE3 en substitució de AltiVec. Apple va ser el comprador dominant dels xips PowerPC d'IBM i Freescale Semiconductor i tot i que va abandonar la plataforma, un gran desenvolupament de Altivec es continua realitzant en diversos dissenys Power Architecture de Freescale, IBM i P.A. Semi.
SIMD sense registres, o SWAR, és un conjunt de tècniques i trucs utilitzats per optimitzar SIMD en registres de propòsit general a maquinari que no suporta directament instruccions SIMD. Aquests poden ser utilitzats per explotar el paral·lelisme en certs algorismes, fins i tot en maquinari que no accepta directament.

## Aplicacions Comercials

Encara que en general ha resultat difícil trobar sostenibilitat per a aplicacions comercials de processadors SIMD, una que ha tingut un cert grau d'èxit és el GAPP, que va ser desenvolupat per Lockheed Martin i portat al sector comercial pel seu spin-off Teranex. Les recents inclusions de GAPP s'han convertit en una poderosa eina en temps real en les aplicacions de processament de video com la conversió entre diversos formats estàndards i les velocitats de fotograma (NTSC a/des de PAL, NTSC a/des de formats HDTV, etz.), deinterlacing, image noise reduction, adaptiu video compression, i millora d'imatges.
Una aplicació mes obia per a SIMD són els videojocs: gairebé totes les videoconsoles modernes des de 1998 han incorporat un processador SIMD en alguna part de la seva arquitectura. La Sony PlayStation 2 va ser inusual que la seva unitat de punt flotant pogués fer funcionar de forma independent a la seva DSP executant els seus propis fluxes d'instruccions, o com els coprocesadores conduïts per instruccions d'una CPU ordinària. Aplicacions 3D gràfiques tendeixen a presentar-se bé processant SIMD, ja que depenen en gran manera d'operacions amb vectors de 4 dimensions. El Direct3D 9.0 de Microsoft's ara tria la CPU específica en temps d'execució, implementant les seves pròpies operacions matemàtiques, incloient la utilització d'instruccions SIMD.
Un dels processadors més recents que utilitza processament vectorial és el micropocessador Cell Processor desenvolupat per IBM amb cooperació amb Toshiba i Sony. Aquest utilitza un nombre de processadors SIMD (cadascun amb la seva memòria RAM independent i controlada per una CPU de propòsit general) i està destinat al gran volum de dades requerits per a 3D, i aplicacions de processament de vídeo.
Els processadors comercials de major escala SIMD estan disponibles a ClearSpeed Technology, Ltd. i Stream Processors, Inc. ClearSpeed's CSX600 (2004) té 96 nuclis cadaun amb 2 unitats de punt flotant de doble precisió mentre que el CSX700 (2008) té 192. Els processadors de fluxes estan liderats per l'arquitecte d'ordinadors Bill Dally. El seu processador Storm-1 (2007) conté 80 nuclis SIMD controlats per una CPU MIPS.

## Referències

* ↑ DEC Rigel

## Enllaços externs

* SIMD architectures (2000) (anglès)
* Cracking Open The Pentium 3 (1999) (anglès)
* Short Vector Extensions in Commercial Microprocessor (anglès)
* Article about Optimizing the Rendering Pipeline of Animated Models Using the Intel Streaming SIMD Extensions (anglès)
* SIMD history and performance comparison (anglès)