Je cherche la méthode la plus efficace pour renverser le signe sur les quatre flotteurs emballés dans un registre SSE.Signe de basculement sur les flotteurs SSE emballés
Je n'ai pas trouvé d'élément intrinsèque pour cela dans le manuel de développement du logiciel Intel Architecture. Voici les choses que j'ai déjà essayées.
Pour chaque cas, j'ai bouclé le code 10 milliards de fois et obtenu le temps indiqué. J'essaie au moins de correspondre à 4 secondes, il prend mon approche non-SIMD, qui utilise seulement l'opérateur unaire moins.
[48 sec]
_mm_sub_ps(_mm_setzero_ps(), vec);
[32 sec]
_mm_mul_ps(_mm_set1_ps(-1.0f), vec);
[9 sec]
union NegativeMask { int intRep; float fltRep; } negMask; negMask.intRep = 0x80000000; _mm_xor_ps(_mm_set1_ps(negMask.fltRep), vec);
Le compilateur est gcc 4.2 avec -O3 . Le processeur est un Intel Core 2 Duo.
Prenez garde cependant - en utilisant des extensions spécifiques à gcc comme celui-ci ce qui rend votre code non portable. –
avez-vous regardé quel code cela génère? – Aktau