- •Лекція 7. Grid-портал для доступу користувачів до ресурсів і прикладних програм Grid
- •10.1 Будова кластера
- •10.2 Організація мережі обчислювального кластеру
- •10.2.1 Мережеві карти
- •10.2.2 Комутатори
- •10.2.3 Мережеве забезпечення кластеру.
- •10.2.4 Мережева файлова система
- •10.2.5 Конфігурація сервера
- •10.2.6 Конфігурація клієнтів
- •10.2.7 Ssh, беспарольный доступ
- •10.3 Розпаралелювання програм
- •10.3.1 Варіанти декомпозиції
- •10.3.2 Тривіальна декомпозиція
- •10.3.3 Функціональна декомпозиція
- •10.3.4 Декомпозиція даних
- •10.3.5 Regular Domain Decomposition
- •10.3.6 Сітка процесів
- •10.3.7 Зміна елементів даних
- •10.3.8 Область перекриття
- •10.3.9 Граничний обмін
- •10.3.10 Деталізація
- •10.4 Паралельна віртуальна машина (pvm)
- •10.4.1 Взаємодія завдань у pvm
- •10.4.2 Управління завданнями
- •10.4.3 Передача повідомлень
- •10.4.4 Архівування даних
- •10.4.5 Установка pvm
- •10.4.6 Адміністрування pvm
- •10.5 Інтерфейс передачі повідомлень (mpi)
- •10.5.1 Встановлення системи mpi
- •10.5.2 Конфігурація кластеру mpich
- •10.5.3 Конфігурація кластеру lam/mpi
- •10.5.4 Конфігурація кластеру OpenMp
- •10.5.5 Компіляція і виконання
- •10.5.6 Загальна організація mpi
- •Лекція 8. Grid-застосування
10.4.3 Передача повідомлень
Здійснення повідомлень в PVM призначена для передачі даних між різними процесами і складається з трьох кроків. По-перше, буфер даних перед посиланям повинен бути ініціалізований першим з використанням функцій pvm_initsend () або pvm_mkbuf (). По-друге, дані, що пересилаються повинні бути упаковані в цей буфер. Для пакування використовується деяка кількість комбінацій викликів функції pvm_pk * (). У FORTRAN упаковка даних проводиться підпрограмою pvmfpack (). Третій крок полягає у пересиланні даних адресатам. Для цієї мети в залежності від списку адресатів використовується виклик функції pvm_send (), в параметрах яких вказується конкретний процес-приймач, або функції pvm_mcast (), що використовується для всеспрямованої передачі.
Повідомлення приймається процесом-адресатом за допомогою відповідної функції, після чого відбувається розпаковування прийнятого блоку, вилучення зберігаються в цих даних і заповнення їх відповідними локальними змінними або масивами. Процедура прийому повідомлень може бути налаштована в декількох варіантах:
1) Для прийому будь-яких повідомлень.
2) Для прийому будь-яких повідомлень від певного джерела.
3) Для прийому будь-яких повідомлень з певним message tag.
4) Для прийому будь-яких повідомлень з певним message tag з певного джерела.
Крім того, існує функція для перевірки факту доставки повідомлення адресатові.
Буфер повідомлення call pvmfinitsend (encoding, bufid).
Якщо користувач використовує тільки один буфер повідомлення, то єдина необхідна для роботи з буфером функція - це pvm_initsend (). Ця функція викликається безпосередньо перед упаковкою нової порції пересилаючих даних в буфер повідомлення. Функція pvm_initsend звільняє буфер і створює новий для пакування в нього даних. Схема кодування упаковується в буфер даних і вказується завданням змінної encoding. Повернене в змінну bufid значення є ідентифікатором буфера.
Мінлива encoding може приймати такі значення:
1) PvmDataDefault - XDR кодування, що використовується в PVM за замовчуванням. Це кодування використовується зазвичай в гетерогенних кластерах, коли PVM не може знати чи розуміє приймаюча сторона відповідний формат даних. Наприклад, коли дані передаються з Linux-машини на Windows-машину. У випадку, коли в кластері використовується тільки один тип операційної машини або коли користувач впевнений, що приймаюча сторона зрозуміє все правильно, слід використовувати тип кодування PvmDataRaw.
2) PvmDataRaw - без кодування. Дані передаються без будь-яких змін. Якщо приймаюча сторона не зможе правильно прочитати цей формат, це викличе повернення коду помилки в процесі розпаковування.
3) PvmDataInPlace - дані залишаються на місці, не переміщаючись в буфер посилки. Цей тип кодування можна використовувати для зниження накладних витрат, пов'язаних з переміщенням даних в буфер. У цьому випадку буфер містить тільки довжини і покажчики на дані, що передаються. При виклику pvm_send () дані копіюються безпосередньо з того місця, де вони знаходяться. Використання цього кодування накладає одне обмеження. Передані дані не повинні бути змінені між моментом, коли почалася їх упаковка і моментом закінчення передачі буфера повідомлення адресату. Однак, при використанні даного типу упаковки, є одна помітна перевага. Функція упаковки pvm_initsend може бути викликана тільки один раз на початку програми. Наприклад на початку роботи програми ми можемо упакувати дані з області перекриття і передавати їх безліч разів в міру необхідності.