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 (LUẬN văn THẠC sĩ) 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 - 32)

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ó 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 hố về ngun 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 tồ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 q trình tính tố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 tố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 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ụ hoà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ứ

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));

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 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 TỐN TÌM XÂU CON CHUNG DÀI NHẤT

Một phần của tài liệu (LUẬN văn THẠC sĩ) 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 - 32)

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

(61 trang)