Đặc điểm mô hình lập trình truyền thông điệpMỗi tiến trình có một không gian địa chỉ riêng và độc quyền... Đặc điểm mô hình lập trình truyền thông điệpLiên lạc giữa các
Trang 1Lập trình song song với thư viện lập
trình MPICH/MPI và ứng dụng
Trang 2Thư viện lập trình song song MPI và ứng dụng
Nội dung chính:
- Mô hình truyền thông điệp
- Thư viện song song MPI
- Phầm mềm hỗ trợ lập trình song song MPICH2
Trang 3Mô hình truyền thông điệp Chương trình song song
Process 1 Process K Prosess N
Trang 4Đặc điểm mô hình lập trình truyền thông điệp
Nhiều tiến trình cùng hoạt động.
Mỗi tiến trình chạy một bản copy của một chương trình duy nhất.
int D = B-A; int D = B-A; int D = B-A;
Trang 5Đặc điểm mô hình lập trình truyền thông điệp
Mỗi tiến trình có một không gian địa chỉ riêng
và độc quyền.
Trang 6Đặc điểm mô hình lập trình truyền thông điệp
Liên lạc giữa các tiến trình
• Mỗi tiến trình có một định danh, còn gọi là hạng (rank) của tiến trình
trong nhóm.
• Việc liên lạc, phân chia công việc, dữ liệu đuợc dựa trên hạng của tiến
trình
Trang 7Đặc điểm mô hình lập trình truyền thông điệp
Liên lạc giữa các tiến trình
• Gửi nhận dữ liệu :
Thông điệp: gói dữ liệu đuợc truyền giữa các tiến trình.
Việc gửi/nhận thông diệp được thực hiện bởi hệ thống truyền thông diệp: message passing system
Ðể thực hiện gửi/nhận thông điệp, hệ thống truyền thông điệp cần:
– phía gửi: địa chỉ tiến trình nhận, vị trí dữ liệu gửi, kiểu dữ liệu gửi, kích thuớc dữ liệu gửi.
– phía nhận: địa chỉ tiến trình gửi, vị trí dữ liệu nhận, kiểu dữ liệu nhận, kích thuớc dữ liệu nhận.
Trang 8Đặc điểm mô hình lập trình truyền thông điệp
Mọi thao tác liên lạc đều cần sự phối hợp giữa
2 tiến trình: tiến trình có dữ liệu và tiến trình cần dữ liệu.
Kiến trúc lập trình là SIMD và MIMD.
Trang 9Môi trường truyền thông điệp
Lập trình song song truyền thông điệp:
Thiết kế ngôn ngữ lập trình song song chuyên dụng Vd: OCCAM
Phát triển 1 số ngôn ngữ lập trình bậc cao để điều khiển thông điệp: C/C++, Fortran M
Kết hợp ngôn ngữ lập trình với thư viện truyền thông điệp (MPI, PVM)
Trang 10MPI - Message Passing Interface
MPI là bộ thư viện hỗ trợ việc lập trình song song
Nó bao gồm các thủ tục, kiểu dữ liệu, hằng định nghĩa dùng để đặc tả truyền thông điệp.
Trang 11Một số thủ tục chính của MPI
Trang 12Viết chương trình đầu tiên
Trang 13Viết chương trình đầu tiên
Trang 14 int MPI_Init(int argc, char **argv)
• Khởi tạo môi trường MPI
• Gán hạng cho các tiến trình
• Được gọi một lần duy nhất trong một
chương trình
• Gọi trước tất cả các thủ tục MPI khác
int MPI_Finalize()
• Đóng môi trường MPI
• Không thủ tục nào được sử dụng sau thủ tục này kể cả MPI_Init
Thủ tục môi trường
Trang 15 MPI Communicator (Kênh truyền thông)
Kênh truyền thông là một tập hợp các tiến trình tham gia liên lạc với nhau.
Các tiến trình trong đó được định danh, gán rank cho các tiến trình là các số từ 0 đến size - 1
MPI_COMM_WORLD là kênh truyền thông
đã được định nghĩa sẵn, bao gồm tất cả các tiến trình.
Thủ tục môi trường
Trang 16 int MPI_Comm_size(MPI_Comm comm, int *size)
•Trả về số lượng tiến trìnhTham số:
•comm - số hiệu kênh truyền thông dữ liệu
•size - giá trị trả về số lượng tiến trình
int MPI_Comm_rank(MPI_Comm comm, int
*rank)
• Trả về số hiệu các tiến trình
Tham số:
• comm - số hiệu kênh
• rank - giá trị trả về số hiệu của tiến trình trong phạm vi từ 0…size-1
Thủ tục môi trường
Trang 17Thủ tục môi trường
Ví dụ : đưa ra rank của tiến trình hiện tại và số lượng tiến trình.
Trang 18Thủ tục môi trường
Trang 19Thủ tục truyền thông điểm – điểm
Buffered blocking
operations
Lệnh send(): sender sẽ bị
khóa cho đến khi message đã
được sao chép đầy đủ lên bộ
đệm nhận.
Lệnh receive(): receiver cũng bị khóa cho đến khi
message đã được nhận từ bộ
đệm.
Trang 20Thủ tục truyền thông điểm – điểm
Thực hiện nhiệm vụ nhận các thông điệp truyền về từ
Trang 21Thủ tục truyền thông điểm – điểm
Trang 22Bảng ánh xạ kiểu dữ liệu
Trang 23Thủ tục truyền thông điểm – điểm
MPI_Isend
int MPI_Isend(void *buf, int count,
MPI_Datatype datatype, int dest,int msgtag,
MPI_Comm comm, MPI_Request *request)
Thủ tục gửi không bị khoá
MPI_Irecv
int MPI_Irecv(void *buf, int count,
MPI_Datatype datatype, int source,int msgtag, MPI_Comm comm, MPI_Status *request)
Thủ tục nhận không bị khoá
Trang 24Thủ tục truyền thông điểm – điểm
Trang 25Thủ tục truyền thông tập hợp
Trang 26Thủ tục truyền thông tập hợp
Trang 27 Phân phối bộ đệm từ tiến trình gốc cho các tiến
trình còn lại trong comm
Thủ tục truyền thông tập hợp
Trang 28Thủ tục truyền thông tập hợp
Trang 29MPI_Reduce
int MPI_Reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
Kết hợp các giá trị đơn của các tiến trình
Thủ tục truyền thông tập hợp
Trang 30Thủ tục truyền thông tập hợp
Bảng kết hợp các kiểu dữ liệu trong MPI_Reduce