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

Reply via email to