2

我使用在同一终端中一次运行并行多个命令中建议的脚本,以便并行运行一些应用程序。它工作正常,但是,我想将每个应用程序固定在一个内核上,我的问题是如何确保这些应用程序中的每一个都在不同的内核上运行?在哪里插入“taskset -c”s?在脚本内的每个应用程序的运行命令之前和/或当我从终端运行它时在脚本的命令本身之前?

4

1 回答 1

4

较新版本的 GNU Parallel 支持渐进式 ctrl-c。

Linux 非常擅长调度任务,因此请仅taskset在您确定确实对性能有好处的情况下才使用它。

要获得一个数字 0..n-1(例如 0..7),诱人的解决方案是:

# This is wrong
... | parallel taskset -c $(({#}%8)) {}

然而,这只有在工作花费完全相同的时间时才会起作用。如果作业 1..7 需要 2 秒,作业 8 需要 1 秒,则有 8 个作业槽。然后作业 9 将在作业 1 运行时运行。

一个更好的解决方案是定义自己的替换字符串,计算工作槽 0..7:

echo '--rpl "{%%} \$_=slot()-1"' >> ~/.parallel/config
... | parallel taskset -c {%%} {}
于 2013-09-04T23:39:36.420 回答