OpenMP / MPI
OpenMP 和 MPI 是过去在 CPU 作集群超算的主力时所需要了解的计算框架。两者字面上看非常相近,但是
- OpenMP 指 Multi-processing, 是在共享内存的多线程架构上的语言模型。
- MPI 是 Message Passing Interface, 是在分布式计算架构上作为调度消息传递的工具,在 Unix 系统上的实现是 OpenMPI。要是概括起来,MPI 控制了一些让人很容易想象出来的并行所需要的行为, 比如 broadcast/send/receive/reduce 等等这些操作。
两者相结合构成了上个世纪各类超算上 Fortran/C/C++ 语言的并行逻辑,随着 GPU 越来越多地承担了浮点计算的任务,CPU 端的数学计算也由 Python 的 numpy/scipy/dask 逐渐承担,OpenMP/MPI 渐渐不为新一代的技术人员所熟悉,这两者下沉到了这些数值计算库的底层。不过,对 OpenMP/MPI 深入了解也有助于对老代码的理解。
我在学习的过程中,也在这里记载一些相关的资料以供参考。
- MPI: MPI Tutorial | Tutorial from Lawrence Livermore | Parallel Programming with MPI For Python
- OpenMP: OpenMP in a nutshell | Tutorial from Lawrence Livermore | Introduction to OpenMP - Tim Mattson (Intel Video)
劳伦斯实验室的并行计算资料挺多的,参见 Lawrence Livermore National Laboratory Tutorials on HPC