在下面的代码中xysize,如果我不将它声明为参数(我通常不能这样做),它的值就会改变。它仅在 gfortran 4.7.2 和 OpenMPI 1.6 中的优化 -O2 和更多时发生。这怎么可能?我找不到我从 导入的确切接口,mpi.mod但 C 原型清楚地说明它count是按值传递的,因此它无法更改。
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
Run Code Online (Sandbox Code Playgroud)
输出:
1 receiving from 2 size 4096 4096
1 received size 4096 5000
Run Code Online (Sandbox Code Playgroud)
为了将来的访客,我想我会回答这个问题,即使上面的评论都已经回答了。
据我所知,如果您的程序运行正常,则无法在调用MPI_Recv.
您的参数status太小,它应该是一个数组status(MPI_STATUS_SIZE),并且您会遇到缓冲区溢出 - 这通常会导致分段错误,但有时(取决于编译器如何在内存中打包变量),它可能会导致像这样的滑稽行为。
| 归档时间: |
|
| 查看次数: |
678 次 |
| 最近记录: |