在超级计算机上使用OpenMP

OpenMP on super computer

本文关键字:OpenMP 超级计算机      更新时间:2023-10-16

在我的本地集群上,我可以使用以下脚本在36个内核上并行化OpenMP代码

#$ -S /bin/bash
#$ -N name_of_project
#$ -o output.out
#$ -pe orte 36
#$ -V
#$ -cwd
export OMP_NUM_THREADS=36
./my_programme

我可以在36个核心和4个节点上运行openmpc++代码…

但是,在作为XSEDE一部分的超级计算设施上:

https://portal.xsede.org/tacc-stampede

我被告知我只能在一个16核的节点上运行OpenMP。我有点困惑,所以如果我想并行化我的程序有效地超过17个线程,我必须重新编码我的程序成MPI程序?

我想问一下把OpenMP程序转换成MPI程序有多难?谢谢你。

如果我想并行化我的程序,有效地多于17线程,我必须重新编码我的程序成一个MPI程序?

是的,您需要编写一些MPI代码,以便利用您可以支配的节点。OpenMP的目标是共享内存架构,您需要一个消息传递库,以便在节点之间进行通信。

并行化分布式体系结构是不同的(您不能像OpenMP中那样进行for循环并行化),因为每个节点都有自己的共享内存,并且一个节点无法知道其他节点的状态以同步工作。你必须自己去做。

我想问一下转换OpenMP程序有多难加入MPI课程?

MPI并行化可以非常直接,这取决于你的应用程序和你编写代码的方式。你应该详细说明你的算法,以便做出判断。大行是:

    静态工作负载的尴尬并行问题:每个MPI节点都有相同的工作量,做相同的工作,与其他节点没有或很少交互。如果您的应用程序进入此类别,那么并行化很简单,可以使用集体MPI例程完成。尽管如此,您仍需要编写并理解MPI的工作原理。
  • 更复杂的并行问题/动态工作负载:你的问题需要同步,节点之间的一些通信和/或工作量是未知的,你需要一个负载平衡策略。这就是HPC家伙的谋生之道:)

我希望你能进入第一类!

最后,乐趣从这里开始,为了有一个好的加速,你需要找到妥协和玩东西,因为你将有一个混合的OpenMP/MPI并行化。