Gửi một tin nhắn

Một phần của tài liệu Các hệ vi xử lý tiên tiến (Trang 83 - 84)

Gửi tin nhắn vào PVM được thực hiện theo kiểu không đồng bộ. Tác vụ gửi sẽ phục hồi lại việc thực thi nó ngay khi tin nhắn được gửi (điểm 3 và 4 trong hình. 8.4). mà không chờ tác vụ nhận thực hiện thao tác nhận phù hợp như trong truyền thông đồng bộ. Lưu ý rằng cấu trúc truyền thông đồng bộ đối với PVM đã được đề xuất trong công trình của Lundell và các cộng sự (1996).

Sau khi bộ đệm được khởi tạo và quá trình đóng gói hoàn tất, các tin nhắn đã sẵn sàng được gửi đi. Một tin nhắn có thể được gửi đến một hoặc nhiều người nhận. Những gì

chúng ta cần xác định vào lúc này là bộ nhận dạng cho mỗi tác vụ sẽ nhận được tin nhắn và một nhãn (cờ) cho tin nhắn.

Gửi đến một đối tượng nhận: Hàm pvm_send () thực hiện một hoạt động gửi từ

điểm tới điểm. Hàm này có hai đối số: TID của tác vụ mục tiêu và bộ nhận dạng tin nhắn kiểu số nguyên ( tag). Ví dụ, hàm gọi

info = pvm_send (tid, tag) sẽ đánh dấu tin nhắn được đóng gói trong bộ đệm gửi bằng thẻ

label được cung cấp bởi lập trình viên và gửi đến các tác vụ mà các ký hiệu nhận dạng của nó là tid. Lời gọi hàm trả về mã trạng thái kiểu số nguyên info. Giá trị âm của info cho biết một lỗi.

Gửi cho nhiều đối tượng nhận: Để gửi tin nhắn đến nhiều nơi, nên sử dụng hàm pvm_mcast (). Các TID của các tác vụ sẽ được lưu trong một mảng. Một con trỏ tới mảng

các TID, số tác vụ nhận, và nhãn tin nhắn là các đối số của pvm_mcast (). Ví dụ, hàm gọi

Info = pvm_mcast (các tid, n, tag) sẽ đánh dấu các tin nhắn với tag kiểu số nguyên và gửi

tới n tác vụ mà các TID của nó được xác định trong các tid chuỗi. Một lần nữa, mã trạng thái info cho biết liệu lời gọi hàm có thành công không. Lưu ý rằng tin nhắn sẽ không bao giờ được gửi đến tác vụ gọi ngay cả khi TID của nó được gộp vào tid chuỗi.

Gửi đến một nhóm: Một tin nhắn có thể được truyền tới tất cả các thành viên của

nhóm sử dụng hàm pvm_bcast (). Bất kỳ tác vụ nào có thể gọi hàm này mà không cần phải là thành viên của nhóm. Các đối số của hàm này là tên nhóm và tag tin nhắn. Đầu tiên nó xác định các TID của các thành viên trong nhóm và sau đó sử dụng hàm pvm_mcast () để phát tin nhắn. Ví dụ, hàm gọi

info = pvm_bcast (group_name, tag) sẽ đánh dấu tin nhắn với tag kiểu số nguyên và gửi

cho tất cả các thành viên của nhóm group_name. Lưu ý rằng nếu những thay đổi trong nhóm đang trong quá trình truyền đi, sự thay đổi sẽ không được phản hồi. Bởi vì những thay đổi trong nhóm không phải là các hoạt động tập hợp trên nhóm, kết quả của các hoạt động tập hợp không thể dự đoán trừ khi đồng bộ hóa được thực hiện thủ công.

Đóng gói và gửi trong một bước: PVM cũng cung cấp một hàm khác để gửi tin

nhắn mà không cần phải chuẩn bị và đóng gói bộ đệm thủ công. Hàm pvm_psend() tự động đóng gói cho lập trình viên. Ngoài các TID mục tiêu ( ký hiệu nhận dạng tác vụ), và nhãn tin nhắn, hàm pvm_psend () đưa một con trỏ đến một bộ đệm, chiều dài của nó, kiểu dữ liệu của nó đóng vai trò là các đối số. Ví dụ, lời gọi hàm Info = pvm_psend (tid, tag,

my_array, n, int) đóng gói một mảng n số nguyên được gọi là my_array ( chuổi của tôi)

vào một tin nhắn được gắn nhãn tag, và gửi nó đến tác vụ mà TID của nó là tid.

Một phần của tài liệu Các hệ vi xử lý tiên tiến (Trang 83 - 84)