: . (// / ..), .. .
MPI_Reduce: root:
int vector[16];
int resultVector[16];
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
for(i=0; i<16; i++)
vector[i] = myRank*100 + i;
MPI_Reduce(
vector, /* */
resultVector, /* 'root' */
16, /* */
MPI_INT, /* */
MPI_SUM, /* : */
0, /* , 'resultVector' */
MPI_COMM_WORLD /* */
);
if(myRank==0)
/* resultVector, */
MPI 12:
ü MPI_MAX MPI_MIN ;
ü MPI_SUM ;
ü MPI_PROD ;
ü MPI_LAND, MPI_BAND, MPI_LOR, MPI_BOR, MPI_LXOR, MPI_BXOR - , , ;
ü MPI_MAXLOC, MPI_MINLOC - / - .
1 .
1
MPI_MAX, MPI_MIN | |
MPI_SUM, MPI_PROD | , , |
MPI_LAND, MPI_LOR, MPI_LXOR | |
MPI_LAND, MPI_LOR, MPI_LXOR | ( .. ) |
. . , ("(a+b)+c = a+(b+c)") ("a+b = b+a").
MPI_Allreduce: , 'root' .
MPI_Reduce_scatter: -, . - . .
MPI_Scan: MPI_Allreduce , . : - i 0 i .
, - - - , .
- , . , , . , , MPI_COMM_WORLD .
( ) , . , , , . .
.
. - :
MPI_Comm tempComm;
MPI_Comm_dup(MPI_COMM_WORLD, &tempComm);
/*... tempComm... */
MPI_Comm_free(&tempComm);
- . .
. , .
MPI_Comm_split(
existingComm, /* , MPI_COMM_WORLD */
indexOfNewSubComm, /* , */
rankInNewSubComm, /* */
&newSubComm); /* */
, - ; ( , ). indexOfNewSubComm MPI_UNDEFINED, newSubComm MPI_COMM_NULL, .
. , : , . :
1. MPI_Comm_group , ;
2. MPI_Group_xxx ;
3. MPI_Comm_create ; , - , ;
4. MPI_Group_free.
, , MPI_Comm_split, . MPI 7 .