Паралельне програмування на основі MPI
В обчислювальних системах з розподіленою пам’яттю процесори функціонують незалежно один від одного. Для організації паралельних обчислень в таких умовах необхідно мати можливість розподіляти обчислювальне навантаження та організувати інформаційну взаємодію (передачу даних) між процесорами. Рішення цих питань забезпечує інтерфейс передачі даних (message passing interface - MPI). В загальному плані, для розподілу обчислень між процесорами необхідно проаналізувати алгоритм розв’язку задачі, виділити інформаційні незалежні фрагменти обчислень, провести їх програмну реалізацію і потім розмістити отримані частини програми на різних процесорах. В рамках МРІ прийнятий простіший підхід - для рішення поставленої задачі розробляється одна програма, яка запускається одночасно на виконання на всіх наявних процесорах. Для уникнення ідентичності обчислень на різних процесорах, можна підставляти різні дані для програми на різних процесорах та використовувати наявні в МРІ засоби для ідентифікації процесора, на якому виконується програма (тим самим надається можливість організувати в обчисленнях в залежності від використовуваного програмою процесора). Такий спосіб організації паралельних обчислень отримав назву моделі "одна програма множина процесів" (single program multiple processes or SPMP).
По-перше, МРІ - це стандарт, якому повинні задовольняти засоби організації передачі повідомлень. По-друге - це програмні засоби, які забезпечують можливості передачі повідомлень і при цьому відповідають всі вимогам стандарту МРІ. Так, за стандартом ці програмні засоби повинні бути організовані у вигляді бібліотек програмних функцій (бібліотека МРІ) і повинні бути доступними для найбільш використовуваних алгоритмічних мов С та Fortran. Подібну "двоїстість" МРІ слід враховувати при використанні термінології. Як правило, абревіатура МРІ застосовується при згадуванні стандарту, а сполучення "бібліотека МРІ" вказує ту чи іншу програмну реалізацію стандарту. Проте достатньо часто для скорочення позначення МРІ використовується для бібліотек МРІ, і, тим самим, для правильної інтерпретації терміну слід враховувати контекст.
Питання, пов’язані з розробкою паралельних програм з використанням МРІ, достатньо добре розглянутий в літературі. Наведемо ряд важливих позитивних обставин:
- МРІ дає змогу в значному ступені знизити гостроту проблеми перенесення паралельних програм між різними компонентами системи - паралельна програма, розроблена на алгоритмічній мові С чи Fortran з використанням бібліотеки МРІ, як правило, працюватиме на різних обчислювальних платформах;
- МРІ сприяє підвищенню ефективності паралельних обчислень, оскільки нині практично для кожного типу обчислювальних систем існують реалізації бібліотек МРІ, які в максимальному ступені враховують можливості комп’ютерного обладнання;
- МРІ зменшує складність розробки паралельних програм, оскільки більша частина раніше нами розглянутих основних операцій передачі даних передбачається стандартом МРІ, з іншого боку, вже є велика кількість бібліотек паралельних методів, створених з використанням МРІ.
MPI: основні поняття та означення
Поняття паралельної програми.
Під паралельною програмою в рамках МРІ розуміють множину одночасно виконуваних процесів. Процеси можуть виконуватися на різних процесорах, але на одному процесорі можуть розташовуватися і декілька процесів (в цьому випадку їх виконання здійснюється в режимі розділення часу). В граничному випадку для виконання паралельної програми може використовуватися один процесор - як правило, такий спосіб застосовується для початкової перевірки правильності паралельної програми. Кожний процес програми породжується на основі копії одного і того ж програмного коду (модель SPMP). Цей програмний код, зображуваний у вигляді виконуваної програми, повинен бути доступним в момент запуску паралельної програми на всіх використовуваних процесорах. Вихідний програмний код для виконуваної програми розроблюється на алгоритмічних мовах С чи FORTRAN із застосуванням тієї чи іншої реалізації бібліотеки МРІ. Кількість процесів та чисельність використовуваних процесорів визначається в момент запуску паралельної програми засобами середовища виконання МРІ - програм і в ході обчислень не може змінюватися без застосування спеціальних, але рідко задіяних засобів динамічного породження процесів та управління ними, які з’явилися в стандарті МРІ версії 2.0. Всі процеси програми послідовно перенумеровані від ) до , де є загальна кількість процесорів. Номер процесу іменується рангом процесу.
Операції передачі даних
Основу МРІ складають операції передачі повідомлень. Серед передбачених в складі МРІ функцій розрізняють парні (point-to-point) операції між двома процесами та колективні (collective) комунікаційні дії для одночасної взаємодії декількох процесів. Для виконання парних операцій можна використовувати різні режими передачі, серед яких: синхронний, блокуючий та ін. - повний перелік можливих режимів буде розглянутий далі. До стандарті МРІ включено більшість основних операцій передачі даних.
Поняття комунікаторів
Процеси паралельної програми об’єднуються в групи. Іншим важливим поняттям МРІ, що описує набір процесів, є поняття комунікатора. Під комунікатором в МРІ розуміють спеціально створюваний службовий об’єкт, який об’єднує в своєму складі групу процесів і ряд додаткових параметрів (контекст), використовуваних при виконанні операцій передачі даних. Парні операції передачі даних виконуються тільки для процесів, які належать одному і тому ж комунікатору. Колективні операції застосовуються одночасно для всіх процесів одного комунікатора. Як результат, вказівка на використовуваний комунікатор є обов’язковою для операцій передачі даних в МРІ. В ході обчислень можуть створюватися нові та видалятися існуючі групи процесів та комунікатори. Один і той же процес може належати різним групам і комунікаторам. Всі наявні в паралельній програмі процеси входять до складу конструйованого за умовчанням комунікатора з ідентифікатором MPI_COMM_WORLD. У версії 2.0 стандарту з’явилася можливість створювати глобальні комунікатори (intercommunicator), які об’єднують в одну структуру пару груп за необхідності виконання колективних операцій між процесами з різних груп. Детальній розгляд можливостей МРІ для роботи з групами і комунікаторами буде даний далі.
Типи даних
При виконанні операцій передачі повідомлень для вказівки даних в функціях МРІ, які передаються чи отримуються, необхідно вказувати тип даних, що пересилаються. МРІ містить великий набір базових типів даних, що багато в чому збігаються з типами даних в алгоритмічних мовах С чи Fortran. Крім того, в МРІ є можливості створення нових похідних типів даних для більш точного і короткого опису вмісту повідомлень, що пересилаються. Детальний розгляд можливостей МРІ для роботи з похідними типами даних буде виконаний далі.
Віртуальні технології
Парні операції передачі даних можна виконати між будь-якими процесами одного і того ж комунікатора, а в колективній операції беруть участь всі процеси комунікатора. Логічна топологія ліній зв’язку між процесами має структуру повного графа (незалежно від наявності реальних фізичних каналів зв’язку між процесорами). Для подальшого викладу і аналізу ряду паралельних алгоритмів доцільним є логічне представлення наявної комунікаційної мережі у вигляді тих чи інших топологій. В МРІ є можливість представлення множини процесів у вигляді решітки довільної розмірності, рис. 2.1. Граничні процеси решіток можуть бути оголошені сусідніми, і, тим самим, на основі решіток можуть бути означені структури типу тор. Крім того, в МРІ є засоби також для формування логічних (віртуальних) топологій будь-якого потрібного типу. Детальний розгляд можливостей МРІ для роботи з топологіями буде здійснений далі. Перед початком розгляду МРІ звернемо увагу на наступні зауваження:
- опис функцій та всі приклади програм, що наводитимуться, будуть представлені на алгоритмічній мові С; особливості використання МРІ для алгоритмічної мови Fortran будуть розглянуті далі;
- коротка характеристика наявних реалізацій бібліотек МРІ та загальний опис середовища виконання МРІ - програм будуть розглянуті далі;
- основне викладення можливостей МРІ буде зорієнтовано на стандарт версії 1.2 (так званий МРІ-1), нововведення стандарту версії 2.0 будуть розглянуті далі.
Приступаючи до вивчення МРІ, можна відмітити, що МРІ є достатньо складним - в стандарті МРІ передбачається наявність більше ніж 120 функцій. З іншого боку, структура МРІ є старанно продуманою - розробка паралельних програм може бути розпочата вже після розгляду 6 функцій МРІ. Всі додаткові можливості МРІ можна засвоїти у міру зростання складності розроблюваних алгоритмів і програм. Виклад матеріалу від простого до складного буде основою подальшого викладу навчального матеріалу.
Вступ до розробки паралельних програм з використанням MPI
Основи МРІ
Наведемо мінімально необхідний набір функцій МРІ, достатній для розробки порівняно простих паралельних програм. Ініціалізація та завершення МРІ - програм. Першою функцією МРІ, що викликається, повинна бути функція:
int MPI_Init(int *argc, char ***argv)
,
де - argc - вказівник на кількість параметрів командної стрічки,
- argv - параметри командної стрічки,
яка застосовується для ініціалізації середовища виконання МРІ - програми. Параметрами функції є кількість аргументів в командній стрічці та адреса вказівника на масив символів тексту самої командної стрічки. Останньою функцією МРІ, що викликається, обов’язково повинна бути функція:
int MPI_Finalize (void)
. Як результат, можна відмітити, що структура паралельної програми, розроблена з використанням МРІ, повинна мати наступний вигляд:
# include ’’mpl. h’’ int main(int argc, char *argv[ ]
{ <програмний код без використання функцій МРІ> MPI_Init (&argc, &argv); <програмний код з використанням
функцій МРІ> MPI_Finalize()
; <програмний код без використання функцій МРІ> return 0; } Слід відмітити наступне:
- файл mpi. h містить означення іменованих констант, прототипів функцій та типів даних бібліотеки МРІ;
- функції MPI_Init є обов’язковими і повинні бути виконані (тільки один раз) кожним процесом паралельної програми;
- перед викликом MPI_Init може бути виконана функція MPI_Initialized для означення того, чи був раніше виконаний виклик MPI_Init, а після виклику MPI_Finalized (ця функція з’явилася тільки в стандарті МРІ 2.0) аналогічного призначення.
Розглянуті приклади функцій дають представлення синтаксису іменування функцій в МРІ. Імені функції передує префікс МРІ, далі слідує одне чи декілька слів назви, перше слово в імені функції починається з заголовкового слова, слова розділяються знаком підкреслювання. Назви функцій МРІ, як правило, пояснюють призначення виконуваних функцій дії.
Означення кількості та рангу процесів.
Означення кількості процесів у виконуваній паралельній програмі з використанням функції:
int MPI_size(MPI_Comm, comm int *size)
, де - comm - комунікатор, розмір якого визначається,
-size - кількість процесів в комунікаторі, яка визначається.
Для визначення рангу процесу використовується функція:
int MPI_Com_rank(MPI_Comm comm, int *rank)
, де - - comm - комунікатор, в якому визначається ранг процесу,
- rank - ранг процесу в комунікаторі.
Як правило, виклик функції MPI_Comm_size та MPI_Comm_rank виконується відразу після MPI_Init для отримання більшої кількості процесів і рангу поточного процесу:
# include "mpi . h" int main(int argc, char *argv[ ]) { int ProcNum, ProcRank; <програмний код без використання функцій МРІ> МРІ_Init(&argc, &argv); <програмний код з використанням функції МРІ> MPI_Finalize(); <програмний код без використання функції МРІ> return 0; }
Слід відмітити: - файл mp.h містить означення іменованих констант, прототипів функцій і типів даних бібліотеки МРІ;
- функції MPI_Init та MPI_Finalize є обов’язковими і повинні бути виконані (тільки один раз) кожним процесом паралельної програми;
- перед викликом MPI_Init може бути використана функція MPI_Initialize для визначення того, чи був раніше виконаний виклик MPI_Init, а після виклику MPI_Initialize- MPI_Finalized (ця функція з’явилася тільки в стандарті МРІ версії 2.0) аналогічного призначення.
Розглянуті приклади функцій дають уявлення синтаксису іменування функцій в МРІ. Імені функції передує префікс МРІ, далі слідує одне чи декілька слів назви, перше слово в імені функції починається із заголовкового символу, слова розділяються знаком підкреслювання. Назви функції МРІ, як правило, пояснюють призначення виконуваних функцією дій. Визначення кількості і рангу процесів. Визначення кількості у виконуваній паралельній програмі здійснюється з використанням функції:
int MPI_Comm_size(MPI_Comm comm, int *size)
, де - comm - комунікатор, розмір якого визначається , - size - кількість процесів в комунікаторі, що визначається.
Для визначення рангу процесу використовується функція:
int MPI_Comm_rank(MPI_Comm comm, int *rank)
,
де - comm - комунікатор, в якому визначається ранг процесу,
- rank - ранг процесу в комунікаторі.
Як правило, виклик функцій MPI_Comm_size та MPI_Comm_rank виконується зразу після MPI_ Init для отримання загальної кількості процесів і рангу поточного процесу:
# include "mpi h" int main(int argc, char *argv[ ] { int ProcNum, ProcRanc; <програмний код без використання функцій МРІ> МРІ_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); MPI_Comm_ranc(MPI_COMM_WORLD, &ProcRank); <програмний код з використанням функцій МРІ> МРІ_Finalize(); <програмний код без використання функцій МРІ> return 0; }
Слід відмітити:
- комунікатор MPI_COMM_WORLD, як вже зазначалося, створюється за умовчанням і представляє всі процеси виконуваної паралельної програми; - ранг, отриманий з використанням функції MPI_Comm_rank, є рангом процесу, який виконав виклик цієї функції, тобто змінна ProcRank прийме різні значення у різних процесів.
Передача повідомлень. Для передачі повідомлень-відправник повинен виконати функцію:
int MPI_Send(void *buf, int count, MPI_Datatype type, int dest, int tag, MPI_Comm comm),
де
- buf - адреса буфера пам’яті, в якому розташовані дані відправленого повідомлення;
- count - кількість елементів даних повідомлення;
- type - тип елементів даних повідомлення, що пересилається;
- dest - ранг процесів, якому відправляється повідомлення;
- tag - значення-тег, яке використовується для ідентифікації повідомлення;
- comm - комунікатор, в рамках якого виконується передача даних.
Примітки
- Корнеев В.В., М.: Нолидж. Параллельные вычислительные системы.
- Воеводин В.В. Параллельные вычисления.
- Теория и практика параллельных вычислений. Теория и практика параллельных вычислений.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Nemaye perevirenih versij ciyeyi storinki jmovirno yiyi she ne pereviryali na vidpovidnist pravilam proektu Zmist 1 Paralelne programuvannya na osnovi MPI 2 MPI osnovni ponyattya ta oznachennya 2 1 Ponyattya paralelnoyi programi 2 2 Operaciyi peredachi danih 2 3 Ponyattya komunikatoriv 2 4 Tipi danih 2 5 Virtualni tehnologiyi 3 Vstup do rozrobki paralelnih program z vikoristannyam MPI 3 1 Osnovi MRI 3 2 Oznachennya kilkosti ta rangu procesiv 4 PrimitkiParalelne programuvannya na osnovi MPIred V obchislyuvalnih sistemah z rozpodilenoyu pam yattyu procesori funkcionuyut nezalezhno odin vid odnogo Dlya organizaciyi paralelnih obchislen v takih umovah neobhidno mati mozhlivist rozpodilyati obchislyuvalne navantazhennya ta organizuvati informacijnu vzayemodiyu peredachu danih mizh procesorami Rishennya cih pitan zabezpechuye interfejs peredachi danih message passing interface MPI V zagalnomu plani dlya rozpodilu obchislen mizh procesorami neobhidno proanalizuvati algoritm rozv yazku zadachi vidiliti informacijni nezalezhni fragmenti obchislen provesti yih programnu realizaciyu i potim rozmistiti otrimani chastini programi na riznih procesorah V ramkah MRI prijnyatij prostishij pidhid dlya rishennya postavlenoyi zadachi rozroblyayetsya odna programa yaka zapuskayetsya odnochasno na vikonannya na vsih nayavnih procesorah Dlya uniknennya identichnosti obchislen na riznih procesorah mozhna pidstavlyati rizni dani dlya programi na riznih procesorah ta vikoristovuvati nayavni v MRI zasobi dlya identifikaciyi procesora na yakomu vikonuyetsya programa tim samim nadayetsya mozhlivist organizuvati v obchislennyah v zalezhnosti vid vikoristovuvanogo programoyu procesora Takij sposib organizaciyi paralelnih obchislen otrimav nazvu modeli odna programa mnozhina procesiv single program multiple processes or SPMP 1 Po pershe MRI ce standart yakomu povinni zadovolnyati zasobi organizaciyi peredachi povidomlen Po druge ce programni zasobi yaki zabezpechuyut mozhlivosti peredachi povidomlen i pri comu vidpovidayut vsi vimogam standartu MRI Tak za standartom ci programni zasobi povinni buti organizovani u viglyadi bibliotek programnih funkcij biblioteka MRI i povinni buti dostupnimi dlya najbilsh vikoristovuvanih algoritmichnih mov S ta Fortran Podibnu dvoyistist MRI slid vrahovuvati pri vikoristanni terminologiyi Yak pravilo abreviatura MRI zastosovuyetsya pri zgaduvanni standartu a spoluchennya biblioteka MRI vkazuye tu chi inshu programnu realizaciyu standartu Prote dostatno chasto dlya skorochennya poznachennya MRI vikoristovuyetsya dlya bibliotek MRI i tim samim dlya pravilnoyi interpretaciyi terminu slid vrahovuvati kontekst Pitannya pov yazani z rozrobkoyu paralelnih program z vikoristannyam MRI dostatno dobre rozglyanutij v literaturi Navedemo ryad vazhlivih pozitivnih obstavin MRI daye zmogu v znachnomu stupeni zniziti gostrotu problemi perenesennya paralelnih program mizh riznimi komponentami sistemi paralelna programa rozroblena na algoritmichnij movi S chi Fortran z vikoristannyam biblioteki MRI yak pravilo pracyuvatime na riznih obchislyuvalnih platformah MRI spriyaye pidvishennyu efektivnosti paralelnih obchislen oskilki nini praktichno dlya kozhnogo tipu obchislyuvalnih sistem isnuyut realizaciyi bibliotek MRI yaki v maksimalnomu stupeni vrahovuyut mozhlivosti komp yuternogo obladnannya MRI zmenshuye skladnist rozrobki paralelnih program oskilki bilsha chastina ranishe nami rozglyanutih osnovnih operacij peredachi danih peredbachayetsya standartom MRI z inshogo boku vzhe ye velika kilkist bibliotek paralelnih metodiv stvorenih z vikoristannyam MRI MPI osnovni ponyattya ta oznachennyared Ponyattya paralelnoyi programi red Pid paralelnoyu programoyu v ramkah MRI rozumiyut mnozhinu odnochasno vikonuvanih procesiv Procesi mozhut vikonuvatisya na riznih procesorah ale na odnomu procesori mozhut roztashovuvatisya i dekilka procesiv v comu vipadku yih vikonannya zdijsnyuyetsya v rezhimi rozdilennya chasu V granichnomu vipadku dlya vikonannya paralelnoyi programi mozhe vikoristovuvatisya odin procesor yak pravilo takij sposib zastosovuyetsya dlya pochatkovoyi perevirki pravilnosti paralelnoyi programi Kozhnij proces programi porodzhuyetsya na osnovi kopiyi odnogo i togo zh programnogo kodu model SPMP Cej programnij kod zobrazhuvanij u viglyadi vikonuvanoyi programi povinen buti dostupnim v moment zapusku paralelnoyi programi na vsih vikoristovuvanih procesorah Vihidnij programnij kod dlya vikonuvanoyi programi rozroblyuyetsya na algoritmichnih movah S chi FORTRAN iz zastosuvannyam tiyeyi chi inshoyi realizaciyi biblioteki MRI Kilkist procesiv ta chiselnist vikoristovuvanih procesoriv viznachayetsya v moment zapusku paralelnoyi programi zasobami seredovisha vikonannya MRI program i v hodi obchislen ne mozhe zminyuvatisya bez zastosuvannya specialnih ale ridko zadiyanih zasobiv dinamichnogo porodzhennya procesiv ta upravlinnya nimi yaki z yavilisya v standarti MRI versiyi 2 0 Vsi procesi programi poslidovno perenumerovani vid do de ye zagalna kilkist procesoriv Nomer procesu imenuyetsya rangom procesu Operaciyi peredachi danihred Osnovu MRI skladayut operaciyi peredachi povidomlen Sered peredbachenih v skladi MRI funkcij rozriznyayut parni point to point operaciyi mizh dvoma procesami ta kolektivni collective komunikacijni diyi dlya odnochasnoyi vzayemodiyi dekilkoh procesiv Dlya vikonannya parnih operacij mozhna vikoristovuvati rizni rezhimi peredachi sered yakih sinhronnij blokuyuchij ta in povnij perelik mozhlivih rezhimiv bude rozglyanutij dali Do standarti MRI vklyucheno bilshist osnovnih operacij peredachi danih Ponyattya komunikatorivred Procesi paralelnoyi programi ob yednuyutsya v grupi Inshim vazhlivim ponyattyam MRI sho opisuye nabir procesiv ye ponyattya komunikatora Pid komunikatorom v MRI rozumiyut specialno stvoryuvanij sluzhbovij ob yekt yakij ob yednuye v svoyemu skladi grupu procesiv i ryad dodatkovih parametriv kontekst vikoristovuvanih pri vikonanni operacij peredachi danih Parni operaciyi peredachi danih vikonuyutsya tilki dlya procesiv yaki nalezhat odnomu i tomu zh komunikatoru Kolektivni operaciyi zastosovuyutsya odnochasno dlya vsih procesiv odnogo komunikatora Yak rezultat vkazivka na vikoristovuvanij komunikator ye obov yazkovoyu dlya operacij peredachi danih v MRI V hodi obchislen mozhut stvoryuvatisya novi ta vidalyatisya isnuyuchi grupi procesiv ta komunikatori Odin i toj zhe proces mozhe nalezhati riznim grupam i komunikatoram Vsi nayavni v paralelnij programi procesi vhodyat do skladu konstrujovanogo za umovchannyam komunikatora z identifikatorom MPI COMM WORLD U versiyi 2 0 standartu z yavilasya mozhlivist stvoryuvati globalni komunikatori intercommunicator yaki ob yednuyut v odnu strukturu paru grup za neobhidnosti vikonannya kolektivnih operacij mizh procesami z riznih grup Detalnij rozglyad mozhlivostej MRI dlya roboti z grupami i komunikatorami bude danij dali Tipi danihred Pri vikonanni operacij peredachi povidomlen dlya vkazivki danih v funkciyah MRI yaki peredayutsya chi otrimuyutsya neobhidno vkazuvati tip danih sho peresilayutsya MRI mistit velikij nabir bazovih tipiv danih sho bagato v chomu zbigayutsya z tipami danih v algoritmichnih movah S chi Fortran Krim togo v MRI ye mozhlivosti stvorennya novih pohidnih tipiv danih dlya bilsh tochnogo i korotkogo opisu vmistu povidomlen sho peresilayutsya Detalnij rozglyad mozhlivostej MRI dlya roboti z pohidnimi tipami danih bude vikonanij dali Virtualni tehnologiyired Parni operaciyi peredachi danih mozhna vikonati mizh bud yakimi procesami odnogo i togo zh komunikatora a v kolektivnij operaciyi berut uchast vsi procesi komunikatora Logichna topologiya linij zv yazku mizh procesami maye strukturu povnogo grafa nezalezhno vid nayavnosti realnih fizichnih kanaliv zv yazku mizh procesorami Dlya podalshogo vikladu i analizu ryadu paralelnih algoritmiv docilnim ye logichne predstavlennya nayavnoyi komunikacijnoyi merezhi u viglyadi tih chi inshih topologij V MRI ye mozhlivist predstavlennya mnozhini procesiv u viglyadi reshitki dovilnoyi rozmirnosti ris 2 1 Granichni procesi reshitok mozhut buti ogolosheni susidnimi i tim samim na osnovi reshitok mozhut buti oznacheni strukturi tipu tor Krim togo v MRI ye zasobi takozh dlya formuvannya logichnih virtualnih topologij bud yakogo potribnogo tipu Detalnij rozglyad mozhlivostej MRI dlya roboti z topologiyami bude zdijsnenij dali Pered pochatkom rozglyadu MRI zvernemo uvagu na nastupni zauvazhennya opis funkcij ta vsi prikladi program sho navoditimutsya budut predstavleni na algoritmichnij movi S osoblivosti vikoristannya MRI dlya algoritmichnoyi movi Fortran budut rozglyanuti dali korotka harakteristika nayavnih realizacij bibliotek MRI ta zagalnij opis seredovisha vikonannya MRI program budut rozglyanuti dali osnovne vikladennya mozhlivostej MRI bude zoriyentovano na standart versiyi 1 2 tak zvanij MRI 1 novovvedennya standartu versiyi 2 0 budut rozglyanuti dali Pristupayuchi do vivchennya MRI mozhna vidmititi sho MRI ye dostatno skladnim v standarti MRI peredbachayetsya nayavnist bilshe nizh 120 funkcij Z inshogo boku struktura MRI ye staranno produmanoyu rozrobka paralelnih program mozhe buti rozpochata vzhe pislya rozglyadu 6 funkcij MRI Vsi dodatkovi mozhlivosti MRI mozhna zasvoyiti u miru zrostannya skladnosti rozroblyuvanih algoritmiv i program Viklad materialu vid prostogo do skladnogo bude osnovoyu podalshogo vikladu navchalnogo materialu 2 Vstup do rozrobki paralelnih program z vikoristannyam MPIred Osnovi MRIred Navedemo minimalno neobhidnij nabir funkcij MRI dostatnij dlya rozrobki porivnyano prostih paralelnih program Inicializaciya ta zavershennya MRI program Pershoyu funkciyeyu MRI sho viklikayetsya povinna buti funkciya int MPI Init int argc char argv de argc vkazivnik na kilkist parametriv komandnoyi strichki argv parametri komandnoyi strichki yaka zastosovuyetsya dlya inicializaciyi seredovisha vikonannya MRI programi Parametrami funkciyi ye kilkist argumentiv v komandnij strichci ta adresa vkazivnika na masiv simvoliv tekstu samoyi komandnoyi strichki Ostannoyu funkciyeyu MRI sho viklikayetsya obov yazkovo povinna buti funkciya int MPI Finalize void Yak rezultat mozhna vidmititi sho struktura paralelnoyi programi rozroblena z vikoristannyam MRI povinna mati nastupnij viglyad include mpl h int main int argc char argv lt programnij kod bez vikoristannya funkcij MRI gt MPI Init amp argc amp argv lt programnij kod z vikoristannyamfunkcij MRI gt MPI Finalize lt programnij kod bez vikoristannya funkcij MRI gt return 0 Slid vidmititi nastupne fajl mpi h mistit oznachennya imenovanih konstant prototipiv funkcij ta tipiv danih biblioteki MRI funkciyi MPI Init ye obov yazkovimi i povinni buti vikonani tilki odin raz kozhnim procesom paralelnoyi programi pered viklikom MPI Init mozhe buti vikonana funkciya MPI Initialized dlya oznachennya togo chi buv ranishe vikonanij viklik MPI Init a pislya vikliku MPI Finalized cya funkciya z yavilasya tilki v standarti MRI 2 0 analogichnogo priznachennya Rozglyanuti prikladi funkcij dayut predstavlennya sintaksisu imenuvannya funkcij v MRI Imeni funkciyi pereduye prefiks MRI dali sliduye odne chi dekilka sliv nazvi pershe slovo v imeni funkciyi pochinayetsya z zagolovkovogo slova slova rozdilyayutsya znakom pidkreslyuvannya Nazvi funkcij MRI yak pravilo poyasnyuyut priznachennya vikonuvanih funkcij diyi Oznachennya kilkosti ta rangu procesiv red Oznachennya kilkosti procesiv u vikonuvanij paralelnij programi z vikoristannyam funkciyi int MPI size MPI Comm comm int size de comm komunikator rozmir yakogo viznachayetsya size kilkist procesiv v komunikatori yaka viznachayetsya Dlya viznachennya rangu procesu vikoristovuyetsya funkciya int MPI Com rank MPI Comm comm int rank de comm komunikator v yakomu viznachayetsya rang procesu rank rang procesu v komunikatori Yak pravilo viklik funkciyi MPI Comm size ta MPI Comm rank vikonuyetsya vidrazu pislya MPI Init dlya otrimannya bilshoyi kilkosti procesiv i rangu potochnogo procesu include mpi h int main int argc char argv int ProcNum ProcRank lt programnij kod bez vikoristannya funkcij MRI gt MRI Init amp argc amp argv lt programnij kod z vikoristannyam funkciyi MRI gt MPI Finalize lt programnij kod bez vikoristannya funkciyi MRI gt return 0 Slid vidmititi fajl mp h mistit oznachennya imenovanih konstant prototipiv funkcij i tipiv danih biblioteki MRI funkciyi MPI Init ta MPI Finalize ye obov yazkovimi i povinni buti vikonani tilki odin raz kozhnim procesom paralelnoyi programi pered viklikom MPI Init mozhe buti vikoristana funkciya MPI Initialize dlya viznachennya togo chi buv ranishe vikonanij viklik MPI Init a pislya vikliku MPI Initialize MPI Finalized cya funkciya z yavilasya tilki v standarti MRI versiyi 2 0 analogichnogo priznachennya Rozglyanuti prikladi funkcij dayut uyavlennya sintaksisu imenuvannya funkcij v MRI Imeni funkciyi pereduye prefiks MRI dali sliduye odne chi dekilka sliv nazvi pershe slovo v imeni funkciyi pochinayetsya iz zagolovkovogo simvolu slova rozdilyayutsya znakom pidkreslyuvannya Nazvi funkciyi MRI yak pravilo poyasnyuyut priznachennya vikonuvanih funkciyeyu dij Viznachennya kilkosti i rangu procesiv Viznachennya kilkosti u vikonuvanij paralelnij programi zdijsnyuyetsya z vikoristannyam funkciyi int MPI Comm size MPI Comm comm int size de comm komunikator rozmir yakogo viznachayetsya size kilkist procesiv v komunikatori sho viznachayetsya Dlya viznachennya rangu procesu vikoristovuyetsya funkciya int MPI Comm rank MPI Comm comm int rank de comm komunikator v yakomu viznachayetsya rang procesu rank rang procesu v komunikatori Yak pravilo viklik funkcij MPI Comm size ta MPI Comm rank vikonuyetsya zrazu pislya MPI Init dlya otrimannya zagalnoyi kilkosti procesiv i rangu potochnogo procesu include mpi h int main int argc char argv int ProcNum ProcRanc lt programnij kod bez vikoristannya funkcij MRI gt MRI Init amp argc amp argv MPI Comm size MPI COMM WORLD amp ProcNum MPI Comm ranc MPI COMM WORLD amp ProcRank lt programnij kod z vikoristannyam funkcij MRI gt MRI Finalize lt programnij kod bez vikoristannya funkcij MRI gt return 0 Slid vidmititi komunikator MPI COMM WORLD yak vzhe zaznachalosya stvoryuyetsya za umovchannyam i predstavlyaye vsi procesi vikonuvanoyi paralelnoyi programi rang otrimanij z vikoristannyam funkciyi MPI Comm rank ye rangom procesu yakij vikonav viklik ciyeyi funkciyi tobto zminna ProcRank prijme rizni znachennya u riznih procesiv Peredacha povidomlen Dlya peredachi povidomlen vidpravnik povinen vikonati funkciyu int MPI Send void buf int count MPI Datatype type int dest int tag MPI Comm comm de buf adresa bufera pam yati v yakomu roztashovani dani vidpravlenogo povidomlennya count kilkist elementiv danih povidomlennya type tip elementiv danih povidomlennya sho peresilayetsya dest rang procesiv yakomu vidpravlyayetsya povidomlennya tag znachennya teg yake vikoristovuyetsya dlya identifikaciyi povidomlennya comm komunikator v ramkah yakogo vikonuyetsya peredacha danih 3 Primitkired Korneev V V M Nolidzh Parallelnye vychislitelnye sistemy Voevodin V V Parallelnye vychisleniya Teoriya i praktika parallelnyh vychislenij Teoriya i praktika parallelnyh vychislenij Otrimano z https uk wikipedia org wiki Paralelne programuvannya na osnovi MRI