我是这个领域的新手,我的问题可能太愚蠢了,但请帮助我理解这里的基本原理。
我想知道最近的英特尔处理器(如 skylake 或 cascade lake)的每周期指令数 (ipc) 或每指令时钟数 (cpi)。当使用不同数量的物理内核以及使用超线程时,我也在寻找这些值。
我认为 spec cpu2017 基准测试结果可以在这里帮助我,但我在那里找不到答案。他们只是将总执行时间与某个引用机器所花费的时间进行比较,并给出比率。我在这里遗漏了什么吗?
我认为这是最早的性能参数之一,应该由某些标准基准计算和发布,但我找不到任何参数。我在这里遗漏了什么吗?
我想到的另一个相关问题(我想每个人都可能想知道)是使用所有内核和线程(最少 cpi 和最大 ipc)可以提供的最佳效果是什么?
请帮我找到 skylake(任何 Intel 处理器)在使用最大(28)个内核并且还启用超线程时的 ipc/cpi 值。
最佳答案
超线程(或非英特尔 CPU 上的一般 SMT)的 IPC 成本完全取决于工作负载。
如果您已经遇到分支预测错误、缓存未命中或长依赖链(低 ILP)的瓶颈,让 2 个线程在同一内核上运行会导致最小的干扰。
(不过,对 ROB 进行分区会降低在任一线程中找到 ILP 的能力,因此再次取决于细节。)
uop 缓存和 L1d/L1i/L2 缓存的竞争共享也可能会或可能不会成为问题,具体取决于缓存占用空间。
没有独立于工作量的通用答案
一些工作负载通过使用 HT 将逻辑核心数量增加一倍而获得了显着的加速。由于缓存冲突,一些高 ILP 工作负载实际上表现更差。 (例如,在 Icelake 之前的 Intel 上,工作负载已经接近于每时钟 4 微秒的前端饱和)。
Agner Fog 的微架构指南针对一些支持超线程的微架构对此做了一些说明。 https://agner.org/optimize/
IIRC,一些 AMD CPU 具有更高的超线程前端吞吐量,但我认为只有 Bulldozer 系列。
最大吞吐量不受超线程影响,每个核心都是独立的。例如Skylake 核心每时钟 4 微指令。将物理内核的数量加倍总是使理论微指令/时钟加倍。显然并非所有工作负载都有效地并行化,因此运行更多线程可能需要更多的总指令/微指令,和/或为通信创建更多内存停顿。
超线程让 2 个线程从停顿中填充彼此的“气泡”,从而帮助您更多地接近它。
关于linux - 当使用物理和逻辑内核的差异号时,在哪里可以找到英特尔处理器(比如 skylake)的 ipc(或 cpi)值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57364184/