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

Reply via email to