[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bgl-discuss] Odd MPI-IO behavior.
Hello,
We are trying to read some data files for the Parallel Ocean Program using
MPI-IO on BG/L and seeing an odd bug. The bug seems to be caused by using
a monotonic decreasing displacement array in the
MPI_type_create_indexed_block call. The code works fine on an IBM SP4
with GPFS but doesn't work on the Argonne and NCAR BG/L's. The bug
manifests as a "hole" in the input data field.
A Fortran code fragment illustrating the calls are below. Some possible
questions:
1. Is a monotonic decreasing array legal in the displacement array for
MPI_type_create_indexed_block?
2. If so, is this possible a bug in BG/L's MPI?
Thanks,
Rob Jacob
John Dennis
!-----------------------------------------------------------------------
--------------
! This displacement generates a bug on NCAR's and Argonne's BGL
! but works on NCAR's IBM Power4.
displace = [48 40 32 24 16 8 0];
! This displacement works on NCAR's and Argonne's BGL
! displace = [0 8 16 24 32 40 48];
lenBLOCKS = 24
baseTYPE = MPI_REAL8
numBLOCKS = SIZE(displace)
!---------------------------------
! Create the elementary structure
!---------------------------------
call MPI_Type_contiguous(lenBLOCKS,baseTYPE,elemTYPE,ierr)
call MPI_Type_commit(elemTYPE,ierr)
!---------------------------
! Create the file structure
!---------------------------
call
MPI_Type_create_indexed_block(numBLOCKS,1,displace,elemTYPE,fileTYPE,ier r)
call MPI_Type_commit(fileTYPE,ierr)
!-----------------------
! Set the file view
!-----------------------
call MPI_File_set_view(File%fh,offset, elemTYPE, fileTYPE,
datarep,File%info,ierr)
allocate(IOBUF(numBLOCKS*lenBLOCKS))
IOBUF = specialVALUE
!-----------------------------
! Read out distributed array
!-----------------------------
call MPI_file_read_all(File%fh,IOBUF,numBLOCKS,elemTYPE,fstatus,ierr)
call MPI_get_count(fstatus,elemTYPE,cnt,ierr)
!------------------------------------------------------
! FAILURE: Occurs when:
! COUNT(specialVALUE) != 0
! and
! numBLOCKS == cnt
!------------------------------------------------------
print *,'COUNT(specialVALUE) :=', COUNT(IOBUF .eq. specialVALUE)
print *,'numBLOCKS, cnt: ',numBLOCKS,cnt
!-----------------------------------------------------------------------
--------------
- --------------------------------------------------------------------
To add or remove yourself from this mailing list, use the 'notifyme'
command on any BGL machine. To remove: notifyme -n, to add: notifyme -y.