X86 可以从一个源中获取3个元素的_mm_shuffle_ps的替代方案?
可以从X86 可以从一个源中获取3个元素的_mm_shuffle_ps的替代方案?,x86,sse,simd,X86,Sse,Simd,可以从a复制2个浮点数,从b复制2个浮点数,对吗?有没有简单的方法可以从a获得3个浮点值,从b获得1个浮点值?我还注意到,\u mm\u move\u ss可以完成部分工作,但不能完成轮班 参考: \uuuum128\umm\ushuffle\ups(\uuuum128 a,\uuuum128 b,unsigned int imm8) 如果您有SSE4,则使用,其本质是: \uuuum128\umm\uBlend\uPS(\uuuum128 v1,\uuuum128 v2,常数整数掩码); 如果
a
复制2个浮点数,从b
复制2个浮点数,对吗?有没有简单的方法可以从a
获得3个浮点值,从b
获得1个浮点值?我还注意到,\u mm\u move\u ss
可以完成部分工作,但不能完成轮班
参考:
\uuuum128\umm\ushuffle\ups(\uuuum128 a,\uuuum128 b,unsigned int imm8)
如果您有SSE4,则使用,其本质是:
\uuuum128\umm\uBlend\uPS(\uuuum128 v1,\uuuum128 v2,常数整数掩码);
如果您有SSE4,则使用,其本质是:
\uuuum128\umm\uBlend\uPS(\uuuum128 v1,\uuuum128 v2,常数整数掩码);
不幸的是,仅有的两种源代码混洗是movss
,movsd
,shufps
,unpckl/hps/d
,movhlps
,以及类似的非灵活指令
,即使在FP指令之间使用int-shuffle时存在旁路延迟,但前提是数据移动需要符合其模式
AVX512为各种元素大小添加了2源全混洗(车道交叉,带有矢量选择器)。和vpermt2b
正如Paul所指出的,混合是一种灵活的方式,可以在不洗牌的情况下组合来自2个reg的数据
有关按数据移动类型组织的指令表,请参阅。另请参见标记wiki。不幸的是,仅有的两种源代码混洗是movss
,movsd
,shufps
,unpckl/hps/d
,movhlps
,以及类似的非灵活指令
,即使在FP指令之间使用int-shuffle时存在旁路延迟,但前提是数据移动需要符合其模式
AVX512为各种元素大小添加了2源全混洗(车道交叉,带有矢量选择器)。和vpermt2b
正如Paul所指出的,混合是一种灵活的方式,可以在不洗牌的情况下组合来自2个reg的数据
有关按数据移动类型组织的指令表,请参阅。另请参见标签wiki。这取决于您是否可以假设最低SSE版本,例如SSSE3或SSE4?我可以使用SSE3和SSE4。这取决于您是否可以假设最低SSE版本,例如SSSE3或SSE4?我可以使用SSE3和SSE4。洗牌的美妙之处在于它可以进行某种轮班工作,但是“混合”不能。@echo:如果这是您需要的,那么您可能应该编辑您的问题以包含该要求。“洗牌”的美妙之处在于它可以做一些轮班工作,但“混合”不能。@echo:如果您需要的是这样,那么您可能应该编辑您的问题以包含该要求