AltiVec ist eine von IBM und Motorola entwickelte SIMD-Einheit für die PowerPC-Prozessor-Familie. AltiVec ist auch eine Handelsmarke von Motorola, deshalb wird von Apple auch die Bezeichnung Velocity Engine verwendet und IBM verwendet die Bezeichnung VMX (Vector Media Extensions) für diese SIMD-Einheit.

Mit Hilfe von AltiVec lässt sich dieselbe Operation auf mehrere Datenwörter gleichzeitig anwenden. Dabei unterstützt die Vektoreinheit (anstatt einzelne Zahlen zu berechnen, werden sie zusammengenommen als Vektor betrachtet) bis zu sechzehn Elemente pro Vektor. Nutzt also eine Software die volle Leistungsfähigkeit von AltiVec, kann sie arithmetische Aufgaben theoretisch in bis zu einem Sechzehntel der sonst notwendigen Zeit erledigen.

Ursprünglich in die PowerPC-Prozessoren eingebaut, wurde die SIMD-Einheit auch in spätere (ab POWER6) IBM-Power-Prozessoren eingebaut und schließlich mit POWER7 als VSX (Vector Scalar Extensions) auf 64 Register von 128 Bit Breite erweitert. Die weitere Entwicklung läuft nach dem Ende der PowerPC-Prozessoren (mit dem Wechsel von Apple zu Intel-Prozessoren) wieder bei IBM in der IBM POWER-Plattform weiter: [1]

Spezifikation Name realisiert in Prozessor
Power ISA v.2.03 Altivec / VMX POWER6
Power ISA v.2.06 VSX POWER7
Power ISA v.2.07 VSX-2 POWER8
Power ISA v.3.0 VSX-3 POWER9

Technik

[Bearbeiten | Quelltext bearbeiten]

Ein AltiVec-Vektorregister ist stets 128 bit breit. Je nach verwendetem Datentyp können in einem solchen Vektorregister 16, 8, oder 4 Elemente gehalten und für die Berechnung verwendet werden. Neben den Ganzzahldatentypen 'byte', 'short' und 'long' ist auch der Fließkommadatentyp 'float' (entspr. IEEE 754 single) verwendbar. Doppelt genaue Fließkommawerte ('double') werden von AltiVec nicht unterstützt.

Demnach ergibt sich die folgende Konfiguration eines AltiVec-Vektorregisters:[2]

Datentyp Breite des Datentyps Gehaltene Elemente Beschleunigung
byte 8 Bits 16 16 ×
short 16 Bits 8 8 ×
long 32 Bits 4 4 ×
float (entspr. IEEE 754 single) 32 Bits 4 4 ×

Das Problem von AltiVec ist jedoch:

Compilerunterstützung

[Bearbeiten | Quelltext bearbeiten]

Die GNU Compiler Collection GCC unterstützt AltiVec über sogenannte“Built-In Functions” [3] als auch über spezielle Vektortypen[4] womit einfache Operationen wie +,-,*,/ usw. automatisch 'vektorisiert' werden.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Paul Clarke: Vectorizing for fun and performance. IBM, abgerufen am 5. November 2023 (englisch).
  2. AltiVec Technology Programming Interface Manual. (PDF; 1,6 MB) NXP, Juni 1999, S. 21, abgerufen am 5. November 2023 (englisch).
  3. GCC 3.3.6 manuals. PowerPC AltiVec Built-in Functions. In: GCC online documentation. The GCC team, S. 5.45.3, abgerufen am 23. November 2010 (englisch, eine Auflistung der GCC AltiVec-Erweiterungen).
  4. Using vector instructions through built-in functions. Abgerufen am 13. Oktober 2012.