【发布时间】:2015-05-17 18:53:27
【问题描述】:
在准备一些演示文稿时,我突然想到,我不知道 Haswell 内核一次可以执行的整数运算数量的理论限制是多少。
我曾经天真地假设“英特尔内核具有 HT,但这可能会并行化不同类型的工作,因此一个内核可能会通过 256 位 AVX 操作最大化其并行性,因此每个时钟周期可以发出 8 个整数操作(并假设流水线很好,也有 8 个完成)。” - 所以 8 个操作/周期。
但后来我注意到this article,它告诉我 Haswells(和 Sandy Bridges)有 3 个可以为矢量单元提供数据的调度端口。那么真正的数字 24 整数操作/周期是吗?
PS - 我意识到在实践中您可能需要从内存中实际读取所有数据,其带宽将是限制因素。或者是 QPI 太慢了。
【问题讨论】:
-
Wikipedia en.wikipedia.org/wiki/Haswell_(microarchitecture) 说他们最多可以有 8 个以上的物理内核,以及“每个内核八个执行端口”,以及“14 到 19 级指令管道”。缓存使获得真正的性能值变得困难,因此基准测试软件随机化缓存。 HT 不会提供 100% 的性能提升(两个线程合为一个核心),因为每个核心在两个线程之间共享大部分硬件。我会说制作一个汇编程序测试程序,对其进行基准测试,然后给出真实世界的结果。 masm32.com/board 有几篇关于这方面的好文章。
-
@rdtsc:我说的是单核 - 以及理论上的限制,而不是您在实践中可以实现的目标。
-
冒着听起来很迂腐的风险,当理论极限无法达到时,它们的价值是多少?
-
@rdtsc:由于外部因素(例如内存带宽)而无法达到限制这一事实并不意味着它毫无意义或无用。它为评估可达到的价值提供了背景;并提出消除障碍的重要性。
-
在 x86 架构中,“障碍”不会被移除。速度提高了,当然,但向后兼容性是最重要的。 x86 仍然可以运行 30 年前的代码。相反,座右铭是“添加新功能”。这是几十年来相互叠加的“功能”的融合。因此,请求另一个端口或更多缓存可能会增加理论上的限制,但最终结果将始终是更复杂以及代码和缓存依赖。
标签: x86 cpu simd avx cpu-speed