Giao diện truyền thông điệp MPI

Một phần của tài liệu (LUẬN văn THẠC sĩ) thiết kế nhân ma trận thưa với véctơ trong tính toán song song và ứng dụng luận văn ths toán học 60 46 35 (Trang 26 - 30)

1.5 Lập trình song song với MPI

1.5.1 Giao diện truyền thông điệp MPI

Giao diện 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. 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 khơng được chính thức thừa nhận bởi bất cứ tiêu chuẩn nào, tuy nhiên nó lại trở thành một chuẩn thực tế cho giao tiếp giữa các tiến trình để một chương trình song song có thể chạy trên hệ thống bộ nhớ phân tán. Các siêu máy tính với bộ nhớ phân tán thực sự thường sử dụng các chương trình này. Thơng thường, các chương trình MPI chạy trên các máy tính có bộ nhớ chia sẻ, mơ hình MPI có lợi trên kiến trúc NUMA do MPI khuyến khích tính cục bộ của bộ nhớ.

Hầu hết cài đặt MPI bao gồm tập hợp đặc tả các hàm để có thể gọi trực tiếp từ 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 so với các thư viện cũ 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 hố 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

Giao diện MPI là một phương tiện để cung cấp các chức năng topo ảo, sự đồng bộ hố và giao tiếp giữa tập hợp các tiến trình (các nút/máy chủ/máy tính) theo cách độc lập với ngôn ngữ, với cú pháp đặc tả ngôn ngữ, cộng thêm một số đặc điểm khác. Các chương trình MPI ln làm việc với tiến trình, nhưng các lập trình viên thường xem các

tiến trình như các bộ xử lý. Thơng thường, để tối ưu hố hiệu năng, mỗi CPU (hoặc lõi trong các máy đa lõi) sẽ được chỉ định một tiến trình đơn lẻ.

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 q trình tính tốn, các nút đồng bộ cũng như các thông tin về mạng …

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

MPI cung cấp nhiều khả năng thực hiện. Các khái niệm sau đây sẽ cho chúng ta hiểu rõ hơn, giúp chúng ta quyết định cần sử dụng chức năng nào cho chương trình của mình. Có 8 khả năng cơ bản, và 4 trong số đó chỉ có ở MPI-2. Một số khả năng đó là:

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 tố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ụ hồn thành.

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

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 q trình

tính tố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ứ n lấ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 biến, không phải là loại được định nghĩa trước. Nếu loại dữ liệu là chuẩn như int, 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));

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 tố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 và 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

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 (LUẬN văn THẠC sĩ) thiết kế nhân ma trận thưa với véctơ trong tính toán song song và ứng dụng luận văn ths toán học 60 46 35 (Trang 26 - 30)

Tải bản đầy đủ (PDF)

(102 trang)