Đồng bộ hóa tác vụ

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

Các cấu trúc đồng bộ có thể được sử dụng để áp đặt thực hiện các hoạt động theo thứ tự trong một chương trình song song. Ví dụ, một tác vụ sử dụng các biến trong tính tốn phải chờ đợi cho đến khi các biến này này được tính tốn (có thể do các tác vụ khác) trước khi nó lại tiếp tục thực hiện. Mặc dù khơng có sự tham gia của sự phụ thuộc dữ liệu, các tác vụ song song có thể cần phải đồng bộ hóa với nhau tại một điểm xác định trong q trình thực thi. Ví dụ, các thành viên của một nhóm hồn thành cơng việc của họ sớm có thể cần phải đợi tại một điểm đồng bộ hóa cho đến khi các tác vụ khác mất một thời gian dài để đến cùng một điểm. Đồng bộ hóa trong PVM có thể đạt được sử dụng một số cấu trúc, đặc biệt là nhận có chờ và các phép tốn hàng rào (hoạt động rào cản).

5.5.1 Đồng bộ hóa ưu tiên

Truyền tin nhắn có thể được sử dụng hiệu quả để áp đặt các ràng buộc ưu tiên giữa các tác vụ. Sử dụng hàm nhận chờ (pvm_recv ()) buộc tác vụ nhận chờ cho đến khi một tin nhắn phù hợp được nhận. Đối tượng gửi tin nhắn phù hợp này có thể giữ tin nhắn của mình miễn là nó muốn đối tượng nhận chờ. Ví dụ, xét hai tác vụ; T0 và T1 trong hình 8.6. Giả sử chúng ta muốn chắc chắn rằng hàm g () trong T1 không được thực hiện cho đến khi T0 đã hoàn thành việc thực thi hàm f ().Thứ tự thực hiện cụ thể có thể được đảm bảo sử dụng một hoạt động gửi sau khi gọi f () trong T0, và thao tác nhận có chờ thích hợp trước khi gọi g () trong T1.

5.5.2 Các hàng rào

Các tác vụ song song có thể được đồng bộ hóa thơng qua việc sử dụng các điểm đồng bộ hóa được gọi là các hàng rào. Khơng có tác vụ nào có thể vượt qua hàng rào cho đến khi tất cả các tác vụ tham gia đã đạt tới hàng rào đó. Các thành viên của một nhóm có thể chọn để chờ tại một hàng rào cho đến khi một con số cụ thể của thành viên trong nhóm được kiểm tra tại hàng rào đó.PVM cung cấp đồng bộ hóa hàng rào thông qua việc sử dụng hàm

hàm này trước khi bất kỳ thành viên nào trong số đó có thể tiến hành vượt qua hàng rào như sau.

Info = pvm_barrier(group_name, ntasks)

Một lần nữa mã trạng thái info sẽ trả về một giá trị kiểu số nguyên âm trong trường hợp có lỗi. Số thành viên chỉ định có thể được chọn là bất kỳ số nào nhỏ hơn hoặc bằng tổng số các thành viên. Tuy nhiên, thường đó là tổng số các thành viên trong nhóm. Trong mọi trường hợp, giá trị của đối số số này phải phù hợp với lời gọi hàng rào nhất định. Nếu đối số này được đặt là - 1, PVM sẽ sử dụng giá trị của pvm_gsize (), trả về tổng số thành viên. Vì các tác vụ có thể tham gia vào nhóm sau khi các tác vụ khác đã gọi pvm_barrier () chúng ta cần phải xác định số tác vụ cần phải kiểm tra tại hàng rào. Một tác vụ không được phép gọi pvm_barrier () với một nhóm mà nó khơng thuộc (về nhóm đó).

Hình 8.6 Đồng bộ hóa ưu tiên sử dụng truyền tin nhắn. Hàm f () trong T0 đảm bảo được thực hiện trước hàm g () trong T1.

Ví dụ 5 Hình 8.7 cho thấy ba thành viên của nhóm lệ thuộc (T0, T1, T2) sử dụng một

hàng rào để đồng bộ hóa tại một điểm nhất định trong quá trình thực thi chúng. Một trong ba tác vụ sẽ gọi các hàm sau:

info=pvm_barrier("slave", 3)

Việc thực hiện sẽ khóa cho đến khi ba thành viên của nhóm lệ thuộc (slave) phát ra lời gọi hàm pvm_barrier () như biểu diễn trong hình. Tác vụ T1 gọi là hàm đầu tiên, tiếp theo là T0, và cuối cùng T2. Tác vụ T0 và T1 chờ tại hàng rào cho đến khi T2 tới được hàng rào trước khi tất cả các tác vụ tiếp tục được thực hiện.

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