Mô hình lập trình truyền thông điệp – MPI song song

Một phần của tài liệu Một số phương pháp thiết kế thuật toán cơ bản trong tính toán song song và ứng dụng (Trang 27)

1.4.1. Giới thiệu mô hình truyền thông điệp

Có rất nhiều ngôn ngữ lập trình và các thư viện được xây dựng nên để dành cho lập trình song song. Mô hình truyền thông điệp chuẩn MPI (MessagePassing Interface) là một giao diện chuẩn cho phép nhiều máy tính giao tiếp với nhau, được sử dụng trong các cụm máy tính và siêu máy tính và là một trong các mô hình cổ nhất được sử dụng rộng rãi nhất trong các mô hình dùng cho lập trình trên các máy tính song song bởi vì nó yêu cầu tối thiểu về phần cứng.

Có hai tính chất quan trọng tạo nên bản chất của mô hình truyền thông điệp: thứ nhất là nó giả sử không gian địa chỉ được phân chia và thứ hai là nó chỉ hỗ trợ song song hóa tường minh.

1.4.2. Lập trình truyền thông điệp - MPI

Giới thiệu về MPI

MPI là giao thức độc lập ngôn ngữ sử dụng cho các máy tính song song. MPI là một giao diện lập trình ứng dụng truyền thông điệp với mục đích là đem lại hiệu năng cao, khả năng mở rộng và linh hoạt.

MPI là một thư viện chương trình mà có thể được gọi trực tiếp từ chương trình Fortran, C/C++ và bất cứ ngôn ngữ nào khác tương thích với thư viện hàm (như C#, Java và Python). Lợi ích của việc sử dụng MPI là tính khả chuyển (vì MPI được cài đặt cho hầu hết các kiến trúc bộ nhớ phân tán) và tốc độ (vì mỗi cài được được tối ưu hoá về nguyên lý cho phần cứng mà nó thực thi trên đó).

MPI sử dụng đặc tả độc lập ngôn ngữ (LIS) cho các lời gọi hàm. Hiện nay, các chuẩn MPI có hai phiên bản phổ biến là 1.2 (gọi tắt là MPI-1) chủ yếu là truyền thông điệp và có môi trường hoạt động tĩnh, và phiên bản MPI-2.1 (gọi tắt là MPI- 2) bao gồm nhiều đặc điểm mới như vào/ra song song, quản lý tiến trình động và truy cập bộ nhớ từ xa. MPI-2 gần như bao hàm toàn bộ MPI-1, mặc dù có một số hàm đã bị loại bỏ. Vì thế, các chương trình viết theo MPI-1.2 vẫn có thể tương thích với chuẩn MPI-2.

Chức năng của MPI

Chức năng của thư viện MPI bao gồm (nhưng không hạn chế) các hoạt động gửi nhận điểm-điểm, lựa chọn topo tiến trình logic dạng hình học phẳng hay đồ thị, trao đổi dữ liệu giữa các cặp tiến trình, phối hợp kết quả từng phần của quá trình tính toán, các nút đồng bộ cũng như các thông tin về mạng .v.v.

Trong chương trình MPI thì số lượng các tiến trình là cố định, các tiến trình có thể thực hiện trao đổi thông tin một-một để gửi dữ liệu từ tiến trình này sang tiến trình khác. Một nhóm các tiến trình có thể thực hiện các thao tác kết hợp để thực hiện các thao tác chung và phổ biến như là phép công hay broadcast. MPI có khả năng thăm dò các thông điệp có hỗ trợ truyền thông bất đồng bộ.

Các thuật toán chỉ tạo ra một tác vụ trên một bộ xử lý có thể apd dụng trực tieeos các thủ tục trao đổi kết hợp hay một-một nhằm đáp ứng các yêu cầu truyển

thông. TRong khi đó các thuật toán tác vụ động hay dựa trên sự thực thi đồng thời của nhiều tác vụ trên cùng một bộ xử lý, thì cần phải điều chỉnh lại cho thích hợp với mô hình MPI.

Một số khái niệm về MPI

Bộ truyền thông: Bộ truyền thông chịu trách nhiệm kết nối các tiến trình sử

dụng MPI. Trong truyền thông, mỗi tiến trình có một bộ nhận diện độc lập và các tiến trình được sắp xếp theo một thứ tự topo nhất định. MPI cũng có các nhóm, nhưng chủ yếu phục vụ cho tổ chức và tái tổ chức các tiến trình con, trước khi các bộ truyền thông khác được tạo ra. MPI hiểu được các hoạt động nhóm truyền thông nội bộ đơn, và hoạt động truyền thông liên nhóm. Trong MPI-1, hoạt động truyền thông của nhóm đơn là phổ biến nhất, còn truyền thông liên nhóm giữ vai trò quan trọng nhất trong MPI-2 để mở rộng cho quản lý tiến trình động và truyền thông tập thể.

Cơ sở điểm-điểm: Các hoạt động điểm-điểm, thực sự hữu ích trong truyền

thông không đồng đều, mỗi tiến trình lặp đi lặp lại trao đổi các vùng dữ liệu với tiến trình khác giữa các bước tính toán, trong kiến trúc chủ-tớ, tiến trình chủ thường xuyên gửi dữ liệu cho tiến trình kia mỗi khi có một tác vụ hoàn thành.

MPI-1 đặc tả cơ chế truyền thông điểm-điểm không khoá và có khoá.

Cơ sở cộng tác tập thể: Chức năng hoạt động tập thể trong MPI liên quan

đến truyền thông giữa mọi tiến trình trong nhóm. Một hàm, hay gặp, dạng này là

MPI_Bcast. Hàm này lấy dữ liệu từ một nút đặc biệt nào đó và gửi thông điệp tới

mọi tiến trình trong nhóm. Một hàm khác đó là MPI_Reduce, hàm này dùng để lấy

dữ liệu từ mọi tiến trình khác trong nhóm. Các loại hàm này thường hữu ích khi bắt đầu hoặc kết thúc quá trình tính toán phân tán lớn. Còn có một số hàm phức tạp hơn

như MPI_Alltoall, hàm này tái sắp xếp n phần dữ liệu từ mỗi tiến trình để nút thứ

nlấy dữ liệu phần tử thứ n từ mỗi nút.

Các loại dữ liệu: Nhiều hàm MPI cần chúng ta đặc tả loại dữ liệu được gửi

giữa các bộ xử lý. Điều này xuất phát từ việc các tham số của hàm MPI đều là các

char, double.., thì ta có thể sử dụng các loại dữ liệu định nghĩa của MPI như MPI_INT, MPI_CHAR, MPI_DOUBLE… Giả sử ta có một mảng các số nguyên, và

mọi bộ xử lý muốn gửi các mảng dữ liệu đó tới nút gốc, thì có thể gọi hàm

MPI_Gather. Ví dụ: (adsbygoogle = window.adsbygoogle || []).push({});

int array[100];

int root, total_p, *receive_array;

MPI_Comm_size(comm, &total_p);

receive_array=(int *) malloc(total_p*100*sizeof(int));

MPI_Gather(array, 100, MPI_INT, receive_array, 100, MPI_INT, root, comm);

Truyền thông một phía (MPI-2): MPI-2 xác định ba thao tác truyền thông

một phía, bao gồm Put, Get, và Accumulate, dùng để ghi, đọc đối với bộ nhớ từ xa,

và một thao thác rút gọn một số tác vụ trên cùng một bộ nhớ đó.

Các hàm này thường được sử dụng trong các thuật toán mà việc đồng bộ là không thuận tiện (ví dụ như nhân ma trận phân tán), hoặc ở những bài toán mà nhiệm vụ cần cân bằng tải trong khi các bộ xử lý khác đang sử dụng dữ liệu.

Quản lý tiến trình động (MPI-2): Vấn đề cốt lõi của đặc điểm này đó là “khả

năng của một tiến trình MPI có thể tạo ra một tiến trình MPI mới hoặc để thiết lập một giao tiếp với các tiến trình MPI để có thể khởi động rời rạc nhau”. Chuẩn MPI- 2 mô tả ba giao diện chính để các tiến trình MPI có thể thiết lập giao tiếp động, đó

là: MPI_Comm_spawn, MPI_Comm_accept/MPI_Comm_connect

MPI_Comm_join. Hàm MPI_Comm_spawn cho phép một tiến trình MPI có thể

nhân bản một số tiến trình MPI nữa. Tập hợp các tiến trình MPI mới nhân bản này

tạo thành một bộ truyền thông MPI_COMM_WORLD và có thể giao tiếp với tiến trình cha. Hàm MPI_Comm_spawn_multiple là một biến thể, nó cho phép các tiến

trình nhân bản khác nhau với các tham số khác nhau.

MPI vào/ra (MPI-2): Đặc điểm vào ra song song được giới thiệu với MPI-2,

đôi khi còn được gọi là MPI-IO, liên quan đến một tập các hàm cho phép có thể giảm bớt khó khăn trong quản lý vào/ra trên các hệ thống phân tán, cũng như là cho phép các tệp có thể được truy cập dễ dàng hơn.

1.4.3. Cấu trúc chương trình MPI

Các tập tin thư viện: liên quan đến các hàm các thủ tục, các kiểu dữ liệu. Bao gồm tập tin .h như mpi.h mpio.h và các tập tin khác. Thông thường người lập trình chỉ cần dùng thư viện mpi.h là đủ.

Môi trường MPI: Tất cả các kiểu dữ liệu, các thủ tục, các giá trị defined nếu muốn dùng nó, sau khi gọi các tập tin thư viện liên kết thì phải khởi tạo môi trường sử dụng thì mới có thể dùng được các chức năng mà MPI cung cấp. Các thủ tục, hàm MPI: sử dụng giống như các hàm trong C và cả các ngôn ngữ khác như Fortran

Hình 1.12: Cấu trúc chương trình MPI Các tập tin thư viện

Khởi tạo môi trường MPI

Thực hiện các thủ tục hàm của MPI

Chương 2 – SONG SONG HÓA THUẬT TOÁN TÌM XÂU CON CHUNG DÀI NHẤT

2.1. Đặt vấn đề

Tin sinh học (bioinformatics) là một lĩnh vực khoa học sử dụng các công nghệ của ngành toán học ứng dụng, tin học, thống kê, khoa học máy tính và toán sinh học (biomathematics) để nghiên cứu thông tin về cuộc sống từ góc độ sinh học. Các ứng dụng của tin sinh học tập trung vào nghiên cứu ở cấp độ phân tử để hiểu sâu sắc về cấu trúc cơ bản và các quá trình ở cấp độ tế bào và phân bào. Những lĩnh vực nghiên cứu chính bao gồm bắt cặp trình tự (sequence alignment), bắt cặp cấu trúc protein (protein structural alignment), dự đoán cấu trúc protein (protein structural prediction), dự đoán biểu hiện gen (gene expression), tương tác protein-protein (protein-protein interaction), mô hình hoá quá trình tiến hoá. Hai lĩnh vực phát triển cụ thể của tin sinh học là di truyền học và nghiên cứu protein. Các ứng dụng chủ tập trung vào việc sử dụng thông tin kết hợp với tính toán trong việc tìm hiểu vai trò kết hợp giữa DNA, RNA và protein trong một cơ thể sống.

Bài toán tìm dãy con chung dài nhất của nhiều chuỗi được ứng dụng nhiều trong các lĩnh vực sinh học và di truyền học tính toán. Đã có nhiều phương pháp có hiệu quả cho bài toán này với phương pháp quy hoạch động song song cho trường hợp đặc biệt là so khớp hai chuỗi. Tuy nhiên, do kích thước của dữ liệu tin sinh học ngày càng đồ sộ và phức tạp, nhu cầu giải nhanh bài toán so khớp xâu nói chung và đặc biệt là bài toán tìm xâu còn chung dài nhất với số xâu lớn hơn hai đang trở nên rất cấp thiết.

Nội dung chương này sẽ tập trung vào giải quyết bài toán tìm xâu con chung dài nhất với số xâu lớn hơn hai với chiến lược song song hóa tính toán. (adsbygoogle = window.adsbygoogle || []).push({});

2.2. Bài toán tìm xâu con chung dài nhất

Định nghĩa xâu.

Kí hiệu a,b,c,...là các kí tự trong bảng chữ cái . Một xâu được xác định như một dãy liên tiếp của các kí tự. Với một xâu s ta có một số quy ước về ký hiệu như sau:

- s là độ dài xâu s. Nếu s 0 thì s là xâu rỗng và được ký hiệu là .

- si là ký tự thứ i của xâu si1,...,s. Định nghĩa xâu con.

Cho ss1s2...sn,si  là một xâu có độ dài n trên bảng chữ cái . Một xâu

   sisi si si X k, ... 2

1 là một xâu con của s, nếu j,1 jk: 1ijn, và ijij1

Định nghĩa xâu con chung dài nhất

Cho S s1,s2,...,sd là một tập các xâu trên bảng chữ cái  với độ dài

d

n n

n1, 2,..., tương ứng. Xâu con chung dài nhất của tập S là một xâu X thỏa mãn:

(i) X là một xâu con của si, i1,2,...,d.

(ii) X có độ dài lớn nhất thỏa mãn (i). Ví dụ:

Cho 3 xâu s1"ATGCCAAT", s2 "AGGTGCT", s3"GCCTAC". Khi đó xâu con chung dài nhất của cả ba xâu là X"GCT".

Trong tin sinh học, tùy thuộc vào kiểu của dữ liệu, kích thước của bảng chữ cái

 thì độ dài của xâu ký tự rất đa dạng. Bảng 1 dưới đây thống kê về độ dài xâu ký tự của một số dữ liệu tin sinh học [12].

Bảng 2.1 Độ dài xâu ký tự của một số dữ liệu tin sinh học

Dữ liệu sinh học Bảng chữ cái  Độ dài xâu ký tự

Protein A,C,...,W, 20 ~ 102 – 104

ARN A,C,G,U ~ 102 – 104

Gen gen1,gen2,...,genk ~ 102 – 104

ADN A,C,G,T ~ 103 – 1012

Bảng 2.1 cho thấy độ dài của các xâu trong dữ liệu tin sinh học là rất lớn. Do đó việc tìm ra xâu con chung dài nhất giữa các xâu đòi hỏi tính toán rất phức tạp và tốn rất nhiều thời gian.

2.3. Thuật toán quy hoạch động giải bài toán tìm xâu con chung dài nhất.

Giả sử ta có hai dãy X x1,x2,...,xm và Y y1,y2,...,yn.

Ta có Z z1,z2,...,zk là một xâu con chung bất kỳ của XY. Tiền tố thứ

icủa xâu X x1,x2,...,xm là một dãy con của X bao gồm từ phần tử ban đầu đến phần tử tứ thứ i của X nghĩa là Xi x1,x2,...,xi, i0,1,2,...,m. Khi đó ý tưởng giải bài toán là tính xâu con chung dài nhất cho mọi khả năng các cặp của tiền tố hai dãy đã cho. Ký hiệu c , i j là độ dài của dãy con chung dài nhất XiYj.Khi đó đại lượng cm,n là xâu con chung dài nhất của toàn bộ hai chuỗi đã cho. Các bước tính

m n (adsbygoogle = window.adsbygoogle || []).push({});

c , như sau:

Bước cơ sở: c i,0 c0,j0, Nếu một trong những xâu đã cho là rỗng thì dãy con chung dài nhất cũng rỗng và có độ dài bằng 0.

Ký tự cuối cùng của tiền tố bằng nhau: Giả sử XiYj. Khi đó phần tử cuối cùng của xâu con chung dài nhất zkxiyjZk1 là một xâu con chung dài nhất của xâu Xm1 và Yn1. Thật vậy, nếu zkxi thì ta ghép thêm xiyj vào Z để có

được dãy con chung của XY có chiều dài k1, mâu thuẫn với giả thiết cho rằng Z là dãy con chung dài nhất của XY. Như vậy ta phải có zkxiyj. Vậy thì Zk1 là xâu con chung dài nhất của Xm1 và Yn1 có độ dài k1.

Như vậy, nếu xiyj thì c i, jci1,j11.

Ký tự cuối cùng của tiền tố không bằng nhau: Giả sử xiyj. Khi đó phần tử

i

k x

z  ( hoặc zkyj ) nghĩa là Z là xâu con chung dài nhất của Xi1 và Yj ( hoặc

Z là xâu con chung dài nhất của XiYj1). Thật vậy, nếu zkxi, thì Z là xâu con chung của Xi1 và Yj. Nếu có một xâu con chung của XiYj, điều này mâu thuẫn với giả thiết Z là xâu con chung dài nhất của XiYj.

Như vậy, xiyj không đồng thời nằm trong xâu con chung dài nhất, nghĩa là hoặc xi nằm trong xâu con chung dài nhất, hoặc yj nằm trong xâu con chung dài nhất (có khả năng cả hai đều không nằm trong xâu con chung dài nhất). Vậy nếu

j

i y

x  thì c i,j maxci1, j ,ci, j1.

Công thức truy hồi cho xâu con chung dài nhất được thiết lập như sau:

              y x khi 1 v , y x khi 0 v ( v 1 - j 1, - i c , 1 - j i, c , j 1, - i c i c j j c i i c j j j i ) max( 0 , 0 , 0 0 0 ,           (2.1) Thuật toán tuần tự tìm xâu con chung dài nhất.

Dựa trên công thức truy hồi, thuật toán tiếp nhận hai chuỗi hữu hạn, mỗi giá trị

 i j

c , sẽ được lưu vào mảng c1...m,1...n. Việc tính toán sẽ được thực hiện theo các hàng của mảng và cột trước đó theo công thức trên. Việc truy xuất lại mảng phương án c1...m,1...n để tìm ra xâu con chung dài nhất sẽ đi từ điểm cm,n của ma trận phương án. Ta lập mảng thứ hai b1...m,1...n để ghi những giải pháp tối ưu. Thuật

Một phần của tài liệu Một số phương pháp thiết kế thuật toán cơ bản trong tính toán song song và ứng dụng (Trang 27)