Gnu Parallel:每个工作都有并行重载程序吗?

问题描述 投票:1回答:2

假设我有一个程序在运行之前加载重要内容......但这是一次性减速。

接下来,我写道:

cat ... | parallel -j 8 --spreadstdin --block $sz ... ./mycode

这是否会导致每一项工作的负载开销?

如果它确实引起了开销,有没有办法避免它?

bash parallel-processing gnu-parallel
2个回答
1
投票

正如@Barmar所说,./mycode是针对你的例子中的每个块启动的。

但由于您在示例中没有使用-k,因此您可以使用--round-robin

... | parallel -j 8 --spreadstdin --round-robin --block $sz ... ./mycode

这将启动8个./mycodes(但不是每个块一个),并为任何准备读取的进程提供块。

此示例显示进程11和10的更多块比进程4和5更多,因为4和5读取速度较慢:

seq 1000000 |
  parallel -j8 --tag --roundrobin --pipe --block 1k 'pv -qL {}0000 | wc' ::: 11 4 5 6 9 8 7 10

1
投票

parallel对您运行的程序的内部工作情况一无所知。每个实例独立运行,无法将一个调用的初始化复制到其他实例。

如果您希望应用程序初始化一次然后并行运行多个实例,则需要将其设计到应用程序本身。它应该加载数据,然后使用fork()创建使用此数据的多个进程。

© www.soinside.com 2019 - 2024. All rights reserved.