我有 4 个处理器,正在编译一个需要大量处理器的应用程序。我读到建议将 make
与 -j4
开关一起用于 OpenCV;我应该改用 -j8
吗?为多个处理器制作的优势是什么?
最佳答案
上面的答案大部分都是正确的。然而,细节有点误导。例如,不需要为“管理线程”添加额外的作业(注意:make
实际上不是多线程的)。 make
永远不会把自己算作 -j
的工作,所以,正如 Huygens 上面所说,如果你说 -j5
你会运行 5 个编译作业,而不是 4 个加上 make。
大多数人使用 [核心数] + [一些填充] 的原因与 make
或其需要无关,而是与编译器的性质有关。编译器实际上只是一个非常复杂的文本翻译工具:它以一种形式读取文本并将其转换为另一种形式的“文本”(二进制)。其中很多(尤其是当您的语言变得更复杂时,例如 C++)需要大量 CPU。但它也需要大量的磁盘 I/O。磁盘 I/O 很慢,因此当一个编译器等待磁盘中的一些数据时,内核会安排其他作业运行。这就是为什么您可以有效地同时运行多个核心编译。
在开始看到 yield 递减之前,您可以得到多大的 -j
(您的构建实际上开始变慢,在某些时候,随着更多的 -j
)完全取决于在您的硬件上,您正在进行的构建类型等。唯一可以确定的方法是实验。
但是,[核心数]+[几个] 通常是一个很好的近似值。
关于c - 将 make 与 -j4 或 -j8 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15289250/