【发布时间】:2013-11-08 16:29:29
【问题描述】:
假设我有 2 个进程,每个进程都有两个线程(1 个 IO 线程,1 个计算线程)
我有兴趣使用一些 IO 库 (adios)。
我在问我,如果我编写这样的代码会发生什么?:
让我们说 2 个进程中的 IO 线程做一些 IO 并且他们使用
MPI_Barrier(MPI_COMM_WORLD)在某个点 B 同步 IO!两个进程中的计算线程也在某个时间点A使用
MPI_Barrier(MPI_COMM_WORLD)来同步计算(当 IO 线程工作时)。
--->我不知道究竟会发生什么,是否可能出现以下情况:
- 进程 1,IO 线程在 B 处等待
- 进程 2,计算线程在 A 处等待
=> 并且进程 1 和 2 得到同步(因此进程 1 在 B 和进程 2 在 A 离开屏障(进程 2 也没有相同的点同步!)
如果发生这种情况,这难道不是程序员不希望出现的不良行为吗? (可以通过使用具有相同进程数的两个不同的通信器来避免这种情况 (MPI_Comm_dup(...)) 吗?
或者障碍真的依赖于代码行吗?但是,如果是这样,如何实现呢?
这令人困惑!
非常感谢!
【问题讨论】:
标签: c++ multithreading synchronization mpi