Gnu-Parallel

gnu 並行多執行緒管道使用很少的 CPU% 但會停止伺服器

  • September 29, 2016

我使用 gnuparallel在多個文件上並行執行管道。但是,如果指定最大值,我的程式碼會做它應該做的事情。每個作業使用的 CPU 數量(在我的情況下為 64)<5%(基於htop)。此外,任務數和 thr。(再次基於htop)穿過屋頂,最終殺死伺服器。如果我在 gnu 中只指定 30 個核心,parallel它執行良好。有誰知道如何最大化。伺服器沒電了?

我的命令是一系列不同的工具來修剪基因組讀數:

parallel --jobs 64 "echo -e '\n'{} processing 1&gt;&2 ; \
gunzip -c {} | scriptA.sh | scriptB.sh -outfmt fasta \
| java -jar scriptC.jar |bgzip \
> ${output}/tmp/{/.}.filtered.tmp.fa.gz " ::: ${input} 2&gt; ${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 來幫助您查看每個作業的執行時間。

引用自:https://unix.stackexchange.com/questions/312937