Efficient GPU Implementation of Bioinformatics Applications
Total Page:16
File Type:pdf, Size:1020Kb
Efficient GPU implementation of bioinformatics applications Nuno Miguel Trindade Marcos Thesis to obtain the Master of Science Degree in Information Systems and Computer Engineering Supervisors: Prof. Nuno Filipe Valentim Roma Prof. Pedro Filipe Zeferino Tomás Examination Committee: Chairperson: Prof. José Carlos Martins Delgado Supervisor: Prof. Nuno Filipe Valentim Roma Member of the Committee: Prof. David Manuel Martins de Matos November 2014 Agradecimentos Em primeiro lugar, gostaria de agradecer aos Professores Nuno Roma e Pedro Tomás, meus orientado- res neste trabalho, pela vossa orientação e colaboração. Sem a vossa paciência e tolerância constante não teria sido possível terminar este trabalho. A vós um muito Obrigado. Seguidamente gostaria de agradecer aos meus colegas que me acompanharam durante o curso, em especial ao David Gaspar pela força e por todos os momentos passados, ao Jhonny Aldeia por toda a ajuda durante o curso, ao Dionisio Sousa, ao Rui Mestre e ao Artur Ferreira que me ajudaram e deram motivação para continuar em frente. Para além disso, agradecer especialmente ao meu amigo Pedro Monteiro pela ajuda com o trabalho dele e pelo constante incentivo. Gostaria também de agradecer aos meus amigos Daniela Coelho, Miguel Matos, David Dias, João Ve- lez e Pedro Chagas por todo o apoio durante este trabalho. Ao meu afilhado Tiago Carreira pelas várias insistências para acabar este trabalho e por toda a ajuda durante o mesmo. Para além deles, também gostaria de agradecer aos meus colegas da Premium Minds que sempre tiveram disponíveis para me ajudar e para assumir as coisas na minha ausência, em especial ao Márcio Nóbrega, ao André Soares, ao Renil Lacmane e ao Afonso Vilela. Por final, mas com a maior das importâncias, gostaria de agradecer aos meus pais e ao meu irmão por toda a força e motivação para que conseguisse chegar ao final deste trabalho e em especial à minha namorada Ana Daniela pela motivação na recta final deste trabalho. i Abstract Biological sequence data is becoming more accessible to researchers around the world. In particular, rich databases of protein and DNA sequence data are already made available to biologists and their size is increasing every day. However, all this obtained information needs to be processed and classified. Several bioinformatics algorithms, such as the Needleman-Wunsch and the Smith-Waterman algorithm, have been proposed for this purpose. Both consist of the execution of dynamic programming schemes which allow the usage of parallelism to achieve a better performance execution. Under this context, this thesis proposes the integration of two previously presented parallel implementations: an adaptation of the SWIPE implementation, for multi-core CPUs that exploits SIMD vectorial instructions, and an implementation of the Smith-Waterman algorithm for GPU platforms (CUDASW++ 2.0). Accordingly, the presented work offers an unified solution that tries to take advantage of all computational resources that are made available in heterogeneous platforms, composed by CPUs and GPUs, by integrating a dynamic load balancing layer. The obtained results show that the attained speedup can reach values as high as 6x, when executing in a quad-core CPU and two distinct GPUs. Keywords Bioinformatics Algorithms; Sequence Alignment; Smith-Waterman Algorithm; Heterogeneous Paral- lel Architectures; Load Balancing; CUDA. iv Resumo Hoje em dia a quantidade de informação genética disponível aos investigadores é cada vez maior. Bases de dados com informação genética estão disponíveis na internet e aumenta a cada dia que passa. De modo a ser utilizada pela Biologia, toda esta informação necessita de ser processada e classificada. Para a classificar, existem diversos algoritmos bioinformáticos, tais como o algoritmo de Needleman-Wunsch e o algoritmo de Smith-Waterman algorithm. Ambos consistem na execução de múltiplas iterações, que permitem a sua paralelização de forma a obter uma melhor performance na execução. Duas das implementações paralelas existentes são uma adaptação da implementação do Rognes SWIPE, apresentada por Pedro Monteiro, baseada numa paralelização ao nível das threads CPU e a outra a CUDASW++ 2.0, apresentada pelo Liu et. al., baseada numa paralelização ao nível das Threads e dos dados em GPUs. Considerando ambas as soluções, este trabalho propõe uma orquestração heterógenea que utilizando ambas consegue processar sequências nos cores da CPU e nas GPUs disponíveis na máquina. Para além desta implementação, é proposta uma camada adicional responsável pelo balanceamento dos dados entre os diferentes workers. Os resultados mostram que a execução pode atingir um speedup superir a 6x quando executada com quatro cores CPU e duas GPUs distintas. Palavras Chave Algoritmos Bioinformáticos; Alinhamento de sequências; Algoritmo de Smith-Waterman; Arquitectu- ras Paralelas Heterógeneas; Módulo de Load Balancing; CUDA. v Contents 1 Introduction 1 1.1 Motivation . .2 1.2 Objectives . .3 1.3 Document Outline . .3 2 Parallel Architectures 5 2.1 Flynn’s Taxonomy . .6 2.2 CPU - Central Processing Unit . .7 2.3 GPU - Graphics Processing Unit . .7 2.4 CPU vs GPU . 12 2.5 Hybrid Solution: Accelerated Processing Unit . 14 2.6 CUDA - Compute Unified Device Architecture . 14 2.6.1 Definition and Architecture . 14 2.6.2 Programming Model . 15 2.6.3 Execution Model . 16 2.6.4 Limitations . 17 2.7 Open Computing Language . 17 3 Sequence Alignment in Bioinformatics 19 3.1 Alignment Scoring Model . 20 3.2 Optimal Alignment Algorithms . 21 3.2.1 Needleman-Wunsch Algorithm . 22 3.2.2 Smith-Waterman Algorithm . 22 3.3 Heuristic Sub-Optimal Algorithms . 24 3.3.1 FASTA . 24 3.3.2 BLAST - Basic Local Alignment Search Tool . 25 3.4 Parallel Implementations . 26 3.4.1 CPU Implementations . 27 3.4.1.A Wozniak . 27 3.4.1.B Farrar . 27 3.4.1.C SWIPE (Rognes) . 28 vii 3.4.1.D Pedro Monteiro’s Implementation . 29 3.4.2 GPU Implementations . 31 3.4.2.A Manavski’s Implementation . 31 3.4.2.B CUDASW++ . 32 3.4.3 Discussion on the Presented implementations . 35 4 Heterogeneous Parallel Alignment MultiSW 38 4.1 Introduction . 39 4.2 Architecture . 40 4.2.1 CPU Worker . 41 4.2.1.A CPU Wrapper . 42 4.2.2 GPU Worker . 42 4.2.2.A Asynchronous Transfers . 43 4.2.2.B CUDA Streams in Kernel Execution . 43 4.2.2.C Loading Sequences with Execution . 43 4.3 Application Execution Flow . 44 4.4 Implementation Details and Optimizations . 44 4.4.1 Database File Format . 44 4.4.2 Database Sequences Pre-Loading . 45 4.4.3 Data Structures . 45 4.5 Dynamic Load-balancing Layer . 47 4.6 Conclusion . 49 5 Experimental Results 50 5.1 Experimental Setup . 51 5.1.1 Experimental Dataset . 51 5.2 Evaluating Metrics . 52 5.3 Results . 52 5.3.1 Scenario A - Single CPU core . 53 5.3.2 Scenario B - Four CPU cores . 53 5.3.3 Scenario C - Single GPU - GeForce GTX 780 Ti . 54 5.3.4 Scenario D - Single GPU - GeForce GTX 660 Ti . 55 5.3.5 Scenario E - Four CPU cores + Single GPU Execution . 55 5.3.6 Scenario F - Four CPU cores + Double GPUs Execution . 57 5.4 Summary . 58 6 Conclusions and Future Work 59 6.1 Conclusions . 60 6.2 Future Work . 60 Bibliography 61 viii List of Figures 2.1 NVIDIA GK110 Kepler Architecture . .9 2.2 Coalesced memory access . 10 2.3 GPU Memory organization . 11 2.4 CPU and GPU architectures [1]. 12 2.5 Graphics Processing Unit (GPU) vs Central Processing Unit (CPU) GFLOPS comparation [1] ................................................. 13 2.6 Fermi Architecture . 15 2.7 CUDA Kernel definition and invocation example [1] . 16 2.8 Execution Flows Representation [1] . 17 3.1 Pairwise Alignment Example . 20 3.2 Needleman-Wunsch alignment matrix example . 22 3.3 Smith-Waterman alignment matrix example . 23 3.4 FASTA algorithm step 1. 24 3.5 FASTA algorithm step 2. 25 3.6 FASTA algorithm step 3. 25 3.7 FASTA algorithm step 4. ..