Chính sách của nhiều lần chuyển giao không đồng bộ chồng chéo trong MPI là gì?
Tôi có một chương trình với một số irecv
hoạt động không đồng bộ mở . Tôi thấy rằng các giao dịch chuyển tiền có thể diễn ra (tương ứng isend
đã được gọi) chờ trên các chuyển khoản khác chưa sẵn sàng (tương ứng isend
chưa được gọi). Để rõ ràng sự không hiệu quả này không xuất phát từ sự tranh chấp mạng; mạng của tôi là không cần thiết.
Chương trình của tôi trông như sau:
Máy 1
call irecv(variable A from machine 2)
call irecv(variable B from machine 2)
call irecv(variable C from machine 2)
call wait(variable C from machine 2)
call do_important_work_with(variable C)
....
Máy 2
call isend(variable C to machine 1)
call isend(variable B to machine 1)
call do a bunch of costly work
call isend(variable A to machine 1)
....
Vấn đề
Việc chuyển giao C
dường như bị chặn không cần thiết bởi việc chuyển giao A
.
Tôi thấy rằng wait
trên variable C
trên máy 1 không hoàn thành cho đến khi sau khi công việc tốn kém trên máy 2 hoàn tất. Điều này thật đáng tiếc vì việc chuyển tiền này có thể đã bắt đầu khi bắt đầu chương trình của tôi. Dường như phải chờ đợi để chuyển A
hoàn thành.
Câu hỏi
Đặc biệt tôi có một tính toán như sau.
- Đây có phải là mong đợi?
- Chính sách của nhiều lần chuyển giao không đồng bộ chồng chéo là gì?
- Điều này có thể tránh được mà không cần sắp xếp lại mã của tôi (có một số cài đặt nội bộ có liên quan) không?
- Tôi nên đi đâu để tìm hiểu thêm về chính sách của Bộ KH & ĐT cho nhiều lần chuyển trực tiếp?