AltiVec

Denne artikkelen er et utkast om datamaskiner .

Du kan dele din kunnskap ved å forbedre den ( hvordan? ) I henhold til anbefalingene fra de tilsvarende prosjektene .

AltiVec er et sett med instruksjoner som SIMD- operasjoner i flytende punkt er designet av, og eiendom, Apple , IBM og Motorola ( alliansen AIM ), og implementert på PowerPC-versjoner som G4 Motorola og G5 fra IBM. AltiVec er et handelsnavn som kun eies av Motorola; dermed kalles settet også Velocity Engine av Apple og VMX av IBM.


Opprinnelse

Etter forestillingene demonstrert i beregningen av en vektorprosessor med Cray-1 superdatamaskinen i 1976 , blir denne typen arkitektur en viktig teknikk innen vektor og mer generelt matriksberegning. Altivec integrerer SIMD- instruksjoner som er i stand til å behandle vektorer, men som krever at programmet styrer innsettingen i registerene og inkrementering av bordpekere, i motsetning til vektorprosessorer som instruksjonene er gitt for å bli utført i en løkke, er basispekerne til matriser og størrelsen på sløyfen og deretter gjentas over vektortabellen med disse instruksjonene.

I 1993 gjorde IBM / Motorola PowerPC 603-prosessoren det allerede mulig å utføre instruksjoner som spesialiserte seg på vektorberegning av multiplikasjon + addisjon eller subtraksjonstype på flytende registre, kalt fmuladd og fmulsub , rørledningssystemet gjorde det mulig å kompensere for de fire syklusene av klokken som er nødvendig for utførelsen ved å autorisere en utførelseslansering per syklus.

På midten av 1990-tallet var forskjellige produsenter av mikroprosessorer interessert i utviklingen av parallelle databehandlingsenheter som ville lette belastningen på prosessoren ved å behandle store datamengder samtidig. Faktisk hadde økningen av multimediaaktiviteter fremhevet kraftbehovene til disse applikasjonene sammenlignet med tradisjonelle applikasjoner som kontorautomatisering. Tidlige studier av HP og Sun Microsystems la grunnlaget for SIMD-prosesseringsenheter i slike applikasjoner og banet vei for Intel , AMD og Motorola. Så i 1997 ga AMD ut 3DNow! og Intel, fullfører MMX- utvidelsen som tillot arbeid på 64-biters data via en vektorenhet. Denne utvidelsen ble utviklet for å føde SSE- , SSE2- , SSE3- og SSE4-enhetene, som ved å ta basen til MMX tillater arbeid på enkelt- eller dobbeltpresisjonsflyter i sammenheng med multimediaapplikasjoner som videokomprimering eller videosyntese. '3D Bilder.

Til tross for fremskrittet som MMX og dets etterfølgere representerte når det gjelder ytelse, så denne teknologien ut til å være underutnyttet i utviklermiljøer. Faktisk, problemer som ikke-ortogonaliteten til deres instruksjonssett, problemer med hukommelsesjustering og problemene med samsvar mellom datastrukturene og begrensningene til disse enhetene, reduserte utviklingen av applikasjoner i stor skala. Parallelt med Intels arbeid og realisering av problemene som mikroprosessorprodusenter står overfor, gikk Motorola sammen med Apple i 1996 for å designe den fremtidige arkitekturen til PowerPC G4 . Keith Diefendorff, daværende leder for AltiVec-prosjektet, definerte hovedlinjene til denne databehandlingsenheten ved å gjøre den ikke bare til en enkel multimedia-utvidelse, men heller til en allsidig databehandlingsenhet. Ved å dra nytte av erfaringene fra konkurrentene, bestemte Motorola seg for å starte fra bunnen av materialdesignet til denne typen databehandlingsenhet. Til slutt, i 1999, ble Apples PowerPC G4 utstyrt med Motorolas AltiVec-beregningsenhet. I 2002 integrerte IBM AltiVec i prosessorene som er utstyrt med PowerPC G5s.

Da den først ble introdusert på slutten av 1990 - tallet , var AltiVec det kraftigste SIMD-systemet, for en CPU i en stasjonær CPU . Sammenlignet med sine samtidige ( MMX fra Intel , bare i hele tallet; SSE- flytpunkt og forskjellige andre prosessorleverandørsystemer RISC ), tilbød AltiVec flere registre, som kunne brukes på mer varierte måter og drives av et mye mer fleksibelt sett med instruksjoner. . Imidlertid tilbyr SSE2 , Intels fjerde generasjons SIMD-system, introdusert med Pentium 4 , en rekke funksjoner som bygger bro over forskjellene mellom disse teknologiene.

Funksjonsprinsipper

Altivec er basert på en prosessorimplementering av SIMD- modellen, også kalt SWAR for SIMD Within A Register (betegnelse laget i 1996 av Purdue University, for å skille SIMD intern til prosessoren fra SIMD ekstern til prosessoren, dvs. - si parallell maskiner). I denne modellen gjør manipulering av spesielle datastrukturer det mulig å reprodusere oppførselen til en SIMD-enhet i en enkelt prosessor. Disse datatypene kalt vektorer er 128-biters blokker som kan inneholde data av flere typer og behandles av spesifikke operatører som utfører beregningene sine samtidig på alle elementene i vektoren. Et sett med 32 128-biters vektorregistre kan da lagre 16 signerte eller usignerte 8-biters heltall, 8 signerte eller usignerte 16-biters heltall, 4 signerte eller usignerte 32-biters heltall eller 4 32-biters reelle tall i flytende punkt. I motsetning til SSE2 tilbyr ikke Altivec støtte for doble presisjon reelle tall.

Innen PowerPC- arkitekturen er Altivec helt uavhengig av konvensjonelle databehandlingsenheter. Den har fire prosesseringsenheter utstyrt med rørledninger som gjør det mulig å behandle flere operasjoner på enkeltpresisjonsflyter, permutasjonsoperasjoner, enkle operasjoner på heltall (for eksempel tillegg) eller sammensatte operasjoner på heltall (for eksempel multiplikasjoner delvis) effektivt. Den er også i stand til samtidig å starte utførelsen av flere operasjoner i flere beregningsenheter, man snakker da om en superscalar beregningsenhet . Brukeren har også muligheten til å bruke alle de normale registerene som tilbys av PowerPC og de 32 vektorregistrene som leveres av AltiVec samtidig.

Sett med instruksjoner

Nyere versjoner av utviklingsverktøy, som GNU Compiler Collection , IBMs VisualAge og andre kompilatorer, gir direkte støtte for AltiVec-instruksjoner fra C- og C ++ -programmer . I praksis er 162 C primitiver tilgjengelige og faller inn i fire store grupper:

  1. Lastinstruksjoner som lar en eller flere verdier lastes fra minnet til et vektorregister eller fra et register til minnet.
  2. Forhåndslast eller forhåndshent instruksjoner som autoriserer direkte manipulering av informasjon som er tilstede i hurtigbufferen for å optimalisere behandlingsordren og derved øke den totale ytelsen til applikasjonen.
  3. Instruksjoner for vektormanipulering . Absolutt de kraftigste funksjonene til AltiVec, vi finner i denne kategorien alle instruksjonene for bitskift, elementpermutasjoner, sammenslåing, duplisering av vektordata.
  4. Aritmetiske instruksjoner som konvensjonelt gjør det mulig å utføre operasjoner som addisjon, subtraksjon eller operasjoner på flytende punktum (avrunding eller avkorting) på vektorer. Altivec tilbyr også et visst antall instruksjoner som etterligner DSP- funksjoner , boolske operasjoner eller sammenligninger.

Hovedforskjellen mellom instruksjonssettet levert av Altivec og SSE2 er at Altivec gir et stort antall såkalte horisontale operasjoner , slik at reduksjoner kan utføres, dvs. operasjoner som ikke gjelder elementene til to vektorer, men til innholdet i en enkelt vektor. For eksempel utfører funksjonen vec_sums summen av elementene i en vektor.

Eksempel på bruk

Å bruke Altivec innen C- kode er relativt enkelt. Tenk for eksempel på en funksjon C som beregner forskjellen på to bilder av NxN-piksler. Dette innebærer å trekke fra intensiteten til pikslene og bruke terskelverdier på dem for å oppnå et svart-hvitt-bilde.

unsigned char I1[N*N], I2[N*N], R[N*N]; for(size_t i = 0; i < N*N; i++) { signed short s = I2[i] - I1[i]; R[i] = (s<10 || s>240) ? 0 : 255; }

Tilsvarende Altivec C-kode er som følger:

unsigned char I1[N*N], I2[N*N], R[N*N]; vector unsigned char vS,vR,v240,v10,V0,V255; vector bool char vC; v0 = vec_splat_u8(0); v10 = vec_splat_u8(10); v240 = (vector unsigned char)vec_splat_s8(-15); v255 = (vector unsigned char)vec_splat_s8(-1); for(size_t i = 0; i < (N*N)/16; i++) { vS = vec_sub(vec_ld(I2,16*i), vec_ld(I1,16*i)); vC = vec_or(vec_cmplt(vS, v10), vec_cmpgt(vS, v240)); vR = vec_sel(v255, v0, vC); vec_st(vR, R, i*16); }

Flere punkter bør bemerkes:

Den viktigste fordelen med disse funksjonene er deres brukervennlighet på grunn av en gjennomsiktig overbelastning for alle vektortyper, i motsetning til instruksjonene som er tilgjengelige på Intel- arkitekturer der navnet på funksjonen endres i henhold til vektortypen. En uttømmende liste over tilgjengelige funksjoner er tilgjengelig på Apples 's Altivec Instruksjoner Cross References side .

applikasjoner

Apple er AltiVecs første klient, og bruker den til å øke hastigheten på multimediaapplikasjoner som QuickTime og iTunes , og bildebehandlingsprogrammer som Adobe Photoshop . Motorola har levert AltiVec-prosessorer til alle stasjonære sentrale enheter siden introduksjonen av G4 . AltiVec brukes også i noen innebygde systemer for å gi høy ytelse innen digital signalbehandling .

Altivec og industri

Siden Apples tilbaketrekning fra PowerPC og Altivec-verdenen, er de viktigste produsentene av PowerPC Altivec-baserte maskiner Thales Computer og Mercury Computer.

Fremtiden til Altivec

Selv om Altivec har forsvunnet fra de siste Apple-maskinene, fortsetter den å eksistere i mindre vanlige felt som IBM- arbeidsstasjoner og dataservere gjennom PowerPC 970 MP (den siste versjonen som har utstyrt PowerMac G5) og gjennom IBMs POWER6 . Altivec fortsetter også å eksistere i et av de veldig raskt voksende forbrukerfeltene: spillkonsoller. Dermed er Microsofts XBOX 360 en Altivec trippelkjerneprosessor avledet fra 970 MP, og PS3 og dens berømte Cell- prosessor , en octo-prosessor drevet av en hovedprosessor (PPE) veldig nær 970. Octo-prosessoren inneholder også et SWAR-instruksjonssett kalt SPE ( Synergistic Processing Elements ) hvis instruksjonssett er veldig likt Altivec.

Se også

Merknader og referanser

  1. (in) PowerPC 603e RISC-mikroprosessor og EM603e-familiehåndbok på IBM.com - kapittel "2.3.4.2.2 Instruksjoner for flytpunkt-multipliser-legg til" på side 2-26 og kapittel "6.4.3 Tidspunkt for utførelse av flytpunkt-enhet ”, Side 6-17
  2. (in) N. Slingerman og AJ Smith - "  Performance analysis of architecture instruction set extensions for multimedia  " ( ArkivWikiwixArchive.isGoogle • Hva skal jeg gjøre? ) - 2001
  3. (in) A. Peleg og U. Weiser - utvidelse av MMX-teknologi til Intel - 1996, IEEE Micro 4 (16), s.  42-50
  4. (i) K. Diefendorf - AltiVec utvidelse Power PC akselererer media behandling - 2001

Eksterne linker