Bonjour,

je suis en train d'essayer d'utiliser le jeu d'instruction AVX pour des fonctions de calcul d'une classe vecteur. Mais j'ai quelque difficulté, après de nombreuses recherches, je suis parvenu à cela :

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
 
vecteur3& vecteur3::operator+=(vecteur3 const& A)
{
#if __AVX__
    __m256d a = _mm256_load_pd(crd);
    __m256d b = _mm256_load_pd(A.crd);
    a = _mm256_add_pd(a, b);
    _mm256_store_pd(crd, a);
#else
    crd[0] += A.crd[0];
    crd[1] += A.crd[1];
    crd[2] += A.crd[2];
#endif
    return *this;
}
crd étant un attribut de la classe défini comme cela :

Mon problème est un segmentation fault sur la ligne de l'addition. Je ne comprend pas pourquoi. Est on obligé de fournir 4 double pour que cela fonctionne ?

Merci d'avance pour vos réponse.