Haswell核心可以同时执行多少32位整数运算?

时间:2015-05-17 18:53:27

标签: x86 cpu simd avx cpu-speed

在准备一些演示文稿的背景下,我想到我不知道Haswell核心可以同时执行的整数运算次数的理论限制。

我曾经天真地假设“英特尔核心有HT,但这可能是并行化不同类型的工作,因此可能核心最大化其与256位AVX操作的并行性,因此可以在每个时钟周期发出8个整数运算(并假设很好的流水线操作,8也完成了。“ - 所以8个操作/循环。

然后我注意到this article,它告诉我Haswells(和Sandy Bridges)有3个调度端口可以提供矢量单位。那么真正的数字24整数运算/周期?

PS - 我意识到在实践中你可能需要实际从内存中读取所有数据,其带宽将是限制因素。或者QPI太慢了。

1 个答案:

答案 0 :(得分:5)

理论最大值是每周期 25 32位整数运算:

  • 端口0:1个标量操作或1个向量移位常数或按位布尔操作
  • 端口1:1标量op或1向量add / sub / min / max或cmp或按位布尔运算
  • 端口5:1个标量op或1个向量add / sub / min / max或cmp或bitwise boolean op
  • 端口6:1标量操作(或2,如果您使用64位整数寄存器计算SWAR)。

由于向量操作可以执行8个32位操作,因此每个周期最多有 25 整数操作 - 端口0,1和5各为8个,端口6为1.或者 26 。 (见Paul Clayton的评论。)

如果我们只是在谈论“正常”整数(加/乘/位/移位),那么我们必须排除做32位乘法(除了2次幂的常数),如果我们想要实现25每个时钟的操作。实数整数代码通常能够使p0忙于乘法,PSADBW,移位和布尔值,并且几乎总是会有大量的混乱(p5)。我们人为地排除了每个时钟吞吐量不严格为8位32位操作的事物,如乘法,可变计数移位以及整数和向量寄存器之间的数据移动。 (MOVD / MOVQ)。

向量乘法在p0上运行,但VPMULLD(8个32x32 - > 32b乘法)仅每2个周期运行一次,因为它需要2个相关的uop(10c延迟)。有关uop / port / throughput / latency表的说明,请参阅http://agner.org/optimize/

在前端保持此吞吐量将需要循环缓冲区,因此保持循环小于28微秒(或56没有超线程)。这包括比较和分支循环开销,因此理论吞吐量实际上略低于25,但是p6上的宏融合比较和分支运行,因此它只取代每第7个标量运算,使得可持续吞吐量类似于每时钟24.85次操作。 (或SWAR的25.85)。

Another source describing Haswell's microarchitecture