Gnu-Parallel
gnu 並行多執行緒管道使用很少的 CPU% 但會停止伺服器
我使用 gnu
parallel
在多個文件上並行執行管道。但是,如果指定最大值,我的程式碼會做它應該做的事情。每個作業使用的 CPU 數量(在我的情況下為 64)<5%(基於htop
)。此外,任務數和 thr。(再次基於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
正如 Luciano 在評論中所說,磁碟 I/O 很可能是原因。
獲得更多程序的原因是您的管道將啟動至少 5 個程序。因此,您應該會看到至少 64*5 個程序正在啟動。其中一些也可能啟動多個執行緒。
並行磁碟 I/O 非常不可預測(請參閱https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/),實際上不可能說有多少並行作業是最優的,因為它取決於很多因素。
因此,為了優化您的流程,我會調整作業數量,直到您獲得最大的吞吐量。您可以使用 –joblog 來幫助您查看每個作業的執行時間。