1
1
openmpi/examples/dtrace/mpicommleak.c

62 строки
1.4 KiB
C
Исходник Обычный вид История

/*
* Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* $COPYRIGHT$
2015-06-24 06:59:57 +03:00
*
* Additional copyrights may follow
2015-06-24 06:59:57 +03:00
*
* $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);
}