我目前正在实现一个将在无限循环中运行的MPI程序,目标是当其中一个进程接收到信号时,所有这些进程将退出无限循环,有一个全局变量标志将指示是否收到信号后,如何使用MPI_Allreduce更新每个进程中的所有标志值?这是我的代码的一部分:
int flag = 0;
void sig_handler(int signo)
{
if (signo == SIGUSR1) {
flag = 1;
}
}
int main(int argc, char **argv)
{
int count, id;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &count);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
signal(SIGUSR1, sig_handler);
while (true)
{
if (flag == 1)
{
break;
}
}
我的困惑是我应该在哪里添加MPI_Allreduce来更新所有进程中的标志值。