6

在 SSE 中,如果我有一个包含 4 个浮点数的 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);

如果我有一个包含双精度的 AVX 寄存器,是否可以用一条指令来做同样的事情?

根据这些内在函数的工作方式,我知道我不能使用_mm256_unpacklo_pd(),_mm256_shuffle_pd()或. 除了这些我可以使用的任何指令还是我必须使用上述指令的组合?_mm256_permute2f128_pd()_mm256_blend_pd()

4

1 回答 1

4

我能想到的一种方法如下:

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 回答