更好的_mm_shuffle_ps可以从一个来源获取3个元素?

时间:2011-05-02 19:16:42

标签: x86 sse simd

_mm_shuffle_ps只能复制a的2个浮点数和b的2个浮点数,对吗?有没有简单的方法可以从a获得3个浮点数,从b获得1个浮点数?我还注意到_mm_move_ss可以完成部分工作,但它不会转移。

价:

__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8)

2 个答案:

答案 0 :(得分:2)

如果你有SSE4,那么使用BLENDPS,内在的是:

__m128 _mm_blend_ps (__m128 v1, __m128 v2, const int mask);

答案 1 :(得分:1)

不幸的是,唯一的2源shuffle是movssmovsdshufpsunpckl/hps/dmovhlps以及类似的非灵活指令。

palignr might be useful,即使在FP指令之间使用int shuffle的旁路延迟,如果您的数据移动需要符合其模式。

AVX512为各种元素大小添加了2源完全混洗(交叉路口,带有矢量选择器)。像vpermi2wvpermt2b

这样的东西

正如保罗指出的那样,混合是灵活的方式来组合来自2个regs的数据而不会改组。

有关按数据移动类型组织的说明表,请参阅Agner Fog's Optimizing Assembly guide。另请参阅标记wiki。