267
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
Nhận xét 1:
• Mô hình truyền thông điệp được sử dụng rất hiệu quả để lập trình song song theo cụm máy tính.
• PVM cung cấp môi trường phần mềm để truyền thông điệp cho các cụm máy tính thuần nhất và cả không thuần nhất. • PVM có một tập hợp các hàm thư viện được viết bằng C
hoặc Fortran.
• Mỗi chương trình được viết bằng C, được biên dịch để chạy trên những kiểu máy tính xác định trên mạng.
• Mỗi nút trong mạng (LAN) phải truy cập đến hệ thống tệp chứa các chương trình đã được dịch để thực hiện.
268
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
Nhận xét 2:
• Cụm máy tính trong PVM phải được xác định theo các mức ưu tiên để thực hiện các chương trình.
• Cách thực hiện tốt nhất là tạo ra một danh sách tên gọi của các máy tính và đặt ở hostfile. Tệp này được PVM đọc để thực hiện các chương trình.
• Mỗi máy tính có thể chạy một hay nhiều tiến trình (chương trình ứng dụng).
• Các chương trình ứng dụng chạy trong các máy tính thông qua các tiến trình của PVM để trao đổi với nhau trên mạng. Các tiến trình PVM yêu cầu đủ thông tin để chọn lựa đường truyền dữ liệu.
269
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
PVMCh.trình Ch.trình ứng dụng PVM Ch.trình ứng dụng PVM Ch.trình ứng dụng Máy tính trạm Máy tính trạm Máy tính trạm
Trao đổi thông điệp trên mạng
Sự trao đổi thông điệp của các máy tính trong hệ PVM
270
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
• Các chương trình của PVM thường được tổ chức theo mô hình chủ-tớ (master-slave), trong đó tiến trình chủ được thực hiện trước tiên, sau đó các tiến trình tớ sẽ được tạo ra trong tiến trình chủ đó.
Một số hàm thông dụng trong PVM:
• pvm_spawn():phát sinh tiến trình mới trong PVM
• pvm_mytid():ghi danh tiến trình muốn tham gia vào hệ PVM • pvm_exit():huỷ bỏ tiến trình
• pvm_send() vàpvm_recv():Các chương trình trao đổi thông điệp với nhau.
271
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
• Tất cả các thủ tục gửi đều không bị chặn (dị bộ) còn các thủ tục nhận thì hoặc bị chặn (được đồng bộ) hoặc không bị chặn. • Các thao tác chính của việc gửi và nhận dữ liệu được thực
hiện ở các bộ đệm buffer.
• Nếu dữ liệu được gửi đi là một danh sách các mục có cùng kiểu thì trong PVM sử dụng
pvm_psend()vàpvm_precv().
272
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
Hình dưới đây mô tả hoạt động của hai tiến trình trao đổi một mảng dữ liệu với nhau.
.. . . pvm_precv(); . . . Tiến trình 2 send buffer . . . pvm_send(); . . . Tiến trình 1 Chờ thông điệp Tiếp tục xử lý
Gọi hàm pvm_psend() và pvm_precv()
273
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
• Khi dữ liệu chuyển đi là phức tạp, gồm nhiều kiểu khác nhau thì chúng phải được đóng gói lại (pack) để gửi đến buffer, sau đó tiến trình nhận lại mở gói (unpack) để nhận về dữ liệu tương ứng. Đó là các hàm:
pvm_pkint() vàpvm_upkint()dùng cho dữ liệu kiểu int
pvm_pkfloat() vàpvm_upkfloat()dùng cho dữ liệu kiểu float
pvm_pkstr() vàpvm_upkstr()dùng cho dữ liệu kiểu string, v.v.
Lưu ý: thứ tự mở gói để lấy dữ liệu ra phải đúng theo thứ tự mà chúng được đóng gói ở tiến trình gửi. Bộ đệm bufferđể gửi dữ liệu là mặc định và nó phải được khởi tạo ở tiến trình gửi bằng lệnh pvm_inítend().
274
IV. LẬP TRÌNH TRÊN CỤM MÁY TÍNH
Tương tự, các lệnh khác về trao đổi thông điệp theo nhóm như: • pvm_bcast()
• pvm_scatter()
• pvm_gather()
• pvm_reduce(),v.v.
Xem ví dụ ở tài liệu
275Tiểu luận: tìm hiểu về PVM Tiểu luận: tìm hiểu về PVM
http://www.csm.ornl.gov/pvm/manpages.html http://www.netlib.org/pvm3/
276