【问题标题】:Multi Core and CPU Usage多核和 CPU 使用率
【发布时间】:2019-08-08 15:37:57
【问题描述】:

我有一个 i3 英特尔 CPU(具有超线程的双核)
我通常使用侧边栏小工具监控我的 cpu 使用情况,在 (0 - 3) 的单独行中显示每个核心使用情况。
但最近我注意到核心号 0 根本没有被使用。
经过一番搜索,我遇到了一个主题,解释了核心 0、2 是真正的核心,而 1、3 是超线程核心的数字和想法,但据此,这意味着我的 CPU 的真正核心从未使用过,甚至我的另一个核心没用。
阅读更多内容后,我碰到了这个multi-core-cpu-single-thread-behaviour-not-achieving-100,上面说发生了切换,但这仍然没有回答上面的问题,真正的核心 0 在哪里以及为什么只使用 1 个核心。

正如您所见,这是正常的 CPU 使用率,核心 0、2、3 发生了什么,为什么它们没有被其他程序使用,为什么即使很多程序正在运行,也只有 1 个核心处于活动状态。

(所有进程都在使用所有内核,通过亲和力检查)

【问题讨论】:

  • 真实内核和超线程内核之间的区别毫无意义。一个超线程内核可以交错执行两个线程。但在任何意义上,这两者都不比另一个更“真实”。
  • 虽然我理解编程需要了解 CPU 的工作原理,但对我来说这似乎更适合超级用户。

标签: multicore cpu-usage


【解决方案1】:

使用超线程,一个内核上的两个逻辑 CPU 是等效的。它不是一个是真实的,第二个是超线程的。两者共享相同的物理内核。使用它们中的哪一个都没有关系。最好先在不同的物理内核上安排线程,并且只有在使用所有物理内核后,才能在相同的内核上使用第二个逻辑 CPU,这似乎正是您所描述的。

【讨论】:

  • 是否有任何方法可以指定一个应用程序或一组线程应该只使用一个内核,但可以在该内核上运行它支持的尽可能多的线程?像 Interlocked.CompareExchange 这样的东西对于在一个内核上运行的程序来说很便宜,而在多核上运行时则很昂贵。与提高并行性相比,某些应用程序可能会从提高单核操作效率中获益更多(尤其是在其他应用程序或线程组可以使用其他内核的情况下)。
【解决方案2】:

也许是因为没有更多的处理需要计算能力,并且因为 SIBLING 级调度被认为更昂贵。也就是说,在用另一个程序“重载”一个核心(一组 N 个硬件线程)之前,将首先将进程 - 让我们考虑工作密集型的进程 - 分配给不同的核心。换句话说,6核4线程机器通常按照0、4、8、12、16、20、1、5、9、13、17、21、2、6、10的顺序填充24个线程, 14, 18, 22, 3, 7, 11, 15, 19, 23。(由于“自发”进程迁移,当然可能会出现轻微偏差。)

这不是真的只使用了一个线程:您自己的图形显示使用了 Core 3 和 3)和 Core 4 [原文如此](它是线程 3 和 4),分别为 1% 和 2%。您在进程列表中看到的大多数进程甚至都不运行,它们只是休眠。

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 2021-09-13
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多