I wonder if this is related to the problem reported in [OMPI users] Bug in MPI_scatterv Fortran-90 implementation
On Thu, Apr 21, 2011 at 7:19 PM, Zhangping Wei <zhangping_...@yahoo.com>wrote: > Dear all, > > I am a beginner of MPI, right now I try to use MPI_GATHERV in my code, the > test code just gather the value of array A to store them in array B, but I > found an error listed as follows, > > 'Fatal error in MPI_Gatherv: Invalid count, error stack: > > PMPI_Gatherv<398>: MPI_Gatherv failed <sbuf=004d96c0, scount=64,MPI_REAL, > rbuf=0049AC0, rcnts=003DCB8, displs=003D4C68, MPI_REAL, root=0, > MPI_COMM_WORLD> failed > > PMPI_Gatherv<317>: Negative count, value is -842150451’ > > Here I post my program with the email, I wonder anyone can help me to fix > it or not? I guess my error is from the sending or receiving buffer and the > displacement of the value stored, I tried to changed ‘B,jlen,idisp’ to ’ > B(1,1), jlen(myid),idisp(myid)’ or other things, but I still cannot work it > out. > > I am looking forward some help from you. > > Zhangping Wei > > > > my code is, > > PROGRAM MAIN > > IMPLICIT NONE > > INCLUDE 'mpif.h' > > INTEGER I,J,IWORK,JWORK,I1,I2,J1,J2 > > REAL A(16,16),B(16,16) > > INTEGER,ALLOCATABLE ::idisp(:),jlen(:) > > integer myid,numprocs,rc,ierr,istar,iend,jstar,jend > > integer status(MPI_STATUS_SIZE) > > CALL MPI_INIT(ierr) > > CALL MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr) > > CALL MPI_COMM_SIZE(MPI_COMM_WORLD,numprocs,ierr) > > ! PRINT *,'process ',myid, 'of',numprocs, 'is alive.' > > allocate(idisp(0:numprocs-1),jlen(0:numprocs-1)) > > DO J=1,16 > > DO I=1,16 > > A(I,J)=I+J > > B(I,J)=0.0 > > ENDDO > > ENDDO > > I1=1;I2=16;J1=1;J2=16 > > JWORK=(J2-J1)/numprocs+1 > > JSTAR=MIN(myid*JWORK+J1,J2+1) > > JEND=MIN(JSTAR+JWORK-1,J2) > > ISTAR=I1 > > IEND=I2 > > PRINT *,myid,istar,iend,jstar,jend > > jlen(myid)=16*(jend-jstar+1) > > idisp(myid)=16*(jstar-1) > > print *,myid,jlen(myid),idisp(myid) > > CALL MPI_GATHERV(A(1,jstar),jlen(myid),MPI_REAL, > > *B,jlen,idisp,MPI_REAL,0,MPI_COMM_WORLD,IERR) > > IF(myid.EQ.0)THEN > > DO J=1,16 > > DO I=1,16 > > PRINT *,I,J,B(I,J) > > ENDDO > > ENDDO > > ENDIF > > CALL MPI_Finalize(rc) > > END PROGRAM > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > -- David Zhang University of California, San Diego