首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在消息传递中,mpi_send和recv“等待什么”

在消息传递中,mpi_send和recv“等待什么”
EN

Stack Overflow用户
提问于 2010-11-01 15:13:46
回答 2查看 2K关注 0票数 1

将配置考虑为

First:

非缓冲的、阻塞的(同步)

据我所知,MPI是一个API,所以当我们执行mpi_send阻塞函数调用时,发送方函数/程序会被阻塞吗?

MPI函数mpi_send是否被阻塞,以便程序能够继续工作直到消息被发送?

第二版:

类似的混淆,是mpi_recv被阻塞了,还是调用它的函数被阻塞了?

提出这样一个愚蠢问题的原因:

这是并行处理,所以为什么有些人会制造一些东西来阻止一个进程谁想要一些信息?

的另一个原因:

当进程调用mpi_send时,任何其他进程都不能使用mpi_send函数,因为它是工作的?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-01 23:54:34

首先:是的,调用程序被“阻塞”,因为MPI_Send调用在消息“发送”之前不会返回。

第二: MPI_Recv也是一个“阻塞”呼叫,在消息被“接收”之前不会返回。

一些补充资料:

MPI_Send是一个“阻塞”调用,因为在消息发送之前,调用不会将控制权返回给调用方。“已发送”的定义是保存消息的用户缓冲区可以安全地重用。不能保证消息已经收到,甚至不能保证远程级别已经到达了MPI_Recv调用。(确切的行为取决于实现。RDMA样式的互连会导致“黑匣子内”行为的最大问题。)

MPI_Isend是一个“非阻塞”调用。控件将返回到调用程序“立即”...but--在程序调用MPI_Test或MPI_Wait以确认消息已“发送”之前,无法重用缓冲区。

“阻塞”调用的目的是向调用程序提供一个积极的确认,即保存消息的缓冲区可以重用(在MPI_Send情况下)或可靠地读取和更改(在MPI_Recv情况下)。如果使用“非阻塞”(例如MPI_Isend、MPI_Irecv)调用,则调用程序可以继续执行计算,但在调用MPI_Wait或MPI_Test以完成消息事务之前,无法可靠地(或合法地)更改消息缓冲区。

票数 9
EN

Stack Overflow用户

发布于 2010-11-04 11:35:07

对最后一个问题的回答是否定的:当其他进程正在执行时,一些进程可能会被阻塞,等待发送或接收完成。阻塞调用仅在调用它们的进程上阻塞。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4070173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档