1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giải pháp tăng tốc độ xử lý thuật toán SmithWaterman

61 836 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 1,69 MB

Nội dung

Giải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWatermanGiải pháp tăng tốc độ xử lý thuật toán SmithWaterman

Trang 1

Nguyễn Thành Phương

ĐỀ TÀI

GIẢI PHÁP TĂNG TỐC ĐỘ XỬ LÝ THUẬT TOÁN SMITH-WATERMAN

LUẬN VĂN THẠC SĨ KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH - 2016

Trang 2

Nguyễn Thành Phương

ĐỀ TÀI

GIẢI PHÁP TĂNG TỐC ĐỘ XỬ LÝ THUẬT TOÁN SMITH-WATERMAN

Chuyên ngành: Hệ thống Thông tin

Mã số: 60.48.01.04

NGƯỜI HƯỚNG DẪN KHOA HỌC:

PGS.TS TRẦN VĂN LĂNG

THÀNH PHỐ HỒ CHÍ MINH – 2016

Trang 3

LỜI CAM ĐOAN

Trong quá trình thực hiện luận văn, dưới sự hướng dẫn trực tiếp của PGS.TS Trần Văn Lăng, tôi đã nghiên cứu và hoàn thành luận văn với sự nổ lực nghiên cứu của bản thân Do đó, tôi xin cam đoan rằng nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn của PGS.TS Trần Văn Lăng và mọi tham khảo được sử dụng trong luận văn đều có trích dẫn nguồn cụ thể, rõ ràng, trung thực về tên tác giả, tên công trình nghiên cứu, thời gian và địa điểm công bố

Mọi sao chép không hợp lệ hoặc vi phạm quy chế đào tạo tôi xin chịu hoàn toàn trách nhiệm./

TP HCM, ngày 05 tháng 09 năm 2016

HỌC VIÊN THỰC HIỆN LUẬN VĂN

Nguyễn Thành Phương

Trang 4

LỜI CẢM ƠN

Trong quá trình thực hiện luận văn này, tôi xin gửi lời cảm ơn chân thành đến PGS.TS Trần Văn Lăng, Viện phó Viện cơ học và Tin học ứng dụng TP HCM, là người đã trực tiếp hướng dẫn tôi để hoàn thành luận văn này Đồng thời, tôi cũng xin gửi lời cảm ơn đến quý thầy cô thuộc Học Viện Bưu chính Viễn thông nói chung, tại

cơ sở Thành phố Hồ Chí Minh nói riêng đã tạo điều kiện thuận lợi cho tôi hoàn thành luận văn đúng tiến độ

Một lần nữa tôi xin gửi lời cảm ơn chân thành đến quý Thầy Cô

TP HCM, ngày 05 tháng 09 năm 2016

HỌC VIÊN THỰC HIỆN LUẬN VĂN

Nguyễn Thành Phương

Trang 5

MỤC LỤC

LỜI CAM ĐOAN i

LỜI CẢM ƠN ii

MỤC LỤC iii

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT v

DANH SÁCH CÁC BẢNG vi

DANH SÁCH CÁC HÌNH vii

MỞ ĐẦU 1

CHƯƠNG 1- CƠ SỞ LÝ THUYẾT 4

1.1 Tổng quan về GPU: 4

1.1.1 GPU là gì: 4

1.1.2 Lịch sử phát triển của GPU: 4

1.1.3 Cấu trúc của GPU và cơ chế song song ứng dụng: 5

1.2 Tổng quan về OPENCL 6

1.2.1 Giới thiệu về OPENCL: 6

1.2.2 Cấu trúc của OPENCL: 7

1.2.3 Quy trình phát triển một chương trình OPENCL: 12

1.3 Bài toán bắt cặp trình tự: 12

1.4 Các thuật toán giải quyết bài toán bắt cặp trình tự sinh học: 13

TIỂU KẾT CHƯƠNG 1 14

CHƯƠNG 2 - NGUYÊN LÝ ĐẨY NHANH THUẬT TOÁN SMITH-WATERMAN TRONG MÔI TRƯỜNG CPU-GPU 15

2.1 Thuật toán Smith-waterman nguyên thủy: 15

2.1.1 Giới thiệu: 15

2.1.2 Nguyên lý hoạt động: 15

2.1.3 Thuật toán và Đánh giá: 21

2.2 Phương pháp cải tiến thuật toán Smith-Waterman: 22

2.2.1 Phương pháp cắt tỉa: 24

2.2.2 Ràng buộc dưới cho tất cả các cặp trong quá trình so sánh: 26

Trang 6

2.2.3 Tế bào kích hoạt 28

2.2.4 Lý thuyết song song thuật toán Smith- Waterman: 28

2.3 Thuật toán cải tiến 31

2.3.1 Thuật toán Smith-Waterman với phương pháp cắt tỉa: 31

2.3.2 Phương pháp kết hợp giữa cắt tỉa và xử lý song song 32

TIỂU KẾT CHƯƠNG 2 34

CHƯƠNG 3- KẾT QUẢ THỰC NGHIỆM 35

3.1 Chương trình thực nghiệm 35

3.1.1 Chương trình: 35

3.1.1.1 Hàm quét tìm Platforms: 35

3.1.1.2 Hàm quét tìm thiết bị: 36

3.1.1.3 Hàm tính toán giới hạn thấp hơn: 36

3.1.1.4 Kernel file của phương pháp cắt tỉa kết hợp song song: 37

3.1.1.5 Thực thi kernel: 39

3.1.2 Một số hình ảnh thực thi chương trình: 43

3.2 Môi trường thực nghiệm và dữ liệu test: 45

3.2.1 Môi trường thực nghiệm: 45

3.2.2 Bộ dữ liệu Test: 46

3.3 Kết quả thực nghiệm: 48

3.3.1 Kết quả thực nghiệm: 48

3.3.2 So sánh thời gian thực thi giữa SW nguyên thủy và cắt tỉa trên CPU: 49

3.3.3 So với thuật toán Smith-Waterman xử lý song song: 49

3.3.4 So sánh với thuật toán Smith-Waterman cắt tỉa và tối ưu hóa band của nhóm nghiên cứu người Nhật: 50

KẾT LUẬN: 51

DANH MỤC TÀI LIỆU THAM KHẢO 52

Trang 7

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

CPU Central Processing Unit Bộ xử lý trung tâm

GPU Graphics Processing Unit Bộ xử lý đồ họa

VGA Video Graphic Array Card đồ họa

SM Stream Multiprocessing Dòng đa xử lý

Trang 8

DANH SÁCH CÁC BẢNG

Hình 2.1: Mô hình tổng quát tính điểm số của ma trận 17 Hình 2.2: Ví dụ đoạn tương đồng của hai trình tự 23 Hình 2.3: Mô hình tổng quát biểu diễn trình tự tương đồng (Nguồn [5]) 24 Hình 2.4: Biểu diễn bắt cặp trình tự của ba chuỗi Sa, Sb, Sc trên chuỗi Sa 26 Hình 2.5: Sự trùng khớp và không trùng khớp của ba trình tự (Nguồn [5]) 27 Hình 2.7: Cách song song thuật toán SW trong giai đoạn điền ma trận 30Bảng 3.1: Bảng đặc điểm kỹ thuật máy tính thực nghiệm 46

Trang 9

DANH SÁCH CÁC HÌNH

Hình 1.1: Cấu trúc GPU (Graphics Pipeline) 6

Hình 1.2: Mô hình nền tảng của OPENCL (Nguồn Khronos 2011) 8

Hình 1.3: Hệ thống của OPENCL 8

Hình 1.4: Work-group và Work-item (Nguồn [10]) 9

Hình 1.5: Trình biên dịch của OPENCL 10

Hình 1.6: Memory Model của OPENCL (Nguồn Khronos 2011) 11

Hình 2.1: Mô hình tổng quát tính điểm số của ma trận 17

Hình 2.2: Ví dụ đoạn tương đồng của hai trình tự 23

Hình 2.3: Mô hình tổng quát biểu diễn trình tự tương đồng (Nguồn [5]) 24

Hình 2.4: Biểu diễn bắt cặp trình tự của ba chuỗi Sa, Sb, Sc trên chuỗi Sa 26

Hình 2.5: Sự trùng khớp và không trùng khớp của ba trình tự (Nguồn [5]) 27

Hình 2.6: Tính điểm số Hi,j (Nguồn [5]) Error! Bookmark not defined Hình 2.7: Cách song song thuật toán SW trong giai đoạn điền ma trận 30

Hình 3.1: Kết quả bắt cặp trình tự cặp (2) - (3) dùng SW nguyên thủy 44

Hình 3.2: Kết quả bắt cặp trình tự cặp (2) - (3) dùng SW cắt tỉa trên CPU 44

Hình 3.3: Kết quả bắt cặp trình tự cặp (2) - (3) dùng SW cắt tỉa trên GPU 45

Hình 3.4: Cấu trúc của file input cho giải thuật SW cắt tỉa 46

Hình 3.5: Ví dụ file input cho thuật toán 47

Hình 3.6: Kết quả thực nghiệm trên 4 môi trường 48

Hình 3.7: Thời gian thực thi của giải thuật SW nguyên thủy và cắt tỉa trên CPU 49

Hình 3.8: Thời gian thực thi của giải thuật SW song song và SW song song, cắt tỉa 50

Trang 10

MỞ ĐẦU

Công nghệ thông tin là một trong những ngành khoa học kỹ thuật có tính phổ dụng rộng rãi, được áp dụng trong nhiều lĩnh vực khác nhau Trong đó, không thể không kể đến việc ứng dụng công nghệ thông tin trong công nghệ sinh học Và chính

sự hội tụ của hai nền khoa học lớn này đã hình thành một ngành khoa học đã và đang phát triển khá mạnh mẽ đó chính là ngành Tin sinh học (Bioinformatics) Từ khi Tin sinh học ra đời, nó đã trở thành một công cụ hỗ trợ đắc lực trong việc nghiên cứu và ứng dụng các sáng chế, phát minh của ngành công nghệ sinh học vào thực tiễn Trong những năm gần đây, các nhà khoa học trong lĩnh vực sinh học đã phát hiện ra những cấu trúc sinh học phân tử mới và xây dựng thành một hệ thống cơ sở

dữ liệu sinh học phân tử khá lớn tập trung thành các ngân hàng dữ liệu (GenBank, EMBL, DDBJ) Tháng 08 năm 2015, GenBank đã công bố có 199.823.644.287 bases,

từ 187.066.846 sequences trong hệ thống ngân hàng dữ liệu của đơn vị này

Tuy nhiên, Với dữ liệu lớn thì việc tìm kiếm dữ liệu hoặc tìm kiếm sự tương đồng trong database sẽ tốn rất nhiều chi phí về mặt thời gian, đặc biệt là bài toán bắt cặp trình tự sinh học Có nhiều thuật toán được xây dựng để giải quyết bài toán bắt cặp trình tự sinh học, và mỗi thuật toán lại có tính ưu việt khác nhau về mặt thời gian hoặc hiệu quả thực hiện Thuật toán Smith-Waterman thường được áp dụng để giải quyết bài toán bắt cặp trình tự sinh học vì thuật toán này cho kết quả có độ chính xác cao, tuy nhiên giải thuật này lại mất khá nhiều thời gian thực hiện Để nâng cao tính hiệu quả của giải thuật Smith-Waterman và góp phần cải thiện thời gian thực hiện của thuật toán này, luận văn sẽ tập trung vào việc đẩy mạnh thời gian thực hiện của giải thuật dựa trên nền tảng các GPU Luận văn được đề xuất với tên như sau: “Giải pháp tăng tốc độ xử lý thuật toán Smith-Waterman”

Trong những năm gần đây, các nhà khoa học trong lĩnh vực tin sinh học trên thế giới

đã nghiên cứu những phương pháp để cải tiến và tối ưu hóa thuật toán Smith-Waterman trong quá trình bắt cặp trình tự sinh học

Các nhà nghiên cứu thuộc Trường Đại học Bách khoa Hà Nội đã công bố công trình nghiên cứu của mình với việc sử dụng hệ thống máy tính lớn tích hợp card đồ họa trong

Trang 11

việc bắt cặp đa trình tự bằng thuật toán Smith-Waterman, nhóm nghiên cứu đã cài đặt thuật toán Smith-Waterman trên Cluster được trang bị card đồ họa NVIDIA GPU (hay một cụm GPU) [3] Trong quá trình thực hiện, tác giả đã thực nghiệm trên một hệ thống cluster gồm hai nút, một nút được trang bị card đồ họa kép NVIDIA GeForce GTX 295,

mô ̣t card Tesla C1060, và nút còn lại được trang bị 2 card đồ họa kép NVIDIA GeForce GTX 295 Kết quả của thực nghiệm cho thấy, hiệu suất đã tăng lên rất nhiều

so với các phương pháp trước đây như SWPS3 hoặc CUDASW Từ kết quả thực nghiệm của mình, nhóm nghiên cứu đã cho thấy vai trò và sức mạnh điện toán lớn của card đồ

họa trong quá trình xử lý một số vấn đề về tin sinh học, đặc biệt là trong bắt cặp trình tự

Tháng 06 năm 2014, nhóm nghiên cứu gồm PGS.TS Trần Văn Lăng và Chung Khánh Duy đã ứng dụng công nghệ OPENCL vào việc song song hóa thuật toán Smith-Waterman bằng cách tính toán cùng lúc ma trận con hình vuông với kích thước k theo hướng đường chéo, đồng thời xác định hàm số biến thiên theo k dựa trên kết quả thực nghiệm đạt được Mặt khác, nhóm nghiên cứu cũng đã xác định được giá trị k phù hợp nhất để thời gian thực hiện song song hóa thuật toán Smith-Waterman là tối ưu nhất Nhóm tác giả đã ứng dụng thành công khả năng tương thích với nhiều loại thiết bị khác nhau của OPENCL vào nghiên cứu của mình Trong quá trình nghiên cứu, nhóm tác giả

đã sử dụng phần cứng của Intel để minh họa OPENCL thay vì được minh họa trên nền tảng NVIDIA, và đây là vấn đề mà CUDA chưa thể làm được, đó là thực thi trên đa nền tảng Kết quả thực nghiệm cho thấy rằng: thời gian thực thi của việc song song thuật toán Smith-Waterman bằng OPENCL đã được cải thiện gấp 3 lần so với giải thuật tính toán tuần tự của thuật toán Smith-Waterman nguyên thủy [2] Tuy nhiên trong quá trình thực nghiệm, nhóm nghiên cứu chỉ áp dụng trên nền tảng OPENCL 1.1 đã được xây dựng vào năm 2010, mà chưa áp dụng trên nền tảng mới hơn là OPENCL 2.0 được phát triển vào năm 2012 (năm 2015 đã có phiên bản 2.1) Mặt khác, do điều kiện nên nhóm nghiên cứu chỉ thực nghiệm trên Intel core I5 nên tốc độ cải thiện thuật toán Smith-Waterman so với thuật toán nguyên thủy là chưa cao

Ngoài ra, trong những tháng đầu năm 2015, nhóm nghiên cứu người Nhật gồm Daiki Okada, Fumihiko Ino và Kenichi Hagihara đã tìm ra phương pháp nhằm tối ưu hóa thuật

Trang 12

toán Smith-Waterman bằng cách loại bỏ những cặp interpair trong quá trình bắt cặp trình

tự Nhóm nghiên cứu đã tích hợp việc cắt tỉa các cặp interpair và kết hợp thuật toán Millers để cắt tỉa các tế bào trên hai ma trận của GPU, trên nền tảng CUDA Trong quá trình thực nghiệm, nhóm nghiên cứu cũng đã kế thừa những phương pháp của các nhà nghiên cứu trước đó và cũng đưa ra một phương pháp mới nhằm cải thiện quá trình so sánh tất cả các cặp trong bài toán bắt cặp trình tự Mặt khác, nhóm tác giả cũng nhận thấy những ưu điểm và khuyết điểm mà các tác giả trước đã đưa ra, và nhóm đưa ra một phương pháp riêng cho mình Việc cắt tỉa và tối ưu này có thể thực hiện trên tất cả các cặp trong quá trình so sánh bắt cặp trình tự của cùng một loài Và phương pháp của nhóm nghiên cứu đã làm cho thuật toán Smith-Waterman được tối ưu ở giai đoạn đầu của thuật toán Tuy nhiên, quá trình cắt tỉa này sẽ không hiệu quả đối với việc bắt cặp trình tự khác

Myer-loài [5]

Trang 13

CHƯƠNG 1- CƠ SỞ LÝ THUYẾT 1.1 Tổng quan về GPU:

Trong kiến trúc của máy tính, bộ vi xử lý trung tâm (CPU) là một bộ phận quan trọng để vận hành máy tính, là khối điều khiển, xử lý các chương trình và dữ kiện Tuy nhiên đối với những ứng dụng đòi hỏi tốc độ xử lý cao thì CPU có thể không thể đáp ứng, đặc biệt là trong lĩnh vực đồ họa, game 3D Vì vậy, để tăng tốc độ xử lý và thực thi chương trình, người ta bổ sung GPU vào hệ thống máy tính, vậy GPU là gì

và phương thức tăng tốc độ xử lý của nó trong hệ thống máy tính như thế nào, những điều này sẽ được trình bày cụ thể dưới đây

1.1.1 GPU là gì:

GPU (Graphics Processing Unit) là bộ vi xử lý chuyên dụng có nhiệm vụ tăng tốc,

xử lý đồ họa cho bộ vi xử lý trung tâm CPU nhằm tăng tốc các ứng dụng đồ họa, ứng dụng khoa học, kỹ thuật và phân tích dữ liệu lớn GPU có thể đẩy nhanh tốc độ xử lý

ở nhiều môi trường khác nhau: máy tính (máy tính cá nhân, máy trạm, máy chơi game chuyên dụng), điện thoại di động, máy tính bảng, robot, …

Với mục đích nhằm tăng tốc độ xử lý cho CPU nên GPU được ứng dụng trong nhiều lĩnh vực khác nhau Tuy nhiên, trong lĩnh vực đồ họa, đặc biệt là đồ họa 3D thì GPU được ứng dụng rộng rãi, vì GPU là một bộ vi xử lý chuyên biệt được xây dựng nhằm thực hiện các phép toán đặc biệt cần thiết cho các ứng dụng đồ họa 3D Ngoài

ra, GPU còn được sử dụng trong việc tăng tốc các video theo chuẩn Adobe Flash, chuyển đổi giữa các định dạng video, ví dụ từ AVI sang MP4, nhận diện hình ảnh

và hỗ trợ nhận diện virus

1.1.2 Lịch sử phát triển của GPU:

Nửa cuối thập niên 1970, hàng loạt các thiết bị đồ họa ra đời làm tiền đề cho ngành công nghiệp đồ họa 3D sau này Điển hình là Chip video “Pixie” CDP1861 của RCA dùng để cung cấp đầu ra cho tín hiệu video tương thích NTSC có độ phân giải 62x128 hoặc 64x32 trên các thiết bị Consol RCA Studio II [2, trang 7]

Và trong khoảng 17 năm gần đây, GPU đã phát triển rất mạnh mẽ với nhiều cải

Trang 14

tiến, bổ sung, đặc biệt là những linh kiện phần cứng nhằm tăng tốc độ xử lý của trình điều khiển VGA (Video Graphic Array) Khi GPU mới xuất hiện thì chưa có khả năng lập trình mở rộng, sau thời gian phát triển và cải tiến thì việc lập trình mở rộng trở nên khá dễ dàng

GPU đã vượt qua CPU về khả năng tính toán số học và băng thông bộ nhớ, chúng trở nên khá lý tưởng để đẩy nhanh tốc độ xử lý dữ liệu song song cho nhiều ứng dụng khác nhau

Không chỉ tập trung vào việc phát triển những dòng sản phẩm chuyên xử lý các ứng dụng đồ họa, các nhà nghiên cứu đã khai thác hiệu quả xử lý của GPU ở nhiều lĩnh vực khác như y khoa, điện tử, … Từ đó, GPU được sử dụng để thực thi các ứng dụng điện toán đa dụng, từ đó hình thành GPGPU (điện toán đa dụng) Mặc dù, GPGPU đã thể hiện tính ưu việt của mình trong quá trình xử lý dữ liệu nhưng nó cũng gặp phải nhiều vấn đề lớn như: trình độ của người lập trình viên, thuật ngữ của chương trình (xác định tọa độ đỉnh, kết cấu và đổ bóng), truy cập bộ nhớ ngẫu nhiên chưa được hỗ trợ, tính chính xác kép chưa được hỗ trợ nên có một số ứng dụng không thể thực thi trên môi trường GPU

1.1.3 Cấu trúc của GPU và cơ chế song song ứng dụng:

Những GPU phổ biến ngày nay được cấu trúc theo một kiểu được gọi là ống

đồ họa (graphics pipeline - GPs) Một ống đồ họa bao gồm nhiều giai đoạn, mỗi giai đoạn được xử lý trên GPU bởi những bộ xử lý song song Mỗi GPUs bao gồm nhiều streaming multiprocessors (SMs) và mỗi SM thường từ 8 – 32 SIMT (Single instruction, multiple thread) Ví dụ: Fermi series của Nvidia có 16 SM có chiều rộng

là 32 SIMT Chính nhờ vào các yếu tố này mà ngoài chức năng xử lý đồ họa, GPU được ứng dụng rộng rãi trong quá trình tính toán song song dữ liệu

Việc tính toán trong GPU có nhiều mô hình xử lý khác nhau: mô hình xử lý

đa luồng thread, mô hình truyền thông điệp và mô hình xử lý song song Mỗi mô hình

có một chức năng và đặc điểm riêng, nhưng tất cả các mô hình nhằm tăng khả năng tính toán dữ liệu của GPU

Trang 15

Hình 1.1: Cấu trúc GPU (Graphics Pipeline)

- Mô hình đa luồng xử lý là mô hình lập trình dưới dạng chia sẻ bộ nhớ, trong cùng một tiến trình có thể có nhiều luồng xử lý được xử lý song song cùng lúc Các luồng có thể chia sẻ dữ liệu cho nhau trong quá trình tính toán, do đó có thể giảm thiểu tài nguyên bộ nhớ được sử dụng

- Mô hình truyền thông điệp: có ứng dụng rộng rãi trong hệ thống phân tán Mô hình này có một số đặc điểm như sau: Tất cả các task đều sử dụng chung một vùng nhớ cục bộ trong suốt quá trình tính toán Tuy nhiên, các task có thể nằm trên nhiều máy khác nhau, không chỉ riêng ở một máy Vì vậy, các task trao đổi dữ liệu với nhau bằng các thông điệp, điều này đòi hỏi sự hợp tác và tương thích giữa vác tiến trình trong quá trình gửi và nhận

- Mô hình song song dữ liệu: việc tính toán sẽ được chia nhỏ từ các mẫu dữ liệu lớn, việc trao đổi dữ liệu với nhau thông qua một địa chỉ không gian bộ nhớ toàn cục Tập hợp các task có liên quan đều xử lý mẫu dữ liệu có cùng cấu trúc, tuy nhiên mỗi task sẽ làm việc trên mỗi vùng dữ liệu khác nhau

1.2 Tổng quan về OPENCL

1.2.1 Giới thiệu về OPENCL:

OpenCL (Open Computing Language) là một chuẩn lập trình mã nguồn mở miễn phí sử dụng ngôn ngữ OPENCL-C dựa trên những tiêu chuẩn của C99 và IEEE-754 (chuẩn dấu chấm động cho số học), do đó, cấu trúc lệnh của OPENCL hoàn toàn giống với ngôn ngữ lập trình C

OPENCL được đề xuất và phát triển bởi Apple, sau đó được các hãng khác phát triển thêm dưới sự hợp tác của Apple và AMD, Intel, IBM và NVIDIA Nhưng sau

Trang 16

đó, Apple đã sang nhượng lại cho Khrosnos Group, là tổ chức đang nắm giữ các chuẩn khác như OPENGL, OPENAL, …Phiên bản OPENCL 1.0 đã được phát hành chính thức vào ngày 18/12/2008 Và sau đó, các hãng NVIDIA, AMD đã phát triển và công

bố những công cụ hỗ trợ để phát triển chương trình trên nền tảng OPENCL; và tháng 11/2015 đã ra mắt phiên bản 2.1

Phiên bản 2.1 là phiên bản đầu tiên có hạt nhân dựa trên nền tảng ngôn ngữ C++

Do mới được phát triển về sau này, nên trong phiên bản 2.1 được thừa hưởng những

ưu điểm và khắc phục tương đối những hạn chế, nhược điểm của ngôn ngữ C và C++ Trong phiên bản 2.1, thư viện của OPENCL C là một thư viện con được chứa trong thư viện của OPENCL C++, vì mục tiêu phát triển của phiên bản này đó chính là tạo điều kiện thuận lợi nhất cho tất cả các lập trình viên khi tham gia phát triển các ứng dụng sử dụng ngôn ngữ OPENCL

OPENCL đã được phát triển theo xu hướng cross-platform, độc lập với hạ tầng phần cứng và tận dụng được tối đa các thiết bị này trong quá trình tính toán song song trên các thiết bị, kể cả trên GPU Ngoài ra, OPENCL không chỉ hỗ trợ lập trình song song xử lý các tác vụ (task-parallel programming) mà còn hỗ trợ lập trình song song

dữ liệu (data-parallel programming) Bên cạnh đó, OPENCL có thể được thực thi trên nhiều hệ điều hành khác nhau từ IOS, Linux cho đến Windows

1.2.2 Cấu trúc của OPENCL:

Sự vận hành của OpenCL được mô tả bởi cụm các model có mối liên hệ với nhau, bao gồm Platform Model (mô hình nền tảng), Execution Model (mô hình thực thi), Memory Model (mô hình bộ nhớ), và Programming Model (mô hình lập trình)

a) Platform Model:

Mô hình nền tảng OPENCL được định nghĩa là một máy chủ (host) kết nối với một hoặc nhiều thiết bị OPENCL Mô hình nền tảng bao gồm một máy chủ (host device) –điều khiển chương trình hoạt động – và các đơn vị tính toán, đơn vị xử lý

Trang 17

Hình 1.2: Mô hình nền tảng của OPENCL (Nguồn Khronos 2011)

Một máy chủ là một máy tính bất kỳ với CPU và một hệ điều hành chuẩn (Windows, Linux, IOS, …) Thiết bị OPENCL có thể là một GPU hoặc CPU đa lõi, một thiết bị OPENCL bao gồm một hay nhiều đơn vị tính toán Khi chương trình thực thi, máy chủ sẽ tạo ra một môi trường ảo (context) và cung cấp các thiết bị tính toán (compute device) cùng với khoảng vùng nhớ nhất định mà chương trình sẽ sử dụng Bên cạnh đó một “hàng đợi lệnh thực thi” (command queue) cũng sẽ được tạo ra để chương trình có thể điều phối các lệnh trong kernel và thực hiện các thao tác truy xuất tới bộ nhớ Tốc độ truy xuất giữa các device sẽ chậm hơn rất nhiều so với tốc độ giao tiếp nội bộ của các thành phần trong device đó và bản thân host device

Hình 1.3: Hệ thống của OPENCL

b) Execution Model:

Mô hình thực thi bao gồm hai thành phần chính: kernel và host program

Trang 18

Kernel: là một đơn vị cơ bản của tập các lệnh được viết ra để thực thi trên một hay nhiều thiết bị OpenCL device Việc tính toán song song trên các thiết bị tính toán trong OPENCL được xác định bằng cách định nghĩa việc tính toán trong một không gian chỉ mục N chiều (index space) Khi một kernel được xếp trong hàng đợi để chờ thực thi bởi host program thì một không gian chỉ mục được định nghĩa Mỗi phần tử thực thi độc lập trong không gian chỉ mục được gọi là đơn vị xử lý (work-item), các đơn vị xử lý thực thi trên một cùng một kernel nhưng trên vùng dữ liệu khác nhau

Để lưu trữ tất cả các đơn vị xử lý thì một không gian chỉ mục cần phải được định nghĩa khi một kernel command được đặt vào command queue

Hình 1.4: Work-group và Work-item (Nguồn [10])

Khi thực thi các kernel sẽ được biên dịch thành các kernel object, program object cũng được biên dịch từ các program Khi chương trình được thực thi trên một thiết bị nào đó thì sẽ tính toán được số lượng đơn vị xử lý tương ứng trong một không gian chỉ mục nhất định Không gian chỉ mục trong OPENCL hỗ trợ tối đa 3 chiều, khi N=1 xử lý các dữ liệu một chiều, N=2 thường xử lý ảnh và N=3 thường được sử dụng để xử lý các ảnh 3D

OPENCL có cơ chế đồng bộ tính toán giữa các work-item trong work-group nhưng không hỗ trợ giữa các work-group với nhau Và mỗi work-item có một mã định danh duy nhất (global ID) để xác định trong không gian chỉ mục Tương tự, mỗi workgroup cũng sẽ có một định danh duy nhất work-group ID, để xác định vị trí của

Trang 19

group trong index space OPENCL cũng cho phép định vị trí của một item trong work-group thông qua local ID

work-Hình 1.5: Trình biên dịch của OPENCL

Host program: Các host program chịu trách nhiệm cho việc thiết lập và quản lý việc thực hiện của các kernel trên các thiết bị của OPENCL thông qua các context Thông qua việc sử dụng các OPENCL API, máy chủ có thể tạo và tương tác với các context thông qua các thiết bị được thêm vào: Device, Program object, Kernel và Memory Object Sau khi context được tạo, thì hàng đợi lệnh cũng được tạo để quản

lý việc thực hiện của các kernel trên các OPENCL Device gắn với các context Command queue có 3 loại: Kernel Execute command (Chỉ thị thực thi Kernel), Memory command (chỉ thị bộ nhớ), Synchronization command (Chỉ thị đồng bộ)

c) Memory Model:

Mô hình bộ nhớ trong OPENCL được phân chia thành 4 vùng nhớ chính:

Private memory, Local memory, Global/ Constant memory và Host memory Mỗi vùng nhớ có một chức năng và nhiệm vụ khác nhau, cụ thể như sau:

- Private memory là vùng nhớ được truy xuất bởi các work-item

- Local memory là vùng nhớ dùng để chia sẻ dữ liệu giữa các work-items trong cùng một work-group Các work-item có quyền đọc và ghi dữ liệu trong local memory

- Constant memory là vùng nhớ toàn cục, không thay đổi trong suốt quá trình làm việc của các kernel và là một vùng trên global memory Các work-item thì chỉ có thể truy xuất vào vùng nhớ này, riêng máy host thì có thể đọc và ghi dữ liệu trong

Trang 20

vùng nhớ này Giá trị trên constant memory được cung cấp bởi host application

- Global memory là vùng bộ nhớ mà tất cả các work-item hoặc work-group có thể truy xuất đọc và ghi Vùng bộ nhớ này được cấp phát duy nhất trong suốt quá trình chương trình host đang chạy và được mô tả bởi platform model

Hình 1.6: Memory Model của OPENCL (Nguồn Khronos 2011)

Việc sử dụng bộ nhớ hiệu quả và tốc độ phụ thuộc rất nhiều vào cách dùng bốn loại bộ nhớ trên Trong đó private memory và local memory cho tốc độ cao nhất, vùng nhớ cho tốc độ truy xuất chậm chính là global memory

d) Programming Model:

OPENCL hỗ trợ hai mô hình lập trình song song: song song dữ liệu

(data-parallel) và song song tác vụ (task-(data-parallel) Các tiến trình song song dữ liệu thực thi nhiều instance có cùng kernel một cách đồng thời, mỗi instance xử lý một tập dữ liệu riêng biệt Mỗi tập dữ liệu liên kết với một điểm trong không gian chỉ mục một, hai hay ba chiều Song song tác vụ lại tương tự như những tiến trình thực thi đa luồng có tính chất độc lập nhau, mỗi process thực hiện những nhiệm vụ khác nhau Trong OpenCL, lập trình song song tác vụ bao gồm việc lập hàng đợi nhiều kernel, và để OpenCL thực hiện chúng một cách song song sử dụng các thiết bị tính toán có thể có

Trang 21

1.2.3 Quy trình phát triển một chương trình OPENCL:

Để viết một chương trình OPENCL cần phải trãi qua các bước sau:

- Xác định nhiệm vụ cần thực hiện song song: Việc xác định các nhiệm vụ cần

thực hiện song song sẽ giúp cho chương trình có thể chạy với hiệu suất cao nhất, đồng thời sẽ giúp người lập trình có thể lập ra cấu trúc bộ nhớ và tính toán được chi phí của

chương trình

- Viết các kernel và các hàm bổ trợ: Để thực hiện tính toán song song trên

OpenCL device, bắt buộc phải viết các kernel Các kernel được đóng gói và biên dịch

khi chương trình thực thi

- Setup context: Sử dụng các hàm có trong OpenCL framework để tìm và quyết

định thiết bị nào sẽ dùng trong chương trình Sau đó khởi tạo môi trường ảo bao gồm

memory object và command queue

- Viết mã lệnh để biên dịch và build chương trình OpenCL: Sau khi đã xác định

được OpenCL device và setup context, chúng ta sẽ viết mã lệnh cho host application

để biên dịch mã nguồn chương trình và sử dụng các kernel object từ mã nguồn đã biên dịch Các lệnh sau được thực hiện liên tục theo thứ tự

- Khởi tạo các đối tượng memory object: Để giữ các dữ liệu nhập xuất và trả về

giá trị cho các đối số đầu vào (input object), memory object tham gia vào nhiệm vụ

thao tác vùng nhớ giữa host device và OpenCL device

- Lập hàng đợi lệnh có thứ tự (enqueue command) để điều khiển việc thực thi liên tục và đồng bộ các kernel, đọc và ghi dữ liệu và thao tác trên các memory object

- Đọc giá trị trả về: Enqueue command để đọc giá trị xuất từ work-item và đưa

nó vào host memory

1.3 Bài toán bắt cặp trình tự:

Bắt cặp trình tự hay so sánh trình tự nhằm tìm đến sự tương đồng giữa các trình tự bằng cách đo lường sự giống nhau của các chuỗi trình tự Các chuỗi trình tự

ở đây chính là các chuỗi trình tự ADN, RNA hoặc các trình tự amino acid (protein)

Và việc bắt cặp trình tự được thực hiện bằng cách thêm “gap” vào những vị trí sao cho các cột tương đồng nhau

Trang 22

Ví dụ: cho trình tự a: AGTGACT, trình tự b: ATGCT, kết quả của quá trình bắt cặp trình tự là:

AGTGACT

| | | | | A– TG– CT

Để đánh giá được mức độ tương đồng của các trình tự, áp dụng công thức sau:

𝒏𝒂 𝒙 𝒎𝒂𝒕𝒄𝒉 + 𝒏𝒊 𝒙 𝒎𝒊𝒔𝒎𝒂𝒕𝒄𝒉 + 𝒏𝒈 𝒙 𝒈𝒂𝒑 (1.1)

Trong đó: na, ni, ng lần lượt là số các phần tử giống nhau, không giống nhau và số các gap được thêm vào; match, mismatch và gap lần lượt là các chỉ số tính toán để tìm ra mức độ tương đồng (match >0)

Ví dụ: Cho trình tự a: AGTGACT, trình tự b: ATGCT, match= 2, mismatch = -1 và gap = -2 Với kết quả của trình tự:

AGTGACT

| | | | | A– TG– CT

Theo công thức (1.1) ta có: na = 5, ni=2, ng=2  5 * (2) + 2 *(-1) + 2 *(-2) = 4 Vậy mức độ tương đồng của hai trình tự là 4 điểm

1.4 Các thuật toán giải quyết bài toán bắt cặp trình tự sinh học:

Có nhiều thuật toán được xây dựng đẻ giải quyết bài toán bắt cặp trình tự: thuật toán Needleman-Wunsch, Smith-Waterman, Blast, … Thuật toán Needleman-Wunsch và Smith-Waterman đều dựa trên cơ chế quy hoạch động, tuy nhiên mỗi giải thuật lại có một phương pháp xử lý và tìm kiếm khác nhau

Đối với thuật toán Needleman-Wunsch áp dụng cho bài toán bắt cặp trình tự toàn bộ, tính toán điểm tương đồng của toàn bộ chuỗi trình tự Thuật toán Smith-Waterman thì chỉ tính toán một đoạn tương đồng trong chuỗi trình tự có điểm số tương đồng tối ưu nhất Vì vậy thuật toán này chỉ áp dụng để giải quyết bài toán bắt cặp trình tự cục bộ Giải thuật Smith-Waterman có nhiều ưu điểm vượt trội, song vẫn tồn tại những hạn chế khá lớn của giải thuật này đó chính là tốc độ xử lý thuật toán

Trang 23

khá chậm, tốn nhiều thời gian để xử lý, đặc biệt là các chuỗi trình tự có độ dài của trình tự khá lớn (ví dụ vi khuẩn bacillus có độ dài trình tự lên đến 5 triệu) Vì thế, luận văn này nghiên cứu phương pháp cải tiến tốc độ xử lý thuật toán trên môi trường CPU và GPU, phương pháp này sẽ được trình bày cụ thể trong chương hai

TIỂU KẾT CHƯƠNG 1

Trong chương này giói thiệu một cách tổng quát nhất những nội dung cơ bản

về GPU: tổng quan về GPU, cấu trúc, vai trò của nó trong hệ thống máy tính, đặc biệt

là trong quá trình tính toán song song Đồng thời, chương này cũng đã trình bày một cách cơ bản về tổng quan ngôn ngữ lập trình OPENCL từ quá trình phát triển cho đến các thành phần hay cấu trúc của OPENCL Mặt khác, qua chương này cũng hiểu được quy trình viết một chương trình trên nền tảng OPENCL

Mặt khác, trong chương một cũng đã giới thiệu tổng quát về bài toán bắt cặp trình tự là gì, làm thế nào biết độ tương đồng của các trình tự Các phương pháp để giải quyết bài toán bắt cặp trình tự (toàn cục và cục bộ) Ngoài ra, chương một cũng

đã đánh giá sơ bộ tốc độ của từng giải thuật trong quá trình giải quyết bài toán bắt cặp trình tự

Trang 24

CHƯƠNG 2 - NGUYÊN LÝ ĐẨY NHANH THUẬT TOÁN SMITH-WATERMAN TRONG MÔI TRƯỜNG CPU-GPU 2.1 Thuật toán Smith-waterman nguyên thủy:

2.1.1 Giới thiệu:

Thuật toán Smith-Waterman là giải thuật giải quyết bài toán bắt cặp trình tự cục bộ, nhằm tìm ra những đoạn có điểm tương đồng về cấu trúc hoặc chức năng giữa các trình tự sinh học, nucleotide hoặc các chuỗi protein

Thuật toán này được F Smith và Michael S Waterman đề xuất vào năm 1981

2.1.2 Nguyên lý hoạt động:

Thuật toán Smith-Waterman là thuật toán sử dụng phương pháp quy hoạch động

để định lượng các điểm số cho quá trình bắt cặp trình tự Giai đoạn backtracking được bắt đầu từ ô có điểm số cao nhất và điểm số tương đồng thu được cho đến khi bắt gặp

ô có giá trị bằng 0, vì vậy điểm số tương đồng thu được là cao nhất Bằng cách tìm kiếm những điểm cao nhất trong ma trận, thì việc bắt cặp trình tự sẽ cho một kết quả tối ưu nhất

Do áp dụng phương pháp quy hoạch động nên trong quá trình tính toán, giải thuật sử dụng ma trận để ghi nhận điểm số và áp dụng công thức sau:

Hi0=0 với ∀𝑖 = 0, 𝑛, H0j=0 với ∀𝑗 = 0, 𝑚 (2.1)

Hij=max(0, 𝐻𝑖−1,𝑗−1+ 𝜎𝑖𝑗, 𝐻𝑖−1,𝑗 + 𝑑, 𝐻𝑖,𝑗−1+ 𝑑) , ∀𝑖 = 0, 𝑛, ∀𝑗 = 0, 𝑚 (2.2)

𝜎𝑖𝑗 = { 𝑚𝑎𝑡𝑐ℎ

𝑚𝑖𝑠𝑚𝑎𝑡𝑐ℎ và d=gap Trong đó:

- n là độ dài của trình tự Sa,

- m là độ dài trình tự Sb,

- Hij là ma trận điểm số

- d là giá trị của gap

- match và mismatch lần lượt là điểm số trùng khớp và không trùng khớp của Sai

và Sbj, giả sử rằng điểm số match luôn dương (match ≥ 0)

Trang 25

Để giải quyết bài toán bắt cặp trình tự cục bộ, giải thuật trãi qua các bước sau: Bước 1: Khởi tạo ma trận, áp dụng công thức (2.1)

Bước 2: Tính toán điểm số và điền ma trận, áp dụng công thức (2.2)

Bước 3: Tìm điểm số max trong ma trận Hi,j

Bước 4: Tìm dấu vết dựa trên ma trận vừa tính ở trên

Bước 5: Kết quả bắt cặp trình tự

Để minh họa cho các bước của giải thuật, tìm hiểu ví dụ sau (ví dụ 1): cho trình

tự A: CGTGAATTCAT, trình tự B: GACTTAC, cho các giá trị match = 2, mismatch=-1, gap = -1; n, m: lần lượt là độ dài của chuỗi trình tự A, B

Bước 1: Khởi tạo ma trận n x m +1, áp dụng công thức (2.1):

Trang 27

Ta có kết quả của quá trình tính toán với i=1 như sau:

Bảng 2.2: Tính toán và điền điểm số

Trang 28

Trong quá trình điền ma trận, có thể kết hợp với việc tìm vị trí có điểm số cao nhất và lưu lại vị trí của điểm số max, nhằm giảm thiểu quá trình tìm kiếm ở các bước sau Tuy nhiên, khi kết hợp việc tính toán điểm số và lưu lại điểm số cao nhất thì giải thuật chỉ tìm được một trình tự nhất định Vì vậy, khi muốn tìm tất cả các trình tự tương đồng giữa các trình tự thì cần sử dụng một bước tìm giá trị max và lưu tất cả các giá trị max và mảng và bước tìm dấu vết cũng sẽ dựa vào tổng số các giá trị max(Hi,j)

Bước 3: Tìm điểm số max trong ma trận H i,j :

Xuất phát từ i=1,j=1 và max_H = H11 cho đến i=n và j=m, nếu max_H <Hij thì max_H sẽ được gán bằng giá trị của Hij, đồng thời lưu lại vị trí của điểm số max,

imax = i và jmax = j

Bước 4: Tìm dấu vết:

Bước tiếp theo của giải thuật là tìm dấu vết, nhưng trước tiên chúng ta phải tìm ra điểm số tối đa trong toàn bộ ma trận, có thể có sự trùng lặp các điểm số tối đa, tức là trong ma trận có cùng một giá trị điểm số tối đa, trong ví dụ trên chúng ta thấy

có 2 điểm số tối đa max(Hi,j) = 8 điểm Trong trường hợp này thì chúng ta sẽ có hai liên kết trình tự và có một liên kết được gọi là tối ưu nhất

Xuất phát từ Hnmax,mmax, nếu:

– Hij = Hi-1,j-1 + σij thì vết (i,j) → (i-1,j-1) theo đường chéo

– Hij = Hi,j-1 + d thì vết (i,j) → (i,j-1) đi lui

– Hij = Hi-1,j + d thì vết (i,j) → (i-1,j) đi lên

Đối với ví dụ trên ta có 2 trường hợp sau:

 Trường hợp 1: vị trí max(Hi,j) = 8, với i=9 và j=7, ta có vết như sau:

Trang 30

Nếu:

– (i,j) →(i-1,j-1): theo đường chéo Ai và Bj được ghi vào

– (i,j) →(i-1,j): đi lên “-” và Bj được ghi vào

– (i,j) →(i,j-1): đi lui Ai và “-” được ghi vào

 Trường hợp 1: vị trí max(Hi,j) = 8, với i=9 và j=7, ta có điểm số tương đồng

2.1.3 Thuật toán và Đánh giá:

Thuật toán Smith-Waterman thực hiện theo trình tự 5 bước:

Bước 1: Khởi tạo ma trận:

H[i][0]=0, 0<=i<=n, n là chiều dài chuỗi trình tự A

H[0][j]=0, 0<=j<=m, m là chiều dài chuỗi trình tự B

Ngày đăng: 18/12/2016, 00:06

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Trần Văn Lăng (2008), Ứng dụng Tin học trong việc giải một số bài toán của Sinh học phân tử, NXB Giáo dục, 230tr Sách, tạp chí
Tiêu đề: Ứng dụng Tin học trong việc giải một số bài toán của Sinh học phân tử
Tác giả: Trần Văn Lăng
Nhà XB: NXB Giáo dục
Năm: 2008
[2] Trần Văn Lăng, Chung Khánh Duy(2014), “Song song hóa thuật toán Smith- Waterman bằng OPENCL”, DOI 10.15625, FAIR VII 2014-0389 Sách, tạp chí
Tiêu đề: Song song hóa thuật toán Smith-Waterman bằng OPENCL”
Tác giả: Trần Văn Lăng, Chung Khánh Duy
Năm: 2014
[3] Chung Khánh Duy (2014), “Song song dữ liệu trên bộ xử lý đồ họa và đa nhân”, Luận văn thạc sĩ, Học viện bưu chính viễn thông Sách, tạp chí
Tiêu đề: “Song song dữ liệu trên bộ xử lý đồ họa và đa nhân”
Tác giả: Chung Khánh Duy
Năm: 2014
[4] Nguyen T. Thuy, Nguyen H Duc, Pham H Phong, Pham M Ta, Nguyen N Duong, Le D Hung(2010), “Accelerating Smith-Waterman Local Sequence Alignment on GPU Cluster”, Annual International Conference on Advances in Distributed &amp;Par;Nov2010, pR181 Sách, tạp chí
Tiêu đề: Accelerating Smith-Waterman Local Sequence Alignment on GPU Cluster”, "Annual International Conference on Advances in Distributed &
Tác giả: Nguyen T. Thuy, Nguyen H Duc, Pham H Phong, Pham M Ta, Nguyen N Duong, Le D Hung
Năm: 2010
[5] DaikiOkada, FumihikoIno and KenichiHagihara (2015), “Accelerating the Smith- Waterman algorithm with interpair pruning and band optimization for the all-pairs comparison of base sequences”, Okadaetal. BMCBioinformatics (2015) 16:321 Sách, tạp chí
Tiêu đề: Accelerating the Smith-Waterman algorithm with interpair pruning and band optimization for the all-pairs comparison of base sequences”
Tác giả: DaikiOkada, FumihikoIno and KenichiHagihara
Năm: 2015
[6] Jonathan Tompson, Kristofer Schlachter (2012), “An Introduction to the OpenCL Programming Model” Sách, tạp chí
Tiêu đề: An Introduction to the OpenCL Programming Model
Tác giả: Jonathan Tompson, Kristofer Schlachter
Năm: 2012

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w