Gnu並列マルチスレッドパイプラインはCPU%をほとんど使用しませんが、サーバーの停止を引き起こします。

Gnu並列マルチスレッドパイプラインはCPU%をほとんど使用しませんが、サーバーの停止を引き起こします。

私はGnuを使ってparallel複数のファイルのパイプラインを並列に実行しています。ただし、最大値を指定した場合、私のコードは予想される操作を実行します。各ジョブは、CPUあたりのCPU数(私の場合は64個)に基づいて5%未満を使用しますhtop。また、タスクの数とタイミング。 (再びベースhtop)屋上を通過し、最終的にサーバーを殺します。 GNU でコアを 30 個しか指定しないとparallel正しく実行されます。これを最大化する方法を知っている人はいますか?サーバーの電源が切れていますか?

私のコマンドは、ゲノムの読み取りをトリミングする一連のさまざまなツールです。

parallel --jobs 64 "echo -e '\n'{} processing 1>&2 ; \
gunzip -c {} | scriptA.sh | scriptB.sh -outfmt fasta \
| java -jar scriptC.jar |bgzip \
> ${output}/tmp/{/.}.filtered.tmp.fa.gz " ::: ${input} 2> ${output}/0log_parallel_stderr.log

ベストアンサー1

Lucianoがコメントしたように、ディスクI / Oが原因である可能性が高いです。

より多くのプロセスを確保する理由は、パイプラインが少なくとも5つのプロセスを開始するためです。したがって、少なくとも64 * 5プロセスが開始されていることがわかります。そのうちのいくつかは複数のスレッドを起動するかもしれません。

パラレルディスクI / Oは予測するのが非常に困難です(参照:https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/)、いくつかの要因に依存するため、並列化に最適な作業数を話すことは実際には不可能です。

したがって、プロセスを最適化するために最大スループットが得られるまで、ジョブ数を調整します。 --joblog を使用すると、各ジョブの実行にかかる時間を確認できます。

おすすめ記事