# AltiVec

AltiVec è un insieme di istruzioni SIMD in virgola mobile sviluppato da Apple, IBM e Motorola (l'alleanza AIM) e implementato su alcune versioni dei processori PowerPC. AltiVec è un marchio registrato di Motorola: Apple definisce l'unità dedita alla gestione di queste istruzioni Velocity Engine mentre IBM utilizza la sigla VMX per identificare questo gruppo di istruzioni. L'AltiVec fa parte delle specifiche Power v2.03.
Quando è stato presentato AltiVec era il migliore sistema SIMD disponibile per personal computer. Gli equivalenti prodotti della Intel non erano confrontabili. L'MMX non lavorava in virgola mobile ma trattava solamente numeri interi mentre l'SSE pur trattando i numeri in virgola mobile era molto più lento e limitato dell'AltiVec. Alla fine la quarta versione di sistema SIMD dell'Intel l'SSE2 risolse la maggior parte dei problemi e adottò molte delle soluzioni utilizzate dall'AltiVec.

## Caratteristiche

AltiVec e SSE2 utilizzano dei registri a 128 bit. Questi registri sono in grado di rappresentare 16 dati a 8 bit con o senza segno, otto dati a 16 bit con o senza segno e quattro dati a 32 bit con o senza segno che possono essere anche in virgola mobile. Inoltre dispongono di un gestore della cache delle istruzioni che provvede a organizzare le istruzioni in modo da minimizzare i conflitti di accesso alla memoria.
A differenza di SSE2, AltiVec supporta direttamente la gestione dei pixel con la modalità RGB nativa che non si appoggia alla gestione a 64 bit del processore. Adeguandosi alla filosofia RISC del PowerPC le istruzioni AltiVec sono in grado di manipolare esclusivamente i dati immagazzinati nei registri ma a differenza del SSE2 non esistono registri speciali e tutte le operazioni possono utilizzare tutti i registri. L'unità di calcolo AltiVec è dotata di 32 registri a 128 bit a differenza degli 8 registri a 128 dell'unità SSE2 e quindi è in grado di trattare un maggior numero di informazioni prima di dover accedere alla memoria centrale. Inoltre molte operazioni AltiVec sono in grado di utilizzare tre registri contemporaneamente a differenza dell'SSE2 che può utilizzare al massimo due registri contemporaneamente.

## Applicazioni

Le ultime versioni del compilatore GNU e del compilatore dell'IBM il Visual Age sono in grado di compilare codice in grado di avvantaggiarsi delle istruzioni AltiVec. Il compilatore si preoccupa di fornire delle primitive ad alto livello al programmatore in modo che questo possa scrivere un programma in C che si avvantaggi dell'unità di calcolo. Il programmatore deve solo definire la tipologia di dato da trattare e le operazioni da eseguire e poi il compilatore provvede a realizzare il codice più appropriato, utilizzando le istruzioni corrette e provvedendo a immagazzinare i dati nella modalità migliore per il processore.
Apple è il maggior utilizzatore delle potenzialità dell'AltiVec. L'unità di calcolo AltiVec viene utilizzata per migliorare le performance di programmi come QuickTime, iTunes, ecc. Le istruzioni vengono utilizzate da Quartz, il motore grafico del macOS per migliorare e velocizzare la presentazione grafica. Anche programmi di grafica come Adobe Photoshop utilizzano AltiVec per migliorare i tempi di risposta. Motorola ha introdotto AltiVec in tutti i suoi processori PowerPC a partire dai PowerPC G4. In molti sistemi embedded queste istruzioni vengono utilizzate per ottenere elaborazioni audio o video in tempo reale.
IBM ha incluso nei suoi ultimi processori POWER delle unità VMX anche se essendo questi processori dedicati a mainframe o a centri di elaborazione dati, l'utilità reale di queste unità è sempre stata dubbia. Nel suo ultimo processore per computer il PowerPC 970 (Utilizzato dal Power Mac G5) IBM ha introdotto due unità VMX a alte prestazioni. La prima è un'unità totalmente indipendente mentre la seconda unità è in grado di svolgere solo operazioni di moltiplicazioni e di addizione sui dati mentre per il resto si appoggia alla prima unità.