[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