14

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

4

2 回答 2

23
  • 原始 AVX 指令集中没有分散或聚集指令。

  • AVX2 添加了聚集指令,但不添加分散指令。

  • AVX512F 包括分散和聚集指令。

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

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

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

于 2012-12-24T11:33:37.127 回答
11

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

祝你好运!

相皮赛MM

于 2013-07-10T19:10:13.713 回答