Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лабораторна робота №4
Тема: введення в MPI.
Мета роботи: навчитися компiлювати i запускати на виконання паралельнi програми, що використовують бiблiотеку MPI.
Теоретичнi відомості
Введення
Одним з практичних втiлень моделi передачi повiдомлень є специфiкацiя, що отримала назву «Iнтерфейс передачi повiдомлень», або, англiйською, Message Passing Interface MPI.
Iснує декiлька безплатних реалiзацiй MPI, зокрема WMPI, LAM i MPICH2. Розглянемо використання MPI на прикладi бiблiотеки WMPI.
Пiдключення WMPI
Припустимо, що бiблiотека встановлена в каталог c:\student\wmpi. Цей каталог буде мiстити пiдкаталоги, наведенi в табл. 4.1.
Табл. 4.1.
Пiдкаталоги бiблiтеки WMPI |
|
Каталог |
Змiст |
include |
файли заголовкiв для програм на C |
lib |
бiблiотечнi файли |
lib\console |
бiблiотечнi файли для консольних додаткiв |
system |
допомiжнi системнi файли |
За допомогою бiблiотеки MPI можна створювати як консольнi, так i графiчнi програми для Windows. Для того, щоб додати в консольний додаток бiблiотеку MPI, необхiдно в IDE Visual C++ виконати наступнi дiї:
При стартi паралельна програма шукає спецiальний файл (так званий procgroup file). У цьому файлi зазначенi всi процеси програми. Цей файл можна вказати такими способами:
Procgroup file є звичайним текстовим файлом, у якому в кожнiм рядку описується група однотипних процесiв. Приклад файлу:
local 2
speed.dei.uc.pt 2 c:\wmpi\examples\prog.exe
Цей файл описує пять процесiв: один процес запускається безпосередньо при виклику програми; на основi цiєї ж програми запускаються два додаткових процеси; два процеси запускаються за допомогою програми prog.exe на компютерi speed.dei.uc.pt.
Основи MPI
Однiєю з особливостей MPI є поняття областi взаємодiї (областi звязку). Область взаємодiї визначає групу процесiв. Всi процеси, що належать однiй областi звязку можуть обмiнюватись повiдомленнями. Для опису областi взаємодiї застосовується iнформацiйна структура, що має назву комунiкатора. Комунiкатор описує контекст комунiкацiї для операцiй обмiну.
Кожен контекст визначає окрему область взаємодiї. Повiдомлення приймаються лише в тому контекстi, в якому були вiдправленi. В MPI iснує кiлька комунiкаторiв, що створюються автоматично, зокрема, комунiкатор MPI_COMM_WORLD визначає всi процеси даної програми. Це значення комунiкатора застосовується за замовченням. Кожен процес в областi взаємодiї отримує цiлий додатній номер. Номер процеса називається рангом. Ранг використовується для вказiвки конкретного процесу, наприклад при пересиланнi повiдомлення. Як правило, процес з рангом 0 вважається головним.
Прототипи MPI-функцiй знаходяться в файлi mpi.h. Всi функцiї MPI (окрiм MPI_Wtime та MPI_Wtick) в якостi результата повертають код помилки, що виникла, або MPI_SUCCESS, якщо операцiя заершилась без помилок.
Першою MPI-функцiєю, що викликає кожна MPI-програма, є MPI_Init, яка має наступний прототип:
int MPI_Init( int ∗argc , char ∗∗∗argv)
В якостi своїх аргументiв функцiя приймає адреси аргументiв функцiї main. Функцiя виконує iнiцiалiзацiю MPI, зокрема, створює комунiкатор MPI_COMM_WORLD. Пiсля виконання всiх операцiй програма має викликати функцiю MPI_Finalize, що має наступний формат: int MPI_Finalize ( )
Функцiя видаляє структури даних MPI i виконує iншi дiї для деiнiцiалiзацiї бiблiотеки. Пiсля виклику цiєї функцiї виклики iнших функцiї MPI забороненi.
Також майже кожна MPI-програма викликає функцiї MPI_Comm_size та MPI_Comm_rank. Перша з них має наступний прототип:
int MPI_Comm_size(MPI_Comm comm, int ∗ size )
Функцiя повертає розмiр областi звязку, яка описана комунiкатором comm. Друга, з прототипом:
int MPI_Comm_rank(MPI_Comm comm, int ∗rank )
визначає ранг процесу, що її викликав.
В лiстiнгу 4.1 наведено варiант класичної програми «Hello, world!». Лiстiнг 4.1. Програма «Hello, MPI!»
/∗ File lab1.c ∗/
#include <stdio . h>
#include <mpi .h>
int main( int argc , char ∗argv [] )
{
int me, size ;
MPI_Init(&argc , &argv ) ; MPI_Comm_size(MPI_COMM_WORLD, &size ) ; MPI_Comm_rank(MPI_COMM_WORLD, &me) ;
printf ( " Hello , MPI ! me=%d , size=%d\n" , me, size); MPI_Finalize ( ) ;
return 0;
} /∗ int main ( int argc , char ∗argv[ ]) ∗/
Файл lab1.pg мiстить один рядок: «local 2». Результат роботи програми наступний:
Hello, MPI! me=0, size=3
Hello, MPI! me=2, size=3
Hello, MPI! me=1, size=3
Завдання
Контрольнi питання