1. Trang chủ
  2. » Công Nghệ Thông Tin

slike bài giảng tính toán lưới - nguyễn hữu đức bài 4 truyền thông điểm điểm trong lập trình song song truyền thông điệp

54 482 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 54
Dung lượng 341,29 KB

Nội dung

Truyền thơng điểm-điểm Truyền thơng điểm điểm lập trình song song truyền thông điệp Truyền thông điểm-điểm Nội dung học  Khái niệm Tiến trình nguồn Tiến trình đích  Cấu trúc thơng điệp  Q trình gửi/nhận thơng điệp  Gửi nhận thơng điệp có ràng buộc  Gửi nhận thông điệp không ràng buộc  Các chế độ gửi Truyền thơng điểm-điểm Tiến trình nguồn tiến trình đích  Truyền thơng điểm điểm truyền thơng hai phía • Địi hỏi khởi tạo q trình truyền thơng từ hai phía • Gồm tiến trình gửi tiến trình nhận • Tiến trình gửi gọi tiến trình nguồn • Tiến trình nhận gọi tiến trình đích Truyền thơng điểm-điểm Tiến trình nguồn tiến trình đích  Nói chung, tiến trình nguồn tiến trình đích khơng đồng MPI_Recv(sour ce = rank tiến trình gửi) Tiến trình gửi MPI_Send(dest = rank tiến trình nhận) Tiến trình nhận MPI_Recv(sourc e = rank tiến trình gửi) Thời gian chờ tiến trình nhận Thời Gian Thực Hiện MPI_Send(dest = rank tiến trình nhận) Tiến trình nhận Thời gian chờ tiến trình gửi Thời Gian Thực Hiện Tiến trình gửi Truyền thơng điểm-điểm Cấu trúc thơng điệp  Gồm phần: • Thơng tin thơng điệp • Nội dung thơng điệp  Thơng tin thơng điệp gồm phần: • Nguồn: tiến trình gửi • Đích: tiến trình nhận • Nhóm truyền thơng: Nhóm tiến trình bao gồm nguồn đích • Tag: Dùng để phân biệt với thông điệp khác − Quan trọng − Cách dùng phụ thuộc chương trình Truyền thông điểm-điểm Nội dung thông điệp  Nội dung thơng điệp gồm phần: • Bộ đệm: Dữ liệu trao đổi − buffer − Thường mảng • Loại liệu: Loại liệu trao đổi − datatype − Loại liệu mảng • Bộ đếm: Số lượng liệu đệm cần trao đổi − count: count * sizeof(dtype) − Số phần tử mảng Truyền thơng điểm-điểm Q trình gửi nhận thơng điệp  Q trình gửi thơng điệp • Nguồn (định danh người gửi) ngầm định • Thơng tin nội dung thông điệp phải khai báo rõ ràng tiến trình gửi  Thơng điệp treo (a pending message) • Thơng điệp gửi chưa nhận • Khơng lưu hàng đợi • Chứa thuộc tính phục vụ q trình nhận Truyền thơng điểm-điểm Qúa trình gửi nhận thơng điệp  Q trình nhận thơng điệp • Chỉ định thơng tin thơng điệp để so khớp với thơng điệp treo • Thành cơng: thơng điệp nhận, q trình nhận kết thúc • Không thành công: tiếp tục chờ đợi, so khớp, q trình nhận chưa hồn thành • Cung cấp đủ không gian lưu trữ cho nội dung thông điệp Truyền thơng điểm-điểm Gửi nhận thơng điệp có ràng buộc  Dùng hai định tuyến (routine) • MPI_Send: gửi thơng điệp • MPI_Recv: nhận thông điệp  Cả hai định tuyến ràng buộc với tiến trình gọi  Sự ràng buộc kết thúc q trình truyền thơng hồn thành  Khi hồn thành truyền thơng?  Hiện tượng deadlock có tồn tại? Truyền thơng điểm-điểm Định tuyến MPI_Send buffer count Nội dung thông điệp datatype destination tag communicator Thông tin thông điệp (source hiểu ngầm định) Truyền thông điểm-điểm Giảm trễ cho hệ thống mạng MPI_IRECV( ,request) arrived=FALSE while (arrived == FALSE) { "work planned for processor to while waiting for message data“ MPI_TEST(request,arrived,status) } "work planned for processor to with the message data" Truyền thơng điểm-điểm Ví dụ – Truyền thơng không ràng buộc /* deadlock avoided */ #include #include void main (int argc, char **argv){ int myrank; MPI_Request request; MPI_Status status; double a[100], b[100]; MPI_Init(&argc, &argv); /* Initialize MPI */ 10 MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* Get rank */ Truyền thông điểm-điểm Ví dụ – Truyền thơng khơng ràng bu ộc /* deadlock avoided */ if( myrank == ) { /* Post a receive, send a message, then wait */ MPI_Irecv( b, 100, MPI_DOUBLE, 1, 19, MPI_COMM_WORLD, &request ); MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD ); MPI_Wait( &request, &status ); } else if( myrank == ) { /* Post a receive, send a message, then wait */ MPI_Irecv( b, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, &request ); MPI_Send( a, 100, MPI_DOUBLE, 0, 19, MPI_COMM_WORLD ); MPI_Wait( &request, &status ); 10 } 11 MPI_Finalize(); /* Terminate MPI */ 12 } Truyền thông điểm-điểm Các chế độ gửi nhận  Trong MPI có chế độ gửi chế độ nhận  chế độ gửi: • Chế độ standard • Chế độ Synchronous • Chế độ Ready • Chế độ Bufferred  Chế độ nhận: MPI_RECV MPI_IRECV Chế độ gửi Hàm ràng buộc Hàm không ràng buộc Standard MPI_SEND MPI_ISEND Synchronous MPI_SSEND MPI_ISSEND Ready MPI_RSEND MPI_IRSEND Bufferred MPI_BSEND MPI_IBSEND Truyền thơng điểm-điểm Case study: Tìm kiếm song song      Lập trình đếm số lần xuất khoá (key) dãy cho trước, sử dụng truyền thông điểm-điểm Dãy số cho trước lưu file text data.in gồm N phần tử có định dạng :  Số_phần tử_N  Phần_tử_thứ_1 phần_tử_thứ_2 phần_tử_thứ_N Các phần tử phân biệt khoảng trắng Yêu cầu chọn số tiến trình thực ước số phần tử dãy Khố cần tìm kiếm truyền vào dạng tham số chương trình Ví dụ:  $ mpirun -np program 23 Truyền thơng điểm-điểm Case study: Tìm kiếm song song  Thiết kế chương trình • Tiến trình gốc (rank = 0) • Đọc liệu vào từ file − Xác định số tiến trình tham gia np, số phần tử miền − Chia miền tính tốn thành np miền − Gửi liệu miền cho tiến trình tương ứng − Tìm kiếm miền mà đảm nhiệm − Nhận kết gửi từ tiến trình − Tính tổng số lần xuất khoá key − In kết hình Truyền thơng điểm-điểm Case study: Tìm kiếm song song  Thiết kế chương trình : • Tiến trình (rank > 0) − Nhận số phần tử gửi đến từ tiến trình gốc − Nhận mảng liệu tương ứng tiến trình gốc gửi đến − Đếm số lần xuất khoá mảng liệu mà tiến trình đảm nhiệm − Gửi kết thu cho tiến trình gốc Truyền thơng điểm-điểm Case study: Tìm kiếm song song  Một số kiến thức C cần sử dụng: • Tham số chương trình • Cách chuyển chuỗi sang số • Các kĩ thuật làm việc với file • Các kĩ thuật làm việc với trỏ, mảng Truyền thơng điểm-điểm Case study: Tìm kiếm song song #include #include #include int rank0(int key); int ranki(int key); int 10 11 main(int argc, char ** argv){ int rank, key; MPI_Init(&argc, &argv); if (argc != 2) return -1; sscanf(argv[1], "%d", &key); // doc gia tri cua key MPI_Comm_rank(MPI_COMM_WORLD, &rank); 12 13 14 15 if (rank == 0) rank0(key); else ranki(key); 16 17 18.} MPI_Finalize(); return 0; Truyền thông điểm-điểm Hàm đọc liệu từ file data.in #define FILE_NAME int 10 11 12 13 14 15 16 17 18 19 20 21 } "data.in” * loadData(int * NoElements){ FILE * dataf; int * dataSet; int i; /* mo file */ dataf = fopen(FILE_NAME, "r"); if (!dataf){ /* loi mo file */ printf("Loi mo file %s\n", FILE_NAME); return NULL; } /* doc so phan tu */ fscanf(dataf, "%d", NoElements); /* cap phat vung nho cho mang du lieu */ dataSet = (int*) malloc(sizeof(int) * (*NoElements)); /* doc mang du lieu */ for ( i=0 ; i< (*NoElements) ; i++ ) fscanf(dataf, "%d", dataSet+i); fclose(dataf); return dataSet; Truyền thông điểm-điểm Hàm đếm số lần xuất khoá key dãy arr int } search(int *arr, int ne, int key){ int i; int count = 0; for ( i=0 ; i

Ngày đăng: 24/10/2014, 11:00

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN