Hello
The following program leaks memory if compiled with -DLEAK (uses about 7
GB in the end but less than 20 MB without -DLEAK).
#include "assert.h"
#include "mpi.h"
int main(int argc, char* argv[]) {
assert(MPI_Init(&argc, &argv) == MPI_SUCCESS);
for (int i = 0; i < 10000000; i++) {
MPI_Datatype type;
assert(
MPI_Type_contiguous(
10 * sizeof(double),
MPI_BYTE,
&type
) == MPI_SUCCESS
);
#ifndef LEAK
assert(MPI_Type_commit(&type) == MPI_SUCCESS);
assert(MPI_Type_free(&type) == MPI_SUCCESS);
#endif
}
assert(MPI_Finalize() == MPI_SUCCESS);
}
Since uncommitted datatypes can be used for creating new ones (MPI-2.2)
this behavior seems like a rather nasty bug.
mpirun --version
mpirun (Open MPI) 1.5.5
openmpi compiled with gcc (GCC) 4.5.2
above program compiled and ran with
mpicc -DLEAK -O3 leak.c -std=c99 && mpirun -np 1 ./a.out
on a single AMD Phenom(tm) II X6 1075T processor. Same thing happens
when compiling with mpic++.
I can't use memchecker because then mpirun segfaults and even
ompi_info | grep memchecker
segfaults after printing MCA memchecker: valgrind (...
Thanks.
Ilja