如何在多个内核上运行一个命令

如何在多个内核上运行一个命令

我有一个命令,我想在所有空闲核心上运行以加快执行时间。具体来说,我正在运行从以下位置下载的 Pitman-Yor Adaptor-Grammar Sampler 软件这里

./py-cfg/py-cfg-mp -r 0 -d 10 -x 10 -D -E  -e 1 -f 1 -g 10 -h 0.1 -w 1 -T 1 -m 0 -n 500 -G x.tgt y.tgt < z.tgt

我尝试添加parallel -j "$(nproc)"在指定的命令之前添加在这个答案中

但它产生以下错误:

Error in ./py-cfg/py-cfg-mp, argc = 29, optind = 27

答案1

答案是:视情况而定。

您可以使用 GNU Parallel 并行运行具有不同输入的同一程序:

parallel gzip ::: *.txt

这将在当前目录中的gzip每个文件上运行。.txt

gzip是单线程的,因此每个实例仅使用单个CPU核心。

这并没有那么复杂。

但是,如果您想要并行化gzip,以便使用多个核心来压缩单个(大).txt文件,则任务要复杂得多。在实践中,您将使用pigz为此构建的不同程序(例如)。

换句话说:你不能自动进行gzip多线程。

我不知道 Pitman-Yor 适配器-语法采样器。如果它gzip是单线程的,您可以在不同的输入上运行多个实例(GNU Parallel 可以帮助您做到这一点)。但是,在给定单个输入的情况下,您无法自动将采样器转换为在多个内核上运行。

如果这还不清楚,请尝试制作一个https://stackoverflow.com/help/minimal-reproducible-example

相关内容