0

MPI_ALLGATHERV を使用して、他のすべてのプロセスに 3D 配列を渡そうとしています。v1 は一般的なブロック配列です。

parameter (nprocz=48,nzro=1)
do 1 i=i101,i102
  do 2 j = je0, je1-1
  do 2  k = ke0, ke1
    v1(k,j,i) = v1(k,j,i)*0.015*float(i-iv0)
2    continue
1   continue      
nmpi01=floor((iv0-ie0-nzro)/(nprocz-1))
if (mpirank .le. nprocz-2) then
   i101=ie0+(mpirank*nmpi01)
   i102=ie0+(mpirank+1)*nmpi01-1
else
   i101=ie0+(mpirank*nmpi01)
   i102=iv0-1
endif
scount=(i102-i101+1)*(je1-je0)*(ke1-ke0+1)
rcount(mpirank+1)=scount
displs(mpirank+1)=mpirank*scount+1 call
MPI_ALLGATHERV(v1(1,1,i101),scount,MPI_REAL,v1(1,1,1)  ,rcount,displs,MPI_REAL,MPI_COMM_WORLD,ierr004)

しかし、私は自分のプロセスと同じ数のこのエラーを受け取りました:

Fatal error in PMPI_Allgatherv: Internal MPI error!, error stack:
...
MPIR_Localcopy(378).......: memcpy arguments alias each other, dst=0x7ccddb44  
src=0x7ccddb40 len=3642752

次に、MPI_IN_PLACEを次のように試しました:

 MPI_ALLGATHERV(MPI_IN_PlACE,scount,MPI_REAL,v1(1,1,1),   
 rcount,displs,MPI_REAL,MPI_COMM_WORLD,ierr004) 

しかし、メモリは、プログラムがクラッシュするまで徐々に使用されてきました。

4

1 に答える 1