了解FMA表现

no *_*ial 2 c++ x86 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条指令。

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

Had*_*ais 5

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

  • 由于前端瓶颈(DSB路径或MITE路径),前端在每个单个周期中传递的FMA少于2个。
  • FMA之间或与其他指令(可能是循环机制的一部分)之间存在数据依赖性。可以这样表示:每个RS周期中,准备就绪的FMA少于2个。延迟在存在依赖项时起作用。
  • 一些FMA正在使用内存操作数,如果在需要时在L1D缓存中找不到它们,则每个周期2个FMA的吞吐量无法维持。
  • 在实验过程中,核心频率小于3GHz。此因素仅影响每秒的吞吐量,而不影响每个周期。
  • 其他原因取决于循环的工作原理以及测量吞吐量的方式。