SIMD延迟吞吐量

Ale*_*ros 10 c++ performance x86 sse simd

在针对大多数说明的英特尔Intrisics指南中,它还具有延迟和吞吐量的值.例:

__m128i _mm_min_epi32

Performance
Architecture Latency Throughput
Haswell      1       0.5
Ivy Bridge   1       0.5
Sandy Bridge 1       0.5
Westmere     1       1
Nehalem      1       1
Run Code Online (Sandbox Code Playgroud)

这些数字究竟是什么意思?我认为较慢的延迟意味着命令执行时间较长,但Nehalem的吞吐量1和常春藤的0.5,意味着Nehalem的命令更快?

Mat*_*son 14

指令的"延迟"是执行一条指令需要多少个时钟周期(指令完成需要多长时间).

通常吞吐量是每个时钟周期的指令数,但这里吞吐量是每个独立指令开始时的时钟周期数 - 所以0.5个时钟周期意味着可以在一个时钟周期内发出2条指令,结果在下一个时钟周期就绪时钟周期.

英特尔在此处记录:https: //software.intel.com/en-us/articles/measuring-instruction-latency-and-throughput

  • 不,吞吐量是每个时钟周期的指令数.英特尔正在引用互惠吞吐量并将其称为吞吐量. (2认同)
  • @Zboson恕我直言FHO的定义比英特尔的定义在*现实生活*中实际意味着什么,即每个时间量的一些数量.我声称英特尔所谓的"吞吐量"**应该被称为"互惠吞吐量". (2认同)

500*_*ror 5

以下是Intel的“ 衡量指令延迟和吞吐量”页面的引文 。

延迟和吞吐量

延迟是指一条指令使其数据可用于另一条指令所花费的处理器时钟数。因此,具有6个时钟延迟的一条指令的数据将可用于另一条指令,该指令在其开始执行后需要很多时钟。

吞吐量是指一条指令执行或执行其计算所需的处理器时钟数。具有2个时钟的吞吐量的一条指令会将其执行单元占用多个周期,这会阻止需要该执行单元的指令被执行。只有在执行单元完成指令后,才能输入下一条指令。