Đáng chú ý, MPI_Ibarrier
là một thói quen rất hữu ích. Ví dụ: bạn có thể gửi một vòng tin nhắn không có cấu trúc đến các cấp bậc mà không biết có bao nhiêu tin nhắn nhận được bằng cách gửi với MPI_Issend
(vâng, việc sử dụng gửi đồng bộ hiếm), sau đó nhập một vòng lặp xen kẽ MPI_Testall
(để xem việc gửi đã hoàn thành chưa) và MPI_Iprobe
(để xử lý tin nhắn đến). Khi gửi xong, bạn đăng MPI_Ibarrier
và kiểm tra thay thế rào cản thăm dò các tin nhắn đến. Torsten Hoefler có một bài viết về điều này, nơi ông chứng minh sự tối ưu trong giao tiếp, xem Thuật toán 2: http://unixer.de/publications/img/hoefler-dsde-prot Protocol.pdf
Lưu ý rằng một rào cản không đảm bảo rằng các thông điệp điểm-điểm hoặc các tập thể không chặn khác được đăng trước khi rào cản hoàn thành. Nếu bạn muốn họ hoàn thành, bạn phải đảm bảo rằng họ đã hoàn thành trước khi đăng rào cản. Như Bill nói, (chặn) MPI_Barrier
là không chính xác / không cần thiết trong hầu hết các trường hợp. Một ngoại lệ là giao tiếp thông qua các kênh bên như hệ thống tập tin.
Mặc dù không có cách nào hiệu quả tương tự để mô phỏng MPI_Ibarrier
với MPI-2, MPICH2 cung cấp MPIX_Ibarrier
trong nhánh 1.5 (hiện tại). Các mạng của nhà cung cấp thường hỗ trợ các hoạt động này để các triển khai của nhà cung cấp (thường có nguồn gốc từ MPICH2) chỉ cần một giao diện. Ngay khi các bản vá của họ chuyển đến 1,5, MPI_Ibarrier
và các tập thể không chặn khác cần được hỗ trợ. Chi nhánh phát triển Open MPI có triển khai MPI_Ibarrier
dựa trên libNBC.