Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
178.18 Кб
Скачать

ФіЛабораторна робота № 2

Тема: Асинхронні та синхронні процедури передачі МРІ повідомлень між паралельними обчислювальними процесами у середовищі ОС Linux.

Мета: ознайомитися з асинхронними та синхронними процедурами передачі повідомлень, навчитися програмувати та виконувати паралельні процеси з використанням синхронних та асинхронних функцій МРІ на багатопроцесорних ЕОМ під керуванням ОС Linux.

ЗМІСТ

  1. Теоретичні відомості

  2. Хід роботи

  3. Зміст звіту

  4. Контрольні запитання

  5. Список літератури

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)

Функція повертає астрономічний час у секундах (речовинне число), що пройшло з деякого моменту в минулому. Гарантується, що цей момент не буде змінений за час існування процесу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]