AVX中的分散内在函数

Str*_*ger 14 intrinsics avx avx2

我在英特尔Intrinsic Guide v2.7中找不到它们.你知道AVX或AVX2指令集是否支持它们吗?

Mar*_*han 21

  • 原始AVX指令集中没有分散或收集指令.

  • AVX2添加了聚集,但没有添加分散指令.

  • AVX512F包括分散和收集指令.

  • AVX512PF还提供了收集和分散指令的预取变体.

  • AVX512CD提供了检测分散地址冲突的指令.

  • 英特尔MIC(又名Xeon Phi,Knights Corner)确实包含收集和分散指令,但它是一个单独的协处理器,它无法运行正常的x86-64代码.

  • @Jeff:不过,KNL(Knight's Landing)应该运行 x86_64 机器代码,对吗?它甚至可以用作主机 CPU,而不仅仅是协处理器。 (2认同)

小智 10

正如另一个答案所示,即使在AVX2上也无法实现分散.但是,英特尔优化手册确实为我们提供了手写的分散操作版本.它位于英特尔优化手册2013版的第11-17页.基本上他们做的是他们每次读取索引并将其存储到通用寄存器中,比如rax,然后使用像vpalignr这样的东西将你想要的正确数字移到xmm寄存器.然后我们用vmovss将结果存储到内存位置---将标量单移到内存中.我想这会效率低但我想这是目前在X86 CPU架构上实现数据分散的唯一方法.在Xeon Phi上,它们很漂亮,它们为分散操作提供原生支持,第一个操作当然是内存位置.因此,我相信如果您的代码涉及大量的聚集和分散,切换到Xeon Phi将是一个不错的选择.如果我的回复有任何问题,请回复告诉我.

祝好运!

xiangpisaiMM