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

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 28 - 31)

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ụ:

int array[100];

int root, total_p, *receive_array;

MPI_Comm_size(comm, &total_p);

receive_array=(int *) malloc(total_p*100*sizeof(int)); (adsbygoogle = window.adsbygoogle || []).push({});

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.

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 28 - 31)