НОУ ІНТУІТ, Лекція, Інтерфейс передачі повідомлень MPI

Лабораторна робота 0.2 Знайомство з процедурами буферизованого та неблокуючого двоточкового обміну MPI

Двоточковий буферизований обмін

При надсиланні повідомлення в буферизованому режимі джерело копіює повідомлення в буфер, а потім передає його в режимі, що не блокує. Виділення буфера та його розмір контролюються програмістом, який має заздалегідь створити буфер достатнього розміру. Буферизована передача завершується відразу, оскільки повідомлення негайно копіюється до буфера для подальшої передачі.

Після завершення роботи з буфером його потрібно вимкнути. Після вимкнення буфера можна знову використати пам'ять, що він займає, однак слід пам'ятати, що в мові C цей виклик не звільняє автоматично пам'ять, відведену для буфера.

Буферизований обмін рекомендується використовувати в тих ситуаціях, коли програміст потребує більшого контролю над розподілом пам'яті.

Двоточкові неблокуючі обміни

Виклик підпрограми неблокуючої передачі ініціює, але не завершує її. Передача даних із буфера або їх зчитування відбувається одночасно з виконанням інших операцій. Завершується обмін викликом додаткової процедури, яка перевіряє, чи скопійовані дані буфер передачі. До завершення обміну запис у буфер або зчитування з нього робити не можна, оскільки повідомлення може бути ще не надіслано або отримано. Неблокуюча передача може бути прийнята підпрограмою прийому блокуючого і навпаки.

Неблокуючий обмін виконується у два етапи:

  1. Ініціалізація обміну.
  2. Перевірка завершення обміну.

Для маркування неблокуючих операцій обміну використовуютьсяідентифікатори операцій обміну.

Перевірка фактичноговиконання передачі або прийому в неблокуючому режимі здійснюється за допомогою виклику підпрограм очікування, що блокують роботу процесу до завершення операції або не підпрограм, що не блокують перевірки, повертають логічне значення "істина", якщо операція виконана.

Підпрограма MPI_Wait блокує роботу процесу до завершення прийому або надсилання повідомлення. Функції MPI_Wait та MPI_Test можна використовувати для завершення операцій прийому та передачі.

Підпрограми-пробники

Отримати інформацію про повідомлення до приміщення в буфер прийому можна за допомогою підпрограм-пробників MPI_Probe і MPI_IProbe . На підставі отриманої інформації приймається рішення про подальші дії. За допомогою виклику підпрограми MPI_Probe фіксується надходження (але не прийом!) Повідомлення. Потім визначається джерело повідомлення, його довжина, виділяється буфер відповідного розміру та виконується прийом повідомлення.

Лабораторна робота

У завданнях лабораторної роботи 0.2 пропонується дописати пропоновані фрагменти програм мовами Fortran і C, написані з використанням процедур MPICH 1.2.7. Пропущені фрагменти позначені трьома крапками.

Необхідний до виконання лабораторної роботи довідковий матеріал можна знайти на стор. 30 - 34методичного посібника"Кошти програмування для багатопроцесорних обчислювальних систем".

У вихідному тексті програми мовою C пропущено виклики процедур буферизованого обміну. Додати ці виклики, відкомпілювати та запустити програму.

У вихідному тексті програми на мові Fortran пропущено виклики процедур неблокуючих операцій обміну. Додати ці виклики, відкомпілювати та запустити програму.

У вихідному тексті програми мовою C пропущені виклики підпрограм-пробників. Додати цівиклики, відкомпілювати та запустити програму.

У вихідному тексті програми на мові Fortran пропущено виклики процедур блокуючого зондування та деякі інші важливі фрагменти. Додати ці виклики, відкомпілювати та запустити програму.

У вихідному тексті програми на мові Fortran пропущено: виклик процедури MPl_Wait та деякі інші важливі фрагменти. Додати ці виклики, відкомпілювати та запустити програму.