我有一台酷睿 i7 笔记本电脑。我只知道这个架构是四核超线程,这让用户认为这个盒子有 8 个核心。
因为我不知道上面这行是什么意思 :) 我在问:
我的多线程程序的最大 CPU 使用率是多少,在
理论上,这台笔记本电脑能搞定吗?是 400% 还是 800%?
当我执行 make -j 6
时,这是否意味着我正在编译
在 6 个线程上应用 6 个内核?但是我只有4个核心!
我可以在这台机器上运行 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 时变得无响应,请不要这样做!
希望这对您有所帮助。