当我在台式机/笔记本电脑上(重新)构建大型系统时,我告诉我make
使用多个线程来加快编译速度,如下所示:
$ make -j$[ $K * $C ]
$C
应该在哪里指示机器拥有的内核数量(我们可以假设它是一位数字),而根据我的心情,$K
我从2
到有所不同4
。
因此,例如,我可能会说make -j12
我是否有4个核心,这表示make
要使用多达12个线程。
我的基本原理是,如果仅使用$C
线程,则内核将在进程忙于从驱动器中获取数据时处于空闲状态。但是,如果我不限制线程数(即make -j
),那我就有浪费时间切换上下文,耗尽内存或什至更糟的风险。假设计算机具有$M
千兆内存($M
大约为10)。
所以我想知道是否有一个确定的策略来选择运行效率最高的线程数。
在许多情况下,线程数量的正确答案将是核心数量。但是,唯一可以确定的方法是运行一些测试,更改线程数,直到找到最佳结果为止。
—
罗伯特·哈维
@RobertHarvey:是的,我可能会去过夜,并用各种设置编译一个Shell脚本,但我想我想问一下是否对此有所了解。
—
bitmask
许多人还建议$ cores + 1,因此1个编译器进程从磁盘读取数据,而4个则从磁盘读取。一个通用的建议很难,还取决于代码库(C ++模板的过度使用与带有几个C函数的小型编译单元),编译器链(预编译的标头等?)和构建结构(它是否只是链接了结束或介于两者之间的多个小物件)
—
johannes 2012年
如果您正在认真寻找性能,建议您考虑设置RAM磁盘或其他减轻I / O的方法。我认为CPU利用率不是您的热点。
—
TMN 2012年
@TMN:RAM磁盘如何提供帮助?Linux是在缓存的东西(你相当不错的做的意思是头文件,对吧?),更不用说驱动器高速缓存。我将必须首先手动或通过更改构建脚本将所有内容加载到shm中(这完全是过大的)。
—
bitmask