假设我有 2 个进程,每个进程都有两个线程(1 个 IO 线程,1 个计算线程)
我有兴趣使用一些 IO 库(adios)。
我在问我,如果我编写这样的代码会发生什么?:
假设 2 个进程中的 IO 线程执行一些 IO,并且它们
MPI_Barrier(MPI_COMM_WORLD)
在某个点B使用 来同步 IO!两个进程中的计算线程也在
MPI_Barrier(MPI_COMM_WORLD)
某个点使用A来同步计算(当 IO 线程工作时)。
---> 我不知道会发生什么,是否可能出现以下情况:
- 进程1,IO线程在B处等待
- 进程 2,计算线程在A处等待
=> 并且进程 1 和 2 同步(因此进程 1 在B处留下屏障,在A处留下进程 2 (进程 2 的同步点也不相同!)
如果可能发生这种情况,这难道不是程序员不希望出现的不良行为。(可以通过使用具有相同数量的进程(MPI_Comm_dup(...)
)的两个不同的通信器来避免这种情况吗?
或者障碍真的取决于代码行吗?但是,如果是这样的话,这是如何实现的呢?
这令人困惑!
非常感谢!