gpt4 book ai didi

c - OpenMPI 中的信号处理错误

转载 作者:行者123 更新时间:2023-11-30 14:55:53 25 4
gpt4 key购买 nike

我正在努力了解 OpenMPI 中的信号处理。我读到“Open MPI 会将 SIGUSR1 和 SIGUSR2 从 mpiexec 转发到其他进程”。我的问题是默认安装时启用此功能。

场景是一个 MPI 进程发出 SIGUSR1,该信号必须由“orted”检测到,然后转发给其他进程。

在我的测试代码中,我为 SIGUSR1 定义了一个自定义信号处理程序,并相应地注册了该信号处理程序。我使用kill() 或raise() 发送信号。我假设 ORTE 守护进程将收到此信号,并且必须将此信号转发给其余进程。

//测试.c

void handle_signal(int signal){
if(SIGNAL==SIGUSR1)
printf("received SIGUSR1 signal \n");
}
int main(){
MPI_Init(NULL, NULL);

int my_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

signal(SIGUSR1, handle_signal);

if(my_rank == 1) // process with rank 1 raises SIGUSR1
kill(getpid(), SIGUSR1);

MPI_Finalize();
return 0;
}

如果我将其运行为mpirun -np 3 ./测试

我希望从其他两个进程中打印两次该语句。但是,当我运行此代码时,它只打印一次,而且也是从 ORTE HNP 打印一次,与应用程序进程不同。我是否需要在 orted 上调用任何其他 API 显式传递此信号,以便应用程序进程接收 SIGUSR1。

-马克

最佳答案

您不能按照您描述的方式使用信号转发:

Open MPI will forward SIGUSR1 and SIGUSR2 from mpiexec to the other processes

您不能只向自己发送信号,您必须找到 mpiexec 进程。该进程可以在不同的节点上运行,因此无论如何您都无法轻松地向它发送信号。

我想不出一种合理的方法来真正中断其他 MPI 等级,除了 MPI_Abort,这可能不是您想要的。根据您的实际目标,您可能必须选择异步点对点通信、单方通信或线程。

关于c - OpenMPI 中的信号处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45309891/

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