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, et mis en application sur des versions du PowerPC telle le G4 de Motorola et le G5 d'IBM.



Catégories :

Calcul parallèle - Architecture Power - Microprocesseur - SIMD

Recherche sur Google Images :


Source image : arecorlib.sourceforge.net
Cette image est un résultat de recherche de Google Image. Elle est peut-être réduite par rapport à l'originale et/ou protégée par des droits d'auteur.

Page(s) en rapport avec ce sujet :

  • L'interface de programmation Altivec se compose de trois niveaux :.... La MMU est scindée en deux unités, l'une pour les instructions, l'autre pour les ... (source : rince)
  • ... le Power PC 7400 G4, reposant sur la technologie Altivec, est le premier... Nous entendons par surpercalculateur une unité capable de gérer des calculs de ... Grâce à un PowerPC G4, Altivec gère la transmission d'un groupe entier de pixels... Il s'agit de 162 instructions multimédias spécifiques permettant au... (source : validus)
  • L'inclusion des unités de SIMD dans les processeurs tout usage a supplanté... La première utilisation des instructions de SIMD était dedans ordinateurs... le développement ultérieur de plateforme d'AltiVec est continué dans plusieurs... (source : worldlingo)

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 seulement par Motorola ; ainsi la totalité est aussi nommé Velocity Engine par Apple et VMX par IBM.


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 comparé à 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 ainsi qu'à 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 de corrections entre les structures de données et les limitations de ces unités ralentissaient largement 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 par conséquent 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 pourvu de l'unité de calcul AltiVec de Motorola. En 2002, IBM intègre AltiVec dans les processeurs qui équipent les PowerPC G5.

Quand il a été présenté la première fois, à la fin des années 1990, AltiVec était le dispositif SIMD le plus puissant, pour un processeur d'une unité centrale de bureau. Comparé à ses contemporains (MMX d'Intel, en nombre entier seulement ; SSE en virgule flottante, et divers autres dispositifs 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 bien plus flexible. Cependant, SSE2, le dispositif SIMD d'Intel de quatrième génération, présenté avec le Pentium 4, propose la plupart 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 appelé SWAR pour SIMD Within A Register (terme découvert 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 sert à reproduire le comportement d'une unité SIMD au sein d'un seul processeur[3]. Ces types de données appelé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 l'ensemble des é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. Au contraire de SSE2, Altivec ne propose pas de support pour les nombres réels double précision.

Au sein de l'architecture du PowerPC, Altivec est totalement 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 super-scalaire. L'utilisateur a en outre la possibilité d'utiliser la totalité des registres normaux apportés par le PowerPC et les 32 registres vectoriels apportés 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 façon à optimiser leur ordre de traitement et par conséquent augmenter les performances globales de l'application.
  3. Les instructions de manipulation des vecteurs. Sans doute les fonctions les plus puissantes d'AltiVec, on trouve dans cette catégorie l'ensemble des 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 apporte 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 apporté par Altivec et celui de SSE2 est que Altivec apporte la plupart d'opérations dites horizontales, servant à 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. A titre d'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 assez 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 :

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 selon le 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 apporté des processeurs AltiVec pour l'ensemble des unités centrales de bureau depuis l'introduction du G4. AltiVec est aussi employé dans quelques dispositifs embarqués, pour apporter 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) ainsi qu'à travers le nouveau Power6 d'IBM. Altivec continue aussi d'exister dans l'un des domaines grand public à particulièrement forte croissance : les consoles de jeux. Ainsi la XBOX 360 de Microsoft est un processeur triple cœur 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) particulièrement proche du 970. L'octo-processeur contient lui aussi un jeu d'instruction SWAR appelé SPE (Synergistic Processing Elements) dont le jeu d'instruction est particulièrement 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

Recherche sur Amazone (livres) :




Ce texte est issu de l'encyclopédie Wikipedia. Vous pouvez consulter sa version originale dans cette encyclopédie à l'adresse http://fr.wikipedia.org/wiki/AltiVec.
Voir la liste des contributeurs.
La version présentée ici à été extraite depuis cette source le 07/04/2010.
Ce texte est disponible sous les termes de la licence de documentation libre GNU (GFDL).
La liste des définitions proposées en tête de page est une sélection parmi les résultats obtenus à l'aide de la commande "define:" de Google.
Cette page fait partie du projet Wikibis.
Accueil Recherche Aller au contenuDébut page
ContactContact ImprimerImprimer liens d'évitement et raccourcis clavierAccessibilité
Aller au menu