6

SSE では、4 つの float を含む 128 ビットのレジスタがある場合、つまり

A = a b c d ('a','b','c','d' are floats and 'A' is a 128-bit SSE register)

B = e f g h

私が望むなら

C = a e b f

私は簡単に行うことができます:

C = _mm_unpacklo_ps(A,B);

同様に、私が望むなら

D = c g d h

できます:

D = _mm_unpackhi_ps(A,B);

double を含む AVX レジスタがある場合、単一の命令で同じことを行うことは可能ですか?

これらの組み込み関数がどのように機能するかに基づいて_mm256_unpacklo_pd()、 、_mm256_shuffle_pd()_mm256_permute2f128_pd()またはを使用できないことがわかっています_mm256_blend_pd()。これら以外に使用できる指示はありますか、または上記の指示を組み合わせて使用​​する必要がありますか?

4

1 に答える 1

4

私が考えることができる1つの方法は次のとおりです。

A1 = _mm256_unpacklo_pd(A,B);
A2 = _mm256_unpackhi_pd(A,B);

C = _mm256_permute2f128_pd(A1,A2,0x20);
D = _mm256_permute2f128_pd(A1,A2,0x31);

誰かがより良い解決策を持っている場合は、以下に投稿してください。

于 2012-11-29T06:49:16.970 に答える