AVX中的SSE unpacklo_ps/unpackhi_ps的等价物(用于双打)

use*_*122 6 c sse avx

在SSE中,如果我有一个包含4个浮点数的128位寄存器,即

A = a b c d ('a','b','c','d' are floats and 'A' is a 128-bit SSE register)
Run Code Online (Sandbox Code Playgroud)

B = e f g h
Run Code Online (Sandbox Code Playgroud)

然后,如果我想

C = a e b f
Run Code Online (Sandbox Code Playgroud)

我可以简单地做:

C = _mm_unpacklo_ps(A,B);
Run Code Online (Sandbox Code Playgroud)

同样如果我想要

D = c g d h
Run Code Online (Sandbox Code Playgroud)

我可以:

D = _mm_unpackhi_ps(A,B);
Run Code Online (Sandbox Code Playgroud)

如果我有一个包含双精度的AVX寄存器,是否可以用一条指令执行相同操作?

基于这些内部函数是如何工作的,我知道,我不能使用_mm256_unpacklo_pd(),_mm256_shuffle_pd(),_mm256_permute2f128_pd()_mm256_blend_pd().除了这些我还可以使用或者我必须使用上述说明的组合吗?

use*_*122 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);
Run Code Online (Sandbox Code Playgroud)

如果有人有更好的解决方案,请在下面留言。