的值在下面的代碼的xysize
值得到改變,如果我不聲明它作爲一個參數(我一般不能做的)。它只會在gfortran 4.7.2和OpenMPI 1.6中優化-O2和更多。這怎麼可能?我無法找到確切的界面,我從mpi.mod
導入,但C原型明確指出count
是按值傳遞的,因此它不能更改。MPI_RECV改變計數
write(*,*) im,"receiving from",image_index([iim,jim,kim+1]),"size",&
size(D%A(D%starti:D%endi,D%startj:D%endj,D%endk)),xysize
call MPI_RECV(D%A(D%starti:D%endi,D%startj:D%endj,D%endk+1),xysize , MPI_REAL, image_index([iim,jim,kim+1])-1,&
5000, comm, status, ierr)
write(*,*) im,"received size",&
size(D%A(D%starti:D%endi,D%startj:D%endj,D%endk)),xysize
輸出:
1 receiving from 2 size 4096 4096
1 received size 4096 5000
我們的好奇心,你從'mpi_get_count得到什麼(狀況,MPI_REAL,N,IERR);打印*,n' - 我真的想知道你是否得到了一個緩衝區溢出導致有趣的行爲... – mgilson
謝謝你的建議!問題顯然是在狀態聲明中,這是一個正常的標量整數。我不知道爲什麼它在'MPI_Recv'中編譯,因爲'MPI_Get_count'的接口檢查發現了這個問題。 –
奇怪。我很高興它抓住了它。 'MPI_Recv'可能有一個聲明爲'integer status(*)'的接口,以便它可以接受標量或數組。這樣一來,'MPI_STATUS_IGNORE'可能是一個標量...好像'MPI_STATUS_SIZE'將是足夠小,它不會有問題,但是,我想,該庫是試圖將內存使用效率或東西...'MPI_Get_count'上另一方面不能接受'MPI_STATUS_IGNORE' ... – mgilson