提问人:Oleg 提问时间:9/25/2023 最后编辑:Oleg 更新时间:9/26/2023 访问量:59
为什么我的 MPI 程序不等待输入?
Why my MPI program doesn't wait for input?
问:
我通过 MPI 为以下简单任务编写了一个解决方案代码。这是声明:
- 在偶数秩的进程(包括主进程)中,输入一个整数 数。
- 在奇数秩的进程中输入一个整数,在 奇数排名:输入一个实数。
- 在每个进程中,输出双精度 输入的数字的值。
我已经通过(MPI 设置的 VS 2022)编译了我的程序并通过 cmd 命令运行,它给了我以下输出:mpiexec -n 4 MPI_3
Enter an integer number:
Enter a float number:
Enter an integer number:
Enter a float number:
我的程序不等待输入并继续执行 4 次。我已经尝试用 s 和 s 替换 s 和 s,但这无济于事。cout
cin
printf
scanf
我对 MPI 和 C++ 几乎不熟悉,所以我非常需要您的帮助来修复我的代码。
P.S. 有时当我尝试通过命令行运行我的代码时,它根本没有给我任何输出。只有一个闪烁的光标,等待输入而没有任何响应。
答:
1赞
Daniel Langr
9/25/2023
#1
通过多个 MPI 进程读取标准输入流没有多大意义。例如,OpenMPI 说:
OpenMPI 将 UNIX 标准输入定向到除秩 0 进程之外的所有进程。秩 0 进程继承自 的标准输入。
/dev/null
MPI_COMM_WORLD
MPI_COMM_WORLD
mpirun
因此,使用 OpenMPI,您的非 root 进程正在尝试从 中读取数字,这不起作用。/dev/null
我在 MPI Stadnard 中找不到有关此问题的任何信息;但是,它似乎没有定义程序在从标准输入读取时应如何表现。
以下是 MPI-Forum 上的一些相关讨论:用于 stdout/stderr/stdin 的 MPI I/O 接口。
根据我的经验,stdin 通常像在 OpenMPI 中一样工作,即在根进程上。因此,您能做的最好的事情就是仅通过根进程使用 stdin,然后将数据发送到其他进程。
评论