できるだけ少ないクロックサイクルで回転操作を実行する必要があります。__m128i
最初のケースでは、sourceおよびdestタイプとして次のように想定します。
ソース:|| A0 || A1 || A2 || A3 ||
dest:|| A1 || A2 || A3 || A0 ||
dest = (__m128i)_mm_shuffle_epi32((__m128i)source, _MM_SHUFFLE(0,3,2,1));
今、私はAVX組み込み関数で同じことをしたいと思います。したがって、今回__m256i
はsourceおよびdestタイプとして想定します。
ソース:|| A0 || A1 || A2 || A3 || A4 || A5 || A6 || A7 ||
dest:|| A1 || A2 || A3 || A4 || A5 || A6 || A7 || A0 ||
AVX組み込み関数には、対応するSSE整数演算のほとんどがありません。おそらく、浮動小数点バージョンで目的の出力を機能させる方法があります。
私は試しました:
dest = (__m256i)_mm256_shuffle_ps((__m256)source, (__m256)source, _MM_SHUFFLE(0,3,2,1));
しかし、私が得るものは次のとおりです。
|| A0 || A2 || A3 || A4 || A5 || A6 || A7 || A1 ||
これを効率的な方法で解決する方法についてのアイデアはありますか?(SSEとAVXの操作を混合せず、「手動で」反転せずA0
、A1
前もって感謝します!