たとえば、次のように実行できます。
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が必要です)。