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

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"

#include <stdio.h> idefine SIZE 4

Int main(argc,argv)

Int argc;

char *argv[];

{

Int numtasks, rank, sendcount, recvcount, source;

float sendbuf[SIZE] [SIZE] = {

{1.0, 2.0, 3.0, 4.0},

{5.0, 6.0, 7.0, 8.0},

{9.0, 10.0, 11.0, 12.0},

{13.0, 14.0, 15.0, 16.0} };

float recvbuf[SIZE];

MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &numtasks);

if (numtasks == SIZE) {

source = 1;

sendcount = SIZE;

recvcount = SIZE;

MPI_Scatter(sendbuf, sendcount, MPI_FLOAT, recvbuf, recvcount, MPI_FLOAT, source, MPI_COMM_WORLD);

printf("rank= %d Results: %f %f %f %f\n", rank, recvbuf[0], recvbuf[l], recvbuf[2], recvbuf[3]);

}

else

printf("Процестер саны тең болу керек %d. \n", SIZE);

MPI_Finalize();

}

Процестердің синхрондалуы

MPI технологиясында процестердің синхрондалуы MPI_Barrier функциясының көмегімен жүргізіледі.

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