|
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 буферлеріне көшіріліп жазылады.
int MPI_Gather(void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int dest, MPI_Comm comm)
· sbuf - хабарламаны жіберу буферінің басталу адресі;
· scount - хабарламадағы жіберілген элементтер саны;
· stype - жіберілген элементтер типтері;
· out rbuf - хабарламаны жинау буферінің басталу адресі;
· rcount – қабылданатын хабарламадағы элементтер саны;
· rtype – қабыданатын хабарламадағы элементтер типі;
· dest – деректерді жинайтын процесс нөмірі;
· comm - коммуникатор идентификаторы.
Барлық процестерден dest процесінің rbuf буферіне деректерді жинау. Әрбір процесс, dest процесін қоса алғанда, өз sbuf буферіндегі деректерді dest процесіне жібереді. Жинақтаушы процесс, деректерді процесс нөмірінің өсу реті бойынша орналастыра отырып rbuf буферінде сақтайды. dest процесінде барлық параметрлердің мәндері маңызды орын алады, ал қалған барлық процестерде - тек sbuf, scount, stype, dest және comm параметрлерінің ғана мәндері. Барлық процестерде dest және comm параметрлерінің мәндері бірдей болуы керек. Dest процесінің rcount параметрі, барлық процестен қабылданған қосынды элементтер емес, ал әрбір процестен қабылданатын rtype типті элементтер санын белгілейді. Осыған ұқсас MPI_Scatterфункциясының көмегімен процестерден ұзындықтары әр түрлі деректер массивтерін қабылдауға болады.
int MPI_Scatter(void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int source, MPI_Comm comm)
· sbuf - хабарламаны жіберу буферінің басталу адресі;
· scount - хабарламадағы жіберілетін элементтер саны;
· stype - жіберілген элементтер типтері;
· out rbuf - хабарламаны жинау буферінің басталу адресі;
· rcount – қабылданатын хабарламадағы элементтер саны;
· rtype – қабыданатын хабарламадағы элементтер типі;
· source – деректерді жинайтын процесс нөмірі;
· comm - коммуникатор идентификаторы.
Келесі мысалда массив жолдарын тарату үшін MPI_scatter функциясын пайдалану көрсетілген. Еске сала кетсек, Fortran тілінен айырмашылығы, Си тілінде массивтер жадыда жолдар бойымен сақталады.
#include "mpi.h"
Дата добавления: 2015-10-29; просмотров: 121 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
OpenMP бағдарламалау технологиясы | | | Т- жүйесі |