X86 Haswell内核一次可以执行多少32位整数运算?
在准备一些演示文稿时,我突然想到,我不知道Haswell core一次可以执行的整数运算的理论极限是多少 我曾经天真地假设“英特尔内核有HT,但这可能是并行化不同类型的工作,因此可能一个内核使用256位AVX操作来最大化其并行性,因此每个时钟周期可以发出8个整数运算(并且假设良好的流水线,8个完成)。”-所以8个运算/周期 但后来我注意到,这告诉我Haswell(和Sandy Bridges)有3个调度端口,可以为矢量单元供电。那么,真的是图24整数运算/周期吗X86 Haswell内核一次可以执行多少32位整数运算?,x86,cpu,simd,avx,cpu-speed,X86,Cpu,Simd,Avx,Cpu Speed,在准备一些演示文稿时,我突然想到,我不知道Haswell core一次可以执行的整数运算的理论极限是多少 我曾经天真地假设“英特尔内核有HT,但这可能是并行化不同类型的工作,因此可能一个内核使用256位AVX操作来最大化其并行性,因此每个时钟周期可以发出8个整数运算(并且假设良好的流水线,8个完成)。”-所以8个运算/周期 但后来我注意到,这告诉我Haswell(和Sandy Bridges)有3个调度端口,可以为矢量单元供电。那么,真的是图24整数运算/周期吗 PS-我意识到,在实践中,您可能
PS-我意识到,在实践中,您可能需要从内存中实际读取所有数据,其带宽将是限制因素。或者QPI太慢。理论最大值为每个周期2532位整数运算:
- 端口0:1个标量运算或1个按常量或按位布尔运算的向量移位
- 端口1:1个标量运算或1个向量加法/分/最小/最大或cmp或按位布尔运算
- 端口5:1个标量运算或1个向量加法/分/最小/最大或cmp或按位布尔运算
- 端口6:1标量运算(如果使用64位整数寄存器计数,则为2)
PSADBW
、移位和布尔运算,并且几乎总是有大量的混洗(p5)。我们人为地排除了不是严格意义上的每时钟8次32位运算的事情,比如乘法、可变计数移位以及整数和向量寄存器之间的数据移动。(MOVD
/MOVQ
)
向量乘法在p0上运行,但是VPMULLD
(八个32x32->32b乘法)仅以每2个周期运行一次,因为它需要2个依赖的UOP(10c延迟)。请参阅说明uop/端口/吞吐量/延迟表
在前端维持这种吞吐量将需要循环缓冲区,因此保持循环小于28 uops(或56 uops,无超线程)。这包括比较和分支循环开销,因此理论吞吐量实际上略低于25。不过,宏融合比较和分支在p6上运行,因此它只替换每7个标量运算,使可持续的吞吐量大约为每个时钟24.85个运算。(使用SWAR时为25.85)
Wikipedia说,他们最多可以有8个以上的物理内核,“每个内核有8个执行端口”,并有“14到19个阶段的指令管道”。缓存使得获得真正的性能值变得困难,因此,为什么基准测试软件会随机化缓存。HT不能提供100%的性能增益(两个线程进入一个内核),因为每个内核在两个线程之间共享它的大部分硬件。我会说制作一个汇编测试程序,对其进行基准测试,然后给出真实的结果。有几篇关于这方面的好文章。@rdtsc:我说的是单核,是理论上的限制,而不是你在实践中能达到的。冒着听起来迂腐的风险,当理论限制无法达到时,理论限制的价值是什么?@rdtsc:事实上,由于外部因素(例如内存带宽)而无法达到限制不会使它变得毫无意义或无用。它为评估可实现的价值提供了背景;并指出了消除障碍对实现这一目标的重要性。在x86体系结构中,“障碍”不会被消除。当然,速度提高了,但向后兼容性至关重要。x86仍然可以运行30年前的代码。相反,格言是“添加新功能”。这是几十年来相互叠加的“功能”的融合。因此,请求另一个端口或更多缓存可能会增加理论上的限制,但最终结果总是更复杂、更依赖代码和缓存。好吧,这很公平,但是-管道理论上能支持这一点吗?e、 g.根据Abner Fog-是,每周期解码4条指令,以便为这些端口馈电。看@Zboson:你说的是FP。这个问题是关于整数的:Haswell可以在p1/p5上运行
VPADDD
(和其他向量int-add/sub/min/max),但PMULDQ
(和其他向量int-multiply和multiply-add)只能在p0上运行。整数向量乘法的需求量并没有那么大,而且据推测,复制这个功能单元根本不值得晶体管的成本。他们也喜欢在相同的端口上保持相同延迟的操作。@PeterCordes,谢谢你提供的信息。我现在觉得有点傻。我真的希望英特尔能实现快速的64位*64位到128位矢量乘法。这是多字SIMD操作的主要问题(带进位的加法不太成问题)。只要32位边界没有破坏性的交叉,纯标量端口就可以执行两个32位操作。(如果可以忽略更改,例如使用右移和掩码,则交叉可能是非破坏性的。交叉甚至可能是有益的,例如在自然处理内部进位/进位的情况下,查找32位整数向量的和。)按位逻辑运算自然符合此要求,但shift、add、,在适当限制输入的情况下,减法也可以满足这一要求。