
- •ФіЛабораторна робота № 2
- •1. Теоретичні відомості
- •1.1 Термінологія і позначення
- •1.2 Загальні процедури mpi
- •1.3 Прийом/передача повідомлень із блокуванням (синхронні процедури)
- •1.4 Прийом/передача повідомлень без блокування (асинхронні процедури)
- •1.4 Визначені константи типу елементів повідомлень
- •2. Хід роботи
- •4. Контрольні питання
- •5. Список літератури
ФіЛабораторна робота № 2
Тема: Асинхронні та синхронні процедури передачі МРІ повідомлень між паралельними обчислювальними процесами у середовищі ОС Linux.
Мета: ознайомитися з асинхронними та синхронними процедурами передачі повідомлень, навчитися програмувати та виконувати паралельні процеси з використанням синхронних та асинхронних функцій МРІ на багатопроцесорних ЕОМ під керуванням ОС Linux.
ЗМІСТ
Теоретичні відомості
Хід роботи
Зміст звіту
Контрольні запитання
Список літератури
1. Теоретичні відомості
1.1 Термінологія і позначення
MPI - message passing interface - бібліотека функцій, призначена для підтримки роботи паралельних процесів у термінах передачі повідомлень.
Номер процесу - ціле додатнє число, що є унікальним атрибутом кожного процесу.
Атрибути повідомлення - номер процесу-відправника, номер процесу-одержувача й ідентифікатор повідомлення. Для них заведена структура MPI_Status, що містить три поля: MPI_Source (номер процесу відправника), MPI_Tag (ідентифікатор повідомлення), MPI_Error (код помилки); можуть бути й додаткові поля.
Ідентифікатор повідомлення (msgtag) - атрибут повідомлення, що є цілим додатнім числом, що лежить у діапазоні від 0 до 32767. Процеси поєднуються в групи, можуть бути вкладені групи. Усередині групи всі процеси пронумеровані. З кожною групою асоційований свій комунікатор. Тому при здійсненні пересилання необхідно вказати ідентифікатор групи, усередині якої здійснюється це пересилання. Всі процеси знаходяться в групі з визначеним ідентифікатором MPI_COMM_WORLD.
При описі процедур MPI будемо користуватися словом OUT для позначення "вихідних" параметрів, тобто таких параметрів, через які процедура повертає результати.
1.2 Загальні процедури mpi
int MPI_Init( int* argc, char*** argv)
MPI_Init - ініціалізація паралельної частини програми. Реальна ініціалізація для кожного додатка виконується не більше одного разу, а якщо MPI уже був ініційований, те ніякі дії не виконуються й відбувається негайне повернення з підпрограми. Всі MPI-процедури, що залишилися, можуть бути викликані тільки після виклику MPI_Init.
Повертається: у випадку успішного виконання - MPI_SUCCESS, інакше - код помилки. (Теж саме повертають майже всі інші функції).
int MPI_Finalize( void )
MPI_Finalize - завершення паралельної частини програми. Всі наступні звертання до будь-яких MPI-процедур, у тому числі до MPI_Init, заборонені. До моменту виклику MPI_Finalize деяким процесом всі дії, що вимагають його участі в обміні повідомленнями, повинні бути завершені. Складний тип аргументів MPI_Init передбачений для того, щоб передавати всім процесам аргументи main:
int main(int argc, char** argv)
{
MPI_Init(&argc, &argv);
...
MPI_Finalize();
}
int MPI_Comm_size( MPI_Comm comm, int* size)
Визначення загального числа паралельних процесів у групі comm.
comm - ідентифікатор групи
OUT size - розмір групи
int MPI_Comm_rank( MPI_Comm comm, int* rank)
Визначення номера процесу в групі comm. Значення, що повертає за адресою &rank, лежить у діапазоні від 0 до size_of_group-1.
comm - ідентифікатор групи
OUT rank - номер викликаючого процесу в групі comm
double MPI_Wtime(void)
Функція повертає астрономічний час у секундах (речовинне число), що пройшло з деякого моменту в минулому. Гарантується, що цей момент не буде змінений за час існування процесу.