truyền thông điệp sử dụng MPI, việc sử dụng trong môi trường SMPI chỉ khác ở lệnh dịch
+ Thuật toán nhân ma trận: Chương trình sử dụng phương pháp songsong hóa đơn giản, trong phương pháp này, chúng ta truyền ma trận B song hóa đơn giản, trong phương pháp này, chúng ta truyền ma trận B và một phần ma trận A cho mỗi tác vụ. Ma trận A được chia thành các dòng, mỗi tác vụ sẽ thao tác trên một số dòng của A, toàn bộ ma trận B và tính toán một số dòng tương ứng của ma trận C so với A. Kết quả từng phần của mỗi tác vụ sẽ được tập hợp lại để thu được kết quả trọn vẹn. Ma trận A được khởi tạo mặc định với giá trị tất cả các phần tử bằng 1, ma trận B được khởi tạo mặc định với giá trị tất cả các phần tử bằng 2. rank 0 -> 1 1 2 1 1 1 2 5 5 3 <- rank 0 rank 1 -> 1 1 1 0 1 1 1 3 3 3 <- rank 1 rank 2 -> 1 1 2 1 X 1 1 0 = 5 5 3 <- rank 2 rank 0 -> 1 1 1 1 1 1 0 4 4 3 <- rank 0 rank 1 -> 1 1 0 1 3 3 3 <- rank 1 Ma trận A Ma trận B
Ví dụ sử dụng thuật toán với 3 tiến trình song song (rank 0, 1, 2), Ma trận B được sử dụng bởi tất cả các tiến trình
+ Các lệnh lập trình song song truyền thông điệp MPI được sử dụng:o MPI_Init(int* argc, char*** argv): Tất cả tiến trình đều gọi o MPI_Init(int* argc, char*** argv): Tất cả tiến trình đều gọi
MPI_Init, khởi động thực thi song song, truyền các tham sốdòng lệnh dòng lệnh
o MPI_Finalize(void): Tất cả tiến trình đều gọi MPI_Finalize,kết thúc thực thi song song kết thúc thực thi song song
o MPI_Comm_size(MPI_COMM_WORLD, &size): trả về tổngsố tiến trình trong biến size số tiến trình trong biến size
o MPI_Comm_rank(MPI_COMM_WORLD, &rank): trả về sốhiệu tiến trình hiện hành hiệu tiến trình hiện hành
o MPI_Barrier(MPI_COMM_WORLD): Đồng bộ các tiến trìnho MPI_Send(void *buf, int count, MPI_Datatype datatype, int o MPI_Send(void *buf, int count, MPI_Datatype datatype, int
dest, int tag, MPI_Comm comm): Gửi count phần tử dữ liệutrong buf có kiểu datatype đến tiến trình dest trong buf có kiểu datatype đến tiến trình dest
o MPI_Recv(void *buf, int count, MPI_Datatype datatype, intsrc, int tag, MPI_Comm comm, MPI_Status *status): Nhận src, int tag, MPI_Comm comm, MPI_Status *status): Nhận count phần tử dữ liệu có kiểu datatype từ tiến trình src đặt vào trong buf