我有多少个 CPU,我应该提交多少个作业?

我有多少个 CPU,我应该提交多少个作业?

我在一台电脑(实际上是几台电脑)上做了一些科学计算,我想知道我一次应该提交多少个作业。 lscpu 显示:

CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1

歧义是“线程”。我在网上搜索了一下,了解到了一些相关信息。但我还是感到很困惑(据说要提交多少份工作取决于)。我不关心机器的细节。例如,现在我有一个可执行文件。如果我直接运行的话,大约需要10分钟。假设现在我有 800 个需要运行。我应该一次运行 4 个还是 8 个以减少总时间成本?

答案1

如果这台 PC 具有 Intel CPU,则每个核心的线程数最肯定的是超线程。

https://en.wikipedia.org/wiki/超线程

对于物理上存在的每个处理器核心,操作系统会寻址两个虚拟(逻辑)核心,并在可能的情况下在它们之间共享工作负载。超线程的主要作用是增加流水线中独立指令的数量;它利用超标量架构,其中多个指令并行地对单独的数据进行操作。

我应该一次运行 4 个还是 8 个以减少总时间成本?

这取决于。有些任务在超线程下运行得更快,有些则不然。你必须自己测试一下。

假设现在我有 800 个需要运行。

我会使用 GNU Parallel 来处理这个问题。

https://www.gnu.org/software/parallel/

GNU并行是一种shell工具,用于使用一台或多台计算机并行执行作业。

.如果您有需要处理的文件列表,则可以使用以下方法:

find . | parallel -j4 yourprogram

如果您之前的测试表明超线程运行速度更快,则将“4”更改为“8”。

编辑:忘记提及有时程序运行得更快禁用BIOS 中的 HT。

相关内容