Tính toán lưới - Bài 3.GT về lập trình song song theo mô hình truyền thông điệp (HUST)

LI
lienhejb
0 téléchargements
24
1
Tính toán lưới (HUST)

Contenu du document

Page 1

Gi i thi u vớ ệ ề ậl p trình song song theo mô hình truy n thông đi pề ệ Center of High Performance Computing Hà n i, 6/2008ộ Hanoi University of Technology Đ i h c Bách khoa Hà N iạ ọ ộ {hpcc@mail.hut.edu.vn} goupee.com fb.com/groups/goupee

Page 2

N i dung bài h cộ ọ Mô hình truy n thông đi pề ệ C u trúc chấ ương trình truy n thông đi pề ệ Các khái ni m trong chệ ương trình Chu n b môi trẩ ị ường l p trìnhậ Biên d ch, ch y chị ạ ương trình song song Demo goupee.com fb.com/groups/goupee

Page 3

Mô hình truy n thông đi pề ệ (Message Passing Model) Int count = 1 ACCESS ? Process Process 1 2 Procesor Procesor 1 2 Cần cơ chế để các tiến trình truy cập bộ nhớ của nhau Mô hình truy n thông đi pề ệ : Chia sẻ dữ li uệ giữa các ti n trình b ng cách truy n thôngế ằ ề đi p.ệ goupee.com fb.com/groups/goupee

Page 4

Chu n MPI (Message Passing Interface)ẩ http://www.mpi-forum.org  Chuẩn MPI là kết quả sau hơn 2 năm thảo luận của MPI Forum, 1 nhóm gồm khoảng 60 người từ 40 tổ chức khác nhau đại diện cho những nhà phân phối các hệ thống song song, những phòng thí nghiệm quốc gia và những trường đại học danh tiếng  MPI là một thư viện các hàm có thể chèn vào mã nguồn để truyền dữ liệu giữa các tiến trình goupee.com fb.com/groups/goupee

Page 5

Chu n MPIẩ  Chuẩn MPI-1:  Xác định quy cách đặt tên, quá trình thực hiện và kết quả trả về của các hàm/chương trình con trong thư viện. Mọi hàm/chương trình con trong thư viện đều phải tuân theo những quy tắc trên, điều này đảm bảo khả năng khả chuyển của các chương trình viết theo chuẩn MPI khi biên dịch và chạy trên các kiến trúc máy tính, hệ điều hành khác nhau.  Chi tiết cài đặt của các hàm/chương trình con trong thư viện là do những nhà cung cấp quyết định (vd: trường Đại học Indiana, Hoa Kỳ phát triển LAM/MPI, MPICH, OPENMPI,…)  Quá trình cài đặt các hàm/chương trình con trong thư viện phải tương thích với hầu hết các kiến trúc máy tính, hệ điều hành phổ biến.  Năm 1994: MPI-1.0; hiện nay mới nhất là MPI-2.1  Chuẩn MPI-2.1 định nghĩa thêm các định tuyến nâng cao: vào ra song song, truyền thông 1 phía, …  Tuy nhiên chưa được hỗ trợ nhiều goupee.com fb.com/groups/goupee

Page 6

Khi nào dùng và không dùng MPI  MPI dùng khi cần viết chương trình:  Đoạn mã song song có tính khả chuyển thông qua các flatform khác nhau  Cần đạt hiệu năng cao  Cần viết thư viện song song  Khi nào không nên dùng MPI:  Có thể đạt hiệu năng bằng cách dùng các hàm song song sẵn có của thư viện Fortran hoặc của OpenMP  Đã có các thư viện song song viết bằng MPI, như thư viện toán học song song  Không cần đoạn mã nào chạy song song goupee.com fb.com/groups/goupee

Page 7

C u trúc chấ ương trình song song theo chu n MPIẩ  Ngôn ngữ C Đ nh nghĩa cácị prototype: Hàm, macro, #include<mpi.h> h ng,….ằ main(int argc,char* argv[]) { Kh iở t oạ môi intitation of variable; trường MPI MPI_Init(&argc,&argv); .... ... - D n d p dọ ẹ ữ ... li u MPIệ MPI_Finalize(); - Hủy bỏ các } hàm đang ch yạ goupee.com fb.com/groups/goupee

Page 8

Các đ c đi m cặ ể ơ b n cả ủa CT truy n thông đi pề ệ  Bao gồm nhiều instance của 1 chương trình tuần tự.  Các instance truyền thông với nhau qua các định tuyến trong thư viện MPI  Các định tuyến được chia thành:  Khởi tạo, quản lý và ngắt qúa trình truyền thông  Truyền thông giữa các cặp tiến trình(truyền thông điểm – điểm)  Truyền thống giữa các nhóm nhóm(truyền thông công cộng)  Tạo các loại dữ liệu có cấu trúc riêng  Thao tác trên communicator goupee.com fb.com/groups/goupee

Page 9

Quy ước đ t tênặ  Tất cả phần tử trong MPI (định tuyến, biến, hằng, ...) đều bắt đầu bằng từ MPI_  Tên định tuyến:  MPI_Xxxxxx(tham số,...)  MPI_Init($argc, $args)  Tên hằng:  MPI_XXXXX  MPI_COMM_WORLD, MPI_REAL goupee.com fb.com/groups/goupee

Page 10

Đ nh tuy n MPI và giá tr trị ế ị ả về  Các định tuyến MPI được thực thi như hàm trong C  Giá trị trả về của định tuyến là 1 số nguyên (integer) cho biết trạng thái kết thúc của hàm (lỗi hay thành công) int err; err = MPI_Init($argc, $args); if (err == MPI_SUCCESS) { } goupee.com fb.com/groups/goupee

Page 11

Các ki u dể ữ li u cệ ủa chu n MPIẩ  Kiểu dữ liệu khai báo là MPI_Datatype Ki uể dữ li uệ MPI Ki uể dữ li uệ tương ứng trong C MPI_CHAR signed char  Ngoài ra còn có các kiểu MPI_SHORT signed short int dữ liệu dẫn xuất từ kiểu MPI_INT signed int MPI_LONG signed long int dữ liệu chuẩn MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED u MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI_PACKED (none) MPI_BYTE (none) goupee.com fb.com/groups/goupee

Page 12

Communicator comm = MPI_COMM_WORLD  Communicator: Một nhóm các tiến trình có thể truyền thống với nhau 1 3  Một tiến trình có thể thuộc nhiều Communicator 5 Message 2 0 4  Kiểu dữ liệu biểu diễn Communicator: MPI_Comm  MPI_Comm comm: xác định communicator của  MPI_COM_WORLD: Mọi tiến node gửi và nhận trình đều thuộc communicator này goupee.com fb.com/groups/goupee

Page 13

Rank  Mỗi tiến trình trong 1 communicator có 1 định danh, gọi là Rank, đánh số bắt đầu từ 0.  Một tiến trình có thể các rank khác nhau khi thuộc về các communicator khác nhau Rank 0 Rank 5 LAN Rank 1 Rank 4 Rank 2 Rank 3 goupee.com fb.com/groups/goupee

Page 14

Các đ nh tuy nị ế thi t l p môi trế ậ ường và l y các thông sấ ố về môi trường  int MPI_Init()  Khởi tạo tham số cho môi trường MPI  int MPI_Comm_rank(MPI_Comm comm, int *rank)  Trả về rank của tiến trình  int MPI_Comm_size(MPI_Comm comm, int *size);  Trả về số tiến trình trong comm  int MPI_Finalize()  Giải phóng dữ liệu, ngắt các định tuyến MPI goupee.com fb.com/groups/goupee

Page 15

Cài đ t môi trặ ường thử nghi mệ  Sử dụng hệ thống song song sẵn có  Không đòi hỏi cấu hình, bảo trì, thay đổi máy tính cá nhân  Tập trung vào viết chương trình  Số lượng các nút tính toán nhiều  Môi trường song song thực sự  Hệ thống bkluster  Địa chỉ: bkluster.hut.edu.vn  Liên hệ người quản trị để lấy tài khoản đăng nhập  Tự cài đặt môi trường song song trên máy cá nhân  Số lượng CPU ít  Đòi hỏi công sức cài đặt, bảo trì goupee.com fb.com/groups/goupee

Page 16

Các bước cài đ tặ  Hướng dẫn này áp dụng cài trên 1 máy tính đơn  Bước 1: Hệ điều hành  Cài đặt hệ điều hành dựa trên Linux: OpenSuse, Ubuntu, Fedora, Debian, …  Có thể dùng máy ảo để cài hệ điều hành  Hoặc cài đặt Cygwin trên môi trường Windows để thử nghiệm  Bước 2: môi trường truyền thông điệp  Download phần mềm lammpi  http://www.lam-mpi.org/download/files/lam-7.1.4.tar.bz2  Giải nén  $ tar xjvf lam-7.1.4.tar.bz2  Cài đặt  Gõ lần lượt các lệnh sau: ./configure, make, make install goupee.com fb.com/groups/goupee

Page 17

Môi trường so n th o mã ngu nạ ả ồ Chương trình eclipse, với plugin PTP goupee.com fb.com/groups/goupee

Page 18

Môi trường so n th o mã ngu nạ ả ồ Môi trường lập trình song song trực tuyến PCP http://bkluster.hut.edu.vn/pcp goupee.com fb.com/groups/goupee

Page 19

Vi t chế ương trình helloworld.c 1. #include <stdio.h> 2. #include <unistd.h> 3. #include <mpi.h> 4. int main(int argc, char* argv[]) 5. { 6. int size, rank; 7. char hostname[50]; 8. // Khoi tao tham so cho moi truong MPI 9. MPI_Init(&argc, &argv); 10. // Lay ve kich thuoc pommunicator 11. MPI_Comm_size(MPI_COMM_WORLD, &size); 12. // Lay ve so hieu rank 13. MPI_Comm_rank(MPI_COMM_WORLD, &rank); 14. // Lay ve hostname 15. gethostname(hostname,50); 16. printf("My rank is %d , %s\n",rank, hostname); 17. MPI_Finalize(); 18. return 0; 19.} goupee.com fb.com/groups/goupee

Page 20

Biên d ch chị ương trình  Dùng lệnh  mpicc helloworld.c –o helloworld  Biên dịch mã nguồn helloworld.c thành chương trình chạy có tên helloworld goupee.com fb.com/groups/goupee

Affichage des 20 premières pages. Téléchargez le document pour le voir en entier.

Commentaires (0)

Se connecter pour rejoindre la discussion

Aucun commentaire pour le moment. Soyez le premier !