假设我有一个 18 核的服务器 CPU,开启了超线程,这意味着我可以在 htop 中看到 36 个 CPU。
为了充分利用 CPU 并且不影响单线程性能,我是否应该将所有 36 个“核心”都以 100% 运行为目标,而 HT 核心只会做更少的工作并仍然报告 100%,或者这意味着“完整”内核已经被其“HT 内核”上的任务中断,从而减少了单线程工作?
我知道有很多变量会影响 HT 性能,我只想知道处理 HT 时 cpu 表的含义。
sys*_*138 23
CPU 计量表无法告诉您可以从超线程 CPU 中挤出多少性能。为此,您应该以各种物理核心超额订阅率运行自己的基准测试。有一些工作负载在 HT 完全关闭的情况下效果最好,因此在您的测试中也包括这种情况。它可以是 1:2(36 个并行工作器),或 1:1.5,甚至 1:2.5!这取决于你的工作量。
更详细地说,超线程是在硅片上实现的,当上下文需要切换或分支预测失败时,可以减少处理器空闲的时间。与纯操作系统技巧相比,这使得更容易达到 100% 的执行单元使用率。HT 自推出以来一直在发展,现代芯片上的并行性比我们 10 年前使用的要多。
有两个执行配置文件会影响您的最佳超额订阅点在哪里:
JDł*_*osz 14
如果允许第二个虚拟内核在第一个虚拟内核卡住时做出贡献,那总比没有好,这样您(至少)会完成一些额外的工作。
问题变成了:什么时候有两个不同的线程会导致一个运行更糟?指令之间的分支预测和依赖关系不会改变。现在正在等待内存访问......这两个线程在缓存利用率和带宽方面都在争夺内存访问。
如果您有一些 CPU 运行 HT 而其他 CPU 没有运行,这是否也意味着您将特定线程分配给一种类型或另一种类型?我认为不是:您的程序将在随机虚拟内核上运行它们的线程。那么拆分配置有什么帮助呢?由于每个 CPU 都有自己的缓存,唯一的影响是内存带宽和缓存一致性的负担。
一般情况下,你达到一个点,有更多的东西,你可以做的是不是让一些CPU执行单元进入空闲状态更加昂贵。这并不直接取决于线程的数量,而是取决于线程在做什么,以及各个组件的详细内存架构和性能细微差别。
没有简单的答案。即使脑子里有一个特定的程序,机器也可能与那些讲述自己经历的人不同。
您必须自己尝试并测量什么是最快的,并在那台精确的机器上进行特定的工作。即便如此,随着时间的推移,它可能会随着软件更新和使用情况的变化而改变。
看看愤怒的代表作第 3 卷。如果您仔细查看某个特定的处理器,您会发现在执行代码所需的许多步骤的深层管道中资源有限。您需要找到过度投入导致执行速度较慢的情况,而不是不进行更多工作。一般来说,这意味着某种缓存;以及资源在线程之间共享的地方。
CPU 表是什么意思:它报告所有没有花在运行空闲线程上的时间。分配给一个核心的两个逻辑线程都不会空闲,即使在其中一个线程上完成的实际工作可能很小。管道花费的时间在结果准备好、内存被获取、原子操作被围起来等之前停留几个周期,同样不会导致线程被搁置为“未准备好”,因此它不会空闲,并且时间仍然显示为使用中。等待 RAM 不会显示为空闲。只有像 I/O 这样的东西才会使线程阻塞并停止向它收取时间。操作系统互斥锁通常会这样做,但随着多核系统的兴起,这不再是确定的事情,因为“自旋锁”不会使线程回到货架上。
因此,如果 CPU 经常卡在等待内存中,那么 100% 的 CPU 仪表并不意味着一切顺利。显示 90% 的较少数量的逻辑核心很可能会完成更多的工作,因为它完成了数字运算,现在正在磁盘上等待。
所以不用担心CPU表。看看实际取得的进展,只有.
| 归档时间: |
|
| 查看次数: |
2451 次 |
| 最近记录: |