AltiVec

AltiVec

AltiVec est un ensemble d'instructions SIMD d'opérations en virgule flottante 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 un nom commercial détenu uniquement par Motorola ; ainsi l'ensemble est également appelé Velocity Engine par Apple et VMX par IBM.


Sommaire

Origines

Au milieu des années 1990, différents fabricants de micro-processeurs s'intéressèrent au développement d'unités de calculs parallèles qui permettraient d'alléger la charge du processeur en traitant de front de grandes quantités de données. En effet, l'essor des activités multimédia avait mis en évidence les besoins en puissance de ces applications par rapport à des applications classiques comme la bureautique. Les premiers essais de HP et de Sun Microsystems[1] permirent de définir les bases des unités de traitement SIMD dans le cadre de telles applications et ouvrirent la voie à Intel et à Motorola. Ainsi, en 1996, Intel finalisa son extension MMX[2] qui permettait de travailler sur des données 64 bits via une unité de calcul vectoriel. Cette extension se développa pour donner naissance aux unités SSE, SSE2, SSE3 et SSE4 qui, en reprenant la base de MMX, autorisent le travail sur des flottants simple ou double précision dans le cadre d'applications multimédia comme la compression vidéo ou la synthèse d'images 3D.

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émoires 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'application 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 partie des expériences de ses concurrents, Motorola décida donc de reprendre à 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ègre AltiVec dans les processeurs qui équipent les PowerPC G5.

Lorsqu'il a été présenté la première fois, à la fin des années 1990, AltiVec était le système SIMD le plus puissant, pour un processeur d'une unité centrale de bureau. Comparé à ses contemporains (MMX d'Intel, en nombre entier uniquement ; SSE en virgule flottante, et divers autres systèmes de fournisseurs de processeurs RISC), AltiVec offrait plus de registres, qui pouvaient être utilisés de façons plus variées et être opérés par un ensemble d'instructions beaucoup plus flexible. Cependant, SSE2, le système SIMD d'Intel de quatrième génération, présenté avec le Pentium 4, propose un grand nombre de fonctionnalités qui viennent combler les différences entre ces technologies.

Principes de fonctionnement

Altivec est basé sur une implémentation intra-processeur du modèle SIMD aussi nommé SWAR pour SIMD Within A Register (terme inventé en 1996 par l'Université de Purdue, pour différencier le SIMD interne au processeur du SIMD externe au processeur, c'est-à-dire les machines parallèles). Dans ce modèle, la manipulation de structures de données spéciales permet de reproduire le comportement d'une unité SIMD au sein d'un seul processeur[3]. Ces types de données nommés vecteurs sont des blocs de 128 bits pouvant contenir des données de plusieurs types et sont traitées par des opérateurs spécifiques qui effectuent leurs calculs simultanément sur tous les éléments du vecteur. Un jeu de 32 registres vectoriels 128 bits permettent alors de stocker 16 entiers 8 bits signés ou non signés, 8 entiers 16 bits signés ou non signés, 4 entiers 32 bits signés ou non signés ou bien 4 nombre réels 32-bit en virgule flottantes. Contrairement à SSE2, Altivec ne propose pas de support pour les nombres réels double précision.

Au sein de l'architecture du PowerPC, Altivec est complètement indépendante des unités de calcul classiques. Elle 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. Elle 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 d'autres compilateurs, fournissent le support direct aux instructions d'AltiVec depuis des programmes en C et C++. En pratique, 162 primitives C sont disponibles et se repartissent en quatre grands groupes :

  1. Les instructions de chargement qui permettent de charger une ou plusieurs valeurs de la mémoire vers un registre vectoriel ou d'un registre vers la mémoire.
  2. Les instructions de pré-chargment ou de prefetch qui autorisent la manipulation directe des informations présentes dans le cache de manière à optimiser leur ordre de traitement et de ce fait augmenter les performances globales de l'application.
  3. Les instructions de manipulation des vecteurs. Certainement les fonctions les plus puissantes d'AltiVec, on trouve dans cette catégorie toutes les instructions de décalages de bits, de permutations d'éléments, de fusion, de duplication de données vectorielles.
  4. Les instructions arithmétiques qui permettent d'effectuer classiquement des opérations telles que l'addition, la soustraction ou des opérations sur les nombres en virgule flottante (arrondis ou troncature) sur des vecteurs. Altivec fournit aussi un certain nombre d'instructions émulant des fonctions de type DSP, des opérations booléennes ou de comparaisons.

La principale différence entre le jeu d'instructions fourni par Altivec et celui de SSE2 est que Altivec fournit un grand nombre d'opérations dites horizontales, permettant de réaliser des réductions c'est-à-dire des opérations qui s'appliquent non pas aux éléments de deux vecteurs mais au contenu d'un seul vecteur. Par exemple, la fonction vec_sums effectue la somme des éléments d'un vecteur.

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.

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;
}


Le code C Altivec équivalent est le suivant :

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 );
}

Plusieurs points sont à noter :

  • Les variables vectorielles sont déclaré en utilisant la classe de stockage de type vector. Ainsi, pour un vecteur contenant des éléments d'un type T, le type correspondant est vector T;
  • Les primitives vec_ld et vec_st remplacent les accès aux éléments du tableau en effectuant respectivement le chargement ou l'écriture de blocs;
  • Chaque primitive Altivec traite les données par blocs de 16 éléments, ce qui implique que la boucle principale ne doit plus effectuer NxN itérations, mais seulement NxN/16;
  • Les constantes vectorielles sont générées hors de la boucle principale pour des raisons de performances;
  • Les tests nécessaires au seuillage sont aussi vectorisés grâce à la primitive vec\_sel qui permet d'effectuer l'équivalent de 16 sélections en trois cycles seulement.

L'avantage principal de ces fonctions est leur facilité d'utilisations due à une surcharge transparente pour l'enemble des types vectoriels, contrairement au instructions disponibles sur les architectures Intel ou le nom de la fonction est modifiée en fonction du type du vecteur. Une liste exhaustive des fonctions disponibles est accessible sur la page Altivec Instructions Cross References de Apple.

Applications

Apple est le premier client d'AltiVec, et l'utilise 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 a fourni des processeurs AltiVec pour toutes les unités centrales de bureau depuis l'introduction du G4. AltiVec est également employé dans quelques systèmes embarqués, pour fournir de grandes performances lors du traitement numérique du signal.

Altivec et l'industrie

Depuis le retrait d'Apple du monde PowerPC et Altivec, les principaux constructeurs de machines à base de powerPC Altivec sont Thales Computer et Mercury Computer.

Le futur d'Altivec

Bien qu'ayant disparu des dernières machines d'Apple, Altivec continue d'exister dans des domaines moins grand public comme les stations de travail et serveurs de calcul d'IBM à travers le PowerPC 970 MP (la dernière version à avoir équipé les PowerMac G5) et à travers le POWER6 d'IBM. Altivec continue aussi d'exister dans l'un des domaines grand public à très forte croissance: les consoles de jeux. Ainsi la XBOX 360 de Microsoft est un processeur triple coeur Altivec dérivant du 970 MP, et la PS3 et son fameux processeur Cell, un octo-processeur piloté par un processeur maître (le PPE) très proche du 970. L'octo-processeur contient lui aussi un jeu d'instruction SWAR nommé SPE (Synergistic Processing Elements) dont le jeu d'instruction est très proche d'Altivec.

Voir aussi

Notes et références

  1. (en)N. Slingerman and A. J. Smith - Performance analysis of instructions set architecture extensions for multimedia - 2001
  2. (en)A. Peleg and U. Weiser - MMX technology extension to the Intel architecture - 1996, IEEE Micro 4(16), pp 42-50
  3. (en)K. Diefendorf - Altivec extension to Power PC accelerates media processing - 2001

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article AltiVec de Wikipédia en français (auteurs)

Игры ⚽ Поможем сделать НИР

Regardez d'autres dictionnaires:

  • AltiVec — AltiVec  набор SIMD (векторных) инструкций для работы с плавающей запятой и целочисленной арифметикой, разработанный и принадлежащий Apple Computer, IBM и Motorola (известных, как AIM alliance). AltiVec реализован в различных версиях… …   Википедия

  • AltiVec — is a floating point and integer SIMD instruction set designed and owned by Apple, IBM and Freescale Semiconductor, formerly the Semiconductor Products Sector of Motorola, (the AIM alliance), and implemented on versions of the PowerPC including… …   Wikipedia

  • AltiVec — AltiVec™, VMX und auch Velocity Engine, ist die Bezeichnung für die von Motorola bzw. für die von IBM für die PowerPC Familie entwickelte SIMD Einheit. Mit Hilfe von AltiVec lässt sich dieselbe Operation auf mehrere Datenwörter gleichzeitig… …   Deutsch Wikipedia

  • AltiVec — es un conjunto de instrucciones SIMD en coma flotante y enteros diseñado y en propiedad de Apple Computer, IBM y Motorola (la alianza AIM), y puesto en ejecución en las versiones de PowerPC incluyendo el G4 de Motorola y los procesadores G5 de… …   Wikipedia Español

  • Altivec — AltiVec™, VMX und auch Velocity Engine, ist die Bezeichnung für die von Motorola bzw. für die von IBM für die PowerPC Familie entwickelte SIMD Einheit. Mit Hilfe von AltiVec lässt sich dieselbe Operation auf mehrere Datenworte gleichzeitig… …   Deutsch Wikipedia

  • AltiVec — es un conjunto de instrucciones SIMD en coma flotante y enteros diseñado y en propiedad de Apple Computer, IBM y Motorola (la alianza AIM), y puesto en ejecución en las versiones de PowerPC incluyendo el G4 de Motorola y los procesadores G5 de… …   Enciclopedia Universal

  • AltiVec — ● np. f. ►PUCE Ensemble de 162 nouvelles instructions, travaillant sur 32 registres de 128 bits, ajoutées par Motorola (avec le soutien d Apple et d IBM) aux PowerPC. à partir du G4. Du fait de la présence de nouveaux registres, les OS devront… …   Dictionnaire d'informatique francophone

  • VMX — AltiVec AltiVec est un ensemble d instructions SIMD d opérations en virgule flottante 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.… …   Wikipédia en Français

  • VMX — AltiVec™, VMX und auch Velocity Engine, ist die Bezeichnung für die von Motorola bzw. für die von IBM für die PowerPC Familie entwickelte SIMD Einheit. Mit Hilfe von AltiVec lässt sich dieselbe Operation auf mehrere Datenworte gleichzeitig… …   Deutsch Wikipedia

  • Velocity Engine — AltiVec™, VMX und auch Velocity Engine, ist die Bezeichnung für die von Motorola bzw. für die von IBM für die PowerPC Familie entwickelte SIMD Einheit. Mit Hilfe von AltiVec lässt sich dieselbe Operation auf mehrere Datenworte gleichzeitig… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”