Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 88 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
88
Dung lượng
1,79 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA LƯU HỮU QUYẾT TĂNG TỐC GIẢI THUẬT BWA-MEM TRÊN NỀN TẢNG PHẦN CỨNG ACCELERATING THE BWA-MEM ALGORITHM ON A HARDWARE PLATFORM CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH MÃ SỐ: 60.48.01 LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 06 năm 2018 ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA LƯU HỮU QUYẾT TĂNG TỐC GIẢI THUẬT BWA-MEM TRÊN NỀN TẢNG PHẦN CỨNG CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH MÃ SỐ: 60.48.01 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC TS PHẠM QUỐC CƯỜNG TP HỒ CHÍ MINH, tháng 06 năm 2018 CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG - HCM Chữ ký Cán hướng dẫn khoa học : TS Phạm Quốc Cường Cán chấm nhận xét : TS Nguyễn Trần Hữu Nguyên Cán chấm nhận xét : PGS TS Phan Công Vinh Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày 18 tháng năm 2018 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị Hội đồng chấm bảo vệ luận văn thạc sĩ) TS Lê Thành Sách TS Lê Trọng Nhân TS Nguyễn Trần Hữu Nguyên PGS TS Phan Công Vinh TS Lê Hồng Trang Xác nhận Chủ tịch Hội đồng đánh giá LV Trưởng Khoa quản lý chuyên ngành sau luận văn sửa chữa (nếu có) CHỦ TỊCH HỘI ĐỒNG TS Lê Thành Sách TRƯỞNG KHOA KH&KTMT ĐẠI HỌC QUỐC GIA TP.HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC BÁCH KHOA Độc lập - Tự - Hạnh phúc NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Lưu Hữu Quyết MSHV: 1570225 Ngày, tháng, năm sinh: 15/10/1991 Nơi sinh: Bình Định Ngành: Khoa học máy tính Mã số: 60.48.01 I TÊN ĐỀ TÀI: Tăng tốc giải thuật BWA-MEM tảng phần cứng II NHIỆM VỤ VÀ NỘI DUNG: Hiện thực tăng tốc giải thuật BWAMEM tảng phần cứng III NGÀY GIAO NHIỆM VỤ: 10-07-2017 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 18-7-2018 V CÁN BỘ HƯỚNG DẪN: TS Phạm Quốc Cường Tp HCM, ngày tháng năm 20 CÁN BỘ HƯỚNG DẪN TRƯỞNG KHOA KH&KTMT (Họ tên chữ ký) (Họ tên chữ ký) TS Phạm Quốc Cường LỜI CẢM ƠN Trong suốt thời gian học tập nghiên cứu trường khóa học thạc sĩ vừa qua, thân nhận nhiều tri thức, khoa học từ người Thầy, Cô Trường Đại học Bách Khoa Tp.HCM, đặc biệt Thầy, Cô Khoa Khoa học Kĩ thuật máy tính Khoa Khoa Học Kĩ Thuật Máy Tính tạo điều kiện thuận lợi cho Tơi q trình tham gia thực nghiệm, làm việc tạo môi trường nghiên cứu chuyên nghiệp phòng Lab 201C5 Cùng với nỗ lực thân, Tơi hồn thành luận văn thạc sĩ Từ kết đạt này, tơi xin tỏ lòng biết ơn sâu sắc tới thầy TS Phạm Quốc Cường hướng dẫn suốt trình thực đề tài Cảm ơn em Phạm Duy Vương giúp đỡ tơi việc tìm liệu cách lập trình hiệu trình làm đề tài Tôi xin chân thành cảm ơn gia đình đồng nghiệp tơi Họ người đồng hành thực suốt thời gian thực đề tài Tp.HCM, tháng 06 năm 2018 Lưu Hữu Quyết i TÓM TẮT LUẬN VĂN THẠC SĨ Next-Generation Sequencing (NGS) công nghệ trở nên phổ biến việc giải mã biến thể gen Sự hàng chuỗi thô gen tham khảo công đoạn quan trọng phân tích liệu NGS BWA-MEM (Burrows-Wheeler Aligner - Maximal Exact Match) giải thuật so trùng hàng đạt hiệu suất cao ứng dụng rộng rãi lĩnh vực Sinh-Tin học (Bio-informatic) Trong năm gần đây, việc ứng dụng xử lý song song tảng GPU (Graphics Processing Unit), nhiều ứng dụng khoa học xử lí tăng tốc cách đáng kể mang lại hiệu suất cao Trong báo cáo này, cách tìm hiểu giải thuật BWA-MEM, ngôn ngữ CUDA (Compute Unified Device Architecture) kiến trúc NVIDIA 940M, đề xuất phương án cải tiến thực giải thuật BWA-MEM nhằm tăng tốc giải thuật giảm thời gian thực thi giải thuật đảm bảo kết xác thực gốc Cuối cùng, mã nguồn BWA-MEM đánh giá so sánh với hy vọng đạt tốc độ nhanh mã nguồn nguồn gốc ii ABSTRACT Next Generation Sequencing (NGS) techniques generated amount of data, which is increasing at an explosive rate Many researchers and clinicians were attracted to contribute into this area There are many tasks in bioinformatics, which sequence alignment is an important task The sequence alignment is a matching between two sequences, which the one is read sequence and the other is reference sequence Read sequence is as a query sequence to a sequence database (reference sequence) The string matching in bioinformatics is not quite the same with string matching in computer science because of there are many possible gaped alignments in two short alignment BWA-MEM is the latest of BWA, which is a software package for mapping low-divergent sequences against a large reference genome, such as the human genome BWA-MEM is generally recommended for high-quality queries as it is faster and more accurate I wanted to study whether a GPU could be used to create a faster BWA-MEM, because a GPU is a great tool to speed up algorithms through massive parallelism iii LỜI CAM ĐOAN Tôi xin cam đoan rằng, cơng trình nghiên cứu riêng hướng dẫn khoa học TS Phạm Quốc Cường Những số liệu, bảng biểu, hình ảnh quan sát, đánh giá, nhận xét tác giả khác trích dẫn nguồn mục "TÀI LIỆU THAM KHẢO" Tồn nội dung tìm hiểu, nghiên cứu kết thực nghiệm cơng trình đạt hồn tồn trung thực, khơng gian lận phóng đại Nếu có gian lận nào, tơi xin hồn tồn chịu trách nhiệm cơng trình nghiên cứu Tp.HCM, tháng 06 năm 2018 Lưu Hữu Quyết iv Mục lục LỜI CẢM ƠN i TÓM TẮT LUẬN VĂN THẠC SĨ ii ABSTRACT iii LỜI CAM ĐOAN iv DANH SÁCH CÁC TỪ VIẾT TẮT viii DANH SÁCH CÁC HÌNH ẢNH ix DANH SÁCH CÁC BẢNG BIỂU xi GIỚI THIỆU ĐỀ TÀI 1.1 Tổng quan vấn đề 1.2 Động lực nghiên cứu 1.3 Đóng góp đề tài 1.4 Cấu trúc luận văn KIẾN THỨC NỀN TẢNG 2.1 Kiến Thức Nền Tảng Được Sử Dụng Trong BWA-MEM 2.1.1 Burrows-Wheeler Transform (BWT) 2.1.2 Chuyển đổi chuỗi gốc ban đầu: BWT-reversing 2.1.3 FM-Index (Full-text index in Minute space) 2.1.4 Smith-Waterman (SW) 12 GPU & CUDA 17 2.2.1 Graphics Processing Unit - GPU: 17 2.2.2 Compute Unified Device Architecture - CUDA: 18 2.2 BURROWS-WHEELER ALIGNER (BWA-MEM) 21 3.1 Cấu Trúc Chương Trình BWA-MEM 22 3.1.1 23 SMEM Generation v 3.2 3.1.2 Seed Extension 25 3.1.3 Output Generation 29 Quá trình thực thi chương trình BWA-MEM 29 3.2.1 Dữ liệu đầu vào BWA-MEM 29 3.2.2 Dịng chảy chương trình giải thuật BWA-MEM CPU 31 CÁC CƠNG TRÌNH LIÊN QUAN 33 4.1 Tăng tốc với FPGA 33 4.2 Tăng Tốc với GPU 38 4.3 Tăng tốc với tính toán song song (Parallel Computing) 41 4.4 Thiết bị thử nghiệm 42 4.5 Kết 43 THIẾT KẾ HỆ THỐNG 44 5.1 Hệ thống tổng quan 44 5.2 Cấu trúc liệu nhiều lớp 46 HIỆN THỰC HỆ THỐNG 49 6.1 49 Hiện thực Smith-Waterman kernel GPU KẾT QUẢ THỰC NGHIỆM 54 7.1 Môi trường thực nghiệm 54 7.1.1 NVIDIA GeForce 940M 54 7.1.2 Intel Core i3-5010U CPU @ 2.10GHz 55 7.1.3 Dữ liệu thực nghiệm 56 Cách thức thực nghiệm 56 7.2 7.2.1 7.2.2 7.3 Chọn liệu đầu vào cho BWA-MEM với SmithWaterman Kernel 56 Cách đánh giá kết thực nghiệm 57 So sánh thời gian thực thi BWA-MEM CPU CPU kết hợp GPU 7.4 60 So sánh thời gian thực thi Smith-Waterman kernel CPU GPU vi 61 Hình 7.4: if/else áp dụng Warp khác Yếu tố giới hạn độ trễ định bởi: • Độ lấp đầy Multiprocessor lý thuyết (Theory Occupancy) thương số Warp mà Kernel mở số Warp tối đa MP chứa Số Warp mà Kernel mở bị giới hạn cận số ghi Thread sử dụng số dung lượng nhớ chia sẻ Block sử dụng Trong thực tế, Achieved Occupancy tính tốn theo cơng thức khác • Nếu Kernel mở q Block hiệu suất khai thác tài ngun GPU khơng cao có MP khơng phân cơng Block Bên cạnh đó, việc chuyển đổi tảng thực thi từ CPU sang GPU địi hỏi chi phí thực thi như: • Khởi tạo hủy vùng liệu GPU • Khởi tạo giá trị ban đầu cho vùng liệu GPU • Di chuyển liệu CPU GPU (host device) Nếu liệu đầu vào cố định ta cấp phát lần tái sử dụng cách hợp lí Nhưng liệu đầu vào không cố định, dẫn đến việc trình khởi tạo lặp lặp lại nhiều lần ảnh hưởng lớn đến thời gian thực thi chương trình Mặc dù DMA hỗ trợ chuyển liệu từ CPU sang GPU (host sang device) nhằm tăng tốc tối đa hiệu tiết kiệm thời gian 59 chuyển liệu việc gọi q trình thơng qua API (Application Programming Interface) tốn nhiều thời gian cho trình Mặc khác số lượng khối (block), threads (luồng) khối chiều (dim) ảnh hưởng đáng kể đến trình khởi tạo kernel để chạy GPU, thông số lớn số lần gọi nhiều chương trình thời để khởi tạo lớn Đồng nghĩ với việc tổng thời gian thực thi chương trình tăng Do đó, "nút thắt cổ chai" (bottleneck) cần phải cân nhắc giải cách hiệu 7.3 So sánh thời gian thực thi BWA-MEM CPU CPU kết hợp GPU Sau kết so sánh thời gian thực thi chương trình BWA-MEM CPU chương trình BWA-MEM thực thi CPU kết hợp với GPU Dữ liệu đầu vào chuỗi gen tham khảo có độ lớn 3.3GBytes, chuỗi gen thơ có độ dài từ 100bp đến 400bp Hình 7.5: So sánh thời gian thực thi BWA-MEM với Smith-Waterman Kernel BWA-MEM phiên gốc, CPU: Thread 60 7.4 So sánh thời gian thực thi Smith-Waterman kernel CPU GPU Hình 7.6 thể so sánh thời gian thực thi Smith-Waterman kernel GPU CPU Hình 7.6: So sánh thời gian thực thi Smith-Waterman Kernel CPU GPU, CPU: Thread 7.5 Đánh giá kết 7.5.1 Toàn chương trình BWA-MEM Dựa vào mơ hình thiết kế tăng tốc giải thuật Chương 5, nhận thấy trình truyền nhận liệu CPU GPU vơ tình tạo bottleneck q trình truyền nhận liệu trình khởi tạo ban đầu cho GPU Để kiểm chứng nhận định trên, sử dụng NVIDIA Visual Profiler thu thập thông tin phân tích kết đạt Hình 7.7 hiển thị kết phân tích API sử dụng cho GPU chương trình BWA-MEM với liệu đầu vào 100bp Như ta thấy Hình 7.7, hàm cudaMalloc gọi 27393 lần, thời gian tối thiểu hồn thành 6.1200µs, thời gian tối đa để hồn thành 222.66ms, tính trung bình lại khoảng 18.570µs, tổng thời gian thực thi chương 61 Hình 7.7: Kết phân tích q trình gọi Runtime API CUDA nvprof trình 508.71ms chiếm khoảng 28.26% tổng thời gian gọi hàm Runtime API Tương tự, ta có kết tổng hợp tương ứng với hàm cịn lại Nếu ta tính tổng lại tất thời gian kết tương đối lớn (khoảng 2s đến 3s) so với toàn chương trình thực thi 5s (đối với 100bp) Mặt khác, q trình thực tính tốn ma trận Smith-Waterman phụ thuộc vào điểm (score) mà q trình tính tốn trước trả về, vấn đề dẫn đến phụ thuộc liệu Cho nên dẫn đến mơ hình chưa tối ưu hóa q trình pipeline CPU GPU, điều tạo nên lỗ hổng thời gian CPU chờ liệu từ GPU Nếu trình thực GPU tương đối tốt thời gian chờ giảm xuống đáng kể, nhiên vấn đề ảnh hưởng đến thời gian đạt sau thực thi chương trình Nếu liệu lớn số lần chờ nhiều dẫn đến kết cho thời gian cao 7.5.2 Smith-Waterman kernel Với tốc độ xử lí trung bình 2.1Ghz, khoảng gấp đơi so với GPU 940M (1 GHz), GPU lại có lợi xử lí tính tốn song song so với CPU Điều có lợi việc sử dụng GPU cho Dynamic Programming (DP) Tuy nhiên, kết thử nghiệm thể Hình 7.6 lại khơng mang lại kết mong đợi Dựa vào kết đạt từ NVIDIA Visual Profiler mà chúng tơi dùng để phân tích hiệu suất kernel thực thi GPU Đây nguyên nhân gây hiệu suất thấp kernel: 62 • Chỉ số đọc nhớ toàn cục (Global Memory Load Efficiency) đạt trung bình 57.6% (kernel sử dụng 2.1% tổng dung lượng nhớ) • Chỉ số ghi nhớ toàn cục (Global Memory Store Efficiency) đạt trung bình 12.5% • Chỉ số chia sẻ nhớ (Shared Memory Efficiency) đạt trung bình 29.2% • Kernel có nhiều câu lệnh rẽ nhánh, dẫn đến Warp Execution Efficiency thấp: trung bình 39.7% • Độ lấp đầy Multiprocessor thấp (3.4%) Kernel sử dụng tối đa Block với 1024 Thread Qua số trên, ta thấy việc sử dụng tài nguyên GPU chưa hiệu để tối ưu q trình tăng tốc tính tốn Smith-Waterman Để tìm hiểu kĩ ngun nhân hơn, chúng tơi phân tích độ dài rộng liệu đầu vào, hay nói kích thước ma trận Smith-Waterman Ví dụ chúng tơi kiểm tra kích thước ma trận Smith-Waterman với liệu đầu vào 100bp Kết cho không cố định chiều dài chiều rộng ma trận Trường hợp xấu ma trận có kích thước (hàng x cột) = (76 x 1), trường hợp ma trận cần tính tương đương với mảng chiều CPU khoảng 3µs để hồn thành tính tốn, GPU cần 4µs hồn thành (do phụ thuộc liệu Thread trình chờ Thread đồng với nhau) Cho nên liệu đầu vào ảnh hưởng nhiều đến thời gian thực thi kernel, kĩ lập trình tối ưu ma trận Smith-Waterman tảng GPU 63 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 8.1 Kết luận Trong đề tài này, chuyển đổi trình thực thi ma trận SmithWaterman thực thi CPU sang thực thi GPU nhằm tăng tốc giải thuật BWA-MEM Mặc dù BWA-MEM đánh giá có tiềm song song cao nhiên, thực tăng tốc BWA-MEM, cần phải cẩn thận nắm mơ hình lập trình kĩ lập trình CUDA Đây vấn đề gặp phải đề tài Giới hạn đề tài: Tốc độ thực thi kernel GPU chậm so với CPU Độ dài chuỗi gen giới hạn 400bp Đề tài tập trung vào thực tính tốn ma trận Smith-Waterman 8.2 Hướng phát triển Với kết đạt được, đề tài mở nhiều hướng phát triển tương lai Sau đây, liệt kê số điểm cần cải thiện hướng phát triển cho việc tăng tốc giải thuật BWA-MEM dựa kết đạt đề tài này: 64 Cải thiện Smith-Waterman kernel thông qua vụ đọc, ghi nhớ giảm thiểu nhánh phân kỳ Cải thiện thực kernel với độ dài gen khác Cải tiến quán trình pipeline để giảm thời gian chờ CPU GPU Kết hợp tăng tốc SMEM để đạt hiệu suất cao cho giải thuật BWAMEM Kết hợp tăng tốc Output Generation để đạt hiệu suất cao cho giải thuật BWA-MEM 65 Tài liệu tham khảo [1] ncbi.nlm.nih.gov, “National center for biotechnology information,” https://www.ncbi.nlm.nih.gov/, 2017 [2] J Quinlan, Y Idaghdour, J.-P Goulet, E Gbeha, T de Malliard, V Bruat, J.-C Grenier, S Gomez, A Sanni, M C Rahimy, and P Awadalla, “Genomic architecture of sickle cell disease in west african children,” in Front Genet., 2014 [3] M News, “Biologists’ new peptide could fight many cancers,” http:// news.mit.edu/2018/peptide-could-fight-many-cancers-0115, 2018 [4] W contributors, “Genetics,” https://en.wikipedia.org/wiki/Genetics [5] H Li, “Aligning sequence reads, clone sequences and assembly contigs with bwa-mem,” arXiv preprint arXiv:1303.3997, 2013 [6] B Langmead and S Salzberg, “Fast gapped-read alignment with bowtie 2,” Nature Reviews Clinical Oncology, vol 9, pp 357–359, 2012 [7] Y Liu and B Schmidt, “Long read alignment based on maximal exact match seeds,” in Bioinformatics, 2012 [8] S Marco-Sola, M Sammeth, R Guigó, and P Ribeca, “The gem mapper: fast, accurate and versatile alignment by filtration,” Nature methods, vol 9, no 12, p 1185, 2012 [9] S Misra, A Agrawal, W keng Liao, and A N Choudhary, “Anatomy of a hash-based long read sequence mapping algorithm for next generation dna sequencing,” Bioinformatics, vol 27 2, pp 189–95, 2011 [10] B Kehr, D Weese, and K Reinert, “Stellar: fast and exact local alignments,” BMC Bioinformatics, vol 12, no 9, p S15, 2011 [Online] Available: https://doi.org/10.1186/1471-2105-12-S9-S15 [11] “Burrows-wheeler transform and fm index.” [Online] Available: https://www.cs.jhu.edu/~langmea/resources/lecture_notes/bwt_ and_fm_index.pdf [12] P Ferragina, G Manzini, V Măakinen, and G Navarro, An alphabetfriendly fm-index,” in String Processing and Information Retrieval Springer, 2004, pp 228–228 66 [13] P Ferragina and G Manzini, “Opportunistic data structures with applications,” in Foundations of Computer Science, 2000 Proceedings 41st Annual Symposium on IEEE, 2000, pp 390–398 [14] T F Smith and M S Waterman, “Identification of common molecular subsequences,” Journal of molecular biology, vol 147, no 1, pp 195– 197, 1981 [15] W contributors, “Smith–waterman algorithm — wikipedia, the free encyclopedia,” 2017, [Online; accessed 01-December-2017] [Online] Available: https://en.wikipedia.org/w/index.php?title=Smith% E2%80%93Waterman_algorithm&oldid=812335646 [16] H Tom’s, “Office 2010 to make itself faster with your gpu,” https: //www.tomshardware.com/news/office-2010-word-powerpoint-gpu, 10447.html, 2010 [17] K B Ernst Joachim Houtgast, Vlad Mihai Sima and Z Al-Ars, “An fpga-based systolic array to accelerate the bwa-mem genomic mapping algorithm,” in Embedded Computer Systems: Architectures, Modeling, and Simulation (SAMOS), 2015 International Conference on IEEE, 2015, pp 221–227 [18] H Li, “Exploring single-sample snp and indel calling with wholegenome de novo assembly,” Bioinformatics, vol 28, no 14, pp 1838– 1844, 2012 [19] M Burrows and D J Wheeler, “A block-sorting lossless data compression algorithm,” 1994 [20] W.-K Sung, Algorithms in bioinformatics: A practical introduction CRC Press, 2009 [21] K B Ernst Joachim Houtgast, Vlad-Mihai Sima and Z Al-Ars, “An efficient gpu-accelerated implementation of genomic short read mapping with bwamem,” ACM SIGARCH Computer Architecture News, vol 44, no 4, pp 38–43, 2017 [22] A W T F J R N H G M G A R D Heng Li, Bob Handsaker, “The sequence alignment/map format and samtools,” Bioinformatics, vol 25, no 16, pp 2078–2079, 2009 [23] [Online] Available: https://github.com/lh3/bwa [24] [Online] Available: http://bio-bwa.sourceforge.net/bwa.shtml [25] W contributors, “Systolic array,” 2018, [Online; accessed 01-June2018] [Online] Available: https://en.wikipedia.org/wiki/Systolic_array 67 [26] E H K B N Ahmed, V Sima and Z Al-Ars, “Heterogeneous hardware/software acceleration of the bwa-mem dna alignment algorithm,” in Proceedings of the 2015 IEEE/ACM International Conference on Computer-Aided Design, ICCAD IEEE, 2015, pp 240–246 [27] J L Yu-Ting Chen, Jason Cong and P Wei, “A novel high-throughput acceleration engine for read alignment,” in 2015 IEEE 23rd Annual International Symposium on Field-Programmable Custom Computing Machines IEEE, 2015 [28] K B Ernst Joachim Houtgast, Vlad-Mihai Sima and Z Al-Ars, “Gpuaccelerated bwa-mem genomic mapping algorithm using adaptive load balancing,” Architecture of Computing Systems-ARCS, pp 130–142, 2016 [29] R T a A.-A Nagarajan Kathiresan, “Performance improvement of bwa mem algorithm using data-parallel with concurrent parallelization,” in IEEE- 2014 International Conference on Parallel, Distributed and Grid Computing (PDGC) IEEE, 2014 [30] “Openmp parallelization.” [Online] Available: www.openmp.org [31] zstephens, https://github.com/zstephens/neat-genreads [32] D Guide, “Cuda c programming guide,” NVIDIA, July, 2013 68 LÝ LỊCH TRÍCH NGANG Họ tên: Lưu Hữu Quyết MSHV: 1570225 Ngày, tháng, năm sinh: 15 - 10 - 1991 Nơi sinh: Bình Định Địa liên lạc: 10 Bạch Đằng, Phường 2, Quận Tân Bình, TP Hồ Chí Minh Q TRÌNH ĐÀO TẠO Khóa đào tạo: 2009 - 2013 Bằng cấp: Cử Nhân ĐTVT Loại hình đào tạo: Chính quy Trường: Đại học Khoa Học Tự Nhiên TP.HCM Q TRÌNH CƠNG TÁC • Từ Tháng 10/2015 đến nay: Kĩ sư lập trình nhúng Cơng Ty TNHH Terralogic Inc • Từ Tháng 11/2014 đến 9/2015: Kĩ sư lập trình nhúng FPT Software Hồ Chí Minh • Từ Tháng9/2013 đến 10/2014: Kĩ sư thiết kế phần cứng Công Ty TNHH Thiết Kế Renesas Việt Nam 69 Phụ lục A Mã nguồn CUDA số phân khúc quan trọng Listing A.1: Cấu trúc liệu nhiều lớp sử dụng BWA-MEM /************ * Chaining * ************/ typedef struct { int64_t rbeg; int32_t qbeg, len; int score; } mem_seed_t; typedef struct { int n, m, first, rid; uint32_t w:29, kept:2, is_alt:1; float frac_rep; int64_t pos; mem_seed_t *seeds; } mem_chain_t; typedef struct { size_t n, m; mem_chain_t *a; } 70 Listing A.2: Ví dụ chương trình viết ngơn ngữ CUDA [32] // Device code global void VecAdd(float* A, float* B, float* C, int N) { int i = blockDim.x * blockIdx.x + threadIdx.x; if (i < N) C[i] = A[i] + B[i]; } // Host code int main() { int N = ; size_t size = N * sizeof(float); // Allocate input vectors h_A and h_B in host memory float* h_A = (float*)malloc(size); float* h_B = (float*)malloc(size); // Initialize input vectors // Allocate vectors in device memory float* d_A; cudaMalloc(&d_A, size); float* d_B; cudaMalloc(&d_B, size); float* d_C; cudaMalloc(&d_C, size); // Copy vectors from host memory to device memory cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice); cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice); // Invoke kernel int threadsPerBlock = 256; int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock; VecAdd(d_A, d_B, d_C, N); // Copy result from device memory to host memory // h_C contains the result in host memory cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost); // Free device memory cudaFree(d_A); cudaFree(d_B); cudaFree(d_C); // Free host memory } 71 Listing A.3: Cách thức chép liệu mang cấu trúc lớp typedef struct StructA { int* arr; } StructA; #define N 10 int main() { int h_arr[N] = {1,2,3,4,5,6,7,8,9,10}; StructA *h_a = (StructA*)malloc(sizeof(StructA)); StructA *d_a; int *d_arr; //1 Allocate device struct cudaMalloc(&d_a, sizeof(StructA)); // Allocate device pointer cudaMalloc(&(d_arr), sizeof(int)*N); // Copy pointer content from host to device cudaMemcpy(d_arr, h_arr, sizeof(int)*N, cudaMemcpyHostToDevice); // Point to device pointer in host struct h_a->arr = d_arr; // Copy struct from host to device cudaMemcpy(d_a, h_a, sizeof(StructA), cudaMemcpyHostToDevice); // Call kernel kernel(d_a); // Copy struct from device to host cudaMemcpy(h_a, d_a, sizeof(StructA), cudaMemcpyDeviceToHost); // Copy pointer from device to host cudaMemcpy(h_arr, d_arr, sizeof(int)*N, cudaMemcpyDeviceToHost); // Point to host pointer in host struct h_a->arr = h_arr; } 72 Listing A.4: Sao chép mảng h_chains vào d_chains mem_chain_v *chains; int j, first_a, first_seed, acc_seeds; first_a = i_a[i]; first_seed = i_seeds[i]; acc_seeds = 0; chains = &f_chns[i]; if (chains->n > 0) chains->a = &f_a[first_a]; else chains->a = NULL; for(j = 0; j < chains->n; j++) { chains->a[j].seeds = &seeds[first_seed + acc_seeds]; acc_seeds += chains->a[j].n; } Listing A.5: Mã nguồn thực vùng tranh chấp CUDA device int mLock = 0; global void global_function_name() { while(blocked) { if(0 == atomicCAS(&mLock, 0, 1)) { // critical section atomicExch(&mLock, 0); blocked = false; } } } 73 ... quanh theo thứ tự từ điển tạo thành ma trận BWT $abaaba a$ abaab aaba$ab aba$aba abaaba$ ba$abaa baaba $a Bước 3: Viết ký tự cuối hốn vị vịng quanh theo thứ tự sau xếp tạo thành từ mã BWT T: abba$aa... Ta kí hiệu chuỗi abaaba T Bước 1: Viết thêm vào cuối T kí tự $ (đại diện cho trỏ EOF), xét n+1 hốn vị vịng quanh, ta được: abaaba$ baaba $a aaba$ab aba$aba ba$abaa a$ abaab $abaaba Bước 2: Sắp xếp... PE-Module: (a) standard systolic array configuration;(b) Variable Logical Length configuration that can bypass part of the array; (c) Variable Physical Length configuration that matches systolic array