Bonjour tous le monde;
j'ai déja programmer en c, maintenant je fait un peut de SIMD (single instruction multiple data), et je suis débutant donc mon probléme est que je veut faire la multiplication de deux vecteur en utilisant des instruction SIMD mon premier vecteur est X1 = 1 2 3 4 et mon deuxieme vecteur est X2 = 1 5 6 7 le résultat de la multiplication de ses deux vecteurs est f = 1 10 18 28 en sachant que c'est des float32. j'ai trouver un code sur internet qui marche le probléme je comprend pas comment sa marche en sachant que c'est une partie du code seulement c'est a dire que les valeurs de X1 et X2 sont déclarer plus haut. voici le code
moi se que j'ai compris c'est que pour i=0 avec l'instruction _mm_load_ps on charge la premiere valeur de X1 (float32) dans X11 (registre de 32bit) et de meme pour X21, aprés avec l'opérateur _mm_mul_ps je multiplie x11 et x21 se qui me donne normalement la valeur 1 (float 32) dans f qui est un registre de 32bit. aprés on passe a i=1 et on répete la meme opération mon probléme c'est quand on arrive a l'étape d'addition on aura la valeur contenue dans f précedement donc 1 et le nouveau contenue dans z qui est normalement 10 et donc en f on a 11 se qui veut dire que je me trompe dans mon raisonement. merci de bien vouloir m'éclairer svp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 vfloat32 dot_vf32vector(vfloat32 *vX1, vfloat32 *vX2, int n) { vfloat32 x11, x21, z, f; for(int i=0; i< n; i++) { x11 = _mm_load_ps((float32*) &vX1[i]); x21 = _mm_load_ps((float32*) &vX2[i]); z = _mm_mul_ps(x11, x21); f = _mm_add_ps(f,z); } return f; }
Partager