我正在开发一个代码来按照我的标准执行一些非常大的计算。根据单 CPU 估计,预期运行时间约为 10 个 CPU 年,内存需求约为 64 GB。几乎不需要 IO。我有问题的代码的串行版本(用 C 编写)运行良好,我必须开始考虑如何最好地并行化代码。
我可以访问具有 ~64 GB RAM 和每个节点 16 个内核的集群。我可能会限制自己使用例如 <= 8 个节点。我正在想象一个设置,其中内存在单个节点上的线程之间共享,不同节点上使用单独的内存,节点之间的通信相对较少。
从我目前阅读的内容来看,我提出的解决方案是使用混合 OpenMP + OpenMPI 设计,使用 OpenMP 管理各个计算节点上的线程,使用 OpenMPI 在节点之间传递信息,如下所示: https:/ /www.rc.colorado.edu/crcdocs/openmpi-openmp
我的问题是这是否是实现这种并行化的“最佳”方式。我是一位经验丰富的 C 程序员,但在并行编程方面的经验非常有限(有点使用 OpenMP,没有使用 OpenMPI;我过去的大部分工作都是令人尴尬的并行)。作为替代建议,OpenMPI 是否可以在单个主机上有效共享内存?如果是这样,那么我可以避免使用 OpenMP,这会使事情变得更简单(一个 API 而不是两个)。