MPI (англ. Message Passing Interface, Інтерфейс передачі повідомлень) — це специфікація, що була розроблена в 1993–1994 роках групою MPI Forum,і забезпечує реалізацію моделі обміну повідомленнями між процесами. Остання версія цієї специфікації: MPI-2. У моделі програмування MPI програма породжує кілька процесів, що взаємодіють між собою за допомогою виклику підпрограм прийому й передачі повідомлень.
Зазвичай, при ініціалізації MPI-програми створюється фіксований набір процесів, причому (що, утім, необов'язково) кожний з них виконується на своєму процесорі. У цих процесах можуть виконуватися різні програми, тому MPI-модель іноді називають MIMD-моделлю (Multiple Instruction, Multiple Data), на відміну від SIMD моделі, де на кожному процесорі виконуються тільки однакові задачі. MPI підтримує двохточкові й глобальні, синхронні й асинхронні, блокуючі й неблокуючі типи комунікацій. Спеціальний механізм — комунікатор — ховає від програміста внутрішні комунікаційні структури. Структура комунікацій може змінюватися протягом часу життя процесу, але кількість задач має залишатися постійною (MPI-2 підтримує динамічну зміну кількості задач).
Специфікація MPI забезпечує переносимість програм на рівні вихідних кодів. Підтримується робота на гетерогенних кластерах і симетричних мультипроцесорних системах. Не підтримується запуск процесів під час виконання MPI-програми. У специфікації відсутні опис паралельного вводу-виводу й налагодження програм — ці можливості можуть бути включені до складу конкретної реалізації MPI у вигляді додаткових пакетів чи утиліт. Сумісність різних реалізацій не гарантується.
Важливою властивістю паралельної програми є детермінізм — програма має завжди давати однаковий результат для однакових наборів вхідних даних. Модель передачі повідомлень загалом такої властивості не має, оскільки не визначено порядок одержання повідомлень від двох процесів третім. Якщо ж один процес послідовно надсилає кілька повідомлень іншому процесу, MPI гарантує, що одержувач отримає їх саме в тому порядку, у якому вони були надіслані. Відповідальність за забезпечення детермінованого виконання програми покладається на програміста.
MPI-програма
#include <mpi.h> // очевидно;) #include <stdio.h> int main(int argc, char* argv[]) { int myrank, size; MPI_Init(&argc, &argv); // Ініціалізація MPI MPI_Comm_size(MPI_COMM_WORLD, &size); // Розмір комунікатора MPI_Comm_rank(MPI_COMM_WORLD, &myrank); // Одержуємо наш номер printf("Proc %d of %d\n", myrank, size); MPI_Finalize(); // Фіналізація MPI puts("Done."); return 0; }
Перед викликом будь-якої процедури MPI, потрібно викликати ініціалізацію MPI_Init
, перед цим викликом може здійснюватися тільки виклик MPI_Initialized
. MPI_Init
крім усього іншого створює глобальний комунікатор MPI_COMM_WORLD
, через котрий буде проходити обмін повідомленнями. Область взаємодії комунікатора MPI_COMM_WORLD
— усі процеси даної програми. Якщо є необхідність у розбивці області взаємодії на дрібніші сегменти (частково-широкомовні розсилання), використовуються виклики MPI_Comm_dup/create/split/etc
(тут не розглядаються). Розмір комунікатора, одержуваний викликом MPI_Comm_size
— число процесів у ньому. Розмір комунікатора MPI_COMM_WORLD
— загальне число процесів. Кожен процес має свій унікальний (у межах комунікатора) номер — ранг. Ранги процесів у контекстах різних комунікаторів можуть відрізнятися. Після виконання всіх обмінів повідомленнями в програмі має здійснюватися виклик MPI_Finalize()
— процедура видаляє всі структури даних MPI і робить інші необхідні дії. Програміст має сам подбати про те, щоб до моменту виклику MPI_Finalize
усі пересилання даних було завершено. Після виконання MPI_Finalize
виклик будь-яких, крім MPI_Initialized, процедур (навіть MPI_Init
) неможливий. Програма виводить повідомлення від усіх породжених нею процесів. Приклад виводу (порядок повідомлень, що надходять від процесів, може змінюватися) наведений нижче (np — кількість процесів):
Proc 1 of 3 Done. Proc 0 of 3 Done. Proc 2 of 3 Done.
Зверніть увагу, що після виклику MPI_Finalize()
парелельна робота не закінчується — «Done» виводиться кожним процесом.
Термінологія і позначення
- Номер процесу — ціле невід'ємне число, що є унікальним атрибутом кожного процесу.
- Атрибути повідомлення — номер процесу-відправника, номер процесу-одержувача і ідентифікатор повідомлення. Для них заведена структура MPI_Status, що містить три поля: MPI_Source (номер процесу відправника), MPI_Tag (ідентифікатор повідомлення), MPI_Error (код помилки); можуть бути і додаткові поля.
- Ідентифікатор повідомлення (msgtag) — атрибут повідомлення, що є цілим невід'ємним числом у діапазоні від 0 до 32767.
Процеси об'єднуються в групи, можуть бути вкладені групи. Усередині групи всі процеси перенумеровані. З кожною групою асоційований свій комунікатор. Тому при здійсненні пересилання необхідно вказати ідентифікатор групи, всередині якої проводиться ця пересилка. Всі процеси містяться в групі з наперед визначеним ідентифікатором MPI_COMM_WORLD .
Стандарти MPI
Перша версія MPI розроблялася в 1993–1994 році, і MPI 1 вийшла в 1994. Більшість сучасних реалізацій MPI підтримують версію 1.1. Стандарт MPI версії 2.0 підтримується більшістю сучасних реалізацій, але деякі функції можуть бути реалізовані не до кінця. У MPI 1.1 (опублікований 12 червня 1995 , перша реалізація з'явилася в 2002 році) підтримуються наступні функції:
- передача і отримання повідомлень між окремими процесами;
- колективні взаємодії процесів;
- взаємодії в групах процесів;
- реалізація топологій процесів;
У MPI 2.0 (опублікований 18 липня 1997) додатково підтримуються наступні функції:
- динамічне породження процесів і управління процесами;
- односторонні комунікації (Get / Put);
- паралельний введення і виведення;
- розширені колективні операції (процеси можуть виконувати колективні операції не тільки всередині одного комунікатора, але й у рамках декількох комунікаторів).
Версія MPI 2.1 вийшла на початку вересня 2008 року. Версія MPI 2.2 вийшла 4 вересня 2009. Версія MPI 3.0 вийшла 21 вересня 2012 року.
Функціонування інтерфейсу
Базовим механізмом зв'язку між MPI процесами є передача і прийом повідомлень. Повідомлення несе в собі передані дані і інформацію, що дозволяє приймаючій стороні здійснювати їх вибірковий прийом:
- відправник — ранг (номер у групі) відправника повідомлення;
- одержувач — ранг одержувача;
- ознака — може використовуватися для розділення різних видів повідомлень;
- комунікатор — код групи процесів.
Операції прийому й передачі можуть бути блокуючі і неблокуючі. Для неблокуючих операцій визначені функції перевірки готовності й очікування виконання операції.
Іншим способом зв'язку є віддалений доступ до пам'яті (RMA), що дозволяє читати і змінювати область пам'яті віддаленого процесу. Локальний процес може переносити область пам'яті віддаленого процесу (всередині зазначеного процесами вікна) в свою пам'ять і назад, а також комбінувати дані, передані у віддалений процес, з наявними в його пам'яті даними (наприклад, шляхом підсумовування). Всі операції віддаленого доступу до пам'яті не блокуються, однак, до і після їх виконання необхідно викликати блокуючі функції синхронізації.
Реалізації MPI
- MPICH — найпоширеніша безкоштовна реалізація, працює на UNIX -системи і Windows NT
- LAM / MPI — ще одна безкоштовна реалізація MPI. Підтримує гетерогенні конфігурації, LAM підтримує гетерогенні конфігурації, пакет Globus і задовольняє IMPI (Interoperable MPI).
- WMPI — реалізація MPI для Windows
- MPI / PRO For Windows NT — комерційна реалізація для Windows NT
- — комерційна реалізація для Windows / Linux
- Microsoft MPI входить до складу Compute Cluster Pack SDK . Заснований на MPICH2, але включає додаткові засоби управління завданнями. Підтримується специфікація MPI-2.
- HP-MPI — комерційна реалізація від HP
- SGI MPT — платна бібліотека MPI від SGI
- Mvapich — безкоштовна реалізація MPI для Infiniband
- Open MPI — безкоштовна реалізація MPI, спадкоємець LAM / MPI
- Oracle HPC ClusterTools — безкоштовна реалізація для Solaris SPARC / x86 і Linux на основі Open MPI
- MPJ — MPI for Java
- MPJ Express — MPI на Java
Загальні процедури MPI
int MPI_Init (INT * ARGC, char *** ARGV)
MPI_Init — ініціалізація паралельної частини програми. Реальна ініціалізація для кожного додатка виконується не більше одного разу, а якщо MPI вже був ініціалізований, то ніякі дії не виконуються і відбувається негайне повернення з підпрограми. Всі інші MPI-процедури можуть бути викликані тільки після виклику MPI_Init .
Повертає: у разі успішного виконання — MPI_SUCCESS, інакше — код помилки. (Те ж саме повертають і всі інші функції MPI_*, вказані нижче)
int MPI_Finalize (void)
MPI_Finalize — завершення паралельної частини програми. Всі наступні звернення до будь-яких MPI-процедур (зокрема — до MPI_Init) заборонено. До моменту виклику якимось процесом MPI_Finalize має бути завершено всі дії, що вимагають його участі в обміні повідомленнями.
int MPI_Comm_size(MPI_Comm comm, int* size)
Показує розмір (кількість паралельних процесів) групи, асоційованої з комунікатором
- comm — комунікатор (ідентифікатор групи)
- int size — розмір групи
Прийом / передача повідомлень між окремими процесами
Прийом / передача повідомлень з блокуванням
int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm)
- buf — адреса початку буфера посилки повідомлення
- count — число переданих елементів у повідомленні
- datatype — тип переданих елементів
- dest — номер процесу-одержувача
- msgtag — ідентифікатор повідомлення
- comm — ідентифікатор групи
Блокуюче надсилання повідомлення з ідентифікатором msgtag, що складається з count елементів типу datatype, процесу з номером dest . Всі елементи повідомлення розташовані поспіль в буфері buf . Значення count може бути нулем. Тип переданих елементів datatype повинен вказуватися за допомогою зумовлених констант типу. Дозволяється передавати повідомлення самому собі.
Блокування гарантує коректність повторного використання всіх параметрів після повернення з підпрограми. Вибір способу здійснення цієї гарантії: копіювання в проміжний буфер або безпосередня передача процесу dest, залишається за MPI. Слід спеціально зазначити, що повернення з підпрограми MPI_Send не значить ні того, що повідомлення вже передано процесу dest, ні навіть того, що повідомлення залишило процесор, з якого його було надіслано.
Прийом / передача повідомлень без блокування
int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request)
Передача повідомлення, аналогічна MPI_Send, проте повернення з підпрограми відбувається відразу після ініціалізації процесу передачі без очікування обробки всього повідомлення, що у буфері buf . Це означає, що не можна повторно використовувати даний буфер для інших цілей без отримання додаткової інформації про завершення даної посилки. Закінчення процесу передачі (тобто того моменту, коли можна перевикористати буфер buf без побоювання зіпсувати передане повідомлення) можна визначити за допомогою параметра request і процедур MPI_Wait і MPI_Test .
Повідомлення, відправлене будь-якою з процедур MPI_Send і MPI_Isend, може бути прийняте будь-якою з процедур MPI_Recv і MPI_Irecv
Синхронізація процесів
int MPI_Barrier (MPI_Comm comm)
- comm — ідентифікатор групи
Блокує роботу процесів, що викликали дану процедуру, доки всі інші процеси групи comm також не виконають цю процедуру.
Визначені константи
Константи MPI | Тип в C |
---|---|
MPI_CHAR | signed char |
MPI_SHORT | signed int |
MPI_INT | signed int |
MPI_LONG | signed long int |
MPI_UNSIGNED_CHAR | unsigned char |
MPI_UNSIGNED_SHORT | unsigned int |
MPI_UNSIGNED | unsigned int |
MPI_FLOAT | float |
Див. також
Примітки
- . Архів оригіналу за 5 травня 2021. Процитовано 6 квітня 2010.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title ()
Посилання
- MPI Forum [ 5 травня 2021 у Wayback Machine.] and MPI specification [ 15 квітня 2006 у Wayback Machine.]
- Message Passing Interface, каталог посилань Open Directory Project
- Platform MPI [ 11 травня 2009 у Wayback Machine.]
- Open MPI web site [ 2 липня 2006 у Wayback Machine.]
- LAM/MPI web site [ 7 квітня 2010 у Wayback Machine.]
- MPICH [ 15 червня 2004 у Wayback Machine.]
- SCore MPI [ 23 грудня 2009 у Wayback Machine.]
- PVM/MPI Users' Group Meeting (2006 edition) [ 10 березня 2010 у Wayback Machine.]
- MPI tutorials and other documents: [1] [ 3 березня 2009 у Wayback Machine.], MPI Samples [ 5 травня 2006 у Wayback Machine.], Supercomputing Simplified [ 25 січня 2021 у Wayback Machine.],
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових для поліпшення її . (січень 2017) |
Цю статтю треба для відповідності Вікіпедії. (січень 2017) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
MPI angl Message Passing Interface Interfejs peredachi povidomlen ce specifikaciya sho bula rozroblena v 1993 1994 rokah grupoyu MPI Forum i zabezpechuye realizaciyu modeli obminu povidomlennyami mizh procesami Ostannya versiya ciyeyi specifikaciyi MPI 2 U modeli programuvannya MPI programa porodzhuye kilka procesiv sho vzayemodiyut mizh soboyu za dopomogoyu vikliku pidprogram prijomu j peredachi povidomlen Zazvichaj pri inicializaciyi MPI programi stvoryuyetsya fiksovanij nabir procesiv prichomu sho utim neobov yazkovo kozhnij z nih vikonuyetsya na svoyemu procesori U cih procesah mozhut vikonuvatisya rizni programi tomu MPI model inodi nazivayut MIMD modellyu Multiple Instruction Multiple Data na vidminu vid SIMD modeli de na kozhnomu procesori vikonuyutsya tilki odnakovi zadachi MPI pidtrimuye dvohtochkovi j globalni sinhronni j asinhronni blokuyuchi j neblokuyuchi tipi komunikacij Specialnij mehanizm komunikator hovaye vid programista vnutrishni komunikacijni strukturi Struktura komunikacij mozhe zminyuvatisya protyagom chasu zhittya procesu ale kilkist zadach maye zalishatisya postijnoyu MPI 2 pidtrimuye dinamichnu zminu kilkosti zadach Specifikaciya MPI zabezpechuye perenosimist program na rivni vihidnih kodiv Pidtrimuyetsya robota na geterogennih klasterah i simetrichnih multiprocesornih sistemah Ne pidtrimuyetsya zapusk procesiv pid chas vikonannya MPI programi U specifikaciyi vidsutni opis paralelnogo vvodu vivodu j nalagodzhennya program ci mozhlivosti mozhut buti vklyucheni do skladu konkretnoyi realizaciyi MPI u viglyadi dodatkovih paketiv chi utilit Sumisnist riznih realizacij ne garantuyetsya Vazhlivoyu vlastivistyu paralelnoyi programi ye determinizm programa maye zavzhdi davati odnakovij rezultat dlya odnakovih naboriv vhidnih danih Model peredachi povidomlen zagalom takoyi vlastivosti ne maye oskilki ne viznacheno poryadok oderzhannya povidomlen vid dvoh procesiv tretim Yaksho zh odin proces poslidovno nadsilaye kilka povidomlen inshomu procesu MPI garantuye sho oderzhuvach otrimaye yih same v tomu poryadku u yakomu voni buli nadislani Vidpovidalnist za zabezpechennya determinovanogo vikonannya programi pokladayetsya na programista MPI programa include lt mpi h gt ochevidno include lt stdio h gt int main int argc char argv int myrank size MPI Init amp argc amp argv Inicializaciya MPI MPI Comm size MPI COMM WORLD amp size Rozmir komunikatora MPI Comm rank MPI COMM WORLD amp myrank Oderzhuyemo nash nomer printf Proc d of d n myrank size MPI Finalize Finalizaciya MPI puts Done return 0 Pered viklikom bud yakoyi proceduri MPI potribno viklikati inicializaciyu MPI Init pered cim viklikom mozhe zdijsnyuvatisya tilki viklik MPI Initialized MPI Init krim usogo inshogo stvoryuye globalnij komunikator MPI COMM WORLD cherez kotrij bude prohoditi obmin povidomlennyami Oblast vzayemodiyi komunikatora MPI COMM WORLD usi procesi danoyi programi Yaksho ye neobhidnist u rozbivci oblasti vzayemodiyi na dribnishi segmenti chastkovo shirokomovni rozsilannya vikoristovuyutsya vikliki MPI Comm dup create split etc tut ne rozglyadayutsya Rozmir komunikatora oderzhuvanij viklikom MPI Comm size chislo procesiv u nomu Rozmir komunikatora MPI COMM WORLD zagalne chislo procesiv Kozhen proces maye svij unikalnij u mezhah komunikatora nomer rang Rangi procesiv u kontekstah riznih komunikatoriv mozhut vidriznyatisya Pislya vikonannya vsih obminiv povidomlennyami v programi maye zdijsnyuvatisya viklik MPI Finalize procedura vidalyaye vsi strukturi danih MPI i robit inshi neobhidni diyi Programist maye sam podbati pro te shob do momentu vikliku MPI Finalize usi peresilannya danih bulo zaversheno Pislya vikonannya MPI Finalize viklik bud yakih krim MPI Initialized procedur navit MPI Init nemozhlivij Programa vivodit povidomlennya vid usih porodzhenih neyu procesiv Priklad vivodu poryadok povidomlen sho nadhodyat vid procesiv mozhe zminyuvatisya navedenij nizhche np kilkist procesiv Proc 1 of 3 Done Proc 0 of 3 Done Proc 2 of 3 Done Zvernit uvagu sho pislya vikliku MPI Finalize parelelna robota ne zakinchuyetsya Done vivoditsya kozhnim procesom Terminologiya i poznachennyaNomer procesu cile nevid yemne chislo sho ye unikalnim atributom kozhnogo procesu Atributi povidomlennya nomer procesu vidpravnika nomer procesu oderzhuvacha i identifikator povidomlennya Dlya nih zavedena struktura MPI Status sho mistit tri polya MPI Source nomer procesu vidpravnika MPI Tag identifikator povidomlennya MPI Error kod pomilki mozhut buti i dodatkovi polya Identifikator povidomlennya msgtag atribut povidomlennya sho ye cilim nevid yemnim chislom u diapazoni vid 0 do 32767 Procesi ob yednuyutsya v grupi mozhut buti vkladeni grupi Useredini grupi vsi procesi perenumerovani Z kozhnoyu grupoyu asocijovanij svij komunikator Tomu pri zdijsnenni peresilannya neobhidno vkazati identifikator grupi vseredini yakoyi provoditsya cya peresilka Vsi procesi mistyatsya v grupi z napered viznachenim identifikatorom MPI COMM WORLD Standarti MPIPersha versiya MPI rozroblyalasya v 1993 1994 roci i MPI 1 vijshla v 1994 Bilshist suchasnih realizacij MPI pidtrimuyut versiyu 1 1 Standart MPI versiyi 2 0 pidtrimuyetsya bilshistyu suchasnih realizacij ale deyaki funkciyi mozhut buti realizovani ne do kincya U MPI 1 1 opublikovanij 12 chervnya 1995 persha realizaciya z yavilasya v 2002 roci pidtrimuyutsya nastupni funkciyi peredacha i otrimannya povidomlen mizh okremimi procesami kolektivni vzayemodiyi procesiv vzayemodiyi v grupah procesiv realizaciya topologij procesiv U MPI 2 0 opublikovanij 18 lipnya 1997 dodatkovo pidtrimuyutsya nastupni funkciyi dinamichne porodzhennya procesiv i upravlinnya procesami odnostoronni komunikaciyi Get Put paralelnij vvedennya i vivedennya rozshireni kolektivni operaciyi procesi mozhut vikonuvati kolektivni operaciyi ne tilki vseredini odnogo komunikatora ale j u ramkah dekilkoh komunikatoriv Versiya MPI 2 1 vijshla na pochatku veresnya 2008 roku Versiya MPI 2 2 vijshla 4 veresnya 2009 Versiya MPI 3 0 vijshla 21 veresnya 2012 roku Funkcionuvannya interfejsuBazovim mehanizmom zv yazku mizh MPI procesami ye peredacha i prijom povidomlen Povidomlennya nese v sobi peredani dani i informaciyu sho dozvolyaye prijmayuchij storoni zdijsnyuvati yih vibirkovij prijom vidpravnik rang nomer u grupi vidpravnika povidomlennya oderzhuvach rang oderzhuvacha oznaka mozhe vikoristovuvatisya dlya rozdilennya riznih vidiv povidomlen komunikator kod grupi procesiv Operaciyi prijomu j peredachi mozhut buti blokuyuchi i neblokuyuchi Dlya neblokuyuchih operacij viznacheni funkciyi perevirki gotovnosti j ochikuvannya vikonannya operaciyi Inshim sposobom zv yazku ye viddalenij dostup do pam yati RMA sho dozvolyaye chitati i zminyuvati oblast pam yati viddalenogo procesu Lokalnij proces mozhe perenositi oblast pam yati viddalenogo procesu vseredini zaznachenogo procesami vikna v svoyu pam yat i nazad a takozh kombinuvati dani peredani u viddalenij proces z nayavnimi v jogo pam yati danimi napriklad shlyahom pidsumovuvannya Vsi operaciyi viddalenogo dostupu do pam yati ne blokuyutsya odnak do i pislya yih vikonannya neobhidno viklikati blokuyuchi funkciyi sinhronizaciyi Realizaciyi MPIMPICH najposhirenisha bezkoshtovna realizaciya pracyuye na UNIX sistemi i Windows NT LAM MPI she odna bezkoshtovna realizaciya MPI Pidtrimuye geterogenni konfiguraciyi LAM pidtrimuye geterogenni konfiguraciyi paket Globus i zadovolnyaye IMPI Interoperable MPI WMPI realizaciya MPI dlya Windows MPI PRO For Windows NT komercijna realizaciya dlya Windows NT komercijna realizaciya dlya Windows Linux Microsoft MPI vhodit do skladu Compute Cluster Pack SDK Zasnovanij na MPICH2 ale vklyuchaye dodatkovi zasobi upravlinnya zavdannyami Pidtrimuyetsya specifikaciya MPI 2 HP MPI komercijna realizaciya vid HP SGI MPT platna biblioteka MPI vid SGI Mvapich bezkoshtovna realizaciya MPI dlya Infiniband Open MPI bezkoshtovna realizaciya MPI spadkoyemec LAM MPI Oracle HPC ClusterTools bezkoshtovna realizaciya dlya Solaris SPARC x86 i Linux na osnovi Open MPI MPJ MPI for Java MPJ Express MPI na JavaZagalni proceduri MPIint MPI Init INT ARGC char ARGV MPI Init inicializaciya paralelnoyi chastini programi Realna inicializaciya dlya kozhnogo dodatka vikonuyetsya ne bilshe odnogo razu a yaksho MPI vzhe buv inicializovanij to niyaki diyi ne vikonuyutsya i vidbuvayetsya negajne povernennya z pidprogrami Vsi inshi MPI proceduri mozhut buti viklikani tilki pislya vikliku MPI Init Povertaye u razi uspishnogo vikonannya MPI SUCCESS inakshe kod pomilki Te zh same povertayut i vsi inshi funkciyi MPI vkazani nizhche int MPI Finalize void MPI Finalize zavershennya paralelnoyi chastini programi Vsi nastupni zvernennya do bud yakih MPI procedur zokrema do MPI Init zaboroneno Do momentu vikliku yakimos procesom MPI Finalize maye buti zaversheno vsi diyi sho vimagayut jogo uchasti v obmini povidomlennyami int MPI Comm size MPI Comm comm int size Pokazuye rozmir kilkist paralelnih procesiv grupi asocijovanoyi z komunikatorom comm komunikator identifikator grupi int size rozmir grupiPrijom peredacha povidomlen mizh okremimi procesamiPrijom peredacha povidomlen z blokuvannyam int MPI Send void buf int count MPI Datatype datatype int dest int msgtag MPI Comm comm buf adresa pochatku bufera posilki povidomlennya count chislo peredanih elementiv u povidomlenni datatype tip peredanih elementiv dest nomer procesu oderzhuvacha msgtag identifikator povidomlennya comm identifikator grupi Blokuyuche nadsilannya povidomlennya z identifikatorom msgtag sho skladayetsya z count elementiv tipu datatype procesu z nomerom dest Vsi elementi povidomlennya roztashovani pospil v buferi buf Znachennya count mozhe buti nulem Tip peredanih elementiv datatype povinen vkazuvatisya za dopomogoyu zumovlenih konstant tipu Dozvolyayetsya peredavati povidomlennya samomu sobi Blokuvannya garantuye korektnist povtornogo vikoristannya vsih parametriv pislya povernennya z pidprogrami Vibir sposobu zdijsnennya ciyeyi garantiyi kopiyuvannya v promizhnij bufer abo bezposerednya peredacha procesu dest zalishayetsya za MPI Slid specialno zaznachiti sho povernennya z pidprogrami MPI Send ne znachit ni togo sho povidomlennya vzhe peredano procesu dest ni navit togo sho povidomlennya zalishilo procesor z yakogo jogo bulo nadislano Prijom peredacha povidomlen bez blokuvannya int MPI Isend void buf int count MPI Datatype datatype int dest int msgtag MPI Comm comm MPI Request request Peredacha povidomlennya analogichna MPI Send prote povernennya z pidprogrami vidbuvayetsya vidrazu pislya inicializaciyi procesu peredachi bez ochikuvannya obrobki vsogo povidomlennya sho u buferi buf Ce oznachaye sho ne mozhna povtorno vikoristovuvati danij bufer dlya inshih cilej bez otrimannya dodatkovoyi informaciyi pro zavershennya danoyi posilki Zakinchennya procesu peredachi tobto togo momentu koli mozhna perevikoristati bufer buf bez poboyuvannya zipsuvati peredane povidomlennya mozhna viznachiti za dopomogoyu parametra request i procedur MPI Wait i MPI Test Povidomlennya vidpravlene bud yakoyu z procedur MPI Send i MPI Isend mozhe buti prijnyate bud yakoyu z procedur MPI Recv i MPI IrecvSinhronizaciya procesivint MPI Barrier MPI Comm comm comm identifikator grupi Blokuye robotu procesiv sho viklikali danu proceduru doki vsi inshi procesi grupi comm takozh ne vikonayut cyu proceduru Viznacheni konstantiKonstanti MPI Tip v CMPI CHAR signed charMPI SHORT signed intMPI INT signed intMPI LONG signed long intMPI UNSIGNED CHAR unsigned charMPI UNSIGNED SHORT unsigned intMPI UNSIGNED unsigned intMPI FLOAT floatDiv takozhMPICH OpenMPPrimitki Arhiv originalu za 5 travnya 2021 Procitovano 6 kvitnya 2010 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya PosilannyaMPI Forum 5 travnya 2021 u Wayback Machine and MPI specification 15 kvitnya 2006 u Wayback Machine Message Passing Interface katalog posilan Open Directory Project Platform MPI 11 travnya 2009 u Wayback Machine Open MPI web site 2 lipnya 2006 u Wayback Machine LAM MPI web site 7 kvitnya 2010 u Wayback Machine MPICH 15 chervnya 2004 u Wayback Machine SCore MPI 23 grudnya 2009 u Wayback Machine PVM MPI Users Group Meeting 2006 edition 10 bereznya 2010 u Wayback Machine MPI tutorials and other documents 1 3 bereznya 2009 u Wayback Machine MPI Samples 5 travnya 2006 u Wayback Machine Supercomputing Simplified 25 sichnya 2021 u Wayback Machine Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno sichen 2017 Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti sichen 2017