62 строки
1.4 KiB
C
62 строки
1.4 KiB
C
|
/*
|
||
|
* Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
|
||
|
* Use is subject to license terms.
|
||
|
* $COPYRIGHT$
|
||
|
*
|
||
|
* Additional copyrights may follow
|
||
|
*
|
||
|
* $HEADER$
|
||
|
*/
|
||
|
|
||
|
#include <errno.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <netdb.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
#include <mpi.h>
|
||
|
|
||
|
#define ITERATIONS 1000000
|
||
|
|
||
|
static void allocate_comms(void);
|
||
|
static void deallocate_comms(void);
|
||
|
static MPI_Comm communicator_a, communicator_b, communicator_c;
|
||
|
|
||
|
int
|
||
|
main(int argc, char *argv[])
|
||
|
{
|
||
|
int rank; /* COMM_WORLD rank of process */
|
||
|
int np; /* number of processes in job */
|
||
|
int i;
|
||
|
int unslept;
|
||
|
|
||
|
MPI_Init(&argc, &argv);
|
||
|
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||
|
MPI_Comm_size(MPI_COMM_WORLD, &np);
|
||
|
|
||
|
for (i=0; i < ITERATIONS; i++) {
|
||
|
/* allocate our communicators */
|
||
|
allocate_comms();
|
||
|
|
||
|
/* simulate doing work */
|
||
|
unslept = sleep(5);
|
||
|
|
||
|
/* deallocate communicators forgetting one of the communicators */
|
||
|
deallocate_comms();
|
||
|
}
|
||
|
MPI_Finalize();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void allocate_comms(void) {
|
||
|
MPI_Comm_dup(MPI_COMM_WORLD, &communicator_a);
|
||
|
MPI_Comm_dup(MPI_COMM_WORLD, &communicator_b);
|
||
|
MPI_Comm_dup(MPI_COMM_WORLD, &communicator_c);
|
||
|
}
|
||
|
|
||
|
void deallocate_comms(void) {
|
||
|
MPI_Comm_free(&communicator_a);
|
||
|
MPI_Comm_free(&communicator_c);
|
||
|
}
|