运行并行作业

时间:2014-01-07 21:52:27

标签: bash parallel-processing cluster-computing sungridengine qsub

我正在研究titan集群,它由464个HP刀片系统,两个头节点和一个虚拟化登录(提交)节点组成。每个节点有八个核心(两个四核处理器),16GB(430个)节点)或32GB(34个节点)的内存。这提供了3712个计算核心和8 TB的总RAM(内存)

任务是为每个样本文件使用2个部分,即R1,R2。因此,每个样本文件都有成对存在的R1,R2类型,它们将一起用于创建.sam文件,引用为human_g1k_v37.fasta ,软件是BWA。我正在使用for循环,但是我无法在集群上并行化,因为每次运行一个样本需要很长时间。下面的脚本用于迭代运行每对一对(作品)

sourcedir=/sourcepath/
destdir=/destinationpath/


for fname in *_R1.fastq.gz
do
base=${fname%_R1*}
bwa-0.7.5a/bwa mem -t 8 human_g1k_v37.fasta "${base}_R1.fastq.gz" "${base}_R2.fastq.gz" >   "$destdir/${base}_R1_R2.sam" 

done

由于使用for循环会将每个作业放在同一个处理器上。我尝试使用“&”但它相同的东西我相信它似乎在这种情况下不起作用。我需要所有这些进程在不同的处理器并行运行(可能是一个数组作业??) 下面的脚本不起作用(用于并行处理)

sourcedir=/sourcepath/
destdir=/destinationpath/


for fname in *_R1.fastq.gz
do
base=${fname%_R1*}
bwa-0.7.5a/bwa mem -t 8 human_g1k_v37.fasta "${base}_R1.fastq.gz" "${base}_R2.fastq.gz" >   "$destdir/${base}_R1_R2.sam" &

done
wait

有关详细信息,请参阅我之前的帖子。Looping files in bash

由于

1 个答案:

答案 0 :(得分:2)

如果只将作业提交给Grid Engine,它将自行处理并行化:

#! /bin/sh
### Your script task.sh ###
#$ -S /bin/sh

bwa-0.7.5a/bwa mem -t 8 human_g1k_v37.fasta "${1}_R1.fastq.gz" "${1}_R2.fastq.gz" > "$destdir/${1}_R1_R2.sam"

然后在你的循环中:

for fname in *_R1.fastq.gz
do
    base=${fname%_R1*}
    qsub task.sh ${base}
done