2

我想了解如何计算 FMA 性能。如果我们查看这里的描述:

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmadd_ps&expand=2520,2520&techs=FMA

对于 Skylake 架构,指令具有Latency=4Throughput(CPI)=0.5,因此指令的整体性能是4*0.5 = 2每条指令的时钟数。

据我所知,如果最大(涡轮)时钟频率为 3GHz,那么对于单个内核,我可以在一秒钟内执行 1 500 000 000 条指令。

这样对吗?如果是这样,我观察到性能略高的原因可能是什么?

4

2 回答 2

5

0.5 的吞吐量意味着处理器每个周期可以执行两个独立的 FMA。所以在 3GHz 时,最大 FMA 为每秒 60 亿次。您说您只能实现略大于 1.5B 的吞吐量。这可能是由于以下一种或多种原因造成的:

  • 由于前端瓶颈(DSB 路径或 MITE 路径),前端在每个周期中提供的 FMA 微指令少于 2 个。
  • FMA 之间或与其他指令(可能是循环机制的一部分)之间存在数据依赖性。这可以替代地表述如下:每个周期在 RS 中准备好的 FMA 少于 2 个。当存在依赖关系时,延迟就会发挥作用。
  • 一些 FMA 正在使用内存操作数,如果在需要时在 L1D 缓存中找不到它们,则无法维持每个周期 2 个 FMA 的吞吐量。
  • 实验期间核心频率变为小于 3GHz。这个因素只影响每秒的吞吐量,而不是每个周期。
  • 其他原因取决于您的循环如何工作以及您如何测量吞吐量。
于 2019-03-03T16:49:50.957 回答
2

延迟=4,吞吐量(CPI)=0.5,所以指令的整体性能是 4*0.5 = 每条指令 2 个时钟。

只是计算出单位给出cycles²/instr,这很奇怪,我对此没有任何解释。

此处列出的吞吐量实际上是倒数吞吐量,以 CPI 为单位,因此每条指令 0.5 个周期或每周期 2 条指令。这些数字相互关联,延迟与它无关。

有一个相关的计算确实涉及延迟和(倒数)吞吐量,即延迟和吞吐量的乘积:4 * 2 = 8(以“指令数”为单位)。这是操作的多少个独立实例可以同时“进行中”(开始但未完成),与网络理论中的带宽延迟产品相当。这个数字会通知一些代码设计决策,因为它是代码需要向 CPU 公开的指令级并行量的下限,以便它充分利用计算资源。

于 2019-03-03T17:28:15.500 回答