Hi John, You seem to describe a known bug: https://trac.mpich.org/projects/mpich/ticket/1932 We've addressed it and the fix is waiting for review before going to the master branch. It would be nice if you could validate it once it's in master. May I contact you then to see if that addresses your problem? Antonio On Friday, November 08, 2013 05:43:29 PM John Bray wrote:
I've got some sample code that I'm using to test our debugger DDT. It works on openmpi and intelmpi, but with all the MPICH series from MPICH2 onwards to 3.1rc1, I get an error after MPI_FINALIZE. Our memory debugging library claims its at
SendqFreePool (dbginit.c:386) trying to free previously freed pointer
with a stacktrrace auditmpi pmpi_finalize__ PMPI__finalize MPIR_Call_finalize_callbacks sendqFreePool (dbginit.c)
Run from a raw mpirun command outside DDT
*** glibc detected *** ./auditmpibad_f_debug.exe: double free or corruption (fasttop): 0x1032a5c8 *** *** glibc detected *** ./auditmpibad_f_debug.exe: double free or corruption (fasttop): 0x104da5c8 *** ======= Backtrace: ========= ======= Backtrace: ========= /lib/libc.so.6(+0xfe750e4)[0xf78e50e4] /home/jbray/prog/mpich/mpich-3.1rc1/rhel-6-ppc64_ibm/install/lib/libmpich.so .11(+0x1a8b1c)[0xfec8b1c] /lib/libc.so.6(+0xfe750e4)[0xf76c50e4] /home/jbray/prog/mpich/mpich-3.1rc1/rhel-6-ppc64_ibm/install/lib/libmpich.so .11(+0x1a8b1c)[0xfec8b1c] ... and so on
I've configured with
./configure --prefix=$PWD/install --enable-shared --enable-fast=all --enable-debuginfo
and compile with
mpif90 -o auditmpibad_f_debug.exe auditmpibad.F90 -O0 -g
Its works with the ALLTOALLV only called once.
Is this a bug or a misunderstanding on my part. The code is
program auditmpi
use mpi, only : & MPI_COMM_WORLD, & MPI_REAL, & MPI_STATUS_SIZE, & MPI_BSEND_OVERHEAD, & MPI_SUM, & MPI_UNDEFINED
implicit none
integer, parameter :: repeats=2
integer :: rank, nproc,ierr,rpt real :: input(100000),output(100000) integer :: status (MPI_STATUS_SIZE) integer :: statuses (MPI_STATUS_SIZE,repeats) integer :: request logical :: odd integer, allocatable :: recvcounts(:),sendcounts(:),displs(:)
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, nproc, ierr)
if (rank == 0) print *,"auditmpi start"
if (mod(rank,2) == 0) then odd=.false. else odd=.true. end if
allocate (recvcounts(nproc)) recvcounts(:) = 100000/nproc
allocate (sendcounts(nproc)) sendcounts(:) = 100000/nproc
allocate (displs(nproc)) displs(:)=0 ! don't care if we overlap
if ( .NOT. odd) then call MPI_IRECV(output,size(output),MPI_REAL,rank+1,1,MPI_COMM_WORLD, request, ierr) end if call MPI_BARRIER(MPI_COMM_WORLD,ierr) if (odd) then call MPI_IRSEND(input,size(input),MPI_REAL,rank-1,1,MPI_COMM_WORLD,request,ierr) end if call MPI_WAIT(request,status,ierr)
do rpt=1,2 call MPI_ALLTOALLV(input,sendcounts,displs,MPI_REAL,output,recvcounts,displs,MPI _REAL,MPI_COMM_WORLD,ierr) end do
call MPI_BARRIER(MPI_COMM_WORLD,ierr)
deallocate (recvcounts) deallocate (sendcounts) deallocate (displs)
if (rank == 0) print *,"auditmpi finished"
call MPI_FINALIZE(ierr)
end program auditmpi
John _______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss