SIMD

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 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,DEC 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.