DecGPU (Distributed Error correction on GPUs) is a parallel and distributed
error correction algorithm for short reads produced by next-generation sequencing technology.
It is implemented using CUDA C++ and MPI, running on a CPU or GPU cluster.
The parallel and distributed feature of this algorithm make it feasible and flexible to overcome
challenges from computational overhead and memory constraint for large-scale
high-throughput short read datasets. This algorithm has been tested on a
Telsa S1070 cluster with OpenMPI and MVAPICH2 libraries.
This software is developed by Liu Yongchao, School of Computer Engineering,
Nanyang Technological University. If any comments or problems,
please directly contact Liu Yongchao using either of the following email
addresses: liuy0039@ntu.edu.sg; yongchao.liu@live.com; nkcslyc@hotmail.com.
DecGPU is an open-source software, complying with General Public
Licence (GPL) version 3.0. DecGPU is distributed WITHOUT WARRANTY, express or
implied. The authors accept NO LEGAL LIABILITY OR RESPONSIBILITY for
loss due to reliance on the program. To use the software, please cite the following paper:
/*****************************************************************************************
Yongchao Liu, Bertil Schmidt, Douglas L. Maskell,
"DecGPU: distributed error correction on massively parallel graphics processing units using CUDA and MPI".
BMC Bioinformatics, 2011, 12:85
******************************************************************************************/
Notes:
Four files will be generated in the "directory": decgpu-ErrorFreeReads, decgpu-FixedErrorFreeReads, decgpu-TrimmedErrorFreeRead
and decgpu-DiscardedReads. These four files should be combined together to form the output of DecGPU, which are used for the following
analysis. The short reads stored in these four files have different meaningness:
(a) decgpu-ErrorFreeReads: the short reads in this file are identified as correct in the first "Filtering error-free reads" stage;
(b) decgpu-FixedErrorFreeReads: the short reads in this file are identified as correct after one or more fixing iteations.
(c) decgpu-TrimmedErrorFreeRead: the short reads in this file are still erroneous after one or more fixing iterations. However,
after trimming a small number of bases (typically <= 4 bases), the trimmed reads are identified as correct.
(d) decgpu-DiscardedReads: the short reads in this file are still errornous after one or more fixing iterations. However,
they do not satisfy the trimming conditions.
Installation:
(1)A "configure" script has been provided. Users can generate a Makefile for either the CPU-based
or the GPU-based version. The following are some typical example usages
a)For CUDA-enabled GPUs, you can simply run configure with the architecture capablity specified.
./configure --with-cuda=sm_13 --with-mvapich=~/MVAPICH/ --with-openfabric=/opt/ofed/lib64
./configure --with-cuda=sm_13 --with-cudasdkdir=~/NVIDIA_GPU_Computing_SDK --with-mvapich=~/MVAPICH/ --with-openfabric=/opt/ofed/lib64/
./configure --with-cuda=sm_13 --with-cudasdkdir=~/NVIDIA_GPU_Computing_SDK --with-openmpi=~/OPENMPI/
./configure --prefix=~/test --with-cuda=sm_13 --with-cudasdkdir=~/NVIDIA_GPU_Computing_SDK --with-mpich=/opt/mpich2/gnu
b) For CPUs, you must not specify the option "--with-cuda".
./configure --with-mpich=/opt/mpich2/gnu/
./configure --prefix=~/test --with-openmpi=~/OPENMPI/
./configure --with-mvapich=~/MVAPICH/
./configure --with-mvapich=~/MVAPICH/ --with-openfabric=/opt/ofed/lib64
c)the option "--with-seqname" can be specified to use the same sequence name as the original sequences when output.
./configure --with-mpich=/opt/mpich2/gnu/ --with-seqname
./configure --with-cuda=sm_13 --with-mvapich=~/MVAPICH/ --with-openfabric=/opt/ofed/lib64 --with-seqname
d) After running "configure"
make [&& make install]
(2)DecGPU works with FASTA and FASTQ file formats. For paired-end reads, it assumes
that each read is next to its mate read. In other words,if the reads are indexed from 0, then
reads 0 and 1 are paired, 2 and 3 are paired, 4 and 5 etc. If you want to keep the sequence pairs
are outputed together (in pairs), please specify the "-paired" option when performing error correction,
otherwise, the sequence order will be disturbed.
If you have paired reads stored in two different FASTA (FASTQ) files but in corresponding order,
the bundled Perl script shuffleSequences_fasta.pl and shuffleSequences_fastq.pl
(we use the scripts provided in Velvet) will merge the two files into one as approximate. To use it, type:
> ./shuffleSequences_fasta.pl reads_1.fa reads_2.fa output.fa
(3) when running on a GPU cluster, you must make sure that the number of MPI processes running on
a node must not be more than the number of available GPUs. This constraint can be ensured using a
hostfile. An example of hostfile is as follows, where each node contains two GPUs.
compute-0-0 slots=2 max-slots=2
compute-0-1 slots=2 max-slots=2
compute-0-2 slots=2 max-slots=2
compute-0-3 slots=2 max-slots=2
(4)running the program using mpirun command (using OpenMPI for this case)
>run "./decgpu -help" or "./decgpu -?" to get command line options
>mpirun -hostfile gpuhostfile -np 8 ./decgpu directory -fastq readsIn.fastq
>mpirun -hostfile cpuhostfile -np 8 ./decgpu directory -fastq readsIn.fastq -numthreads 4
>./decgpu directory -fastq readsIn.fastq -numthreads 4
>./decgpu directory -fasta readsIn.fasta -k 29 -minmulti 10 -numthreads 4
>./decgpu directory -fasta readsIn.fasta -k 29 -minmulti 10 -maxtrim 0 -numthreads 4
When you specify the "-minmulti" value,we recommend specifying the "-minvotes" to be at least half of "-minmulti".