| ec4fadc2 | 20-May-2013 |
Jed Brown <jedbrown@mcs.anl.gov> |
sys comm: remove redundant self-call to MPI_Attr_get in DelComm_Outer
MS-MPI (2008 and 2012) invalidates the communicator before calling the attribute destructor. This is considered a bug as eviden
sys comm: remove redundant self-call to MPI_Attr_get in DelComm_Outer
MS-MPI (2008 and 2012) invalidates the communicator before calling the attribute destructor. This is considered a bug as evidenced by test attrdeleteget added to MPICH in:
commit c532aacc14f77a04ffca0c212731700a5d3d9a01 Author: Jed Brown <jedbrown@mcs.anl.gov> Date: Sat May 18 12:55:38 2013 -0500
test: add attrdeleteget, MPI_Attr_get called from delete_fn
With MS-MPI 64-bit from HPC Pack 2008 and 2012, MPI_Attr_get returns error code 773 when called from delete_fn on a communicator obtained from MPI_Comm_split.
The standard is not explicit that the 'comm' argument of delete_fn must be valid, so this test is only in effect when !USE_STRICT_MPI.
Signed-off-by: Jed Brown <jedbrown@mcs.anl.gov> Signed-off-by: Satish Balay <balay@mcs.anl.gov>
However, in PETSc, the attribute value is already passed as an argument, so we need not call MPI_Attr_get to obtain it.
Note that although we still call MPI_Attr_delete and MPI_Attr_get on the inner comm, that communicator has not been invalidated yet.
show more ...
|
| da3039f7 | 20-May-2013 |
Jed Brown <jedbrown@mcs.anl.gov> |
sys comm: separate destructors for inner and outer comms
This simplifies control flow relative to the old version where the same destructor was used for both inner and outer comm. The outer comm de
sys comm: separate destructors for inner and outer comms
This simplifies control flow relative to the old version where the same destructor was used for both inner and outer comm. The outer comm destructor still redundantly calls MPI_Attr_get, but demonstrates that this call is unnecessary. The redundancy will be removed in the sequel.
show more ...
|
| 265f3f35 | 20-May-2013 |
Jed Brown <jedbrown@mcs.anl.gov> |
sys comm: use union instead of void* and memcpy for MPI_Comm as an attribute
We pack an MPI_Comm into the attribute pointer so that there is no PETSc memory allocation needed to hold the reference.
sys comm: use union instead of void* and memcpy for MPI_Comm as an attribute
We pack an MPI_Comm into the attribute pointer so that there is no PETSc memory allocation needed to hold the reference. The degree of the pointer can be confusing when using a loose void* pointer and memcpy, so use a union instead.
show more ...
|