Bu Blogda Ara

7 Şubat 2010 Pazar

Linear loop Broadcast, Illustrates use of MPI's

/* bcast.c -- linear loop broadcast, illustrates use of MPI's
* profiling interface.
*
* Input: none
* Output:
* Total time spent by each process in MPI_Send
* Result of broadcast -- should be "1" printed by each
*
* Note: Should be linked with ./send.c and the MPI profiling
* library.
*
* See Chap 12, pp. 271 & ff in PPMPI.
*/
#include
#include "mpi.h"

extern void Print_send_time(void);

main(int argc, char* argv[]) {
int p;
int my_rank;
int root = 0;
MPI_Comm comm;
int proc;
MPI_Status status;
int size = 1;
int tag = 0;
MPI_Datatype datatype = MPI_INT;
int* x;
int y;

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_dup(MPI_COMM_WORLD, &comm);

if (my_rank == root)
y = 1;
else
y = 0;
x = &y;

if (my_rank == root) {
for (proc = 0; proc < p; proc++)
MPI_Send(x, size, datatype, proc, tag, comm);
}
MPI_Recv(x, size, datatype, root, tag, comm, &status);

Print_send_time();
printf("Process %d > *x = %d\n", my_rank, *x);
MPI_Finalize();
} /* main */

Hiç yorum yok:

Yorum Gönder