Hi,
I've been enhancing my code and have started using the nice routine alltoallw. The code works fine except that there seems to be a memory leak in alltoallw. I've eliminated all other possible causes and have reduced the code down to a bare minimum. I've included fortran source code which produces the problem. This code just keeps calling alltoallw, but with all of the send and receive counts set to zero, so it shouldn't be doing anything. And yet I can watch the memory continue to grow. As a sanity check, I change the code to call alltoallv instead, and there is no memory leak. If it helps, I am using OpenMPI on an AMD system running Chaos linux. I tried the latest nightly build of version 1.3 from Aug 5. I run four processors on one quad core node so it should be using shared memory communication.
  Thanks!
     Dave

     program testalltoallw
     real(kind=8):: phi(-3:3200+3)
     real(kind=8):: phi2(-3:3200+3)
     integer(4):: izproc,ii
     integer(4):: nzprocs
     integer(4):: zrecvtypes(0:3),zsendtypes(0:3)
     integer(4):: zsendcounts(0:3),zrecvcounts(0:3)
     integer(4):: zdispls(0:3)
     integer(4):: mpierror
     include "mpif.h"
     phi = 0.

     call MPI_INIT(mpierror)
     call MPI_COMM_SIZE(MPI_COMM_WORLD,nzprocs,mpierror)
     call MPI_COMM_RANK(MPI_COMM_WORLD,izproc,mpierror)

     zsendcounts=0
     zrecvcounts=0
     zdispls=0
     zdispls=0
     zsendtypes=MPI_DOUBLE_PRECISION
     zrecvtypes=MPI_DOUBLE_PRECISION

     do ii=1,1000000000
       if (mod(ii,1000000_4) == 0) print*,"loop ",ii,izproc

       call MPI_ALLTOALLW(phi,zsendcounts,zdispls,zsendtypes,
    &                     phi2,zrecvcounts,zdispls,zrecvtypes,
    &                     MPI_COMM_WORLD,mpierror)

     enddo
     return
     end

Reply via email to