我使用 gnuparallel
在多個文件上並行運行管道。但是,如果指定最大值,我的程式碼會執行它應該執行的操作。每個作業使用每個 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 來幫助您查看每個作業運行的時間。