Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我可以例如执行:
parallel -j 200 < list0
其中“列表”有:
nice -n -20 parallel -j 100 < list2 nice -n -20 parallel -j 100 < list1
这是否可行/可能?
你通常会这样做:
parallel -j0 < joblist
然后 GNU Parallel 将启动尽可能多的工作。它通常会受到文件句柄或进程的限制。
如果您无法覆盖每个进程的文件句柄数,您通常可以通过以下方式作弊:
parallel -j10 --pipe parallel -j0 < joblist
这将启动 10 倍的工作。如果作业的运行时间少于 10 毫秒,也可以使用此方法(在这种情况下,来自 GNU Parallel 的 2-3 毫秒开销可能超过实际运行作业)。
进程的数量是有限的。在实践中,不要并行运行超过几十个进程(至少在个人计算机上;在百万美元的机器上,限制肯定更大)。
阅读fork(2)、execve(2)、setrlimit(2)手册页,了解它们何时以及如何失败。
在达到失败的极限之前fork,您将达到一个阈值,在该阈值中,执行更多并行进程会减慢整个计算速度,因为内核中的调度程序将承受过大压力。
fork
如果您可以访问计算机网络(可能只有其中两台),还可以考虑MPI。如果您可以重新编码您的一些应用程序,还可以阅读有关pthreads的信息(例如本教程)。