3

我需要在多核(和多线程)机器上运行多个作业。我正在使用GNU Parallel 实用程序在内核之间分配作业以加快任务速度。要执行的命令可在名为“commands”的文件中找到。我使用以下命令来运行 GNU Parallel。

猫命令 | 并行 -j +0

根据此位置的指南-gnu parallel,这个命令应该使用所有的核心来运行这个任务。我的机器有 2 个内核,每个内核有 2 个线程。然而,系统监视器显示 4 个 CPU(CPU1 和 CPU2 属于 core1,CPU3 和 CPU4 属于 core2)。每个作业(模拟)在单核上运行大约需要 20 秒。我使用这个 GNU 并行实用程序和上面的命令并行运行了 2 个作业。我在系统监视器中观察到,如果将 2 个作业分配给 cpu1 和 cpu2(即同一个核心),显然没有加速。它们大约需要 40 秒才能完成,这大约是按顺序运行所需的时间。但是,有时该工具会将 2 个作业分配给 CPU1 和 CPU3 或 CPU4(这意味着,将 2 个作业分配给 2 个不同的内核)。在这种情况下,两个作业在 20 秒内并行完成。

现在,我想知道是否有一种方法可以强制该工具在不同的“核心”上运行,而不是在同一核心上的不同“线程”上运行。任何帮助表示赞赏。谢谢!

4

1 回答 1

1

GNU Parallel 产生进程。它不决定在哪个内核上运行它。您的操作系统会这样做。GNU/Linux 通过让进程在同一个物理 CPU 上产生的进程来节省能源,从而节省能源成为可能:

echo 1 > /sys/devices/system/cpu/sched_mc_power_savings

(见https://lesswatts.org/tips/cpu.php

如果您的计算机设置为省电,那么您可能就是这种情况。

GNU/Linux 还可以控制应该在哪些内核上生成进程。您可以使用taskset掩码 10101010(bin)=0xAA; 告诉 GNU/Linux 在每个其他内核上生成。这里显示的是 128 核机器:

cat commands | taskset 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa parallel -j +0
于 2013-01-16T20:29:18.750 回答