.


:




:

































 

 

 

 


 

x . , :

MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);

for (int i = 1; i < ProcNum; i++)

MPI_Send(&x, n, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);

 

, () . , log2p .

 

( ) MPI:

int MPI_Bcast(void *buf, int count, MPI_Datatype type, int root,

MPI_Comm comm),

 

buf, count, type ( 0) ( );

root , ;

comm , .

 

MPI_Bcast buf, count type, , root, , comm (. . 5.1).

 

:

- MPI_Bcast , , , MPI_Bcast (. );

- MPI_Bcast : root, , , ;

- "" , , , MPI_Bcast, MPI_Recv , MPI_Bcast.

. 4.1.

 

.

 

4.2.

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

#include "mpi.h"

int main(int argc, char* argv[]){

double x[100], TotalSum, ProcSum = 0.0;

int ProcRank, ProcNum, N=100, k, i1, i2;

MPI_Status Status;

 

//

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&ProcNum);

MPI_Comm_rank(MPI_COMM_WORLD,&ProcRank);

//

if (ProcRank == 0) DataInitialization(x,N);

 

//

MPI_Bcast(x, N, MPI_DOUBLE, 0, MPI_COMM_WORLD);

 

//

// x i1 i2

k = N / ProcNum;

i1 = k * ProcRank;

i2 = k * (ProcRank + 1);

if (ProcRank == ProcNum-1) i2 = N;

for (int i = i1; i < i2; i++)

ProcSum = ProcSum + x[i];

 

// 0

if (ProcRank == 0) {

TotalSum = ProcSum;

for (int i=1; i < ProcNum; i++) {

MPI_Recv(&ProcSum,1,MPI_DOUBLE,MPI_ANY_SOURCE,0, MPI_COMM_WORLD, &Status);

TotalSum = TotalSum + ProcSum;

}

}

else //

MPI_Send(&ProcSum, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);

 

//

if (ProcRank == 0)

printf("\nTotal Sum = %10.2f",TotalSum);

MPI_Finalize();

return 0;

}

4.2. (html, txt)

 

DataInitialization . , .

4.2. .

 

. ( ). , . , , MPI :

int MPI_Reduce(void *sendbuf, void *recvbuf, int count,

MPI_Datatype type, MPI_Op op, int root, MPI_Comm comm),

 

sendbuf ;

recvbuf ( root);

count ;

type ;

op , ;

root , ;

comm , .

 

MPI . . 4.2.

 

. 4.2. root , ..:

Ä , MPI_Reduce ( . 4.3 ).

 

:

MPI_Reduce , , , . count, type, op, root, comm;

, root;

. , , MPI_SUM, , , ;

type op , . 4.3.

4.2.

() MPI

MPI_MAX
MPI_MIN
MPI_SUM
MPI_PROD
MPI_LAND ""
MPI_BAND ""
MPI_LOR ""
MPI_BOR ""
MPI_LXOR ""
MPI_BXOR ""
MPI_MAXLOC
MPI_MINLOC

 

 

. 4.2.

4.3.

C
MPI_MAX, MPI_MIN, MPI_SUM, MPI_PROD ,
MPI_LAND, MPI_LOR, MPI_LXOR
MPI_BAND, MPI_BOR, MPI_BXOR ,
MPI_MINLOC, MPI_MAXLOC ,

. 4.3. ( 4 , 2)

 

: , (" 0"), MPI_Reduce:

// 0

MPI_Reduce(&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, 0,

MPI_COMM_WORLD);


 

 

4 C++ , . . MPI MPICH 1.2.7, , .

. . .

 

:

) .

) MPI-.

) .

) .

 

 



<== | ==>
). |
:


: 2017-02-11; !; : 401 |


:

:

,
==> ...

1577 - | 1556 -


© 2015-2024 lektsii.org - -

: 0.017 .