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

Integer scount, stype, rcount, rtype, root, comm, ierr

сомм коммуникаторының барлық процестерінен, SBUF массивтеріндегі STYPE типті SCOUNT элементтерді root процесінің RBUF буферінде жинау. Әрбір процесс, root процесін қоса алғанда, өз SBUF буферіндегі деректерді root процесіне жібереді. Жинақтаушы процесс, деректерді процесс нөмірінің өсу реті бойынша орналастыра отырып RBUF буферінде сақтайды.

root процесінде барлық параметрлердің мәндері маңызды орын алады, ал қалған барлық процестерде - тек SBUF, SCOUNT, STYPE, root және comm параметрлерінің ғана мәндері. Барлық процестерде root және comm параметрлерінің мәндері бірдей болуы керек. root процесінің RCOUNT параметрі, барлық процестен қабылданған қосынды элементтер емес, ал әрбір процестен қабылданатын RTYPE типті элементтер санын белгілейді.

Келесі схема MPI_GATHER процедурасының іс-әрекетін көрсетеді.

Мысалы, 2-ші процесс барлық қалған процестерден әрқайсысы 10 бүтінсанды элементтен тұратын buf қосымша массивтерін rbuf массивіне жинау үшін, барлық процестерде келесі шақыру кездесуі керек:

call MPI_GATHER(buf, 10, MPI_INTEGER, & rbuf, 10, MPI_INTEGER,

& 2, MPI_COMM_WORLD, ierr)

MPI_GATHERV(SBUF, SCOUNT, STYPE, RBUF, RCOUNTS, DISPLS, RTYPE, ROOT, COMM, IERR)

<type> SBUF(*), RBUF(*)

Integer scount, stype, rcounts(*), displs(*), rtype, root, comm, ierr

RBUF массивтерінен түрлі мөлшердегі деректерді жинау. Қорытынды RBUF буферіндегі деректердің орналасу ретін DISPLS массиві береді.

RCOUNTS - әрбір процестен жіберілетін элементтер санынан тұратын бүтінсанды массив (индекс жіберетін процесс рангісіне тең, массив өлшемі сомм коммуникаторындағы процестер санына тең).

DISPLS - RBUF массивінің басталуына қарағандағы ығысудан (смещение) тұратын бүтін санды массив (индекс - жіберетін процесс рангісіне тең, массив өлшемі - сомм коммуникаторындағы процестер санына тең).

J-1 процесімен жіберілген деректер, root процесінде rbuf буферінің j-ші блогына орналастырылады.

MPI_SCATTER(SBUF, SCOUNT, STYPE, RBUF, RCOUNT, RTYPE, ROOT,

COMM, IERR)

<type> SBUF(*), RBUF(*)

Integer scount, stype, rcount, rtype, root, comm, ierr

mpi_scatter процедурасының әрекеті mpi_gather процедурасына кері. Ол root процесінің sbuf массивінен stype типті scount элементтерден сомм коммуникаторының барлық процестерінің rbuf массивтеріне таратады (root процесін қоса алғанда). sbuf массивін, әрқайсысы stype типті scount элементтен тұратын процестер саны бойынша тең бөлінген деп санауға болады, одан кейін I-ші бөлігі (I - 1)-ші процеске жіберіледі.

root процесінде барлық параметрлердің мәндері маңызды орын алады, ал қалған барлық процестерде - тек RBUF, rCOUNT, rTYPE, Source және COMM параметрлерінің ғана мәндері. Барлық процестерде Source және COMM параметрлерінің мәндері бірдей болуы керек.

Келесі схема mpi_scatter процедурасының іс-әрекетін көрсетеді.

Төменде MPI_Bcast, MPI_Gather, MPI_Scatter процедураларын пайдаланудың Си тіліндегі нұсқалары берілген.

Int mpi_Bcast(void *buf, int count, mpi_Datatype datatype, int source, mpi_Comm comm)

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

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

  • datatype — жіберілген элементтер типтері;

  • source — тарататын процесс нөмірі;

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

Хабарламаны source процесінен барлық процестерге (таратушы процесс те енеді) тарату. Процедурадан қайтарылу кезінде source процесінің buf буферіндегі мәлімет comm коммуникаторының әрбір процесінің жергілікті (жеке) буферіне көшіріледі. Барлық процестерде count, datatype, source және comm параметрлерінің мәндері бірдей болуы керек.

Келесі операторды comm коммуникатораның барлық процесі орындау нәтижесінде:

MPI_Bcast (array, 100, MPI_INT, 0, comm);

нөлінші процестегі array массивінің алғашқы 100 бүтін саны әрбір процестің жергілікті array буферлеріне көшіріліп жазылады.

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