在 Windows 上实现 MPI 的技术解析与性能评估
1. 异步通信机制
在 MPI 实现中,异步通信机制是提升性能的关键因素之一。不同操作系统有不同的异步机制,例如 Windows 上的完成端口,Linux 上的 epoll 以及 BSD 上的 kqueue。不过,这些机制在不同的 Unix 变体中可移植性不佳。在 Nemesis 中,针对 Windows 使用异步节点间通信模块,而 Unix 系统则采用非阻塞节点间通信模块。
广义请求是 MPI 中能利用异步服务的一个特性,它允许用户定义自己的非阻塞操作,这些操作由 MPI 请求对象表示。在 Unix 上,用户可能需要使用外部线程来推动广义请求的进展;而在 Windows 上,用户可以为异步操作系统调用注册回调函数,这样用户库就能使用广义请求,而无需外部线程来推动操作进展。
2. 进程管理
进程管理在 MPI 中主要涉及两个方面:启动 MPI 进程和为进程设置合适的运行时环境,以便它们能够相互连接。
- 启动 MPI 作业 :在没有外部作业启动器的 Unix 系统中,MPI 进程管理器通常使用 fork 在本地启动进程,并使用 SSH 等网络协议在远程启动进程。这些网络协议依赖每个节点上存在的独立守护进程与远程协议代理进行交互。由于 Windows 原生不提供类似 SSH 的网络协议机制,因此需要一个分布式进程管理框架,在每个 Windows 节点上都有独立的管理器守护进程。在 MPICH2 中,实现了一个名为 SMPD 的进程管理器,它能为 Windows 和 Unix 系统上的 MPI 作业提供进程管理功能。在 Windows 上,独立的 SMPD