Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Altivec, ca fait quoi exactement et comment l'utiliser?

3 réponses
Avatar
Saïd
Bonjour,

Que fait exactement l'unite Altivec des processeurs G4 ou G5? Peut-on
explicitement faire appelle a ses services? Si oui comment le faire depuis
un programme ecrit en C (sans assembleur)? Et comment se comporte un tel
programme s'il est lance sur un G3?


--
Saïd.
C programmers never die - they're just cast into void.

3 réponses

Avatar
Vincent Bernat
OoO Lors de la soirée naissante du jeudi 03 février 2005, vers 18:33,
Saïd disait:

Que fait exactement l'unite Altivec des processeurs G4 ou G5?
Peut-on explicitement faire appelle a ses services? Si oui comment
le faire depuis un programme ecrit en C (sans assembleur)?


Il ne me semble pas qu'on puisse l'utiliser en C, il faut incorporer
des instructions en assembleur dans ton programme. Note que dans un
futur proche, gcc saura utiliser l'Altivec automatiquement pour
certaines options, ce n'est pas le cas maintenant. De plus, tu dois
passer certaines options au compilateur (-maltivec je crois).

Et comment se comporte un tel programme s'il est lance sur un G3?


Cela plante avec un SIGILL (Instruction ILLégale). Il faut donc
effectuer la détection du bidule. Tu peux regarder ce qui se fait dans
VideoLan Client pour voir comment c'est fait.
--
BOFH excuse #408:
Computers under water due to SYN flooding.

Avatar
Patrick Stadelmann
In article ,
Saïd wrote:

Bonjour,

Que fait exactement l'unite Altivec des processeurs G4 ou G5?


C'est une unité de calcule vectorielle 126-bit. Au lieu d'effectuer des
opérations sur des nombres, par exemple A + B, elle travaille sur des
vecteurs, par exemple : (A1, A2, A3, A4) + (B1, B2, B3, B4). Dans cet
exemple, lieu de produire 1 seul résultat (C = A+B) en un cycle, elle
produit 4 résultats :

C1 = A1 + B1 C2 = A2 + B2 C3 = .... C4 = ....

On peut à choix effectuer ainsi 4 opérations sur 32-bit, 8 opérations
16-bit ou 16 opérations 8-bit.

Voir http://developer.apple.com/hardware/ve/ pour plus d'infos.

Peut-on
explicitement faire appelle a ses services? Si oui comment le faire depuis
un programme ecrit en C (sans assembleur)?


Oui, on peut ajouter un type "vecteur" au langage C, et ensuite écrire :

vector short a, b, c;

c = vec_add( a, b );

Voir : http://developer.apple.com/hardware/ve/model.html

Mac OS X intègre également des librairies vectorielles contenant du code
optimisé AltiVec pour faire du traitement de signal ou autre :

http://developer.apple.com/hardware/ve/vector_libraries.html

Ces librairies sont compatibles G3, G4 et G5 (i.e. elle incluent à la
fois le code vectoriel pour AltiVec et le code scalaire pour les G3).

Et comment se comporte un tel
programme s'il est lance sur un G3?


Il plantera avec une erreur "instruction invalide" à la première
exécution d'une instruction AltiVec. Un peu comme le faisait les
logiciels utilisant une FPU sur une machine qui n'en possédait pas.

Patrick
--
Patrick Stadelmann

Avatar
Saïd
Patrick Stadelmann :

Merci pour toutes ces precisions.

--
Saïd.
C programmers never die - they're just cast into void.