|
int MPI_Scatter(void *sbuf, int scount, MPI_DatatypeБайланысты: duisembiev-parallel-esepint 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
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);
189
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,
Достарыңызбен бөлісу: |
|
|