为什么我的 MPI 程序不等待输入?

Why my MPI program doesn't wait for input?

提问人:Oleg 提问时间:9/25/2023 最后编辑:Oleg 更新时间:9/26/2023 访问量:59

问:

我通过 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,但这无济于事。coutcinprintfscanf

我对 MPI 和 C++ 几乎不熟悉,所以我非常需要您的帮助来修复我的代码。

P.S. 有时当我尝试通过命令行运行我的代码时,它根本没有给我任何输出。只有一个闪烁的光标,等待输入而没有任何响应。

C++ MPI cin cout

评论

2赞 Gilles Gouaillardet 9/25/2023
假设您只有一个键盘。MPI 应该如何知道应该将哪个击键发送到哪个级别?

答:

1赞 Daniel Langr 9/25/2023 #1

通过多个 MPI 进程读取标准输入流没有多大意义。例如,OpenMPI 说

OpenMPI 将 UNIX 标准输入定向到除秩 0 进程之外的所有进程。秩 0 进程继承自 的标准输入。/dev/nullMPI_COMM_WORLDMPI_COMM_WORLDmpirun

因此,使用 OpenMPI,您的非 root 进程正在尝试从 中读取数字,这不起作用。/dev/null

我在 MPI Stadnard 中找不到有关此问题的任何信息;但是,它似乎没有定义程序在从标准输入读取时应如何表现。

以下是 MPI-Forum 上的一些相关讨论:用于 stdout/stderr/stdin 的 MPI I/O 接口

根据我的经验,stdin 通常像在 OpenMPI 中一样工作,即在根进程上。因此,您能做的最好的事情就是仅通过根进程使用 stdin,然后将数据发送到其他进程。