我在一台电脑(实际上是几台电脑)上做了一些科学计算,我想知道我一次应该提交多少个作业。 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。