目前,我有以下脚本在我创建的可重复环境中使用Unix系统上的HaploTypeCaller程序:
#!/bin/bash
#parallel call SNPs with chromosomes by GATK
for i in 1 2 3 4 5 6 7
do
for o in A B D
do
for u in _part1 _part2
do
(gatk HaplotypeCaller \
-R /storage/ppl/wentao/GATK_R_index/genome.fa \
-I GATK/MarkDuplicates/ApproachBsortedstettler.bam \
-L chr$i$o$u \
-O GATK/HaplotypeCaller/HaploSample.chr$i$o$u.raw.vcf &)
done
done
done
gatk HaplotypeCaller \
-R /storage/ppl/wentao/GATK_R_index/genome.fa \
-I GATK/MarkDuplicates/ApproachBsortedstettler.bam \
-L chrUn \
-O GATK/HaplotypeCaller/HaploSample.chrUn.raw.vcf&
如何将这段代码更改为至少部分并行?值得吗?我试图将整个脚本合并到不同的脚本中,您可以在不同的问题上看到这个脚本,这里应该这样做吗?我的表现会有很大的提高吗?
发布于 2019-07-12 05:18:03
parallel echo HaploSample.chr{1}{2}{3}.raw.vcf ::: 1 2 3 4 5 6 7 ::: A B D ::: _part1 _part2
发布于 2019-07-12 10:12:34
#!/bin/bash
#parallel call SNPs with chromosomes by GATK
gatk_a_single() {
i="$1"
o="$2"
u="$3"
gatk HaplotypeCaller \
-R /storage/ppl/wentao/GATK_R_index/genome.fa \
-I GATK/MarkDuplicates/ApproachBsortedstettler.bam \
-L chr$i$o$u \
-O GATK/HaplotypeCaller/HaploSample.chr$i$o$u.raw.vcf
}
export -f gatk_a_single
# This call does not fit the pattern of the others, so just run that in the background
gatk_a_single Un "" "" &
# Use 3 input sources: All combinations between all input sources will be generated and run
parallel gatk_a_single ::: 1 2 3 4 5 6 7 ::: A B D ::: _part1 _part2
# The parallel tasks are now complete
# Wait for the earlier backgrounded task to complete
wait
发布于 2019-07-11 23:44:06
在第一种近似下,当作业数为<=核数时,并行是有意义的。你有42个核心可用吗?如果没有,那么将所有的工作同时并举可能是没有意义的。
以下是平行工作的“天真”方式:
1)不要运行命令,编写命令:
for i in 1 2 3 4 5 6 7
do
for o in A B D
do
for u in _part1 _part2
do
echo "gatk HaplotypeCaller \
-R /storage/ppl/wentao/GATK_R_index/genome.fa \
-I GATK/MarkDuplicates/ApproachBsortedstettler.bam \
-L chr$i$o$u \
-O GATK/HaplotypeCaller/HaploSample.chr$i$o$u.raw.vcf &"
done
done > file-$i.sh
done
现在,您有7个文本文件,每个文本文件包含6个命令。通过一个接一个地运行这7个脚本,您可以在6的批处理中并行作业。如果你有足够的核心(16?),你可以一次运行两批6。
泡沫,冲洗,重复。
https://unix.stackexchange.com/questions/529702
复制相似问题