J'ai actuellement le code suivant:Quel est le moyen le plus efficace de multiplier 4 flotteurs par 4 flottants en utilisant SSE?
float a[4] = { 10, 20, 30, 40 };
float b[4] = { 0.1, 0.1, 0.1, 0.1 };
asm volatile("movups (%0), %%xmm0\n\t"
"mulps (%1), %%xmm0\n\t"
"movups %%xmm0, (%1)"
:: "r" (a), "r" (b));
J'ai d'abord les quelques questions:
(1) si je devais aligner les tableaux sur les limites de 16 octets, ça marcherait même? Depuis les tableaux sont alloués sur la pile est-il vrai que leur alignement est presque impossible?
voir la réponse choisie pour ce poste: Are stack variables aligned by the GCC __attribute__((aligned(x)))?
(2) Le code pourrait être refactorisé du tout pour le rendre plus efficace? Que faire si je mets les deux tableaux flottants dans des registres plutôt qu'un seul?
Merci
merci ; mais comme indiqué dans cet article http://stackoverflow.com/questions/841433/gcc-attributealignedx-explanation il semble impossible d'aligner les tableaux qui sont alloués sur la pile? (par opposition aux tableaux globaux alloués en .data) – horseyguy
merci pour le correctif Bastien :) Banister ... pouvez-vous faire un essai et voir ce qui se passe? Si cela est lié à l'explication, alors il serait impossible d'aligner les choses comme doubler correctement, mais ils sont alignés. – Goz
oui je vais bientôt ... J'ai le sentiment que l'explication liée est fausse, comme tout le monde dans cette question semble impliquer. Merci tout le monde! :) – horseyguy