linux - 当使用物理和逻辑内核的差异号时,在哪里可以找到英特尔处理器(比如 skylake)的 ipc(或 cpi)值?

标签 linux cpu cpu-architecture hpc microbenchmark

我是这个领域的新手,我的问题可能太愚蠢了,但请帮助我理解这里的基本原理。

我想知道最近的英特尔处理器(如 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/

相关文章:

concurrency - 什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存未命中?

optimization - 将代码保存在 L1 缓存中

linux - 在 Linux 操作系统中禁用 ASLR 后,虚拟到物理映射是否已修复

linux - 加密/解密在两个不同的 openssl 版本之间不能很好地工作

linux - omxplayer (raspbian) 在随机播放循环中播放视频文件夹

linux - 哪个交叉编译器?

cpu - 超线程与超标量执行

java - Gradle 的安装

assembly - 分支预测会使我的程序崩溃吗?

multithreading - SMP 内核、进程和线程究竟如何协同工作?