Another issue while testing 1.8.2 (./configure --enable-debug
--enable-mem-debug).
Please look at the following code. I'm duplicating COMM_WORLD and
composing the dupe on it. The attribute free function is written to
Comm_free the duped comm and deallocate memory. However, the run fails
with the error you can see at the end.
IMHO, this is a bug. This way of managing duplicated communicator
contexts is quite common in parallel libraries. Moreover, In the MPI 3
standard, page 364, lines 11 and 12, it says:
"""
For example, MPI is “active” in callback functions that are invoked
during MPI_FINALIZE.
"""
Interestingly, if I replace WORLD -> SELF in the code below, I do not
get the error.
$ cat finalize.c
#include <stdlib.h>
#include <mpi.h>
static int free_comm(MPI_Comm comm, int k, void *v, void *xs)
{
MPI_Comm_free((MPI_Comm *)v);
free(v);
return MPI_SUCCESS;
}
int main(int argc, char *argv[])
{
int keyval;
MPI_Comm base,*comm;
MPI_Init(&argc, &argv);
MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN, free_comm, &keyval, NULL);
base = MPI_COMM_WORLD;
comm = (MPI_Comm *)malloc(sizeof(MPI_Comm));
MPI_Comm_dup(base, comm);
MPI_Comm_set_attr(base, keyval, comm);
MPI_Finalize();
return 0;
}
$ mpicc finalize.c
$ ./a.out
*** The MPI_Comm_free() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.
[kw2060:14603] Local abort after MPI_FINALIZE completed successfully;
not able to aggregate error messages, and not able to guarantee that
all other processes were killed!
--
Lisandro Dalcin
============
Research Scientist
Computer, Electrical and Mathematical Sciences & Engineering (CEMSE)
Numerical Porous Media Center (NumPor)
King Abdullah University of Science and Technology (KAUST)
http://numpor.kaust.edu.sa/
4700 King Abdullah University of Science and Technology
al-Khawarizmi Bldg (Bldg 1), Office # 4332
Thuwal 23955-6900, Kingdom of Saudi Arabia
http://www.kaust.edu.sa
Office Phone: +966 12 808-0459