【发布时间】:2018-04-25 04:06:33
【问题描述】:
我目前开始为科学应用开发并行代码。我必须从 p0 到 p1 以及从 p1 到 p0 交换一些缓冲区(我正在处理器边界之间创建幽灵点)。
这个示例代码可以总结错误:
program test
use mpi
implicit none
integer id, ids, idr, ierr, tag, istat(MPI_STATUS_SIZE)
real sbuf, rbuf
call mpi_init(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD,id,ierr)
if(id.eq.0) then
ids=0
idr=1
sbuf=1.5
tag=id
else
ids=1
idr=0
sbuf=3.5
tag=id
endif
call mpi_send(sbuf,1,MPI_REAL,ids,tag,MPI_COMM_WORLD,ierr)
call mpi_recv(rbuf,1,MPI_REAL,idr,tag,MPI_COMM_WORLD,istat,ierr)
call mpi_finalize(ierr)
return
end
这有什么问题?
【问题讨论】:
-
欢迎来到 SO。你的问题不是很清楚。请仔细阅读How to Ask 并在您的问题中添加minimal reproducible example。
-
你好祖蓝,抱歉我的问题不太清楚,我会尽量简化一下。我有 2 个进程(rank=0 和 rank=1)。我需要交换一个从 0 到 1 的向量,同时还要交换一个从 1 到 0 的向量。我该如何进行这种通信?
-
欢迎。你的代码太不完整了。我们需要看看我们可以编译和测试的东西。包括所有的变量声明等等。
-
我建议你在这里阅读:stackoverflow.com/questions/10017301/…。您必须了解阻塞和非阻塞操作之间的区别。