1

我可以例如执行:

parallel -j 200 < list0

其中“列表”有:

nice -n -20 parallel -j 100 < list2 nice -n -20 parallel -j 100 < list1

这是否可行/可能?

4

2 回答 2

0

你通常会这样做:

parallel -j0 < joblist

然后 GNU Parallel 将启动尽可能多的工作。它通常会受到文件句柄或进程的限制。

如果您无法覆盖每个进程的文件句柄数,您通常可以通过以下方式作弊:

parallel -j10 --pipe parallel -j0 < joblist

这将启动 10 倍的工作。如果作业的运行时间少于 10 毫秒,也可以使用此方法(在这种情况下,来自 GNU Parallel 的 2-3 毫秒开销可能超过实际运行作业)。

于 2014-04-10T17:52:04.437 回答
0

进程的数量是有限的。在实践中,不要并行运行超过几十个进程(至少在个人计算机上;在百万美元的机器上,限制肯定更大)。

阅读fork(2)execve(2)setrlimit(2)手册页,了解它们何时以及如何失败。

在达到失败的极限之前fork,您将达到一个阈值,在该阈值中,执行更多并行进程会减慢整个计算速度,因为内核中的调度程序将承受过大压力。

如果您可以访问计算机网络(可能只有其中两台),还可以考虑MPI。如果您可以重新编码您的一些应用程序,还可以阅读有关pthreads的信息(例如本教程)。

于 2014-04-10T05:36:12.187 回答