AltiVec er et sæt SIMD - instruktioner (vektor) til at arbejde med flydende tal med enkelt præcision og heltalsaritmetik, udviklet og ejet af Apple Computer , IBM og Motorola (kendt som AIM ). AltiVec er implementeret i forskellige versioner af PowerPC-processorer , både lavet af Motorola ( G4 ) og lavet af IBM ( G5 ).
Selve AltiVec-navnet er et registreret varemærke tilhørende Motorola, hvorfor Apple bruger navnet Velocity Engine , og IBM bruger VMX .
Da AltiVec blev introduceret i slutningen af 1990'erne, var det det mest kraftfulde vektorinstruktionssæt i desktop- processorer . AltiVec tilbyder flere registre og muligheden for at arbejde med dem på grund af et meget mere fleksibelt instruktionssæt end dets modstykker ( MMX , udviklet af Intel til at arbejde med heltals-aritmetik, SSE- floating point-instruktionssættet og en række udviklinger fra andre producenter af RISC-processorer ).
Den tredje og fjerde generation af Intels SIMD-instruktionssæt ( SSE2 og SSE3 , oprindeligt tilgængelig i Pentium 4 og senere implementeret af AMD i AMD64-arkitekturen ) har et meget større instruktionssæt end AltiVec.
Både AltiVec og SSE opererer på 128-bit vektorregistre, som kan bruges som seksten 8-bit bytes, otte 16-bit ord, fire 32-bit heltal eller fire flydende kommatal. Begge giver en mekanisme til at arbejde med cache-hukommelse , så programmøren kan reducere antallet af fejl, når der arbejdes med datastrømmen.
Der er betydelige forskelle mellem AltiVec og SSE. Kun AltiVec understøtter RGB - pixel datatypen , men kan ikke håndtere 64-bit dobbelt præcision heltal, og der er ingen mekanisme til direkte overførsel af data mellem skalar- og vektorregistre . I overensstemmelse med load/store-modellen for PowerPC-processorens RISC -arkitektur kan vektorregistre såvel som skalære registre kun indlæses og lagres i hukommelsen. AltiVec tilbyder dog et meget mere udvidet sæt af "horisontale" instruktioner, der fungerer på alle vektorelementer; Der er mange flere gyldige kombinationer af datatyper og operationer. I modsætning til de otte 128-bit vektorregistre i SSE og SSE2 tilbyder AltiVec 32 sådanne registre, og de fleste af dets instruktioner fungerer med tre registre på én gang ("sæt resultatet af tilføjelsen af A og B i C"), i modsætning til to -operand (register/register, register/hukommelse: "tilføj A indholdet af B") instruktioner i IA-32 . Dette kan i høj grad reducere mængden af hukommelsesarbejde.
Moderne versioner af GCC , IBM Visual Age Compiler giver et sæt funktioner til at arbejde direkte med AltiVec-instruktioner direkte fra C og C++ .
Der er en speciel vektormodifikator til at specificere typen af en variabel (f.eks. vektor unsigned char foo; er en vektor på seksten bytes). Overbelastede funktioner, såsom vec_add , fungerer på vektorregistre baseret på deres indhold, mens de skriver meget fint. Intel vektorinstruktioner udfører ingen typekontrol og fungerer kun på størrelsen af vektoren uden at skelne mellem bytes og ord. En sådan uagtsomhed kan føre til, at vektoren af ord er kompleks med vektoren af bytes, hvilket fuldstændig ødelægger dataene. For at forhindre dette i at ske, er der for Intel-arkitekturen en hel række af duplikerende hinanden instruktioner af formen: _mm_add_epi16 (x, y) for at tilføje to vektorer af ord, _mm_add_epi32 (x, y) for at tilføje to vektorer af heltal, etc.
AltiVec blev udviklet fra 1996-1998 af Keith Diefendorf , en kendt videnskabsmand og leder af mikroprocessorarkitektur hos Apple Computer .
Apple har været en stor kunde hos AltiVec og har brugt det til at fremskynde multimedieapplikationer som QuickTime eller iTunes . AltiVec spiller også en stor rolle i Apples Mac OS X -systemmotorer, såsom Quartz - billedgengivelsesundersystemet . Tredjeparter som Adobe bruger også AltiVec til at fremskynde deres programmer som Adobe Photoshop . Motorola var den første til at sælge AltiVec, indbygget i G4-seriens processorer (AltiVec håndteres nu af Freescale , en spin-off fra Motorola). AltiVec bruges også i nogle indlejrede systemer til at levere hurtige A/D-konvertere .
IBM udelukkede VMX (et andet navn for AltiVec) fra sin POWER -serie , da disse processorer blev brugt i mainframes og servere, hvor der ikke er særlig brug for vektorberegning. Men i PowerPC G5, beregnet til stationære computere, indlejrer IBM et højtydende AltiVec-modul. Kernen indeholder add/multiply-modulet og en komplet VMX-implementering.
IBM oplyser også, at en del af VMX-instruktionerne er inkluderet i den processor, der bruges i Microsoft Xbox 360 -spillekonsollen , som er baseret på PowerPC. Celleprocessoren inkluderer også et VMX-modul.
Ifølge Apples dokumentation [1] kan AltiVec i G4- og G5-implementeringen udføre otte 32-bit FLOPS pr. cyklus, mens SSE i både Intel- og AMD-implementeringer kun kan udføre fire 32-bit FLOPS pr. cyklus (det skal bemærkes, at SSE -2 tillader to 64-bit operationer pr. cyklus, hvilket AltiVec ikke kan). Det ville være logisk at antage, at SSE ved at fordoble frekvensen kunne indhente AltiVec. Pentium-processorer fungerer dog ikke med dobbelt så mange frekvenser som PowerPC, så AltiVec kan udføre markant flere operationer i sekundet. Den faktiske hastighed af programmet vil afhænge af mange flere faktorer, såsom hastigheden og mængden af hukommelse, arkitekturen af I/O-undersystemet, compilere , OS og simpelthen selve programmets arkitektur.
På trods af det faktum, at Apple hævder, at PowerPC er hurtigere end Pentium , når man arbejder med multimedieapplikationer, er det bedre at afstå fra sådanne vurderinger, da der ikke er nogen entydige data om overlegenheden af SSE eller AltiVec, på trods af den teoretisk højere hastighed af AltiVec .
POWER arkitektur | |
---|---|
historisk | |
Nuværende | |
relaterede emner |