X86 使用SSE加载非连续浮点

X86 使用SSE加载非连续浮点,x86,intel,sse,simd,X86,Intel,Sse,Simd,是否有Intel SSE指令可以从(非连续)等间距内存地址加载浮点 例如,给定一个数组A={0,1,2,3…n},我想立即加载到一个128位寄存器{A[0],A[4],A[8],A[12]} {A[5],A[9],A[13],A[17]}在这种用例中,您通常会加载多个连续向量,然后使用例如pshufd或punpckldq等将它们排列成所需的排列 请注意,在Haswell及以上版本中使用AVX2时,有收集的加载指令(例如),这可能也值得考虑。Haswell中的这些指令是麦克风内部函数,而不是Has

是否有Intel SSE指令可以从(非连续)等间距内存地址加载浮点

例如,给定一个数组
A={0,1,2,3…n}
,我想立即加载到一个128位寄存器
{A[0],A[4],A[8],A[12]}

{A[5],A[9],A[13],A[17]}

在这种用例中,您通常会加载多个连续向量,然后使用例如
pshufd
punpckldq
等将它们排列成所需的排列


请注意,在Haswell及以上版本中使用AVX2时,有收集的加载指令(例如),这可能也值得考虑。

Haswell中的这些指令是麦克风内部函数,而不是Haswell内部函数。Haswell。现在去喝咖啡你想干什么?可能有几种方法可以重写算法,以避免从非连续内存收集数据。