了解FMA性能



我想了解如何计算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的指令。

是吗?如果是这样,我观察到表现稍高的原因是什么?

a吞吐量为0.5表示处理器可以每个周期执行两个独立的FMA。因此,在3GHz时,整个FMA的最高FMA为每秒60亿。您说您只能实现略大于1.5B的吞吐量。这可能是由于以下一个或多个原因而发生的:

  • 由于前端瓶颈(DSB路径或螨虫路径),前端在每个周期中的前端少于2个FMA UOPS。
  • FMA或其他指令之间存在数据依赖性(也许是循环力学的一部分)。可以说,这可以说:在RS每个周期中准备就绪的少于2个FMA。有依赖性时,潜伏期会发挥作用。
  • 某些FMA使用的是内存操作数,如果需要在L1D缓存中找到它们,则无法维持每个周期2 FMA的吞吐量。
  • 在实验过程中,核心频率少于3GHz。此因素仅影响每秒吞吐量,而不是每周周期。
  • 其他原因取决于您的循环的工作原理以及如何测量吞吐量。

延迟= 4和吞吐量(CPI)= 0.5,因此指令的总体性能为4*0.5 = 2个时钟。

仅处理单位给出cycles²/instr,这很奇怪,我对此没有解释。

此处列出的吞吐量确实是一个相互的吞吐量,在CPI中,每个说明为0.5个周期或每个周期2个指令。这些数字是通过互相相互关联的,延迟与它无关。

有一个相关的计算确实涉及延迟和(倒数)吞吐量,即延迟和吞吐量的乘积:4 * 2 = 8(以"指令数"的单位为单位)。这就是该操作的独立实例可以"在飞行中"(启动但未完成)同时与网络理论中的带宽 - 延迟产品相媲美。该数字告知某些代码设计决策,因为它是指令级并行的量的下限,该代码需要暴露于CPU才能充分使用计算资源。

最新更新