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