Trong báo cáo này, bằng cách tìm hiểu về giảithuật BWA-MEM, ngôn ngữ CUDA Compute Unified Device Architecture và kiến trúc của NVIDIA 940M, chúng tôi đề xuất phương án cải tiến hiệnthực
Trang 1ĐẠ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
Trang 2ĐẠ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
Trang 3CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG - HCM
Chữ kýCán bộ hướng dẫn khoa học : TS Phạm Quốc Cường Cán bộ chấm nhận xét 1 : TS Nguyễn Trần Hữu Nguyên Cán bộ chấm nhận xét 2 : PGS TS Phan Công Vinh
Luận văn thạc sĩ được bảo vệ tại Trường Đại học Bách Khoa, ĐHQG Tp.HCM ngày 18 tháng 7 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ọchàm, học vị của Hội đồng chấm bảo vệ luận văn thạc sĩ)
1 TS Lê Thành Sách
2 TS Lê Trọng Nhân
3 TS Nguyễn Trần Hữu Nguyên
4 PGS TS Phan Công Vinh
Trang 4ĐẠ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ự do - 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 trên nền 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
BWA-MEM trên nền 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
(Họ tên và chữ ký) (Họ tên và chữ ký)
TS Phạm Quốc Cường
Trang 5LỜI CẢM ƠN
Trong suốt thời gian học tập và nghiên cứu tại trường trong khóa học thạc
sĩ vừa qua, bản thân tôi nhận được nhiều tri thức, khoa học từ những ngườiThầy, Cô của Trường Đại học Bách Khoa Tp.HCM, đặc biệt là các Thầy, Côcủa Khoa Khoa học và Kĩ thuật máy tính Khoa Khoa Học và Kĩ Thuật MáyTính đã tạo mọi điều kiện thuận lợi cho Tôi trong quá trình tham gia thựcnghiệm, làm việc và tạo môi trường nghiên cứu chuyên nghiệp tại phòng Lab201C5 Cùng với sự nỗ lực của bản thân, Tôi đã hoàn thành luận văn thạc sĩcủa mình
Từ những kết quả đạt được 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 tôi trong suốt quá trình thực hiện đề tài.Cảm ơn em Phạm Duy Vương đã giúp đỡ tôi trong việc tìm dữ liệu cũng nhưcách lập trình hiệu quả trong quá trình làm đề tài
Tôi xin chân thành cảm ơn gia đình và đồng nghiệp của tôi Họ là nhữngngười đồng hành thực sự của tôi trong suốt thời gian thực hiện đề tài
Tp.HCM, tháng 06 năm 2018
Lưu Hữu Quyết
Trang 6TÓM TẮT LUẬN VĂN THẠC SĨ
Next-Generation Sequencing (NGS) là một công nghệ đang trở nên phổ biếntrong việc giải mã các biến thể của gen Sự sắp hàng của các chuỗi thô trênmột bộ gen tham khảo là một trong những công đoạn quan trọng của phântích dữ liệu NGS
BWA-MEM (Burrows-Wheeler Aligner - Maximal Exact Match) là mộttrong những giải thuật so trùng và sắp hàng đạt hiệu suất cao và được ứngdụng rộng rãi trong lĩnh vực Sinh-Tin học (Bio-informatic) Trong những nămgần đây, bằng việc ứng dụng xử lý song song trên nền tảng GPU (GraphicsProcessing Unit), nhiều ứng dụng khoa học đã được xử lí tăng tốc một cáchđáng kể mang lại hiệu suất cao Trong báo cáo này, bằng cách tìm hiểu về giảithuật BWA-MEM, ngôn ngữ CUDA (Compute Unified Device Architecture)
và kiến trúc của NVIDIA 940M, chúng tôi đề xuất phương án cải tiến hiệnthực giải thuật BWA-MEM nhằm tăng tốc giải thuật và giảm thời gian thựcthi của giải thuật nhưng vẫn đảm bảo kết quả chính xác như hiện thực gốc.Cuối cùng, mã nguồn BWA-MEM mới sẽ được đánh giá và so sánh với hyvọng đạt được tốc độ nhanh hơn mã nguồn nguồn gốc
Trang 7Next Generation Sequencing (NGS) techniques generated amount of data,which is increasing at an explosive rate Many researchers and clinicians wereattracted to contribute into this area There are many tasks in bioinformat-ics, which sequence alignment is an important task The sequence alignment
is a matching between two sequences, which the one is read sequence andthe other is reference sequence Read sequence is as a query sequence to
a sequence database (reference sequence) The string matching in matics is not quite the same with string matching in computer science be-cause of there are many possible gaped alignments in two short alignment.BWA-MEM is the latest of BWA, which is a software package for mappinglow-divergent sequences against a large reference genome, such as the humangenome BWA-MEM is generally recommended for high-quality queries as
bioinfor-it is faster and more accurate I wanted to study whether a GPU could beused to create a faster BWA-MEM, because a GPU is a great tool to speed upalgorithms through massive parallelism
Trang 8LỜI CAM ĐOAN
Tôi xin cam đoan rằng, công trình nghiên cứu này là của riêng tôi và được sựhướng dẫn khoa học của TS Phạm Quốc Cường
Những số liệu, bảng biểu, hình ảnh hoặc những quan sát, đánh giá, nhậnxét của các tác giả khác đều được trích dẫn nguồn trong mục "TÀI LIỆUTHAM KHẢO"
Toàn bộ nội dung tìm hiểu, nghiên cứu và các kết quả thực nghiệm củacông trình đạt được hoàn toàn trung thực, tuyệt nhiên không gian lận hoặcphóng đại
Nếu có bất kỳ sự gian lận nào, tôi xin hoàn toàn chịu trách nhiệm về côngtrình nghiên cứu này
Tp.HCM, tháng 06 năm 2018
Lưu Hữu Quyết
Trang 9Mụ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
1 GIỚI THIỆU ĐỀ TÀI 1 1.1 Tổng quan vấn đề 1
1.2 Động lực nghiên cứu 2
1.3 Đóng góp của đề tài 2
1.4 Cấu trúc của luận văn 3
2 KIẾN THỨC NỀN TẢNG 4 2.1 Kiến Thức Nền Tảng Được Sử Dụng Trong BWA-MEM 4
2.1.1 Burrows-Wheeler Transform (BWT) 4
2.1.2 Chuyển đổi về chuỗi gốc ban đầu: BWT-reversing 6
2.1.3 FM-Index (Full-text index in Minute space) 8
2.1.4 Smith-Waterman (SW) 12
2.2 GPU & CUDA 17
2.2.1 Graphics Processing Unit - GPU: 17
2.2.2 Compute Unified Device Architecture - CUDA: 18
3 BURROWS-WHEELER ALIGNER (BWA-MEM) 21 3.1 Cấu Trúc Chương Trình BWA-MEM 22
3.1.1 SMEM Generation 23
Trang 103.1.2 Seed Extension 25
3.1.3 Output Generation 29
3.2 Quá trình thực thi chương trình BWA-MEM 29
3.2.1 Dữ liệu đầu vào của BWA-MEM 29
3.2.2 Dòng chảy chương trình của giải thuật BWA-MEM trên CPU 31
4 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 quả 43
5 THIẾT KẾ HỆ THỐNG 44 5.1 Hệ thống tổng quan 44
5.2 Cấu trúc dữ liệu nhiều lớp 46
6 HIỆN THỰC HỆ THỐNG 49 6.1 Hiện thực Smith-Waterman kernel trên GPU 49
7 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
7.2 Cách thức thực nghiệm 56
7.2.1 Chọn dữ liệu đầu vào cho BWA-MEM với Smith-Waterman Kernel 56
7.2.2 Cách đánh giá kết quả thực nghiệm 57
7.3 So sánh thời gian thực thi BWA-MEM giữa CPU thuần và CPU kết hợp GPU 60
7.4 So sánh thời gian thực thi Smith-Waterman kernel giữa CPU và GPU 61
Trang 117.5 Đánh giá kết quả 61
7.5.1 Toàn bộ chương trình BWA-MEM 61
7.5.2 Smith-Waterman kernel 62
8 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 64 8.1 Kết luận 64
8.2 Hướng phát triển 64
TÀI LIỆU THAM KHẢO 65
LÝ LỊCH TRÍCH NGANG 69
Trang 12DANH SÁCH CÁC TỪ VIẾT TẮT
GPU Graphics Processing Unit
CUDA Compute Unified Device Architecture
FPGA Field Programmable Gate Array
GPGPU General-Purpose Graphics Processing Units
BWA-MEM Burrows-Wheeler Aligner - Maximal Exact Match BWT Burrows-Wheeler Transform
FM-index Full-text Minute-space
SW Smith-Waterman
MEM Maximal Exact Match
SMEM Supermaximal Exact Match
LF-mapping Last-to-First column mapping
DRAM Dynamic Random-Access Memory
DMA Direct Memory Access
API Application Programming Interface
MP Multiprocessor
DRAM Dynamic Random Access Memory
BRAM Block Random Access Memory
PE Processing Element
FIFO First In First Out
bp base-pair
Trang 13Danh sách hình vẽ
2.1 Tổng quan xây dựng chuỗi BWT [11] 5
2.2 LF-mapping [11] 7
2.3 BWT Reversing [11] 8
2.4 Minh họa BWT Reversing trực quan [11] 8
2.5 Thành phần chính của FM-index [11] 9
2.6 Các bước thực hiện truy vấn với FM-index [11] 10
2.7 Vị trí trùng lắp trong BWT [11] 10
2.8 Phương pháp tính điểm của thuật toán Smith-Waterman [15] 15 2.9 Khởi tạo ma trận tính điểm [15] 15
2.10 Tính toán giá trị cho mỗi ô [15] 16
2.11 Ma trận tính điểm [15] 16
2.12 Quá trình tìm kết quả [15] 17
2.13 Phân cấp bộ nhớ CUDA 19
2.14 Thành phần một chương trình của một ứng dụng GPU 20
3.1 Thứ tự thực thi 3 khối của giải thuật BWA-MEM [17] 22
3.2 Quá trình Seed Generation và Seed Extention [21] 26
3.3 Ví dụ quá trình Seed Generation và Seed Extention [5] 28
3.4 Ví dụ về một đoạn dữ liệu trong tập tin FASTQ 30
3.5 Dòng chảy của chương trình của giải thuật BWA-MEM 31
4.1 Mô hình hiện thực tăng tốc Seed Extension của bài báo [17] 35 4.2 Cấu hình của PE-Module: (a) standard systolic array configu-ration;(b) Variable Logical Length configuration that can by-pass part of the array; (c) Variable Physical Length config-uration that matches systolic array length to read length; (d) GPU-like single-PE modules [17] 35
Trang 144.3 Kiến trúc của tra cứu mảng hậu tố [26] 37
4.4 Kiến trúc của mô hình tăng tốc ma trận Smith-Waterman ở bài báo [27] 37
4.5 Mô hình hiện thực tăng tốc Seed Extension trên GPU của bài báo [28] 39
4.6 Mô hình hiện thực tăng tốc Seed Extension được cải tiến trên GPU của bài báo [21] 40
4.7 Mô hình hiện thực tăng tốc BWA-MEM trong bài báo [29] 41 5.1 Mô hình hiện thực tăng tốc ma trận Smith-Waterman trên GPU 45 5.2 Ví dụ về một đoạn dữ liệu trong tập tin FASTQ 47
6.1 Ma trận Smith-Waterman đơn giản 50
6.2 Các bước tính toán song song ma trận Smith-Waterman 51
6.3 Minh họa đơn giản cách các Thread tính toán ma trận Smith-Waterman 52
7.1 Các Thread trong Warp cùng đọc biến a của mảng các cấu trúc dữ liệu 58
7.2 Các Thread trong Warp cùng đọc biến a 58
7.3 Các nhánh của if/else được thực hiện tuần tự 58
7.4 if/else áp dụng trên 2 Warp khác nhau 59
7.5 So sánh thời gian thực thi giữa BWA-MEM với Smith-Waterman Kernel và BWA-MEM phiên bản gốc, CPU: 1 Thread 60
7.6 So sánh thời gian thực thi giữa Smith-Waterman Kernel trên CPU và GPU, CPU: 1 Thread 61
7.7 Kết quả phân tích quá trình gọi các Runtime API của CUDA bằng nvprof . 62
Trang 15Danh sách bảng
2.1 Thứ tự của các ký tự trong Tbwt 6
2.2 C(·) của Tbwt 6
2.3 Occ(c,q) của Tbwt 7
2.4 Ví dụ ma trận thay thế 13
2.5 Ví dụ ma trận tính điểm 14
4.1 Kết quả phân tích chương trình BWA-MEM 34
4.2 Cấu hình phần cứng máy chủ (CPU-only) - : không có thông tin 43 4.3 Cấu hình phần cứng thiết bị - : không dùng 43
4.4 Kết quả đạt được *: Smith-Waterman Algorithm only 43
Trang 171.2 Động lực nghiên cứu
Sắp xếp trình tự gen mang đến nhiều lợi ích:
• Phát hiện được bệnh tế bào máu hình lưỡi liềm [2]
Multi-dễ dàng và ngôn ngữ được sử dụng để lập trình GPU (cụ thể là dùng CUDA)
là C/C++ Tuy nhiên, việc sử dụng ngôn ngữ C/C++ lập trình cho GPU không
hề đơn giản so với lập trình tuần tự đơn thuần Nói cách khác, việc tiếp cận
và hiện thực song song hóa một chương trình là cả một thử thách mới đối vớichúng tôi khi tiếp cận vấn đề này Hiện nay có nhiều giải thuật xếp trình tựgen như BWA-MEM [5], Bowtie2 [6], Cushaw2 [7], GEM [8], AGILE [9],STELLR [10], và mỗi giải thuật đều có những ưu điểm và nhược điểmriêng Tuy nhiên trong đề tài này, chúng tôi quyết định chọn giải thuật BWA-MEM, vì đó là một giải thuật so trùng và sắp hàng một cách chính xác, nhanhchóng trong trình tự sinh học với độ dài genome lớn, cân bằng tốt (scale well)đối với vộ genome lớn và đặc biệt là mã nguồn mở (điều này dễ dàng trongviệc tìm hiểu và hiện thực giải thuật trên nền tảng GPU)
Đề tài có các đóng góp sau
1 Phân tích cấu trúc chương trình BWA-MEM
2 Tăng tốc chương trình BWA-MEM trên nền tảng GPU
Trang 181.4 Cấu trúc của luận văn
Luận văn được chia thành 8 chương theo cấu trúc như sau:
1 Giới thiệu tổng quan các vấn đề trong Sinh-Tin học, động lực nghiêncứu, đóng góp của đề tài và trình bày cấu trúc luận văn
2 Các kiến thức nền tảng được trình bày trong giải thuật BWA-MEM như:Burrows-Wheeler Transform (BWT), Full-text index Minute-space (FM-index), giải thuật Smith-Waterman (SW) và kiến thức nền tảng GPU,CUDA
3 Phân tích cấu trúc chương trình BWA-MEM
4 Tìm hiểu các công trình liên quan đến đề tài, quan sát và nhận định
5 Trình bày ý tưởng và cách thức hiện thực chương trình trên GPU,
6 Trình bày kết quả thực nghiệm, đánh giá và phân tích kết quả
7 Trình bày về kết luận vấn đề các giới hạn và công việc tiếp theo của đềtài trong tương lai
8 Tài liệu tham khảo
Trang 19Chương 2
KIẾN THỨC NỀN TẢNG
Chương 2 trình bày tổng quan các kiến thức về kỹ thuật Burrows-WheelerTransform (BWT), Full-text Minute-space (FM-index), giải thuật Smith-Waterman(SW) và GPU (Graphics Processing Unit) Đồng thời cũng cấp kiến thức vềBurrows-Wheeler Aligner (BWA-MEM) - một trong những giải thuật so trùng
và sắp hàng chuỗi với độ dài lớn từ 70bp đến vài megabases Những kiến thứcnày đặc biệt quan trọng bởi nó giúp chúng ta biết được cách thức hoạt độngcủa giải thuật BWA-MEM để từ đó thực hiện giải thuật BWA-MEM trên GPUnhằm tăng tốc cho giải thuật BWA-MEM
BWA-MEM
2.1.1 Burrows-Wheeler Transform (BWT)
Giải thuật được sử dụng trong kỹ thuật nén dữ liệu theo ý tưởng sắp xếp lạicác ký tự trong một chuỗi để tạo ra một chuỗi có nhiều các ký tự giống nhaudồn lại với nhau hơn chuỗi ban đầu và có thể chuyển đổi từ chuỗi này lạichuỗi ban đầu Thuật toán tạo ra chuỗi BWT có thể mô tả như sau với chuỗi
abaaba Ta kí hiệu chuỗi abaaba là T.
Bước 1: Viết thêm vào cuối T một kí tự là $ (đại diện cho con trỏ EOF), xét
n+1 hoán vị vòng quanh, ta được:
Trang 20baaba$a aaba$ab aba$aba ba$abaa a$abaab
$abaaba Bước 2: Sắp xếp n+1 hoán vị vòng quanh đó theo thứ tự từ điển tạo thành ma
Bước 3: Viết ra các ký tự cuối của các hoán vị vòng quanh theo đúng thứ tự
sau khi đã sắp xếp tạo thành từ mã BWT của T:
abba$aa
Dưới đây Hình 2.1 sẽ mô tả tổng quan quá trình xây dựng chuỗi BWT
Hình 2.1: Tổng quan xây dựng chuỗi BWT [11]
Trang 212.1.2 Chuyển đổi về chuỗi gốc ban đầu: BWT-reversing
Xét ma trận BWT (MT) cột đầu và cột cuối ký hiệu là F và L, đánh thứ tự chocác ký tự ở 2 cột này Tbwt là chuỗi BWT được tạo ra từ MT
MT có tính chất "Last-to-First column mapping" (LF-mapping) nghĩa là
sự xuất hiện thứ i của ký tự ở cột cuối cùng (L) tương ứng với sự xuất hiệnthứ i của ký tự đó ở cột đầu tiên (F) Theo [12], LF-mapping có:
• C(·) biểu thị mảng chiều dài |Σ| sao cho C[c] chứa tổng số lần xuất hiệncủa các ký tự trong dữ liệu text có thứ tự từ điển nhỏ hơn ký tự c
• Occ(c,q) biểu thị số lần xuất hiện của ký tự c trong tiền tố (prefix)
Tbwt[1,q]
• LF(i) = C[Tbwt[i]] + Occ(Tbwt[i],i)
LF(·) đại diện cho Last-to-First column mapping bởi vì ký tự Tbwt[i] ở cộtcuối L của ma trận MT sẽ nằm ở cột đầu F tại vị trí LF(i) và LF(·) cũng chophép dò ngược chuỗi T Cụ thể, nếu T[k] = Tbwt[i] thì T[k-1] = Tbwt[LF(i)]
Ví dụ T = "abaaba" Dựa vào Hình 2.1 ta có Tbwt = "abba$aa"
• Xây dựng Occ(c,q) của Tbwt
• Tính LF(i)
LF(1) = C(a) + Occ(a,1) = 1 + 1 = 2 => L(1) = F(2) = a0
LF(2) = C(b) + Occ(b,2) = 5 + 1 = 6 => L(2) = F(6) = b0
Trang 23Để chuyển về chuỗi gốc ban đầu, ta đảo ngược chuỗi bắt đầu từ phía phảicủa chuỗi gốc dò ngược về phía trái Cách thực hiện đảo ngược được trìnhbày như Hình 2.3 và Hình 2.4 Kết quả thu được như sau: a3b1a1a2b0a0$ = T.
Hình 2.3: BWT Reversing [11]
Hình 2.4: Minh họa BWT Reversing trực quan [11]
2.1.3 FM-Index (Full-text index in Minute space)
FM-index [13] cho phép tìm kiếm chuỗi con trùng một cách hiệu quả bêntrong dữ liệu text
FM-index kết hợp kỹ thuật BWT với một vài cấu trúc dữ liệu phụ trợ để nhằmgiảm bộ nhớ thực thi và thực hiện nhanh hơn
Trang 24Thành phần chính của FM-index bao gồm F (có thể được trình bày rất đơngiản 1 số nguyên cho 1 ký tự) và L (có thể nén được) từ ma trận BWT(Hình 2.5) FM-index có khả năng tiết kiệm không gian cần để lưu trữ.
Hình 2.5: Thành phần chính của FM-index [11]
Truy vấn với FM-Index: việc truy vấn bằng cách sử dụng LF-mappingđược mô tả như sau
• Ví dụ cần truy vấn chuỗi P = aba Ta truy vấn như Hình 2.6
• Đã tìm được chuỗi P là có trong T và truy vấn này có cùng kết quả vớimảng hậu tố (Hình 2.7)
Thuật toán cho FM-index [12]: xét chuỗi con trùng P[1,p] trong dữ liệu
text T[1,n] Giá trị occ là số lượng của những lần xuất hiện của chuỗi contrùng P[1,n] trong dữ liệu text nén Tbwt Hai thủ tục chính để vận hành FM-index:
1 Xác định số lượng của những lần xuất hiện của chuỗi con trùng P[1,p]trong dữ liệu nén Tbwt sử dụng thuật toán get_row (Algorithm 1) Tham
số First trỏ đến hàng đầu tiên của ma trận BWT (MT) chứa tiền tố P[i,p] và tham số Last trỏ đến hàng cuối của MT chứa tiền tố P[i, p].Thuật toán trả về giá trị occ = Last - First + 1
2 Xác định những vị trí của của chuỗi con trùng P[1,n] ở trong dữ liệutext T sử dụng thuật toán get_position (Algorithm 2) trả về occ giá trịnguyên khác nhau trong khoảng [1,n]
Trang 25Hình 2.6: Các bước thực hiện truy vấn với FM-index [11]
Hình 2.7: Vị trí trùng lắp trong BWT [11]
Trang 26Algorithm 1 Thuật toán get_rows để tìm những hàng chứa tiền tố P[1,n] [12]
FunctionGET _ ROWS(P [1, p]) begin
i ← p, c ← P ]p F irst ← C[c] + 1, Last ← C[c + 1];
while ((F irst ≤ Last) and (i ≥ 2)) do
c ← P [i − 1];
F irst ← C[c] + Occ(c, F irst − 1) + 1;
Last ← C[c] + Occ(c, Last);
i ← i − 1;
end
if Last < F irst then
return no rows pref ixed by P [1, p];
Algorithm 2 Thuật toán get_position cho việc tính toán Pos(i) [12]
FunctionGET _ POSITION(i) begin
Ví dụ: Truy vấn chuỗi P = aba trong dữ liệu text T = aabaaba.
1 Tìm Tbwt Dựa vào Hình 2.1 ta có Tbwt = abba$aa
2 Áp dụng tiến trình của FM-index
Bước 1: Sử dụng thuật toán get_rows (Algorithm 1)
• Ký tự đầu tiên chúng ta cần truy vấn là a, ký tự cuối cùng trongchuỗi P Khoảng [First,Last] ban đầu được thiết lập là:
[C[a] + 1, C[a+1]] = [2,5]
• Ký tự kế tiếp cần truy vấn là b Khoảng [First,Last] mới là:
[C[b] + Occ(b, First-1) + 1, C[b] + Occ(b, Last)] = [5 + 0 + 1, 5 +2] = [6,7] với First bằng 2 là chỉ số bắt đầu và Last bằng 5 là chỉ
số kết thúc của khoảng [First,Last] trước đó [2,5]
• Ký tự cuối cùng cần truy vấn là a Khoảng [First,Last] mới là:[C[a] + Occ(a, First-1) + 1, C[a] + Occ(a, Last)] = [1 + 2 + 1, 1 +4] = [4,5] P = aba có trong các hàng [4,5] của ma trận BWT
Trang 27• Giá trị occ = Last - First + 1 = 8 - 7 + 1 = 2.
Bước 2: Sử dụng thuật toán get_position ((Algorithm 2)
• i = Last = 5 Hàng r5 của MT được đánh dấu, lấy Pos(5) từ T:Pos(5) = 1
• i = First = 4
r4 không được đánh dấu LF[4] = C(a) + Occ(a,4) = 1 + 2 = 3, t = 1;
r3 không được đánh dấu LF[3] = C(b) + Occ(b,3) = 5 + 2 = 7, t = 2;
r7 không được đánh dấu LF(7) = C(a) + Occ(a,7) = 1 + 4 = 5, t = 3;
r5 được đánh dấu Lấy Pos(5) từ T: Pos(5) = 1
Thuật toán Smith-Waterman [14] gồm 3 bước:
1 Khởi tạo ma trận từ hai chuỗi đầu vào A=a1a2 an và B=b1b2 bm với
n và m lần lượt là độ dài chuỗi A và B
• Xác định ma trận thay thế (substitution matrix)
– Mỗi ô trong ma trận thay thế sẽ nhận được một điểm số
(score)
– Ví dụ: Nếu hai ký tự giống nhau sẽ nhận được điểm số +1,
hai ký tự không giống nhau sẽ nhận điểm số -1, ma trận thaythế sẽ là:
– Ma trận thay thế sẽ được biểu diễn như sau:
s(aj,bj) =
+1 ai = bj
−1 ai 6= bj
Trang 28• Điểm phạt cho quãng cách (gap penalty).
– Quãng cách (gap được ký hiệu bằng dấu "-") được hiểu đơn
giản khi nhìn trong trình tự là phần trống, không có ký tự
để so sánh với ký tự của chuỗi khác Chẳng hạn, với chuỗisau ’AAG-AT-A’ có hai quãng cách, mỗi quãng có một chỗtrống Còn với chuỗi ’AA–GATA’ có một quãng cách với haikhoảng trống
– Điểm phạt cho quãng cách là điểm số cho việc thêm hoặc xóa
quãng cách
– Trong sinh học, điểm phạt cần phải được tính toán khác nhau
bởi vì các sinh vật nào gần nhau sẽ có trình tự giống nhau ởcác đoạn liên tục và dài vì vậy cũng sẽ có ít quãng cách hơnhoặc trường hợp đột biến gen có thể dẫn đến việc chèn nhiềuquãng cách hơn Do đó, ta sẽ còn có thêm điểm phạt cho mỗimột đoạn quãng cách (open gap penalties) gồm điểm cho gapopening và điểm cho gap extension
Ví dụ: A _ _ G C C Quãng cách gồm khoảng trống đầu tiên
là gap opening và khoảng trống phía sau gọi là gap extension
– Wk = u * (k-1) + v (u>0, v>0) với Wk điểm phạt cho quãngcách (gap penalty) có độ dài k v là điểm phạt cho gap open-ing u là điểm phạt cho gap extension [15]
• Xây dựng ma trận tính điểm (scoring matrix) H Kích thước của
ma trận tính điểm là (n+1)*(m+1)
– Chức năng của ma trận tính điểm là để thực hiện so sánh trình
tự lần lượt giữa tất cả các ký tự trong hai chuỗi để ghi lại kết
Trang 29quả so trùng và sắp hàng tối ưu.
Bảng 2.5: Ví dụ ma trận tính điểm
b1 bj bm
0 0 0 0
a1 0
ai 0
an 0
2 Tính toán, điền giá trị cho ma trận (điểm cho mỗi ô)
Điểm cho từng cặp ký tự phụ thuộc vào: điểm của hai ký tự giống nhauhoặc hai ký tự khác nhau (dựa vào ma trận thay thế) và điểm phạt quãngcách (gap penalty) Theo [15] ta có:
0
Hi−1,j−1 + s(ai, bj) là điểm cho việc so trùng và sắp hàng ai, bj
Hi−k,j - Wk là điểm số nếu ai là vị trí kết thúc của quãng cách có
độ dài k
Hi,j−l - Wl là điểm số nếu bj là vị trí kết thúc của quãng cách có
độ dài l
0 nghĩa là không có sự giống nhau giữa ai và bj
3 Tìm ô có giá trị lớn nhất trong ma trận Sử dụng kỹ thuật lưu vết để tìm
ra kết quả
Trang 30Hình 2.8: Phương pháp tính điểm của thuật toán Smith-Waterman [15]
Ví dụ [15]: so trùng và sắp hàng hai chuỗi TGTTACGG và GGTTGACTA
1 Sử dụng ma trận thay thế (substitution matrix) s(ai,bj) =
và điểm phạt cho quãng cách (gap penalty) Wk = 2k với độ dài k là 1
Ta sẽ xây dựng ma trận tính điểm (scoring matrix) (Hình 2.9)
Hình 2.9: Khởi tạo ma trận tính điểm [15]
Trang 312 Tính toán và điền giá trị cho ma trận dựa vào Hình 2.8 ta được Hình 2.10
và Hình 2.11
Hình 2.10: Tính toán giá trị cho mỗi ô [15]
Hình 2.11: Ma trận tính điểm [15]
Trang 323 Sử dụng kỹ thuật lưu vết để tìm kết quả.
Hình 2.12: Quá trình tìm kết quả [15]
2.2.1 Graphics Processing Unit - GPU:
Một bộ vi xử lý chuyên dụng, đảm nhận nhiệm vụ tăng tốc, xử lý đồ họa choCPU Các GPU hiện nay có khả năng xử lý cao trong xử lý đồ họa máy tính
Về tốc độ xử lý dữ liệu thì GPU có thể tiếp nhận hàng ngàn luồng dữ liệucùng một lúc vì thế có thể tăng tốc một số phần mềm tới hơn 100 lần so vớimột CPU
Trước khi GPU ra đời thì CPU vừa phải xử lý các chương trình vi tính, dữliệu vừa kiêm luôn công việc xử lý đồ họa, hình ảnh Lượng công việc quánhiều nên CPU hoạt động theo xu hướng ban phát đồng đều mức tài nguyên.Công việc đồ họa và công việc văn phòng đều nhận được lượng tài nguyênnhư nhau Chính vì vậy các sản phẩm đồ họa khi ra đời đều bị hạn chế rấtnhiều Nhưng từ khi GPU ra đời thì mọi thứ đã hoàn toàn thay đổi giúp giảmbớt khối lượng công việc cho CPU, CPU chỉ còn nhiệm vụ kéo hệ thống chạy
Trang 33theo hoạt động của GPU và dành các xung của mình cho các nhiệm vụ kháccủa hệ thống, tiết kiệm thời gian đáng kể và hiện nay vai trò của GPU trênmáy tính ngày càng quan trọng hơn, không chỉ dừng lại ở việc xuất tín hiệu
ra màn hình hay hỗ trợ chơi game 3D mà việc tận dụng nhân đồ hoạ (GPU)tham gia hỗ trợ xử lý cùng nhân CPU để đưa ra các ứng dụng bổ ích như:DXVA (DirectX Video Acceleration) trên các chương trình xem phim, HWA(Hardware Acceleration) trên các trình duyệt web, MS Powerpoint 2010 tậndụng GPU để thể hiện các hiệu ứng mượt mà hơn [16]
2.2.2 Compute Unified Device Architecture - CUDA:
Một nền tảng có khả năng tính toán song song và lập trình được phát triển bởiNVIDIA vào tháng 11 năm 2006 nhằm mục đích tăng cường mạnh mẽ cáckhối tính toán song song trong các GPU và giúp cho các nhà phát triển thuậnlợi hơn trong việc triển khai các ứng dụng non-graphic, CUDA hỗ trợ một
số ngôn ngữ lập trình như C và Fortran, và nó có một thư viện lớn CUDAcung cấp môi trường tính toán phức hợp và có thể làm việc theo môi trườngtính toán song song Một chương trình CUDA gồm có hai thành phần chính:CPU và GPU Kernel Host code chạy trên CPU trong khi GPU kernel codes
là những hàm GPU chạy trên những thiết bị GPU và được miêu tả trong Hình2.14 Chương trình thực thi trên GPU hoàn toàn độc lập với chương trình trênCPU
Một ứng dụng bắt đầu thực thi bằng code trên CPU Code trên CPU chỉ thị tớimột kernel GPU trên thiết bị GPU Kernel này được thực thi trên một GPUgrid
Một GPU grid chứa các thread blocks hoàn toàn độc lập với nhau Một blockchứa nhiều thread Có những giới hạn về số lượng threads/block và số threadblocks/grid Bởi vì vấn đề giới hạn bộ nhớ được chia sẻ cục bộ và kích thước
dữ liệu hoặc số lượng processors hoặc kiến trúc của GPU
Trang 34Block (M,0)
Texture
CPU Host
Device (Grid)
ConstantGlobal
Block (0,0)
SharedRegisters RegistersThread(0,0) Thread(N,0)Local Local
Hình 2.13: Phân cấp bộ nhớ CUDA
Bộ nhớ CUDA có nhiều thành phần bộ nhớ phân cấp khác nhau đượctruy cập trong quá trình hoạt động, khác về kích thước và băng thông (Chitiết được mô tả trong Hình 2.13) Bên trong mỗi thread đều có bộ nhớ cục
bộ riêng (Local) và bộ nhớ chia sẻ (Shared memory) Bộ nhớ chia sẻ này
sẽ được nhìn thấy trong tất cả mọi threads của block với thời gian sống lànhư nhau và bộ nhớ toàn cục (Global memory) được kết nối tới tất cả cácthreads Ngoài ra, Bộ nhớ CUDA còn có hai bộ nhớ chỉ đọc (read-only) đó làConstant memory và Texture memory Hai bộ nhớ này được liên kết đến tất
cả các threads Việc thêm hai bộ nhớ này nhằm tối ưu chi phí tính toán.Input và Output dữ liệu được dịch chuyển từ CPU tới GPU và ngược lại Đểkhai thác GPU một cách hiệu quả thì bản thân CPU Host phải xây dựng cấutrúc dữ liệu phù hợp với GPU
Vấn đề quan trọng cuối cùng về CUDA đó là vấn đề đồng bộ bộ nhớ CUDA
Trang 35giúp điều phối các threads trong block sử dụng bộ nhớ chia sẻ một cách côngbằng Khi gọi một kernel thực tế là gọi một grid Những Host codes trong
Hình 2.14: Thành phần một chương trình của một ứng dụng GPU
một ứng dụng CUDA trải qua bảy bước sau
1 Khởi tạo một thiết bị
2 Cấp phát bộ nhớ GPU
3 Dịch chuyển dữ liệu tới thiết bị
4 Chỉ định những kernels
5 Dịch chuyển dữ liệu từ thiết bị
6 Giải phóng bộ nhớ trên GPU
7 Reset thiết bị
Trang 36Những giải thuật dựa trên luận thuyết này bao gồm hai bước chính:
1 Seeding: sẽ tìm trong gen tham khảo một chuỗi con trùng lắp nhiềunhất với một chuỗi con trong chuỗi đọc được từ tập dữ liệu Chuỗi connày được gọi là seed
Một chuỗi con có thể là một sự trùng lắp hoàn toàn hoặc trùng lắpkhông hoàn toàn với một tỉ lệ khác biệt cụ thể
2 Extension: phần còn lại trong chuỗi đọc từ tập dữ liệu sẽ được so trùng
và sắp hàng với gen tham khảo dùng giải thuật Smith-Waterman hoặcgiải thuật tương tự Smith-Waterman
Giải thuật BWA-MEM chỉ tìm kiếm những chuỗi con trùng lắp hoàn toàntrong giai đoạn seeding
Trang 373.1 Cấu Trúc Chương Trình BWA-MEM
Giải thuật BWA-MEM bao gồm ba khối chính được thực thi tuần tự cho mỗichuỗi đọc được từ tập dữ liệu:
1 SMEM Generation
2 Seed Extension
3 Output Generation
Giải thuật BWA-MEM xử lý các chuỗi đọc từ tập dữ liệu theo kiến trúc
bó [17], như Hình 4.4 Đầu tiên, hai giai đoạn SMEM Generation và SeedExtension được thực thi tuần tự liên tục cho mỗi chuỗi đọc được từ tập dữliệu, khi hai quá trình này hoàn thành cho một bó dữ liệu, giai đoạn ghi kếtquả được thực thi Quá trình xử lý cho các bó dữ liệu khác sẽ được tiếp tục.Giải thuật BWA-MEM xử lý theo bó này thường được hiện thực theo mô hình
xử lý đa nhiệm (multithreads)
Hình 3.1: Thứ tự thực thi 3 khối của giải thuật BWA-MEM [17]
Trang 383.1.1 SMEM Generation
Chuỗi MEM là chuỗi con của chuỗi đọc được từ tập dữ liệu mà trùng lắpchính xác với chuỗi DNA tham khảo và không thể mở rộng theo bất kỳ chiềunào
Chuỗi SMEM [18] là một chuỗi MEM mà không thể được chứa trong mộtchuỗi lớn hơn nào khác có đặc tính tương tự
Chuỗi SMEM thường được tìm thấy ít hơn nhiều so với chuỗi MEM.Mỗi một chuỗi đọc được từ tập dữ liệu có thể không có chuỗi SMEM nàohoặc nhiều chuỗi SMEM
Các SMEM này chính là seed Các SMEM này có thể dễ dàng tạo đượcbằng cách sử dụng FM-Index [19]
Hit là số chuỗi MEM hoặc SMEM có trong trong bộ gen tham khảo
• Ví dụ [20]:
Chuỗi đọc từ tập dữ liệu R =CTGACAGATCAGAGAGGAATCCGA và bộgen tham khảo T= CTGCGTCAACAGATCAGAGAGCTCCGATCTCCGA CCGCTGACATATCAGAGAGGAATCGGACGTA
• Ta tìm được 4 MEM là R[1 6], R[4 16], R[8 21] và R[20 24]
Ba chuỗi MEM R[1 6], R[4 16], R[8 21] có 1 hit trong gen tham khảoT
Chuỗi MEM R[20 24] có 2 hit trong gen tham khảo T
Theo [5] BWA-MEM xác định các seed bằng hai bước:
1 Seeding và re-seeding
• Xác định tất cả các chuỗi SMEM có trong chuỗi gen tham khảodựa vào thuật toán tìm SMEMs [18] (Algorithm 5) Thuật toántìm SMEMs sẽ sử dụng hai thuật toán Backward Extension (Al-gorithm 3) và giải thuật Forward Extension (Algorithm 4)
Trang 39Algorithm 3 Thuật toán Backward Extension [18]
Input: Bi-interval [k, l, s] of string W and a symbol a
Output: Bi-interval of string aW
Function BACKWARD E XT([k, l, s], a) begin
Algorithm 4 Thuật toán Forward Extension [18]
Input: Bi-interval [k, l, s] of string W and a symbol a
Output: Bi-interval of string W a
Function FORWARD E XT([k, l, s], a) begin
[l0, k0, s0] ←B ACKWARD E XT([l, k, s], a) return [k0, l0, s0]
end
Algorithm 5 Thuật toán tìm SMEMs [18]
Input: String P and start position i0 ; P [−1] = 0
Output: Set of bi-intervals of SMEMs overlapping i0
Function SUPERMEM1(P, x) begin
Initialize Curr, Prev and Match as empty arrays [k, l, s] ← [C(P [i0 ]), C(P [i 0 ]), C(P [i 0 ] + 1) − C(P [i0])] for i ← i0+ 1 to |P | do
[k, l, s] ← [k0, l0, s0]
end
end
Swap array Curr and Prev i0 ← |P | for i ← i0− 1 to −1 do
Reset Curr to empty s00← −1 for [k, l, s] in Prev do
[k0, l0, s0] ←B ACKWARD E XT([k, l, s], P [i]) if s0 = 0 or i = −1 then
if Curr is empty and i + 1 < i0+ 1 then
i 0← i Append [k, l, s] to Match
end end
Trang 40• Giả sử:
Chuỗi gen được đọc từ tập dữ liệu: R = CCCCGTTTT
và chuỗi gen tham khảo: T = CCCCATTTT CCCCG .GTTTT
– Chuỗi con CCCCATTTT của T là 1-mismatch hit (hit có 1
ký tự không trùng) của R mà đó là true hit Chú ý rằng cácMEM của R là CCCCG và GTTTT Bởi vì 1-mismatch hit(hit có 1 ký tự không trùng) của CCCCATTTT không chứahai MEM của R, vì thế bước seeding bị thất bại trong việctìm 1-mismatch hit này
• Để tránh xác định thiếu seed, re-seeding được tiến hành để tìmkiếm những seed có độ dài quá lớn (trên 28 bp) Giả sử mộtSMEM có độ dài l xuất hiện k lần trong bộ gen tham khảo Bướcre-seeding sẽ tìm những chuỗi trùng lắp chính xác dài nhất (LEMs– longest exact matches) bao gồm phần giữa của SMEM và xuấthiện ít nhất k + 1 lần trong bộ gen tham khảo Ý tưởng này đảmbảo các seed được xác định từ bước seeding và bước re-seeding
có thể bao gồm phần lớn tất cả những true hit của chuỗi đọc từ tập
dữ liệu
2 Chaining và chain filtering
Xét tất cả những seed thu được từ seeding và re-seeding, chúng ta có thểthực hiện seed extension cho tất cả chúng Tuy nhiên, ở đây có thể cónhiều seed và phần lớn trong số đó là dư thừa Để giảm seed extension
dư thừa ở bước sau, bước chaining được thực hiện để gộp những nhómseed thẳng hàng và nằm gần nhau (được gọi là chain) và sau đó lọc bỏnhững chain ngắn mà phần lớn độ dài của chúng được chứa trong chaindài Chain được phát hiện trong bước này không cần chính xác
3.1.2 Seed Extension
Các seed là các chuỗi con của chuỗi đọc từ tập dữ liệu mà trùng lắp chính xácvới gen tham khảo đã tìm được ở bước SMEM Generation Sau khi tìm đượcseed, seed sẽ được mở rộng theo cả hai chiều để thực hiện việc so trùng và