[MPICH] MPI_GET_ADDRESS

Kenneth Rempe Kenneth.Rempe at studsvikscandpower.com
Thu Apr 20 16:52:09 CDT 2006



I running been having problems with MPI_GET_ADDRESS on a  Linux box and 
on a  AIX v 5.2 box. These machines both
have more than 2GB of  memory ( real + swap ). I appears that when an 
array of memory is allocated with an
address above 2GB then MPI_GET_ADDRESS returns a incorrect (negative 
address ) . I believe this is because the
variable use to hold the address is a 4 byte signed integer so the max 
value is 2^^31 or 2GB.  The follow code shows
the problem.  On both my linux box and AIX box it fails with a memory 
addressing error even though the memory
has been allocated successfully. Has anybody seen this problem before 
and is there any fix beside using a 64bit version of mpi?


      program memtest
      use mpi
      implicit none
      integer (kind=MPI_ADDRESS_KIND) address
      real, allocatable :: a1(:)
      real, allocatable :: a2(:)
      real, allocatable :: a3(:)
      real, allocatable :: a4(:)
      real, allocatable :: a5(:)
      real, allocatable :: a6(:)
      real, allocatable :: a7(:)
      real, allocatable :: a8(:)
      real, allocatable :: a9(:)  ! This should be beyond 2GB limit
      integer, parameter :: space=67108864   ! 256 MB
      integer            :: stat
      integer            :: ierror

      call MPI_INIT(ierror)
      allocate(a1(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a1'
      call MPI_GET_ADDRESS(a1,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a1'

      allocate(a2(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a2 '
      call MPI_GET_ADDRESS(a2,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a2'

      allocate(a3(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a3'
      call MPI_GET_ADDRESS(a3,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a3'

      allocate(a4(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a4'
      call MPI_GET_ADDRESS(a4,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a4'

      allocate(a5(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a5'
      call MPI_GET_ADDRESS(a5,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a5'

      allocate(a6(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a6'
      call MPI_GET_ADDRESS(a6,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a6'

      allocate(a7(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a7'
      call MPI_GET_ADDRESS(a7,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a7'

      allocate(a8(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a8'
      call MPI_GET_ADDRESS(a8,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a8'

      allocate(a9(space),stat=stat)
      if(stat .ne. 0 ) stop 'memory allocation error a9'
      call MPI_GET_ADDRESS(a9,address,ierror)
      if( address .lt. 0 ) stop 'memory addressing error a9'

      stop 'Normal Termination'
      end




More information about the mpich-discuss mailing list