广播__m128向量的一个任意元素

Ale*_*lex 3 c++ x86 sse simd sse2

我需要广播__m128向量的一个任意元素.例如第二个元素:

__m128 a = {a0, a1, a2, a3};
__m128 b = {a1, a1, a1, a1};
Run Code Online (Sandbox Code Playgroud)

我知道有内在函数_mm_set1_ps(float)和_mm_broadcast_ss(float*).但是这些内在函数可以从内存的常用寄存器中加载值.是否存在从另一个向量寄存器设置标量值的任何方法?

Ap3*_*p31 5

你可以_mm_shuffle_ps像这样使用:

b = _mm_shuffle_ps(a, a, _MM_SHUFFLE(1,1,1,1));
Run Code Online (Sandbox Code Playgroud)

  • @Alex通常是这一个,每当有差异时.使用错误键入的指令可能会花费额外的旁路延迟,具体取决于上下文和μarch. (2认同)