实现 IBM Blue Gene/P 系统上的并发多线程 MPI 通信优化
1. 背景知识
在多线程 MPI 通信中,实现线程安全并保证高性能是一项具有挑战性的任务。MPI 标准定义了四个级别的线程安全,其中 MPI_THREAD_MULTIPLE 级别允许多个线程同时进行 MPI 调用。在这个级别下,多个线程可能会同时访问和修改 MPI 实现中的内部结构,因此需要在 MPI 库中进行序列化操作以避免竞态条件。
1.1 MPI 多线程语义
- 线程安全级别 :MPI 标准定义了四个线程安全级别,分别是 single、funneled、serialized 和 multiple。本文主要讨论最通用的 MPI_THREAD_MULTIPLE 级别,在该级别中多个线程可以同时进行 MPI 调用。
- 并发调用规则 :当多个线程同时进行 MPI 调用时,结果就好像这些调用按某种顺序依次执行一样。阻塞的 MPI 调用只会阻塞调用线程,不会阻止其他线程运行或执行 MPI 函数。
- 资源更新要求 :逻辑上的全局资源,如对象的分配/释放、上下文 ID、通信状态和消息队列等,必须以原子方式进行更新。
- 实现挑战 :在 MPI 实现中高效地实现线程安全是一项具有挑战性的任务。最直接的方法是使用单个全局锁,但这种方法会限制操作的并发性。
1.2 MPICH2 中支持线程安全的框架
MPICH2 通过识别并发线程可能访问
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



