Bài tập thực hành MPI - Lab 4: Parallel Programming with MPI


1. Mục tiêu
 SV tìm hiểu và sử dụng các hàm collective communication trong thư viện MPI
 Một số hàm giao tiếp nhóm SV cần tìm hiểu :
o MPI_Bcast(), MPI_Scatter, MPI_Gather(), MPI_Barrier().
o MPI_Scan(), MPI_Reduce(), MPI_Gatherv(), MPI_Scatterv()…
o MPI_Reduce_scatter(), MPI_Allreduce
pdf 6 trang thamphan 26/12/2022 3680
Bạn đang xem tài liệu "Bài tập thực hành MPI - Lab 4: Parallel Programming with MPI", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_tap_thuc_hanh_mpi_lab_4_parallel_programming_with_mpi.pdf

Nội dung text: Bài tập thực hành MPI - Lab 4: Parallel Programming with MPI

  1. Lab 4 Parallel Programming with MPI Group Communication (2) Biên soạn & hướng dẫn: Nguyễn Quang Hùng 1. Mục tiêu SV tìm hiểu và sử dụng các hàm collective communication trong thư viện MPI Một số hàm giao tiếp nhóm SV cần tìm hiểu : o MPI_Bcast(), MPI_Scatter, MPI_Gather(), MPI_Barrier(). o MPI_Scan(), MPI_Reduce(), MPI_Gatherv(), MPI_Scatterv() o MPI_Reduce_scatter(), MPI_Allreduce 2. Nội dung 2.1 Giới thiệu Sự giao tiếp giữa 1 nhóm process trong cùng communicator Mỗi process đều phải gọi hàm giao tiếp nhóm SV tìm hiểu xem mỗi hàm giao tiếp nhóm có chức năng gì và thực hiện các chương trình mẫu trong mục 2.2 Bài tập thực hành MPI – Bộ môn Hệ Thống & Mạng Máy Tính, Khoa KH&KTMT Trang 1
  2. for(i=offset; i #include #define N 100000 float dataArray[N]; float sumLocal(float A[], long chunk); int main(int argc, char argv){ int rank,size; long i,offset,chunk; float localSum, globalSum; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); chunk = N/size; float bufArray[chunk]; /* divide data to other processes */ if(rank == 0) { for(i=0; i < N; i++) // dataArray[i] = random() % 1000; dataArray[i] = 1; } /* divide data to every process */ Bài tập thực hành MPI – Bộ môn Hệ Thống & Mạng Máy Tính, Khoa KH&KTMT Trang 3
  3. Bước 1: tạo file myhosts chứa thông tin tên/địa chỉ IP của các hosts trên cluster cần chạy: $ vi myhosts 172.28.10.237 172.28.10.236 Bước 2: viết code chương trình MPI, ví dụ: nhanmatranmpi.c Bước 3: thử biên dịch source code này bằng lệnh: $ mpicc -o nhanmatranmpi nhanmatranmpi.c -lm Tham số: -o: xuất ra tên chương trình thực thi. -lm: sử dụng thư viện như libm (thư viện gồm các hàm toán học) được cài trong thư mục /usr/lib/ Các SV nên chạy trước chương trình trên máy PC cục bộ trước khi copy source lên server. Bước 4: copy source „nhanmatranmpi.c‟ lên máy server, 172.28.10.237, đặt vào thư mục $HOME - Trên máy PC, mở terminal mới và gõ lệnh: $ scp nhanmatranmpi.c std01@172.28.10.237:~/ Bước 5: compile chương trình MPI và copy chương trình thực thi sang các hosts muốn chạy, ví dụ: cả hai hosts liệt kê trong nội dung file „myhosts‟ là: 172.28.10.237 và 172.28.10.236 Bước 6: chạy chương trình MPI bằng lệnh sau: $ mpirun hostfile myhosts -np 4 /home/std01/testmpi/nhanmatranmpi 1000 1000 1000 Tham số: hostfile : sẽ khởi tạo các quá trình MPI trên các hosts được liệt kê trong file „myhosts‟ -np : số process MPI cần tạo ra 3. Bài tập SV hiện thực các bài tập theo hai cách: a. Sử dụng các hàm truyền thông point to point như MPI_Send, MPI_Recv, b. Sử dụng các hàm giao tiếp nhóm. Bài 3.1. Viết chương trình đếm số lần xuất hiện của số “target” cho trước trong mảng số thực có kích thước là N, với N > 1010 và ghi nhận chỉ số các phần tử của mảng có chứa target lên file. Bài tập thực hành MPI – Bộ môn Hệ Thống & Mạng Máy Tính, Khoa KH&KTMT Trang 5