- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是 MPI_Bcast()
阻塞还是非阻塞?换句话说,当根发送数据时,是否所有处理器都阻塞,直到每个处理器都收到该数据?如果没有,如何同步(阻止)所有这些,以便在所有接收到相同数据之前没有人继续。
最佳答案
您需要对此处的术语保持谨慎,因为 MPI 所指的“阻塞”可能与您在其他上下文中所看到的不同。
在 MPI 术语中,Bcast 是阻塞的。阻塞意味着,当函数返回时,它已经完成了它要执行的操作。在这种情况下,这意味着从 Bcast 返回时,可以保证每个进程中的接收缓冲区包含您要广播的数据。非阻塞版本是 Ibcast。
在 MPI 术语中,您要问的是操作是否同步,即暗示进程之间的同步。对于像发送这样的点对点操作,这指的是发送方在从发送调用返回之前是否等待接收被发布。对于集体行动,问题是是否存在障碍(如@Vladimir 所指出的)。 Bcast 并不一定意味着障碍。
但是,我发布的原因是,在几乎所有使用标准 Send/Recv 调用(而不是单侧 Put/Get)编写的 MPI 程序中,您并不关心屏障后是否存在同步。每个进程关心的是它是否收到了它需要的数据——为什么其他进程在做什么很重要?如果您随后想与任何其他进程通信,那么 MPI 例程的设计目的是使所需的同步自动发生。如果你发出一个接收,而另一个进程很慢,你就等待;如果您发出发送而另一个进程没有发出接收,一切仍将正常工作(假设您不调用 Rsend - 您永远不应该调用 Rsend!)。同步与否对性能有影响,但很少影响程序是否正确。
除非进程通过某种其他机制进行交互(例如,所有进程都访问同一个文件),否则很难想出一个真实的例子,你关心 Bcast 是否同步。当然,您总是可以构建一些边缘情况,但在 MPI 的实际实际应用中,这几乎无关紧要。
许多 MPI 程序充满了障碍,根据我的经验,它们几乎从不要求正确;唯一常见的用例是确保有意义的性能测量时间。
关于parallel-processing - MPI_Bcast() 是否阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39550649/
所以我有一些代码,我使用 MPI_Bcast 将信息从根节点发送到所有节点,但我想让我的 P0 将数组块发送到各个进程。 如何使用 MPI_Send 和 MPI_Receive 执行此操作? 我以前从
我正在尝试在二维数组中广播我的第一行。这是代码: double *chunkPtr = malloc(sizeof(double) * columns); if (rank == 0) { c
我正在尝试 MPI,当我在命令行上通过 mpirun 运行它时,我不断收到此错误。 ----------------------------------------------------------
我按照 Jonathan 的代码从这里 ( MPI_Bcast a dynamic 2d array ) 到 MPI_Bcast 动态分配的二维结构数组。结构如下: typedef struct {
我试图让每个进程都以这种方式广播到所有其余进程 #include "mpi.h" #include int main(argc,argv) int argc; char **argv; { in
我收到 MPI_Bcast 错误(我认为这是一个旧错误)我不确定为什么会这样。错误如下: An error occurred in MPI_Bcast on communicator MPI_C
我在使用 MPI_Bcast 时遇到问题。一个处理器初始化类,然后必须将其发送给其他处理器。这是我的课: class A{ private: unsigned rows, cols; std::vec
我正在使用 MPI 并行乘以两个矩阵(二维数组),方法是将行平均划分并将它们分散在子进程中。主人也处理一大块行。我了解如何执行此操作并使用 MPI_Send/MPI_Recv 成功完成,但现在我正在尝
我试图在一台计算机上输入一个数字,然后使用 MPI 将其广播到所有其他计算机。 #include #include #include "mpi.h" int main (int argc, cha
这个问题在这里已经有了答案: Using MPI_Bcast for MPI communication (2 个答案) 关闭 7 年前。 我使用 MPI_Bcast 函数编写了简单的 MPI 程序
我有以下问题,我正在尝试发送 2 种类型的数据,1 种 int 和 2 种字符,这是我程序的一部分 #define Send(send_data, count, type, dest, tag) MP
我是 Open MPI 的新手,我正在尝试使用它来运行一个使用字典攻击的强力密码破解器(我实际上并不是在破解密码,这只是一个练习)。我使用的字典是 vector其中单词由空终止符分隔。 使用 MPI_
我正在尝试将带有 bcast 的动态二维数组传递给所有级别。我有以下代码。 #include #include int main(int argc, char **argv) { fl
我正在广播一个指向数组的指针 MPI_Bcast(&xd_sim_send, Nooflines_Sim, MPI_FLOAT, root, MPI_COMM_WORLD); 来自进程 0 并从 0
为什么这段mpi代码没有发生死锁? int main(int argc, char *argv[]) { int rank,size; MPI_Init(&argc,
调用 MPI_BCAST 时,是否有隐含的同步?例如,如果发送方进程要在其他人之前到达 MPI_BCAST,它是否可以执行 BCAST,然后在没有任何确认的情况下继续?最近的一些测试代码如下: pro
MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm) 此函数不需要等级参数。它如
我知道这段代码是正确的 #include #include "mpi.h" int main(int argc, char * argv[]){ int my_rank, p, n;
是 MPI_Bcast()阻塞还是非阻塞?换句话说,当根发送数据时,是否所有处理器都阻塞,直到每个处理器都收到该数据?如果没有,如何同步(阻止)所有这些,以便在所有接收到相同数据之前没有人继续。 最佳
我正在尝试 MPI_Bcast 将消息广播到多个节点,但遇到段错误,有时错误:139 或错误:255。以下是我的代码: char proposal[20]; char rep; int size, r
我是一名优秀的程序员,十分优秀!