Je débute avec SSE et je cherche à faire une opération relativement simple, mais en double-precision.
J'ai un tableau de 2 double, que je veux multiplier par 1 double
en gros :
double arr[] = { 5., 3. };
double res[2];
double t = 2.;
et j'aimerai obtenir:
res[0] = arr[0] * t;
res[1] = arr[1] * t;
en utilisant SSE
Le problème est que les 2 fonctions de multiplication proposées dans sont :
__m128 _mm_mul_ps (const __m128 & a, const __m128 & b);
// qui fait des multiplication de float
(float) res[0] = a[0] * b[0];
(float) res[1] = a[1] * b[1];
(float) res[2] = a[2] * b[2];
(float) res[3] = a[3] * b[3];
et :
__m128 _mm_mul_ss (const __m128 & a, const __m128 & b);
(float) res[0] = a[0] * b[0];
(float) res[1] = a[1];
(float) res[2] = a[2];
(float) res[3] = a[3];
Quelqu'un à une idée de la manière de faire ma multiplication en double ?
En espérant avoir été assez clair
Merci d'avance
# Erratum
Posté par errno . Évalué à 1.
# Trouvé
Posté par errno . Évalué à 2.
Si ca peut servir à d'autre, à partir de SSE2
on peut trouvé les fonctions :
pour affecter 2x le meme double :
__m128d _mm_set_pd1 (double d);
et pour multiplier 2 doubles 2 a 2:
__m128d _mm_mul_pd (__m128d a, __m128d b);
dans emmintrin.h
[^] # use the compiler, luke
Posté par Krunch (site web personnel) . Évalué à 6.
http://www.linux-kongress.org/2009/slides/compiler_survey_fe(...)
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: use the compiler, luke
Posté par yellowiscool . Évalué à 2.
Envoyé depuis mon lapin.
[^] # Re: use the compiler, luke
Posté par Pierre Tramal (site web personnel) . Évalué à 2.
En supplément on peut utiliser le vectoriseur automatique de gcc, activé par défaut avec -O3 , et suivre le travail de ce vectoriseur avec l'option -ftree-vectorizer-verbose=N avec N>=1.
[^] # Re: use the compiler, luke
Posté par benoar . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.