c++ - 我可以在核心 i7 上获得的最大 cpu 使用率是多少

标签 c++ multithreading

<分区>

我有一台酷睿 i7 笔记本电脑。我只知道这个架构是四核超线程,这让用户认为这个盒子有 8 个核心。

因为我不知道上面这行是什么意思 :) 我在问:

  1. 我的多线程程序的最大 CPU 使用率是多少,在 理论上,这台笔记本电脑能搞定吗?是 400% 还是 800%?

  2. 当我执行 make -j 6 时,这是否意味着我正在编译 在 6 个线程上应用 6 个内核?但是我只有4个核心!

  3. 我可以在这台机器上运行 make -j 10 吗?实际上我做了,但是操作系统 差点被绞死

无论如何,我的应用程序在编译或运行时从未获得超过 370% 的 CPU 使用率(这是 top 命令所说的)

谢谢

最佳答案

从技术上讲,您最多可以获得 100% :-)

但是,我假设(因为你提到了 top)你在 linux 上(你应该这样标记问题),它确实使每个 CPU 负载增加以提供 100% 的最大值 * n(对于 n 个逻辑 CPU)。

我不记得它是如何处理超线程的——它可能会扩展到 400% 或 800%。这可能取决于您是否在 bios 中启用了超线程。

关于 make:make -j n 要求 make 一次最多运行 6 个作业。这可能是对 gcc、其他 make 命令的 6 次调用,无论 makefile 包含什么。它不会总是能够运行那个数字,这取决于构建 makefile 以允许并行构建的程度,您可以为此编写章节。这 6 个作业可能在 6 个独立的内核、相同的内核或混合内核上运行。这完全取决于调度程序将它们放置在何处,并且它们可能无论如何都会通过执行移动核心。

你没有得到 number-of-jobs*100 % usage 的原因是因为构建很少受 CPU 限制。有很多磁盘IO。读取 makefile、扫描依赖项、读取源代码和所有包含的文件、写入输出文件、写入依赖文件等都会显着增加构建时间,并且当进程等待这些操作时,它们将处于空闲状态。

你能运行 make -j 10 吗?是的,你可以选择任何数字。通常建议设置为您拥有的 CPU 数量,我个人更喜欢多运行几个,但这实际上取决于 make 在做什么。如果机器在 -10 时变得无响应,请不要这样做!

希望这对您有所帮助。

关于c++ - 我可以在核心 i7 上获得的最大 cpu 使用率是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800376/

相关文章:

c# - 多个线程访问一个返回方法,带锁是线程安全的吗?

c++ - 通过引用存储函数的返回值是否有任何性能提升?

java - StringBuffer同步是如何工作的?

C++ - 字符串流 << "overwriting"

c++ - 如何设计类方法只能被调用一次

c++ - 在没有共享 COM 对象的情况下使用 COM STA 或 MTA?

java - 在SQL语句中使用静态变量是否线程安全

java - Tomcat 线程与 Java 线程

c++ - 如何在与 C++ 中的派生类型匹配的元素上创建迭代器?

c++ - 带有数组的 unique_ptr 有什么用吗?