首页 文章

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

提问于
浏览
0

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

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

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

1 回答

  • 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 . They don't disable execution ports, 甚至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出售

相关问题