Ví dụ tính toán song song bằng CUDA

Một phần của tài liệu nghiên cứu các giải thuật song song trên hệ thống xử lý đồ họa GPU đa lõi (Trang 66 - 90)

2.2.7.1. Cộng hai ma trận

Mô tả bài toán

Cộng hai ma trận A[n][m] và B[n][m], kết quả trả về ma trận C[n][m].

Hình 1.1. Cộng hai ma trận

Cộng hai ma trận A[n][m] và B[n][m], kết quả trả về ma trận C[n][m]. Hàm thực thi tại GPU:

__global__ void kernel(int *devMatrixA, int *devMatrixB, int *devMatrixC) {

int tidX = blockIdx.x * blockDim.x + threadIdx.x;

devMatrixC[tidX] = devMatrixA[tidX] + devMatrixB[tidX]; }

//Sao chép dữ liệu từ host đến device

cudaMemcpy(devmatrixA, matrixA, numMatrix, cudaMemcpyHostToDevice);

cudaMemcpy(devmatrixB, matrixB, numMatrix, cudaMemcpyHostToDevice);

cudaMemcpy(devmatrixC, matrixC, numMatrix, cudaMemcpyHostToDevice);

- 59 -

2.2.7.2. Nhân hai ma trận

Mô tả bài toán

Nhân hai ma trận A[n][k] và B[k][m], kết quả trả về ma trận C[n][m].

Hình 2.1. Nhân hai ma trận Hàm thực thi tại thiết bị đồ họa GPU

__global__ void matrix_multiply(float *a, float *b, float *ab, size_t width) {

int tx = threadIdx.x, ty = threadIdx.y; int bx = blockIdx.x, by = blockIdx.y;

__shared__ float s_a[TILE_WIDTH][TILE_WIDTH]; __shared__ float s_b[TILE_WIDTH][TILE_WIDTH]; int row = by*blockDim.y + ty;

int col = bx*blockDim.x + tx; float result = 0;

- 60 -

{

s_a[ty][tx] = a[row*width + (p*TILE_WIDTH + tx)]; s_b[ty][tx] = b[(p*TILE_WIDTH + ty)*width + col]; __syncthreads(); for(int k = 0; k < TILE_WIDTH; ++k) { result += s_a[ty][k] * s_b[k][tx]; } __syncthreads(); } ab[row*width+col] = result; } 2.3. TỔNG KẾT CHƯƠNG 2

Trong chương này đã trình bày kiến trúc của thiết bị đồ họa GPU, so sánh sự khác nhau giữa GPU và CPU, các ứng dụng trên thiết bị GPU đa lõi. Trình bày sơ lược về ngôn ngữ lập trình CUDA, cách biên dịch một chương trình CUDA chạy trên thiết bị đồ họa GPU của NVIDA. Viết một số ví dụ về lập trình song song, từ đó thấy được sức mạnh tính toán trên thiết bị đồ họa GPU đa lõi.

Trong chương tiếp theo, trình bày cách xây dựng giải thuật song song để giải quyết một bài toán chạy bằng CUDA.

- 61 -

CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG GIẢI THUẬT SONG SONG TRÊN HỆ THỐNG ĐA LÕI XỬ LÝ ĐỒ

HỌA GPU CHO BÀI TOÁN SO SÁNH TRÌNH TỰ

Chương này sẽ vận dụng cơ sở lý thuyết về lập trình song song đã trình bày trong chương một và sử dụng dụng công nghệ lập trình song song CUDA trên thiết bị đồ họa (GPU) đã trình bày trong chương hai để giải bài toán về tin sinh học so sánh trình tự bằng giải thuật quy hoạch động, giải thuật Smith-Waterman. Để tìm hiểu giải quyết bài toán so sánh trình tự, chương này còn trình bày một số khái niệm cơ bản về tin sinh học như: AND, protein, … Từ đó mô tả bài toán và giải quyết bằng giải thuật song song với CUDA. Đưa ra những so sánh, đánh giá về lợi ích của việc sử dụng giải thuật song song đối với bài toán này.

3.1. GIỚI THIỆU

Phần này giới thiệu những kiến thức cơ bản về tin sinh học phục vụ cho việc timf hiểu bài toán so sánh trình tự theo hệ gen.

3.1.1. So sánh trình tự

Một số mục tiêu của quá trình phân tích trình tự: - Xác định gene.

- Xác định chức năng của từng gene. Giả thiết rằng các trình tự có cấu trúc tương tự nhau sẽ có chức năng tương tự nhau, do đó có thể tìm kiếm chức năng của một gene thông qua việc so sánh mức độ giống nhau của nó với một gene khác có chức năng đã được xác định.

- Xác định sự lặp lại của các trình tự

- Xác định protein dựa trên quy tắc sắp đặt các biểu thức gene. - Xác định các vùng chức năng khác nhau của DNA…

- 62 -

Trong quá trình phân tích trình tự thì khái niệm so sánh trình tự đóng vai trò quan trọng. Đây là nền tảng cơ bản cho việc phân tích. So sánh trình tự giúp cho quá trình dự báo sự giống nhau về chức năng của các trình tự, dự báo cấu trúc bậc ba của DNA, protein. Trong việc tìm hiểu một gene mới, mọi người thường quan tâm đến việc xác định những đặc điểm để phân biệt gene đồng thời đưa ra những giả thuyết về chức năng của gene. Việc đưa ra những giả thuyết về chức năng của gene thường dựa vào những giải thuật đánh giá sự giống nhau, tương đồng giữa các trình tự.

3.1.2. Định nghĩa so sánh trình tự

So sánh trình tự (còn gọi là phép gióng hàng, gióng cột) là quá trình nghiên cứu sự giống nhau giữa các chuỗi trình tự (sequence), đo lường sự giống nhau giữa các trình tự. Cách thức so sánh giữa hai hay nhiều trình tự dựa trên việc so sánh một chuỗi các thành phần (ký tự) của trình tự để tìm ra những điểm tương đồng, giống nhau giữa các trình tự. Các trình tự được đề cập trong phần nghiên cứu này là các chuỗi trình tự DNA, RNA hoặc các trình tự amino acid (protein).

Xét 2 chuỗi: A C G C T G và C A T G T, đo lường sự giống nhau giữa hai chuỗi này. Bên dưới là một ví dụ về một trong những khả năng alignment của hai chuỗi trên. Tiêu chí để đánh giá sự giống nhau sẽ dựa trên một hàm đánh giá (scoring function).

Hình 1.1. Ví dụ về so sánh trình tự

Ký tự “–“ được gọi là một gap, gap thể hiện cho ý nghĩa trong sinh học đó là một phần của trình tự đã bị mất đi do, các hành vi của quá trình tiến hóa sinh vật như: đột biến, sự mất đi một thành phần trong chuỗi trình tự. Giá trị hàm đánh giá càng cao thì kết quả alignment càng tốt. Xét một hàm đánh giá đơn giản như sau: Nếu hai thành phần trong chuỗi là giống nhau thì hàm đánh giá sẽ có kết quả +2,

- 63 -

nếu hai thành phần trong chuỗi khác nhau thì hàm đánh giá tại vị trí này sẽ có kết quả -1. Như vậy kết quả so sánh ở trên sẽ có giá trị hàm đánh giá là: 3*(2)+(-1)*5=1

Ý nghĩa: Trên quan điểm sinh học, phép so sánh trình tự thể hiện quá trình biến đổi chọn lọc tự nhiên các chuỗi trình tự. Từ đó cho phép các nhà sinh học đưa ra kết luận về nguồn gốc các đoạn gene, DNA, RNA hay protein.

3.1.3. Hệ thống ký tự

Tập hợp các phần tử có thể xuất hiện trong trình tự gọi là một hệ thống các ký tự (∑ ). Trong ADN, sử dụng một thệ thống kí tự ∑ = {A, C, G, T, λ} trong đó A, C, G, T đại diện cho bốn nucleotides: adenine (A), cytosine (C), guanine (G) và thymine (T). λ là ký tự đặc biệt đại diện cho một khoảng trống là một vị trí mà không có nucleotide thực tế. Trong hầu hết các trường hợp, ký tự gap (‘-‘) có thể được sử dụng để thay thế cho λ. Bất kỳ một trình tự nào cũng là một sự thể hiện bởi các phần tử có thể xuất hiện trong trình tự và được định nghĩa trong ∑ .

3.1.4. Các phép biến đổi

Trong quá trình tiến hóa, có bốn phương thức chính để biến đổi một trình tự là phép thay thế, phép chèn-xóa, đảo ngược và dịch chuyển. Biến đổi phức tạp xảy ra là sự kết hợp của bốn phép đảo ngược và dịch chuyển, sự kết hợp này gây ra sự khó khăn trong việc dựng lại mối quan hệ giữa các trình tự trong những hệ thống phân tích phức tạp.

Phép thay thế: Phép chèn – xóa: Phép đảo ngược: Phép dịch chuyển:

- 64 -

3.1.5. Khoảng cách

Một điều quan trọng và cần thiết là xây dựng một hàm mục tiêu đánh giá khoảng cách giữa hai trình tự, qua đó đánh giá sự tương đồng, mối quan hệ giữa hai hệ gen. Khoảng cách này có thể được tính toán theo một số hàm như thay thế, chèn, xóa làm biến đổi một trình tự này thành một trình tự khác. Khoảng cách giữa hai trình tự có thể chỉ được tính đơn giản là chi phí thay thế trong những trình tự có độ dài bằng nhau hay phức tạp hơn bao gồm cả chi phí chèn-xóa và dịch chuyển.

3.1.6. Sắp hàng trình tự hệ gen

Trong quá trình tiến hóa các sinh vật, bên cạnh những biến đổi ở mức độ điểm (sự thay thế chèn-xóa của các nucleotide) còn có những sự biến đổi ở mức độ gen. Có ba phép biến đổi chính ở mức độ gen là phép chèn gen, xóa gen và dịch chuyển gen. Do không phân biệt được phép chèn gen, và xóa gen, nên gọi chung là phép chèn-xóa gen. Trải qua hàng triệu năm tiến hóa, với sự biến đổi ở mức độ gen, hệ gen của các sinh vật ngày nay đã có sự khác nhau rất lớn về kích thước, số lượng gen, thứ tự các gen cũng như về nội dung của các gen.

Sắp hàng trình tự hệ gen là một trường hợp riêng của sắp hàng trình tự, trong đó đầu vào là toàn bộ trình tự ADN của một hệ gen sinh vật. Sắp hàng trình tự hệ gen giúp xây dựng bức tranh toàn cảnh về sự tương tự và tiến hóa giữa các sinh vật, là cơ sở cho hướng nghiên cứu Comparative genomics, cho phép nâng cao độ chính xác dự đoán gen. Về mặt tính toán, bắt cặp hệ gen đặt ra nhiều vấn đề cần giải quyết như kích thước trình tự lớn, thứ tự các phần tương đồng trên các hệ gen thường thay đổi. Do tính quan trọng cũng như đặc thù phương pháp, vấn đề so sánh và sắp hàng trình tự hệ gen được trình bày thành một phần riêng, tách khỏi sắp hàng trình tự nói chung.

3.1.7. Các thuật toán sắp hàng trình tự hệ gen

Các thuật toán sắp hàng trình tự thông thường mới chỉ xác định được các biến đổi ở mức độ điểm (sự biến đổi của các nucleotide) cũng như chỉ làm việc được với các dữ liệu nhỏ. Khi nghiên cứu về việc sắp hàng trình tự theo hệ gen, phải tính toán

- 65 -

cả những biến đổi ở mức độ điểm lẫn mức độ gen. Đặc biệt thời gian thực thi cũng là một vấn đề hết sức quan trọng do kích thước rất lớn của các hệ gen. Ví dụ kích thước của hệ gen người lên tới ba tỉ ADN. Một trong những hệ thống sắp hàng hệ gen đầu tiên là BLASTZ được phát triển bới nhóm của Webb Miller vào đầu những năm 2000 tại đại học Pennsylvania để sắp hàng hệ gen của người và chuột. Cũng như các phương pháp sắp hàng hệ gen khác, phương pháp BLASTZ được phát triển từ tư tưởng thuật toán tìm kiếm BLAST (thuật toán xác định những đoạn giống nhau cao giữa hai chuỗi). Tư tưởng chung của thuật toán gồm ba bước:

Bước 1: Tìm kiếm những cặp đoạn ADN ngắn rất giống nhau ở cả hai hệ gen được gọi là hạt giống (seed). Những đoạn này có độ dài vào khoảng 7 đến 13 ADN và được gọi là seed. Để thực hiện việc tìm kiếm này, có thể sử dụng nhiều kỹ thuật khác nhau như bảng băm, cây hậu tố (suffix tree).

Bước 2: Mở rộng các hạt giống về cả hai phía sao cho trong quá trình mở rộng chi phí không vượt qua một ngưỡng cho trước. Quá trình mở rộng này không cho phép chèn gap.

Bước 3: Tiến hành nối các cặp ADN được mở rộng ở bước 2 lại với nhau để tạo thành những cặp ADN lớn hơn, bước này được phép chèn thêm gap. Sau khi nối, các cặp ADN này sẽ được đánh giá độ tương đồng.

Các nghiên cứu hiện tại tập trung vào cải tiến bước thứ 1 và bước thứ 3. Nổi bật là các nghiên cứu của Aaron Darling và đồng nghiệp tại đại học Wisconsin– Madison trong việc cải tiến cách xác định các hạt giống ở bước 1. Họ định nghĩa hạt giống là những cặp ADN giống nhau và xuất hiện duy nhất trên cả hệ gen. Nhóm tác giả đã xây dựng hệ thống MAUVE để sắp hàng đa hệ gen và thu được những kết quả có độ chính xác cao trên những hệ gen có độ tương đồng cao. Bên cạnh đó, nhóm tác giả Michael Brudno tại đại học Standford tập trung vào cải tiến bước 3 để kết nối các đoạn ADN và phát triển hệ thống SLAGAN. Nhóm tác giả áp dụng phương pháp quy hoạch động để tìm ra cách kết nối các đoạn ADN tốt nhất, trong đó cho phép các đoạn ADN được phép dịch chuyển và đảo chiều. Kết quả so sánh

- 66 -

hai hệ thống MAUVE và SLAGAN cho thấy MAUVE tốt hơn SLAGAN trên những tập dữ liệu có độ tương đồng cao, còn SLAGAN cho kết quả tốt hơn MAUVE trên những tập dữ liệu tồn tại nhiều phép thay thế ADN ở mức độ điểm và ít phép đảo chiều đoạn ADN ở mức độ gen.

Mặc dù một số phương pháp đã được nghiên cứu và phát triển, chúng mới chỉ tập trung vào xác định và bắt cặp cho những vùng ADN có độ tương đồng cao giữa hai hệ gen. Tức là, một phần lớn trong hệ gen có thể không được bắt cặp và so sánh khi tiến hành với các loài sinh vật có hệ gen khác nhau nhiều. Để giải quyết vấn đề trên, những nghiên cứu đầu tiên của TS. Lê Sỹ Vinh và đồng nghiệp tại Bảo Tàng Lịch Sử Tự Nhiên Hoa Kỳ, và tại trường Đại Học Công Nghệ nhằm so sánh và sắp hàng toàn bộ hệ gen đã được tiến hành và cho kết quả thử nghiệm khả quan. Nhóm nghiên cứu định nghĩa việc sắp hàng toàn bộ hệ gen phải thỏa mãn ba điều kiện chính sau:

- Xác định được các phép biến đổi ở mức độ gen (chèn, xóa, dịch chuyển vị trí).

- Xác định được các phép biến đổi ở mức độ điểm (thay thế, chèn, xóa). - Bắt cặp toàn bộ các ADN trên hệ gen.

Hệ thống bắt cặp thỏa mãn ba điều kiện trên sẽ cho phép bắt cặp các gen với các mức độ tương đồng khác nhau. Để đáp ứng được ba yêu cầu trên, TS. Lê Sỹ Vinh và các đồng nghiệp đã nghiên cứu cách kết hợp điểm phạt cho các phép biến ở mức độ điểm, và các phép biến đổi ở mức độ gen vào thành một hệ thống tính điểm phạt chung. Điều này cho phép xây dựng hàm tục tiêu rõ ràng để tìm ra cách bắt cặp toàn bộ hệ gen tốt nhất. Kết quả thí nghiệm với 760 bộ gen ty thể của các loài động vật cho thấy hệ thống tính điểm cho kết quả tốt. Sử dụng phương pháp bắt cặp toàn bộ hệ gen, nhóm tác giả đã xây dựng quá trình tiến hóa của 11 vi rút Corona và tái khẳng định lại kết luận vi rút Corona gây ra dịch bệnh hô hấp cấp (SARs) có chung nguồn gốc với vi rút Corona ở loài dơi chứ không phải là loài chồn hôi.

- 67 -

3.2. PHÁT BIỂU BÀI TOÁN SO SÁNH TRÌNH TỰ

3.2.1. Mô tả bài toán

Gọi S1 và S2 là hai chuỗi, một sự so sánh trình tự giữa S1 và S2 tạo ra hai chuỗi S1’ và S2’ bằng cách thêm các ký tự “-“ vào S1 và S2, trong đó:

* |S1’|=|S2’|

* Nếu loại bỏ các ký tự “-“ khỏi S1’ và S2’ ta sẽ có S1 và S2. Với | S1|, | S2| lần lượt là chiều dài của S1 và S2.

Hình 1.1. So sánh hai trình tự

3.2.2. Hướng giải quyết bằng giải thuật quy hoạch động

Phần này giới thiệu hướng giải quyết bài toán so sánh trình tự bằng phương pháp quy hoạch động. Kỹ thuật này cho phép xây dựng một phép alignment tối ưu. Xét hai chuỗi trình tự S1 và S2, |S1| = n, |S2| = m, mục đích là tìm kiếm một phép alignment tối ưu cho S1 và S2.

3.2.2.1. Giải thuật quy hoạch động cho bài toán so sánh trình tự

3.2.2.2. Bài toán so sánh trình tự:

Định nghĩa 3.1: Xét định nghĩa về một cơ chế đánh giá như sau:

- Nếu a và b là hai ký tự đại diện cho các amino acid (nucleotide) trong hai trình tự. Gọi σ (a,b) là hàm đánh giá của cặp a, b trong trong ma trận đánh giá. - Hàm giá trị của gap phụ thuộc vào hằng số r > 0 và chiều dài k (γ (k) = − r * k).

- T là một chuỗi, định nghĩa |T| là chiều dài của chuỗi T. Giá trị phép alignment A của hai chuỗi S1, S2 với kết quả S1’, S2’:

- 68 - (1.14) (S [ ] [ ]i S i) l r K i * ' , ' 2 2 1 1 − ∑ ∈ σ

với K1 là tập các phần tử không là gap, |K1|=l1, l2 là tổng chiều dài của gap, l1 + l2 = l= | S1’| = | S2’|

- Phép alignment tối ưu là phép alignment có giá trị lớn nhất có thể có của hai chuỗi [6].

Định nghĩa 3.2: Gọi S(i, j) là giá trị của một phép alignment tối ưu của chuỗi S1i (S1[1], …, S1[i]) và S2j (S2[1], …, S2[j]) ( 1≤ i ≤ n ,1≤ j ≤ m). Như vậy, S(n, m) sẽ là giá trị của một phép alignment tối ưu của S1 và S2. S(i, j) được định nghĩa

Một phần của tài liệu nghiên cứu các giải thuật song song trên hệ thống xử lý đồ họa GPU đa lõi (Trang 66 - 90)