查询执行单元,端口等的Intel CPU详细信息

时间:2016-11-14 03:14:02

标签: performance x86 intel cpu-architecture

是否可以查询每个内核的执行单元/端口数以及英特尔CPU上的类似信息?

我有一个汇编程序,并注意到不同CPU的性能差异很大。例如,在Core i5 4570上,某些功能需要始终完成25%的周期才能完成Core i7 4970HQ。他们都是Haswell,来自同一代人。程序基准测试部分不涉及记忆运动。所以我想也许差异来自于执行单元数量,端口数量等细节。基准测量单核CPU周期,因此频率/ HT等不起作用。

我是否有权对性能差异进行这样的解释?如果是,我在哪里可以找到特定CPU的此类信息。是否可以动态查询它?如果可能的话,我可以根据这些信息动态调度和分配uops更均匀和类似的技术来优化多个CPU的程序。

1 个答案:

答案 0 :(得分:2)

您是否计时参考周期(RDTSC)而非核心时钟周期(使用性能计数器)?这可以解释你的观察结果。

Turbo产生很大的不同,最大turbo和最大持续/额定时钟速度(即参考周期滴答速率)之间的比率在不同的CPU上是不同的。例如see my answer on this related question

CPU的TDP越低,持续与峰值之间的比率越大。 Haswell wikipedia article有表格:

  • 84W桌面i5 4570:持续3.2GHz = RDTSC频率,最大turbo 3.6GHz(核心可能实际运行的大部分基准速度,如果有时间从低位上升电力怠速)。

  • 47W笔记本电脑i7-4960HQ:2.6GHz持续= RDTSC频率与3.8GHz最大涡轮增压。

使用性能计数器为代码计时,并查看“核心时钟周期”计数。 (以及许多其他整洁的东西)。

每个Haswell核心都是相同的,从Core-M 5Watt CPU到高功率四核到18核Xeon(实际上每核心功耗预算更像笔记本电脑CPU);它只是L3高速缓存,核心数(和互连),以及HT和/或Turbo的支持与否。基本上核心之外的所有东西都可以是不同的,包括GPU。 它们不会禁用执行端口,甚至L1 / L2缓存也是相同的。我认为禁用执行端口需要在无序调度程序和类似的东西中进行重大的重新设计。

更重要的是,每个端口至少有一个在任何其他端口上找不到的执行单元:p0具有分频器,p1具有整数乘法单元,p5具有shuffle单元,p6是唯一可以使用的端口执行预测的分支。实际上,p2和p3是相同的加载端口(并且可以处理存储地址uops)...

有关Haswell内部结构的更多信息,请参阅Agner Fog's microarch pdf;有关不同数据块的图表,请参见David Kanter's writeup

(但是,整个内核完全相同并不严格:Haswell Pentium / Celeron CPU不支持AVX / AVX2或BMI / BMI2。我认为他们通过禁用解码器中的VEX前缀解码来实现这一点。对于Skylake Pentiums / Celerons来说,情况仍然如此,所以感谢英特尔延迟了我们可以支持新指令集的时间。大概他们这样做是因为只有向量执行单元的上半部分或下半部分存在缺陷的CPU可以仍然以Celeron或Pentium的形式出售,就像在他们的一些L3中有缺陷的CPU可以作为i5而不是i7出售)