GNU Parallelはより多くの並列プロセスを実行できますか?

GNU Parallelはより多くの並列プロセスを実行できますか?

たとえば、次のように実行できます。

parallel -j 200 < list0

「リスト」には以下が含まれます。

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

これは可能ですか/可能ですか?

ベストアンサー1

これは可能であるだけでなく可能です。場合によってはこれが推奨されます。

GNU Parallelは、ジョブの実行に約10ミリ秒かかります。したがって、8つのコアがあり、70ミリ秒未満のタスクを実行している場合は、1つのコアを100%使用するGNU Parallelを表示できますが、他のコアにはアイドル時間があります。したがって、すべてのコアを100%使用するわけではありません。

-j0推奨されるもう1つの状況は、実際に実行できるよりも多くのタスクを実行したい場合です。現在、-j0特定のシステム制限を調整しない限り、約250のジョブが並列に実行されます。ジョブがCPUとディスクI / Oによって制限されない場合は、250を超えるジョブを実行するのが妥当です。たとえば、ネットワーク待ち時間が制限要因であるとします。

ただし、2つのリストを使用することは、タスクを分割するための推奨方法ではありません。推奨される方法は、GNU Parallel を使用して GNU Parallel を呼び出すことです。

cat list0 | parallel -j20 --pipe parallel -j100

これにより、2000のジョブが並列に実行されます。より多くの調整が必要です-j。各コアに1つ以上のGNU並列プロセスがあるように、コアの数は外部(20)以上であることをお勧めします。

この技術を使用すると、20,000のタスクを並列に開始することに問題はありません。 32,000個のプロセスを超えると、問題が発生し始めます。

初めて実行すると:

echo 4194304 | sudo tee /proc/sys/kernel/pid_max

私は実行できます:

seq 1000000 2000000000 |
  parallel -j16 --roundrobin --pipe parallel -j0 --pipe parallel -j0 sleep

100万のプロセスを並列に実行します(私のシステムには300G RAMが必要です)。

おすすめ記事