J'ai un vecteur de 128 bits de 4 flotteurs qui ont été calculés, et je veux changer l'ordre de ce vecteur comme ceci:Comment puis-je réorganiser un vecteur 128 bits à l'aide d'Intel intrinsics?
Vector A before reordering
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
Vector A after reordering
+---+---+---+---+
| b | a | c | d |
+---+---+---+---+
Comme je l'ai dit le vecteur a été calculé par des calculs donc plus tôt façon d'utiliser _mm_set_ps()
... Quelqu'un at-il une idée sur la façon dont cela peut-il être fait?
Compiler '__m128 f (__ M128 x) {return _mm_setr_ps (x, x [0] [1], x [2], x [3]);} 'avec gcc ou clang et' -O3 -msse4' donne 'shufps \t $ 225,% xmm0,% xmm0', ressemble à un indice fort ... –
Voir https://software.intel.com/sites/landingpage/IntrinsicsGuide/pour un outil de recherche pratique, et d'autres liens dans le [sse tag wiki] (https://stackoverflow.com/tags/sse/info), ainsi que le [wiki tag x86] (https: //stackoverflow.com/tags/x86/info). Si vous trouvez que votre code contient trop de shuffles, pensez à réorganiser vos structures de données, ou comment vous vectoriser une boucle imbriquée, afin de réduire autant que possible le réarrangement. –