Page 161 - 4868
P. 161

159                                                              Ошибка! Стиль не определен.

                       параметр tag використовується тільки при необхідності розрізнення
               повідомлень, що передаються, інакше в якості значення параметра може бути
               використане довільне позитивне ціле число.
                     Відразу ж після завершення функції MPI_Send процес-відправник може
               почати  повторно  використовувати  буфер  пам’яті,  в  якому  розташовувалося

               повідомлення,  що  відправлялося.  Також  слід  розуміти,  що  у  момент
               завершення функції MPI_Send стан самого повідомлення, що пересилається,
               може  бути  абсолютно  різним:  повідомлення  може  розташовуватися  в
               процесі-відправнику, може знаходитися в стані передачі, може зберігатися в
               процесі-одержувачу  або  може  бути  прийнято  процесом-одержувачем  за
               допомогою  функції  MPI_Recv.  Тим  самим,  завершення  функції  MPI_Send
               означає  лише,  що  операція  передачі  почала  виконуватися  і  пересилка
               повідомлення рано чи пізно буде виконана.
                     Для  прийому  повідомлення  процес-  одержувач  повинен  виконати
               функцію:
                     int MPI_Recv(void *buf, int count, MPI_Datatype type,
                           int source int tag, MPI_Comm comm, MPI_Status *status)

               де
                       buf,  count,  type  –  буфер  пам’яті  для  прийому  повідомлення,
               призначення кожного окремого параметра відповідає опису в MPI_Send;
                       source  –  ранг  процесу,  від  якого  має  бути  виконаний  прийом
               повідомлення;
                       tag – тег повідомлення, яке має бути прийняте для процесу;
                       comm – комунікатор, у рамках якого виконується передача даних;
                       status – вказівник на структуру даних з інформацією про результат

               виконання операції прийому даних.
                     Слід зазначити, що:
                       буфер  пам’яті  має  бути  достатнім  для  прийому  повідомлення.  При
               нестачі  пам’яті  частина  повідомлення  буде  втрачена  і  в  коді  завершення
               функції буде зафіксована помилка переповнення;
                       з іншого боку, повідомлення, що приймається, може бути і коротше,
               ніж  розмір  приймального  буфера,  у  такому  разі  зміняться  тільки  ділянки
               буфера, зачеплені прийнятим повідомленням;
                       типи елементів повідомлення, що приймається, повинні співпадати;
                       при  необхідності  прийому  повідомлення  від  будь-якого  процесу-
               відправника  для  параметра  source  може  бути  вказане  значення
               MPI_ANY_SOURCE  (на  відміну  від  функції  передачі  MPI_Send,  яка  посилає
               повідомлення строго визначеному адресату);
                       при  необхідності  прийому  повідомлення  з  будь-яким  тегом  для
               параметра tag може бути вказане значення MPI_ANY_TAG (знову-таки, при
               використанні функції MPI_Send має бути вказане конкретне значення тега);

                       на  відміну  від  параметрів  «процес-одержувач»  і  «тег»,  параметра
               «комунікатор» не має значення, що означає «будь-якого комунікатора»;
   156   157   158   159   160   161   162   163   164   165   166