c - 将 make 与 -j4 或 -j8 一起使用

标签 c opencv makefile

我有 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/

相关文章:

c - mac osx 开发环境

C:如何建立一个二进制整数

linux - Linux 上目录的生成时间和上次修改时间

c - 在可执行二进制文件中嵌入修订号

c - 如何在 OpenBSD 5.8 中使用 makefile

audio - fscanf(文件指针, "%d\n%lg\n",sig_length,sample_rate);怎么解释呢?

c - 编程上下文中的虚拟地址空间

c - OpenCV(C语言)围绕白色区域画圈

algorithm - 收集数据来识别手绘几何图形的最佳算法和最佳方法是什么?

python - python 和 opencv 中的快速组件标记