我在英特尔Intrinsic Guide v2.7中找不到它们。你知道AVX或AVX2指令集是否支持它们吗?
答案 0 :(得分:20)
原始AVX指令集中没有分散或收集指令。
AVX2添加了聚集,但没有分散说明。
AVX512F包括分散和收集说明。
AVX512PF还提供了收集和散布指令的预取变体。
AVX512CD提供了检测分散地址冲突的说明。
英特尔MIC(又名Xeon Phi,Knights Corner)确实包含收集和分散指令,但它是一个单独的协处理器,它无法运行正常的x86-64代码。
答案 1 :(得分:10)
正如另一个答案所示,即使在AVX2上也无法实现分散。但是,英特尔优化手册确实为我们提供了手写的分散操作版本。它位于英特尔优化手册2013版的第11-17页。基本上他们做的是他们每次读取索引并将其存储到通用寄存器中,比如rax,然后使用像vpalignr这样的东西将你想要的正确数字移到xmm寄存器。然后我们用vmovss将结果存储到内存位置---将标量单移到内存中。我想这会效率低但我想这是目前在X86 CPU架构上实现数据分散的唯一方法。在Xeon Phi上,它们很漂亮,它们为分散操作提供原生支持,第一个操作当然是内存位置。因此,我相信如果您的代码涉及大量的聚集和分散,切换到Xeon Phi将是一个不错的选择。如果我的回复有任何问题,请回复告诉我。
祝你好运!
xiangpisaiMM