Obligement - L'Amiga au maximum

Vendredi 23 mai 2025 - 18:27  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Dossier : AltiVec
(Article écrit par divers auteurs et extrait de Wikipédia - mai 2022)


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.

AIM

Alors qu'AltiVec fait référence à un jeu d'instructions, les implémentations dans les processeurs produits par IBM et Motorola sont distinctes en termes de conception logique. À ce jour, aucun noyau d'IBM n'a inclus une conception logique AltiVec sous licence de Motorola et vice versa.

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 - Cray-1
Processeur vectoriel d'un Cray-1

L'AltiVec intègre des instructions SIMD, capables de traiter des vecteurs, mais seulement limités à quelques registres, contrairement aux processeurs vectoriels qui parcourent une table de vecteurs.

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
PowerPC 603

Au milieu des années 1990, différents fabricants de microprocesseurs 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édias avait mis en évidence les besoins en puissance de ces applications par rapport à des applications classiques comme la bureautique. Les premiers essais de Hewlett-Packard et de Sun Microsystems permirent de définir les bases des unités de traitement SIMD dans le cadre de telles applications et ouvrirent la voie à Intel, AMD et à Motorola. Ainsi, en 1997, AMD sortit 3DNow! et Intel finalisa son extension MMX3 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, autorisaient le travail sur des flottants simple ou double précision dans le cadre d'applications multimédias 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é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 PowerPC G4 7400
Keith Diefendorff et le PowerPC G4 7400 (premier processeur avec AltiVec)

Lorsqu'il fut 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, proposa un grand nombre de fonctionnalités qui vinrent combler les différences entre ces technologies.

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.

Instructions SIMD
Principe des instructions SIMD

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. 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 trente-deux registres vectoriels 128 bits permettent alors de stocker seize entiers 8 bits signés ou non signés, huit entiers 16 bits signés ou non signés, quatre entiers 32 bits signés ou non signés ou bien quatre nombres réels 32 bits en virgule flottante. Contrairement à SSE2, AltiVec ne propose pas de gestion pour les nombres réels double précision.

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 :
  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échargement ou de préextraction 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 qu'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ées 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 seize é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 seize sélections en trois cycles seulement.
L'avantage principal de ces fonctions est leur facilité d'utilisations due à une surcharge transparente pour l'ensemble des types vectoriels, contrairement aux 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 d'Apple.

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 PlayStation 3
Xbox 360 et PlayStation 3

Implémentations

Les processeurs suivants sont dotés d'AltiVec, VMX ou VMX128 :

Motorola/Freescale
  • MPC7400
  • MPC7410
  • MPC7450
  • MPC7445/7455
  • MPC7447/7447A/7457
  • MPC7448
  • MPC8641/8641D
  • MPC8640/8640D
  • MPC8610
  • T2081/T2080
  • T4080/T4160/T4240
  • B4420/B4860
IBM
  • PowerPC 970
  • PowerPC 970FX
  • PowerPC 970MP
  • Xenon
  • Cell B.E.
  • PowerXCell 8i
  • POWER6/POWER6+
  • POWER7/POWER7+
  • POWER8
  • POWER9
  • POWER10
P.A. Semi
  • PA6T
Arrivée de l'AltiVec : ce qu'en disait la presse

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).

Parallèlement au lancement du produit de Motorola, Apple Computer Corp. a révélé aujourd'hui qu'elle utiliserait des processeurs PowerPC G4 dans une nouvelle série de Power Macintosh G4. Apple a décrit le PowerPC G4 comme un "superordinateur sur une puce" et a déclaré qu'il avait été "conçu par Apple, Motorola et IBM" dans le cadre de la coentreprise Somerset PowerPC à Austin, qui a été arrêtée l'année dernière.

"Le nouveau Power Macintosh G4, avec sa puce PowerPC G4 qui écrase le Pentium, apporte les performances des superordinateurs à l'informatique personnelle", a déclaré Phil Schiller, vice-président de la commercialisation mondiale des produits.

Seul Motorola produit les processeurs PowerPC G4, a déclaré Will Swearingen, directeur commercial PowerPC basé à Austin. Outre les ordinateurs de bureau puissants, comme la série Macintosh G4, le MPC7400 est destiné aux réseaux, aux télécommunications, aux systèmes de traitement intégrés haut de gamme et à l'informatique scientifique.

Motorola a déclaré que la puce est fabriquée à l'aide d'un nouveau procédé HiPerMOS en cuivre de 0,18 micron (0,15 micron L-effectif). Les six niveaux de métal utilisent du cuivre au lieu des interconnexions traditionnelles en aluminium. Auparavant, Motorola avait commencé à utiliser le processus de cuivre pour fabriquer des SRAM à haute vitesse de 8 Mo avec des fréquences supérieures à 333 MHz.

L'architecture PowerPC G4 et la technologie AltiVec permettent aux processeurs MPC7400 d'exécuter 20 opérations par cycle d'horloge - un record pour l'industrie, selon Motorola.

Les logiciels peuvent être optimisés pour le processeur vectoriel 128 bits du MPC7400 afin d'obtenir des gains de performance substantiels, a déclaré Motorola. Des extensions au langage de programmation C/C++ sont proposées aux développeurs afin d'augmenter les performances jusqu'à six fois celles des applications scalaires traditionnelles, a déclaré Motorola, qui a révélé le développement du processeur PowerPC AltiVec en mai de l'année dernière.

Le microprocesseur PowerPC MPC7400 doté de la technologie AltiVec est disponible en versions 350, 400 et 450 MHz, au prix de 210, 275, 355 et 475 dollars respectivement, par quantités de 1000 unités. Une version à 500 MHz devrait être disponible prochainement, selon Motorola.


[Retour en haut] / [Retour aux articles]