Методичні вказівки до виконання самостійної роботи для студентів та курсів за напрямком 080400 «Комп’ютерні науки»



Скачати 199,73 Kb.
Сторінка2/5
Дата конвертації27.01.2020
Розмір199,73 Kb.
ТипМетодичні вказівки
1   2   3   4   5
ЛАБОРАТОРНА РОБОТА 1.
Тема: Загальні процедури MPI

Мета: Вивчити роботу з основними операторами розподілених обчитслень засобами MPI

Час: 8 год.

1 Виконання роботи

- Вивчити теоретичні відомості.

- Вивчити практичну частину.

- Проробити контрольний приклад.

- Виконати самостійну роботу.

- Відповісти на контрольні питання.


2 Теоретичні відомості
У MPP системі оперативна пам'ять —распределенная, тобто кожен обчислювальний модуль має прямий доступ лише до своєї — локальній пам'яті.

За типом технічного втілення обчислювальних модулів MPP комп'ютери діляться на кластерні і звичайні (некластерні) системи. Обчислювальні модулі суперкомп'ютера кластерної архітектури є звичайні серійні комп'ютери, потужності яких можуть сильно різнитися. Основними достоїнствами кластерних систем є їх дешевизна, доступність для багатьох і простота самостійної «збірки». Під дешевизною потрібно розуміти невисоку вартість не самих навіть персональних комп'ютерів, а їх машинного часу. Ці комп'ютери, в основному, використовуються не для розрахунків, а як оргтехніка, простоюючи значну частину часу без навантаження. Отже, використання таких комп'ютерів для виконання побічних завдань практично нічого не коштує. Найчастіше кластерні системи як засіб комунікації використовують інтернет. Звідси і головний недолік цих систем — зі всіх видів суперкомп'ютерів у їх процесорів найповільніший доступ до видаленої (нелокальною) пам'яті. З цього, а також з того, що потужності обчислювальних модулів кластерів можуть значно різнитися, витікає необхідність складнішого програмування, ніж для звичайних MPP систем.


Стандартом де-факто для MPP машин на даний момент є бібліотека паралельних функцій MPI (Message Passing Interface - інтерфейс передачі повідомлень), реалізації якої існують для названих вище мов програмування.
Запуск програми

Приведемо дві команди, що дозволяють компілювати і запускати паралельні програми, написані на C/C++ з використанням бібліотеки MPI. Їх слід вводити в командному рядку тієї операційної системи, де встановлена реалізація MPI.

Щоб скомпілювати і зібрати програму prog. з, написану на C, слід виконати команду
mpicc prog.c -o prog

Щоб скомпілювати і зібрати програму prog.cpp слід виконати команду

mpiCC prog.cpp -о prog

При цьому якщо в програмі використовується математична бібліотека math.h, в кінці команди слід додати ключ -lm. Щоб використовувати компілятор C, необхідно замінити mpiCC на mpicc.

Для того, щоб запустити програму prog на п процесорах з обмеженням часу в t хвилин, слід виконати таку команду:

mpirun -np n -maxtime t prog

З інших параметрів виділимо ключ -stdiodir. Після нього указується ім'я директорії, в яку записуватимуться протокол запуску завдання, файл стандартного висновку і імена обчислювальних модулів, використаних для рахунку завдання.

Дві головні функції MPI

Ми використовуватимемо мову C++ і відповідний йому синтаксис функцій MPI.

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

Функція ініціалізації MPI є першою паралельною функцією в програмі. Її завдання — підготувати комунікаційне середовище для обміну повідомленнями. Вона створює коммуникатор а, який є описувачем глобальної області зв'язку — комунікаційного середовища, що дозволяє певній підмножині процесорів (у нашому случае-всему множині) безпечно обмінюватися інформацією. При цьому кожен процесор може «знаходитися» в декілька коммуникаторах, отримуючи в кожній з них унікальний номер — ціле число від 0 до P — 1, де P— кількість процесів в коммуникаторе.
Перед тим, як привести нотацію функції ініціалізації, відмітимо, що зараз і надалі ми для зручності записуватимемо функції не у вигляді прототипів, а саме в тому їх вигляді, який слід використовувати в програмі. При цьому якщо аргумент функції — покажчик на змінну якого-небудь типу, то на його місці ми ставитимемо амперсанд і змінну бажаного типу, допускаючи при цьому заміну цій конструкції одним покажчиком. Результат, що повертається майже всіма функціями MPI, — це MPI_SUCCESS у разі успішного виконання підпрограми і код помилки інакше (ПРИКЛАД 2.1). Отже, функція ініціалізації має вигляд:

MPI_Init(&argc &argv)




Аргумент

Тип

Опис

argc

int

Кількість параметрів командного рядка. Є першим аргументом функції main

argv

char**

Масив параметрів командного рядка. Є другим аргументом функції main

Функція MPI_Init запрошує параметри командного рядка, які отримує транзитом через функцію main. Навіщо це потрібно? Річ у тому, що при запуску програми команда mpirun додає в командний рядок інформацію, без якої MPI_Init не може обійтися (ВПРАВА 2.1).

Функція завершення паралельної частини виглядає таким чином:

MPI_Finalize()

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

ПРИКЛАД 1

Хай кожен процес привітає нас і виведе коди повернення функцій MPI_Init і MPI_Finalize.

//Приклад 2.1

#include

#include

int main(int argc, char **argv)

{

int i;


//Початок паралельної частини програми

i= MPI_Init(&argc &argv);

if (i == MPI_SUCCESS) printf("Successful initialization with code %d\n", i);

else
printf("Initialization failed with error code %d\n", i); i= MPI_Finalize(); if (i == MPI_SUCCESS)

printf("Successful MPI_Finalize() with code %d\n", i); else

printf("MPI_Finalize() failed with error code %d\n", i); //Конец паралельної частини програми return 0; }


ЛАБОРАТОРНА робота.

Складіть програму, в якій кожен процес виводить на экран2 параметри командного рядка. Кожен параметр слід виводити в окремому рядку, супроводжуючи порядковим номером.

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


  1. Який мінімальний набір засобів є достатнім для організації паралельних обчислень в системах з розподіленою пам'яттю ?

  2. У чому полягає важливість стандартизації засобів передачі повідомлень?

  3. Що слід розуміти під паралельної програмою?

  4. У чому відмінність понять процесу і процесора ?

  5. Який мінімальний набір функцій MPI дозволяє почати розробку паралельних програм?

  6. Як описуються передані повідомлення ?

  7. Як можна організувати прийом повідомлень від конкретних процесів?

  8. Як визначити час виконання MPI - програми?



Каталог: wp-content -> uploads -> sites
sites -> О. В. Сердюк, канд соц наук, доц., зав соціально-психологічної лаб. Хнувс
sites -> Програмами «014. 08 Середня освіта (Фізика)» та «015 Професійна освіта. Охорона праці»
sites -> Передмова
sites -> Навчальна програма нормативної дисципліни
sites -> Методика виховної та спортивно-масової роботи
sites -> Міжнародна Асоціація україністів International association of Ukrainian studies
sites -> Українське
sites -> Наукова школа доктора педагогіних наук, професора н. В. Лисенко
sites -> Образ жінки у телерекламі: погляд психолога


Поділіться з Вашими друзьями:
1   2   3   4   5


База даних захищена авторським правом ©pedagogi.org 2019
звернутися до адміністрації

    Головна сторінка