首页 > 解决方案 > 如何在 MPI 中处理信号

问题描述

我目前正在实现一个将在无限循环中运行的 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 来更新所有进程中的标志值。

标签: csignalsmpi

解决方案


推荐阅读