Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


MPI- стандарт програмування у паралельних середовищах




 

Головний недолік розроблених паралельних мов – необхідність розробки компілятора для кожної нової платформи, тому на зміну декількох мов прийшов єдиний стандарт MPI для MIMD систем, так як SIMD системи були вже практично витіснені.

MPI являє собою бібліотеку функцій для розробки програм, що виконуються на декількох процесорах. Підхід до стандарту як саме до бібліотеки функцій, а не нової мови, зробив стандарт популярним: замість розробки нового (або портування існуючого) компілятора для системи потрібно реалізувати лише бібліотеку відповідних функцій (для мов програмування C та Fortran). Згідно зі стандартом, кілька копій програми виконується кожна на власному процесорі та окремо проводять обчислення. Копії виконують комунікацію між собою шляхом посилання повідомлень. Існують також механізми редукції та розповсюдження даних між процесами.

Інший момент пов’язаний з можливістю побудови багатопроцесорних кластерів з кількох SISD машин, так як комутація між програмами здійснюється завдяки remote services (механізм виконання команд на віддалених системах). Якщо з’єднати кілька машин, що находяться на відстані, можна одержати розподілену обчислювальну мережу.

Нові версії стандарту крім власне механізмів комунікації пропонують також прискорений файловий ввід/вивід (Fast I/O), засоби для відлагодження програми, аналізу їх виконання (MPE) та ін.

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

Номер процесу - ціле додатнє число, що є унікальним атрибутом кожного процесу.

Атрибути повідомлення - номер процесу-відправника, номер процесу-одержувача й ідентифікатор повідомлення. Для них заведена структура MPI_Status, що містить три поля: MPI_Source (номер процесу відправника), MPI_Tag (ідентифікатор повідомлення), MPI_Error (код помилки); можуть бути й додаткові поля.

Ідентифікатор повідомлення (msgtag) - атрибут повідомлення, що є цілим додатнім числом, що лежить у діапазоні від 0 до 32767. Процеси поєднуються в групи, можуть бути вкладені групи. Усередині групи всі процеси пронумеровані. З кожною групою асоційований свій комунікатор. Тому при здійсненні пересилання необхідно вказати ідентифікатор групи, усередині якої здійснюється це пересилання. Всі процеси знаходяться в групі з визначеним ідентифікатором MPI_COMM_WORLD.

При описі процедур MPI будемо користуватися словом OUT для позначення "вихідних" параметрів, тобто таких параметрів, через які процедура повертає результати.

 

Загальні процедури 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)

 

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

 

 

1.3 Засоби для відлагодження МРІ програм, аналізу їх виконання

 

Бібліотека MPE (Multi-Processing Environment) містить процедури, які полегшують написання, налагодження й оцінку ефективності MPI-Програм. MPE-процедури діляться на кілька категорій.

Паралельна графіка (Parallel X graphics).Ці процедури забезпечують доступ всім процесам до поділюваного Х-дисплею. Вони створюють зручний вивід для паралельних програм, дозволяють виводити текст, прямокутники, кола, лінії й так далі.

Реєстрація (Logging).Одним з найпоширеніших засобів для аналізу характеристик паралельних програм є файл траси відзначених у часі подій – логфайл(logfile). Бібліотека MPE створює можливість легко одержати такий файл у кожному процесі й зібрати їх разом по закінченню роботи. Вона також автоматично обробляє неузгодженість і дрейф часу на множині процесорів, якщо система не забезпечує синхронізацію часу. Ця бібліотека призначена для користувача, що бажає створити свої власні події й програмні стани.

Послідовні секції (Sequential Sections).Іноді секція коду, що виконується на ряді процесів, повинна бути виконана тільки по одному разу на процесах у порядку номерів цих процесів. MPE має функції для такої роботи.

Обробка помилок (Error Handling). MPI має механізм, що дозволяє користувачеві управляти реакцією реалізації на помилки часу виконання, включаючи можливість створення свого власного оброблювача помилок.

Засоби реєстрації (logging) для аналізу ефективності паралельних програм. Аналіз результатів реєстрації виробляється після виконання обчислень. Засоби реєстрації й аналізу включають ряд профілюючих бібліотек, утилітних програм і ряд графічних засобів.

Перша група засобів профілювання. Бібліотечні ключі забезпечують збори процедур, які створюють логфайли. Ці логфайли можуть бути створені вручну шляхом розміщення в програмі MPI звертань до MPE, або автоматично при установленні зв'язку з відповідними MPE-Бібліотеками, або комбінацією цих двох методів. У цей час MPE пропонує наступні три профілюючі бібліотеки:

1. Tracing Library(бібліотека трасування) – трасує всі MPI-Виклики. Кожний виклик випереджається рядком, що містить номер зухвалого процесу в MPI_COMM_WORLDі супроводжується іншим рядком, який вказує, що виклик завершився. Більшість процедур sendі receiveтакож вказують значення count, tagі імена процесів, які посилають або приймають дані.

2. Animation Libraries (анімаційна бібліотека)– проста форма програмної анімації в реальному часі, що вимагає процедур Х-Вікон.

3. Logging Libraries(бібліотека реєстрації) – самі корисні й широко використовувані профілюючі бібліотеки в MPE. Вони формують базис для генерації логфайлів з користувальницьких програм. Зараз є три різних формати логфайлів, припустимих в MPE. За замовчуванням використовується формат CLOG. Він містить сукупність подій з єдиним відмітчиком часу. Формат ALOG більше не розвивається й підтримується для забезпечення сумісності з ранніми програмами. І найбільш потужним є формат - SLOG (для Scalable Logfile), що може бути конвертований із уже наявного CLOG- файлу або отриманий прямо з виконуваної програми (для цього необхідно встановити змінну середовища MPE_LOG_FORMAT в SLOG).

Набір утилітних програм в MPE включає конвертори форматів (наприклад, clog2slog), друк логфайлів (slog_print), оболонки засобів візуалізації логфайлів, які вибирають коректні графічні засоби для подання логфайлів відповідно до їх розширень.

Бібліотеки реєстрації Logging Libraries. Результати розрахунку часу дають деяке подання про ефективність програми. Але в більшості випадків потрібно докладно довідатися, яка була послідовність подій, скільки часу був витрачений на кожну стадію обчислення й скільки часу займає кожна окрема операція передачі. Щоб полегшити їхнє сприйняття, потрібно представити їх у графічній формі. Але для цього спочатку потрібно створити файли подій зі зв'язаними тимчасовими оцінками, потім досліджувати їх після закінчення програми й тільки потім інтерпретувати їх графічно на робочій станції. Здатність автоматично генерувати логфайли є важливим компонентом всіх засобів для аналізу ефективності паралельних програм.

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

Щоб створити файл реєстрації, необхідно викликати процедуру MPE_Log_event. Крім того, кожний процес повинен викликати процедуру MPE_Init_log, щоб приготуватися до реєстрації, і MPE_Finish_log, щоб об'єднати файли, що зберігаються локально при кожному процесі в єдиний логфайл. MPE_Stop_logвикористовується, щоб призупинити реєстрацію, хоча таймер продовжує працювати.

MPE_Start_logпочинає реєстрацію. Програміст вибирає будь-які ненегативні цілі числа, бажані для типів подій; система не надає ніяких приватних значень типам подій. Події розглядаються як такі, що не мають тривалості. Щоб виміряти тривалість стану програми, необхідно, щоб пара подій відзначила початок і закінчення стану. Стан визначається процедурою MPE_Describe_state, що описує початок і закінчення типів подій. Процедура MPE_Describe_stateтакож додає назву стану і його колір на графічному виводі.

Відповідна процедура MPE_Describe_eventзабезпечує опис події кожного типу. Використовуючи ці процедури, приведемо приклад обчислення числа ?. Для цього оснастимо програму обчислення числа π відповідними операторами. Важливо, щоб реєстрація події не створювала більших накладних витрат. MPE_Log_eventзберігає невелика кількість інформації у швидкій пам'яті. Під час виконання MPE_Log_eventці буфери поєднуються паралельно й кінцевий буфер, відсортований по тимчасовим міткам, записується процесом 0.

Аналіз логфайлов.Після виконання програми MPI, що містить процедури MPE для реєстрації подій, директорій, де вона виконувалася, містить файл подій, відсортованих за часом, причому час скоректований з обліком відхилення частоти генераторів. Можна написати багато програм для аналізу цього файлу й подання інформації.

Наприклад, одна з реалізацій MPE містить коротку програму, states. Якщо ми виконуємо її з логфайлом, що описали вище, ми одержимо:

 

Стан: Час:

Broadcast 0.000184

Compute 4.980584

Reduce 0.000248

Sync 0.000095

Сума: 4.981111

 

Така підсумкова інформація є досить поширеною, але грубою формою профілювання; вона повідомляє тільки, де програма витрачає час. Значно інформативніше графічне подання, забезпечуване спеціалізованими програмами, наприклад, upshotі jampshot.

Вхідні процедури MPEвикористовуються, щоб створити логфайли (звіти) про події, які мали місце при виконанні паралельної програми.

Ці процедури дозволяють користувачеві включати тільки ті події, які йому цікаві в даній програмі. Базові процедури − MPE_Init_log, MPE_Log_eventі MPE_Finish_log.

MPE_Init_logповинна викликатися всіма процесами, щоб ініціювати необхідні структури даних. MPE_Finish_logзбирає звіти із всіх процесів, поєднує їх, вирівнює по загальній шкалі часу. Потім процес із номером 0 у комунікаторі MPI_COMM_WORLDзаписує звіт у файл, ім'я якого зазначено в аргументі. Одиночна подія встановлюється процедурою MPE_Log_event, що задає тип події (вибирає користувач), ціле число й рядок для даних. Щоб розмістити логфайл, що буде потрібний для аналізу або для програми візуалізації (подібної upshot), процедура MPE_Describe_stateдозволяє додати події й описувані стани, указати крапку старту й закінчення для кожного стану. При бажанні для візуалізації звіту можна використовувати колір. MPE_Stop_logі MPE_Start_logпризначені для того, щоб динамічно включати й виключати створення звіту.

Ці процедури використовуються в одній із профілюючих бібліотек, що поставляються з дистрибутивом для автоматичного запуску подій бібліотечних викликів MPI.

Два змінні середовища TMPDIRі MPE LOG FORMATпотрібні користувачеві для установки деяких параметрів перед генерацією логфайлів.

MPE LOG FORMAT– визначає формат логфайла, отриманого після виконання додатка, пов'язаного з MPE-Бібліотекою. MPE LOG FORMATможе приймати тільки значення CLOG, SLOGі ALOG. Коли MPE LOG FORMATустановлений в NOT, передбачається формат CLOG.

TMPDIR– описує директорій, що використовується як тимчасова пам'ять для кожного процесу. За замовчуванням, коли

TMPDIRє NOT, буде використовуватися “/tmp”. Коли користувачеві потрібно одержати дуже довгий логфайл для дуже довгої MPI-Роботи, користувач повинен переконатися, що TMPDIRдосить великий, щоб зберігати тимчасовий логфайл, що буде вилучено, якщо об'єднаний файл буде створений успішно.

 

 

1.4 Засоби перегляду логфайлів

 

Існує чотири графічних засоби візуалізації, розповсюджуваних разом з MPE: upshot, nupshot, Jumpshot-2 і Jumpshot-3. Із цих чотирьох переглядачів логфайлів тільки три побудовані за допомогою MPE. Це upshot, Jumpshot-2 і Jumpshot-3.

Upshot і Nupshot.Один з використовуваних інструментів називається upshot. Найпростіший вид екрана Upshot показаний на мал. 2.2. Результат представлений у вигляді смуг, по одній смузі на кожний процес. Кожна смуга складається з ділянок різного кольору (для чорно-білих моніторів колір заміняється різними штрихуваннями). Кожному кольору відповідає стан процесу певного типу. Унизу наведені оцінки часу, що починаються від нуля.

Таке подання дозволяє візуально визначити стан будь-якого процесу в будь-який момент часу.

Рис.1.1 Подання результатів профілювання за допомогою upshot

 

Існують і більше складні зображення вікон, які дозволяють міняти розмір зображення по горизонталі або вертикалі, центрувати на будь-якій крапці дисплея, обраною мишею.

Jumpshot-3 і Jumpshot-4.Існує ще дві версії, що поставляються разом з MPE. Це Jumpshot-3 і Jumpshot-4, що розвилися з Upshot і Nupshot. Обидві написані на Java і є графічними засобами візуалізації для інтерпретації двійкових файлів трас, які показують їх на дисплеї.

Рис.1.2 Подання результатів профілювання за допомогою jumpshot-4

 

Накінець, існує команда яку ви можете використати для виводу інформації що поновлюється з перебігом часу. Ця команда називається top і запускається як:

$ top

Останнє виведе повний екран різноманітної інформації про активні процеси, також деякі додаткові дані про систему. Це включає середнє навантаження системи, кількість процесів, стан процесора, пам'яті, інформацію про, власне, процеси, включаючи ідентифікаційний номер (PID), пріоритет, скільки вони споживають процесора і пам'яті, час активності і назву програми.

6:47pm up 1 day, 18:01, 1 user, load average: 0.02, 0.07, 0.02 61 processes: 59 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 2.8% user, 3.1% system, 0.0% nice, 93.9% idle Mem: 257992K av, 249672K used, 8320K free, 51628K shrd, 78248K buff Swap: 32764K av, 136K used, 32628K free, 82600K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 112 root 12 0 19376 18M 2468 R 0 3.7 7.5 55:53 X 4946 root 12 0 1040 1040 836 R 0 1.5 0.4 0:00 top 121 david 4 0 796 796 644 S 0 1.1 0.3 25:37 wmSMPmon 115 david 3 0 2180 2180 1452 S 0 0.3 0.8 1:35 wmaker 4948 david 16 0 776 776 648 S 0 0.3 0.3 0:00 xwd 1 root 1 0 176 176 148 S 0 0.1 0.0 0:13 init 189 david 1 0 6256 6156 4352 S 0 0.1 2.4 3:16 licq 4734 david 0 0 1164 1164 916 S 0 0.1 0.4 0:00 rxvt 2 root 0 0 0 0 0 SW 0 0.0 0.0 0:08 kflushd 3 root 0 0 0 0 0 SW 0 0.0 0.0 0:06 kupdate 4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kpiod 5 root 0 0 0 0 0 SW 0 0.0 0.0 0:04 kswapd 31 root 0 0 340 340 248 S 0 0.0 0.1 0:00 kerneld 51 root 0 0 48 48 32 S 0 0.0 0.0 0:00 dhcpcd 53 bin 0 0 316 316 236 S 0 0.0 0.1 0:00 rpc.portmap 57 root 0 0 588 588 488 S 0 0.0 0.2 0:01 syslogd

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

Якщо вас цікавлять лише процеси що належать певному користувачу, ви можете використати прапорець -u (user) з ім'ям користувача або його ідентифікаційним номером (UID):

$ top -u st

top також підтримує відслідковування процесів за їхнім ідентифікаційним номером (PID), ігнорування пасивних (idle) і зомбі (zombie) процесів і ще багато додаткових опцій, про які ви можете дізнатися зі сторінки посібника

 

1.5 Структура апаратних та системних програмних засобів

 

Доступ до обчислювальних ресурсів паралельного комп’ютера (науково-дослідної лабораторії Тернопільського державного економічного університету) відбувається з робочого місця (РМ) через локальну мережу.

Характеристики паралельної - системи:

- кількість процесорів: 2 центральних процесора

- пам’ять: 64 MB DRAM

- дисковий накопичувач: 40 GB

- підтримка стандартів паралельного програмування: Message Passing

- операційна система: ASP Linux OS 9.2 (Siberia)

 

До системних програмних засобів відноситься усе програмне забезпечення, що дозволяє системі функціонувати.

Існує кілька засобів копіювання даних між віддаленими системами, але частіше використовуються ftp. При використанні ftp на комп’ютери встановлюються ftp-сервер (ftpd) та ftp-клієнт (ftp). Клієнтська програма ініціює зв’язок з сервером та отримає від нього дозвіл на роботу з файловими даними на серверу (читання/запис).

Для операцій упорядковування даних використовуються класичні команди системи UNIX (mkdir, cp, rm і т.д.), дивіться Додаток 1.

Для одержання можливості виконати якусь команду на віддаленій системі необхідно спочатку підключитись та війти до системи. Це може бути здійснене завдяки використанню особливих програмних засобів у Windows: telneat або pytty та у Linux - ssh. Telneat та pytty дозволяють виконати повний вхід на віддалену систему, як на локальну, а ssh – запускає командну оболонку на віддаленій системі з шифруванням сесії. Telnet вимагає наявності на віддаленій системі telnet- сервера (telnetd), а ssh – ssh- сервера (sshd).

До засобів побудови програмного забезпечення відносяться компілятори C/C++, з підтримкою MPI (команди mpicc, mpiCC, mpirun).

Команди управління процесами у Linux-середовищі наведено у Додатку 2.

2. ХІД РОБОТИ

 

2.1 Уважно ознайомтеся із теоретичною частиною лабораторної роботи.

 

2.2 Перевірте у каталозі C:\temp\ комп’ютера, за яким ви працюєте, наявність каталогу Telneatта програми Putty. Якщо немає такого каталогу, то Вам необхідно скопіювати його з файлового сервера. Для цього зайдіть у меню Пуск->Виконати… (Start->Run…) і у вікні що з'явиться наберіть адресу: \\192.168.212.11натисніть ОК.

 

 

Перейдіть у каталог \\192.168.212.11\Predmety\PDC\toolsта скопіюйте каталог Telnet, програми putty.exe та winscp356.exe. Його необхідно скопіювати у каталог С:\Temp\, для цього потрібно натиснути праву клавішу мишки над каталогом чи файлом і у меню, що з’явиться на екрані, вибрати Копіювати (Copy). У каталозі C:\temp\викликаємо контекстне меню івибираємо пункт Вставити.

 

2.3 Тепер запускаємо програму telneat.exe з каталогу Telnet. У вікні програми необхідно натиснути комбінацію клавіш <Alt+A>, щоб з’явилося запрошення ввести адресу віддаленого комп’ютера. Вводимо 192.168.212.12 і натискаємо Enter. Вводимо ім’я користувача – st <Enter>, та пароль – st <Enter>. Ви опинитесь у домашньому каталозі користувача /home/st(команда pwdвиводить текуче положення у файловій системі).

 

Доступні клавіші при роботі з програмою:

 

ALT-A - перейти в консоль відкриття сесії (вона автоматично відкривається при запуску)

ALT-T - включити/вимкнути список сесій внизу екрану

ALT-X - закрити поточну консоль

Alt-Fn - перейти в консоль n

ALT-N - перейти в наступну консоль

ALT-P - перейти в попередню консоль

ScrollLock - включити/вимкнути прокрутку (під час прокрутки можна

використовувати стрілки, PgUp, PgDn)

ShiftIns - вставити текст з буфера обміну

 

 

2.4 Щоб проглянути вміст каталогу введіть команду ls. Зайдіть у каталог work (команда cd work) і перегляньте його (команда ls). Створіть у ньому каталог, ім’ям якого буде ваше прізвище (mkdir Ваше_прізвище). Зайдіть у цей каталог (cd Ваше_прізвище). Створіть у ньому ще один каталог lab1 (mkdir lab1) і зайдіть у нього (cd lab1).

 

Примітка:

Детальну інформацію по командах операційної системи Лінукс можна отримати ввівши

<ім’я команди> --help | less

Буде виведена довідка, клавіші зі стрілками „вгору” і „вниз” служать для прокрутки, вихід з довідки клавіша q

2.5 Розглянемо просту паралельну програму з використанням МРІ, у якій кожен паралельний процес виводитиме на екран свій номер та загальну кількість процесів. Cтворити новий файл з іменем prg1.c (команда >prg1.c). Тепер запустимо менеджер файлів Midnight Commander командою mc.

 

 


Поделиться:

Дата добавления: 2015-09-13; просмотров: 147; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты