|
|||||||||||||||||||||||||||||||||||||||||||||
|
AltiVec est un ensemble d'instructions SIMD d'opérations en virgule flottante simple précision conçu par, et propriété de, Apple, IBM et Motorola (l'alliance AIM), et mis en application sur des versions du PowerPC telle le G4 de Motorola et le G5 d'IBM. AltiVec est une marque déposée détenue uniquement par Motorola (puis Freescale) ; ainsi cette unité est également appelée Velocity Engine par Apple et VMX (Vector Multimedia Extension) par IBM et PA Semi. ![]() AltiVec est une partie normalisée de la spécification Power ISA version 2.03. Il n'a jamais fait officiellement partie de l'architecture PowerPC avant cette spécification, bien qu'il ait utilisé les formats et la syntaxe des instructions PowerPC et occupé l'espace du code opération ("opcode") expressément alloué à cet effet. Origines À la suite des performances démontrées dans le calcul d'un processeur vectoriel avec le supercalculateur Cray-1 en 1976, ce type d'architecture devint une technique importante dans le domaine du calcul vectoriel et plus généralement matriciel. Un processeur vectoriel est un processeur possédant diverses fonctionnalités architecturales lui permettant d'améliorer l'exécution de programmes utilisant massivement des tableaux, des matrices, et qui permet de profiter du parallélisme inhérent à l'usage de ces derniers. ![]() Processeur vectoriel d'un Cray-1 En 1993, le processeur IBM/Motorola PowerPC 603 permit déjà d'exécuter des instructions spécialisées dans le calcul vectoriel de type multiplication + addition ou soustraction sur des registres flottants, appelée "fmuladd" et "fmulsub", le système de pipeline permit de compenser les quatre cycles d'horloge nécessaires à son exécution en autorisant un lancement d'exécution par cycle. ![]() PowerPC 603 Pourtant, malgré l'avancée que représentait MMX et de ses successeurs en termes de performances, cette technologie semblait être sous-exploitée dans les communautés de développeurs. En effet, des problèmes comme la non-orthogonalité de leurs jeux d'instructions, les problèmes d'alignement mémoire et les problèmes d'adéquations entre les structures de données et les limitations de ces unités ralentissaient grandement le développement d'applications de grande envergure. Parallèlement aux travaux d'Intel et en constatant les problèmes auxquels les fabricants de microprocesseurs se heurtaient, Motorola s'allia en 1996 à Apple pour concevoir la future architecture du PowerPC G4. Keith Diefendorff, alors chef du projet AltiVec, définit les grandes lignes de cette unité de calcul en n'en faisant pas qu'une simple extension multimédia, mais plutôt une unité de calcul polyvalente. Tirant parti des expériences de ses concurrents, Motorola décida donc de reprendre de zéro la conception matérielle de ce type d'unité de calcul. Finalement, en 1999, le PowerPC G4 d'Apple se vit doté de l'unité de calcul AltiVec de Motorola. En 2002, IBM intègra AltiVec dans les processeurs qui équipaient les PowerPC G5. ![]() ![]() Keith Diefendorff et le PowerPC G4 7400 (premier processeur avec AltiVec) Principes de fonctionnement SIMD signifie "Single Instruction on Multiple Data", soit "instruction unique, données multiples". C'est une des quatre catégories d'architecture définies par la taxonomie de Flynn en 1966 et désigne un mode de fonctionnement des ordinateurs dotés de capacités de parallélisme. Dans ce mode, la même instruction est appliquée simultanément à plusieurs données pour produire plusieurs résultats. On utilise cette abréviation par opposition à SISD (Single Instruction on Single Data), le fonctionnement traditionnel, et MIMD (Multiple Instructions on Multiple Data), le fonctionnement avec plusieurs processeurs aux mémoires indépendantes. ![]() Principe des instructions SIMD Au sein de l'architecture du PowerPC, AltiVec est complètement indépendant des unités de calcul classiques. Il possède quatre unités de traitement équipées de pipelines qui lui permettent de traiter plusieurs opérations sur des flottants simple précision, des opérations de permutations, des opérations simples sur des entiers (comme l'addition) ou des opérations composites sur des entiers (comme les multiplications partielles) de manière efficace. Il est en outre capable de démarrer simultanément l'exécution de plusieurs opérations dans plusieurs unités de calcul, on parle alors d'unité de calcul superscalaire. L'utilisateur a en outre la possibilité d'utiliser l'ensemble des registres normaux fournis par le PowerPC et les 32 registres vectoriels fournis par AltiVec de manière simultanée. Jeu d'instructions Les versions récentes des outils de développement, tels GNU Compiler Collection, VisualAge d'IBM et les compilateurs sur AmigaOS et MorphOS, fournissent la gestion directe aux instructions d'AltiVec depuis des programmes en C et C++. En pratique, 162 primitives C sont disponibles et se répartissent en quatre grands groupes :
Exemple d'utilisation L'utilisation d'AltiVec au sein d'un code C est relativement simple. Considérons par exemple une fonction C calculant la différence de deux images de NxN pixels. Il s'agit ici d'effectuer la soustraction des intensités des pixels et d'y appliquer un seuillage pour obtenir une image en noir et blanc.
Le code C AltiVec équivalent est le suivant :
Plusieurs points sont à noter :
Comparaison avec x86-64 SSE AltiVec/VMX et SSE disposent tous deux de registres vectoriels de 128 bits qui peuvent représenter seize caractères signés ou non signés de 8 bits, huit shorts signés ou non signés de 16 bits, quatre ints de 32 bits ou quatre variables à virgule flottante de 32 bits. Tous deux fournissent des instructions de contrôle de cache destinées à minimiser la congestion du cache lors du traitement de flux de données. Ils présentent également des différences importantes. Contrairement à SSE2, AltiVec/VMX gère un type de données "pixel" RVB spécial, mais il ne fonctionne pas sur des flottants 64 bits en double précision, et il n'y a aucun moyen de déplacer des données directement entre les registres scalaires et vectoriels. Conformément au modèle "load/store" de la conception RISC du PowerPC, les registres vectoriels, comme les registres scalaires, peuvent uniquement être chargés et stockés en mémoire. Cependant, AltiVec/VMX fournit un ensemble beaucoup plus complet d'opérations "horizontales" qui fonctionnent sur tous les éléments d'un vecteur ; les combinaisons autorisées de types de données et d'opérations sont beaucoup plus complètes. Trente-deux registres vectoriels de 128 bits sont fournis, contre huit pour SSE et SSE2 (étendu à 16 dans x86-64), et la plupart des instructions AltiVec/VMX prennent trois opérandes de registre contre seulement deux opérandes registre/registre ou registre/mémoire sur IA-32. AltiVec/VMX est également unique dans sa gestion d'une instruction flexible de permutation de vecteurs, dans laquelle chaque octet d'une valeur vectorielle résultante peut être pris à partir de n'importe quel octet de l'un ou l'autre de deux autres vecteurs, paramétrés par un autre vecteur. Cela permet des manipulations sophistiquées en une seule instruction. Applications Apple fut le premier client d'AltiVec, et l'utilisa pour accélérer les applications de multimédia telles QuickTime et iTunes, et les programmes de traitement d'images tels Photoshop d'Adobe. Motorola fournit des processeurs AltiVec pour toutes les unités centrales de bureau depuis l'introduction du PowerPC G4. L'AltiVec fut également employé dans quelques systèmes embarqués, afin de fournir de grandes performances lors du traitement numérique du signal. A noter qu'IBM avait systématiquement exclu AltiVec/VMX de ses premiers microprocesseurs POWER, qui étaient destinés à des applications serveur où il n'était pas très utile. Il fut intégré à partir du POWER6 de 2007. Dans le monde Amiga, l'AltiVec mit du temps à arriver. Les premières machines qui en furent dotées furent les Pegasos de Genesi en 2003. Il s'agissait d'une mise à jour de la carte fille PowerPC G4 7447 à 1 GHz. Cependant, très peu de cartes G4 furent installées et utilisées dans les Pegasos en raison d'instabilités et surtout aucun logiciel (alors sous MorphOS) n'en faisait usage. Il fallut attendre le client distributed.net, pour le cassage de clés de sécurité, début 2004, pour voir le premier logiciel AltiVec dans le monde Amiga, et encore, pour une version non disponible pour le public du système d'exploitation MorphOS (la v1.5). Le 5 juin 2004, la préversion d'AmigaOS 4 pour développeurs, nommée "Developer Pre-Release", intégra la gestion de l'unité AltiVec dans son noyau. Cette gestion n'était cela dit pas encore 100% stable et le premier développeur à passer son logiciel à l'Altivec fut László Török avec son lecteur vidéo MooVid. Et c'est seulement avec les versions publiques d'AmigaOS 4 (AmigaOS 4.0 Final Release du 24 décembre 2006) et de MorphOS (MorphOS 2.0 du 1er juillet 2008) que la gestion de l'AltiVec fut intégrée au noyau des systèmes d'exploitation Amiga pour le public. Pour MorphOS, l'AltiVec était utilisé par le bureau Ambient, mais aussi par Reggae (gestion des types de fichiers), TinyGL (couche 3D) et dans la bibliothèque graphique. De nombreux logiciels prenant en compte l'AltiVec furent ensuite publiés comme ShowGirls, PowerSDL, OS4Emu ou MPlayer. AltiVec et l'industrie Après le retrait d'Apple du monde PowerPC et AltiVec, les principaux constructeurs de machines à base de PowerPC AltiVec furent Thales Computer et Mercury Computer. AltiVec continua d'exister dans des domaines moins grand public comme les stations de travail, les serveurs et les superordinateurs d'IBM à travers le PowerPC 970 MP (la dernière version à avoir équipé les Power Mac G5) et à travers la série des POWER d'IBM (sous le nom de VMX). AltiVec continua aussi d'exister dans un domaine grand public à très forte croissance : les consoles de jeux. Ainsi, en novembre 2005, Microsoft commercialisa la Xbox 360, une console de jeux basée sur un processeur triple coeur (dérivé du 970 MP) avec VMX. IBM améliora VMX pour l'utiliser dans la Xbox 360 et appela cette amélioration VMX128. Les améliorations comprenaient de nouvelles routines destinées aux jeux (accélération de la 3D et de la physique des jeux) et un total de 128 registres. VMX128 ne fut pas entièrement compatible avec AltiVec/VMX car un certain nombre d'opérations sur les nombres entiers furent supprimées pour faire de la place à un fichier de registres plus important et à des opérations supplémentaires spécifiques aux applications. Sony commercialisa sa PlayStation 3 le 11 novembre 2006, une console équipée d'un processeur Cell, qui était un processeur également dérivé du PowerPC. Le Cell de la PlayStation 3 comprenait sept coeurs, chacun doté d'un jeu d'instructions SIMD spécifique mais se rapprochant du VMX. ![]() ![]() Xbox 360 et PlayStation 3 Les processeurs suivants sont dotés d'AltiVec, VMX ou VMX128 : Motorola/Freescale
Voici ce que disait le 31 août 1999 le magazine américain EDN à la sortie du processeur PowerPC G4, le premier à intégrer une unité AltiVec : Motorola a présenté aujourd'hui son premier microprocesseur avec interconnexions en cuivre, le PowerPC MPC7400, qui intègre une unité de traitement vectoriel 128 bits sur sa puce RISC. En développement depuis plusieurs années, la nouvelle série de processeurs est basée sur la plate-forme PowerPC G4 et utilise une architecture de traitement parallèle à instruction unique et données multiples (SIMD).
|