저는 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를 사용하면 각 작업을 실행하는 데 걸리는 시간을 확인할 수 있습니다.