つまり、10個のCPUコアと20個のデータを処理する必要があります。データを並行して処理したいのですが、一度に20個だけ処理すると問題が発生するのではないかと心配しています。そこで、10個のデータを2回処理したいと思います。これを行うためのコマンドはありますか?
情報を追加する:
データはファイル形式です。それは非常に巨大で、ファイルごとに10GBに達する可能性があります。私の経験では、10を超えるプロセスを起動すると、PCは非常に遅くなり、さらに遅れることになります。そのため、プロセスをコアの数に等しい10個に制限しています。私のRAMに関しては、ファイルを処理するソフトウェアが一度にすべてをロードするわけではないので、RAMの使用量は非常に少ないと思います。そのため、10データごとにプロセスを並列化する必要があります。 。今のところ、並列実行する10個のシェルスクリプトを生成します。各シェルスクリプトにはシーケンシャルコマンドが含まれています。
GNU Parallel:
parallel my_process {} ::: files*
これは1つ実行されますmy_process file
CPUスレッドごと。
次のジョブを開始する前に、GNU Parallelで、10GのRAM空きがあることを確認するように指示できます:
parallel --memfree 10G my_process {} ::: files*
空きメモリが5Gを下回ると、GNU Parallelは最新のジョブを強制終了し、10Gの空きがあるときにジョブを再開します。
gnu parallelこれを行うことができます。 Debianではapt-get install parallel
。次に、マニュアルをお読みください。
Gnuparallelはxargs
のように機能しますが、より多くの並列プロセスを開始するかどうかを決定するのに適しています。
(make
もそれを行うことができます。)