Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Duisembiev-Parallel-esep.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.86 Mб
Скачать

Int mpi_Recv_init( void *buf, int count, mpi_Datatype datatype, int source, int msgtag, mpi_Comm comm, mpi_Request *request)

  • out buf — хабарламаны қабылдау буферінің басталу адресі;

  • count — хабарламадағы қабылданған элементтер саны;

  • datatype — қабылданған элементтер типтері;

  • source — процесса-жіберушінің нөмірі;

  • msgtag — хабарлама идентификаторы;

  • comm — коммуникатор идентификаторы;

  • out request — асинхронды қабылдау идентификаторы.

Фортран тіліндегі нұсқасы:

MPI_RECV_INIT(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR)

<type> BUF(*)

Integer count, datatype, source, msgtag, comm, request, ierr

Хабарламаны қабылдауды орындау біріктірілген сұранысын қалыптастыру. Мұндағы барлық параметрлер дәл MPI_Irecv функциясыныкымен бірдей, бірақ одан айырмашылығы MPI_startall функциясы шақырылғанша нақты қабылдау басталмайды (Си).

MPI_Startall(int count, MPI_Request *requests)

  • count — ара-қатынас сұраныстарының саны;

  • out requests — қабылдау/жіберу идентификаторлары массиві.

Барлық қабылдау және жіберу біріктірілген операцияларын жүктеу (MPI_Recv_init, MPI_send_init функцияларымен немесе оның үш модификациясымен). Барлық біріктірілген ара-қатынастар бұғатталусыз режимде жүктеледі, ал олардың аяқталуын MPI_Wait және MPI_Test функцияларының көмегімен анықтауға болады.

Фортран тілінде:

MPI_START(REQUEST, IERR) INTEGER REQUEST, IERR

request параметрінің мәніне сәйкес келетін алмасу операциясын орындауға біріктірілген сұранысын инициалдау. Операция бұғаттаусыз сияқты жіберіледі.

MPI_STARTALL(COUNT, REQUESTS, IERR) INTEGER COUNT, REQUESTS, IERR

request массивінің алғашқы count элементтерінің мәніне сәйкес келетін алмасу операциясын орындауға count біріктірілген сұранысын инициалдау. Операция бұғаттаусыз сияқты жіберіледі (запускаются).

Бұғаттамайтын операциялардан айырмашылығы, біріктірілген сұраныс көмегімен жіберілген операцияның орындалуы соңында request (requestTS) параметрінің мәні сақталады және оны ары қарай пайдалануға да болады!

MPI_REQUEST_FREE(REQUEST, IERR) INTEGER REQUEST, IERR

Берілген процедура request параметріне байланысты деректер құрылымын жояды. Ол орындалғаннан кейін request параметрі mpi_request_null мәніне қойылады. Егер осы сұранысқа қатысты операция орындалып жатса, онда ол аяқталады.

Келесі мысалда, сақина топологиясында көрші процестермен екібағытты алмасу операцияларын орындаудың біріктірілген сұранысы инициалданады. Операциялар келесі циклдің әрбір итерациясында жіберіледі. Цикл аяқталғаннан кейін біріктірілген сұраныстар жойылады (Фортран).

prev = rank - 1

next = rank + 1

if(rank .eq. 0) prev = size - 1

if(rank .eq. size - 1) next = 0

call MPI_RECV_INIT(rbuf(1), 1, MPI_REAL, prev, 5, & MPI_COMM_WORLD, reqs(l), ierr)

call MPI_RECV_INIT(rbuf(2), 1, MPI_REAL, next, 6, & MPI_COMM_WORLD, reqs(2), ierr)

call MPI_SEND_INIT(sbuf(1), 1, MPI_REAL, prev, 6, & MPI_COMM_WORLD, reqs(3), ierr)

call MPI_SEND_INIT(sbuf(2), 1, MPI_REAL, next, 5, & MPI_COMM_WORLD, reqs(4), ierr)

do i=...

sbuf(1)=...

sbuf(2)=...

call MPI_STARTALL(4, reqs, ierr)

call MPI_WAITALL(4, reqs, stats, ierr);

...

end do

call MPI_REQUEST_FREE(reqs(1), ierr)

call MPI_REQUEST_FREE(reqs(2), ierr)

call MPI_REQUEST_FREE(reqs(3), ierr)

call MPI_REQUEST_FREE(reqs(4), ierr)

Процестердің ұжымдық ара-қатынастары

Процестердің ұжымдық ара-қатынастары операцияларында коммуникатордың барлық процестері қатысады. Сәйкес процедура өз параметрлер жиынымен әрбір процеспен шақырылуы керек. Ұжымдық ара-қатынастар процедураларынан қайтарылу, берілген операцияға процестің қатысуы аяқталған мезетте болуы мүмкін. Бұғаттайтын процедуралардағы сияқты, қайтару, қабылдау және жіберу буферіне еркін қатынас рұқсат етілді дегенді білдіреді. MPI технологиясында асинхронды ұжымдық операциялар жоқ.

Ұжымдық операцияларда, «нүкте-нүкте» түріндегі операциялар үшін пайдаланылған коммуникаторларды пайдалануға болады. Сонымен қатар MPI ұжымдық операциялармен шақырылған хабарламалардың, процестердің жеке ара-қатынасы нәтижесінде пайда болған хабарламалармен қиылыспауына және оларға ешқандай әсер етпейтініне кепілдік береді.

Жалпы ұжымдық операциялар көмегімен процестердің синхрондалуына сенім артуға болмайды (mpi_barrier процедурасынан басқасына). Егер қандай да бір процесс ұжымдық операцияда өз қатысуын аяқтаса, онда берілген операция коммуникатордың басқа процестерімен де аяқталды болмаса олармен басталды дегенді білдірмейді.

Ұжымдық операцияларда хабарлама идентификаторлары (тегтер, теги) пайдаланылмайды. Сонымен, бағдарлама текстінде пайда болуына сәйкес ұжымдық операциялар қатаң реттелген.

МРI_BARRIER(СОММ, IERR)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]