【问题标题】:Is there any data on the latency of an AVX2 gather instruction?是否有任何关于 AVX2 收集指令延迟的数据?
【发布时间】:2013-07-21 07:51:47
【问题描述】:

是否有任何关于 AVX2 收集延迟的数据?

(例如 _mm256_i32gather_ps 指令访问单个高速缓存行)

【问题讨论】:

  • 只有一个经验数据点 - 我最近对收集的负载运行了一个快速基准测试,吞吐量非常糟糕 - 我正在加载一个拆分向量,所以向量的前半部分来自一个缓存行并且另一半的下半场——似乎需要好几个周期。

标签: performance x86 latency micro-optimization avx2


【解决方案1】:

此页面提供所有内在函数的延迟数据:

Intel Intrinsics Guide

_mm256_i32gather_ps 的延迟为 6。

【讨论】:

  • 注意:这些是最小延迟。
  • 没办法,最小延迟大约是最小集合(2 个元素)的 17 个周期和大集合(像 DD 形式的 8 个元素)的 22 个周期,至少如果您在从地址输入到结果的通常方式。
【解决方案2】:

实际上,这取决于硬件。如果您查看 Agner Fog 的 instruction tables,您会发现 Zen1 和 Zen2 没有列出延迟,但 VGATHERDPS 的吞吐量倒数为 13-20 和 9-16。对于英特尔处理器,我们有:

                     xmm                 ymm
Processor    throughput latency  throughput latency
-------------------------------------------------------
Haswell          9                    12
Broadwell        6                     7
Skylake          4         12          5       13
SkylakeX         4         12          5       13
Coffee Lake      4         12          5       13

另外,Intel's site 不再列出 AVX2 收集指令的吞吐量/延迟,但有一些针对 AVX512。

【讨论】:

  • 同样值得检查uops.info - 他们发布了他们使用的微基准指令序列,并自动执行测试。
  • @PeterCordes 哇。感谢您提供的惊人资源。这些表格中的信息几乎太多了。
  • 我总是关闭“文档”和“IACA”栏;我不在乎他们有时会出错,我只想要真正的测量结果。这样可以减少混乱,足以比较来自几个微架构的数据。
猜你喜欢
  • 2019-08-27
  • 2014-03-13
  • 2020-03-08
  • 2016-07-29
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 2022-06-29
  • 2020-02-22
相关资源
最近更新 更多