Hello all,
I was wondering if anyone knows the optimal way to assign threads for alignment and bam decompression/sorting.
I'm running some alignments and then sorting and de-duping the alignments using a single command like so:
bwa mem -t 70 ref.fasta reads_R1.fq.gz reads_R2.fq.gz \
| samblaster \
| sambamba view -S -f bam /dev/stdin \
| sambamba sort -t 70 -m 50G -o out.bam /dev/stdin
There are 72 cores on our server. The read files are large, and this command took about 6hrs to run.
I then tried it a different way, wherein instead of giving 70 threads to both the alignment and sorting, I gave 50 threads to BWA and 20 to sambamba. That second attempt shaved about 20 minutes off the run (a little over 5.5hrs). This makes me think there is something going on that I don't understand about how the threads are assigned to different processes, and that they must somehow be getting in each other's way.
I thought about running it with a bunch of different combinations (perhaps with a small subset) to see what the best distribution was, but before doing that it seemed sensible to search for the answer first. Google has not been my friend so far on this, so I though I would see if anyone here knows the optimal way to assign threads for alignment and sorting.
Thanks,
A. Koeppel
I was wondering if anyone knows the optimal way to assign threads for alignment and bam decompression/sorting.
I'm running some alignments and then sorting and de-duping the alignments using a single command like so:
bwa mem -t 70 ref.fasta reads_R1.fq.gz reads_R2.fq.gz \
| samblaster \
| sambamba view -S -f bam /dev/stdin \
| sambamba sort -t 70 -m 50G -o out.bam /dev/stdin
There are 72 cores on our server. The read files are large, and this command took about 6hrs to run.
I then tried it a different way, wherein instead of giving 70 threads to both the alignment and sorting, I gave 50 threads to BWA and 20 to sambamba. That second attempt shaved about 20 minutes off the run (a little over 5.5hrs). This makes me think there is something going on that I don't understand about how the threads are assigned to different processes, and that they must somehow be getting in each other's way.
I thought about running it with a bunch of different combinations (perhaps with a small subset) to see what the best distribution was, but before doing that it seemed sensible to search for the answer first. Google has not been my friend so far on this, so I though I would see if anyone here knows the optimal way to assign threads for alignment and sorting.
Thanks,
A. Koeppel