gpt4 book ai didi

c++ - MPI - 异步广播/收集

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:30 24 4
gpt4 key购买 nike

我有一个项目需要“n”个进程才能解决问题。每个从属进程执行相同的代码。当某个条件出现时,该进程需要以非阻塞方式通知所有其他进程。其他进程也需要以非阻塞的方式接收这个消息。

有没有一种方法可以不用线程化一个单独的循环?

最佳答案

我已经有一段时间没有使用 MPI 了。但是 I 函数是非阻塞的。也许是这样的:

int comm_size = comm.Get_size();
int comm_rank = comm.Get_rank();

int* data = new int[comm_size];

while (some_condition)
{
//During each iteration, check for messages from other nodes
for (int node = 0; node < comm_size; node++)
{
if (node != comm_rank)
{
if (comm.Iprobe(node, TAG_NUM))
{
comm.Irecv(data[node], 1, MPI_INT, node, TAG_NUM);
}
}
}

if (some_other_condition)
{
//Send the message to every node
for (int node = 0; node < comm_size; node++)
{
if (node != comm_rank)
{
comm.Isend(data[node], 1, MPI_INT, node, TAG_NUM);
}
}
}

//do normal work here.
}

delete [] data;

关于c++ - MPI - 异步广播/收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12810391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com