在我的本地群集上,我可以使用此脚本将我的OpenMP代码并行化为36个内核
#$ -S /bin/bash
#$ -N name_of_project
#$ -o output.out
#$ -pe orte 36
#$ -V
#$ -cwd
export OMP_NUM_THREADS=36
./my_programme
我可以在36个核心上运行OpenMP c ++代码,包含4个节点......
但是,在作为XSEDE一部分的超级计算机上:
https://portal.xsede.org/tacc-stampede
我被告知我只能通过16个核心在1个节点上运行OpenMP。我有点困惑,所以如果我想用超过17个线程并行化我的程序,我必须将我的程序重新编码为MPI程序?
我想问一下将OpenMP程序转换为MPI程序有多难?谢谢。
答案 0 :(得分:2)
如果我希望有效地将我的程序并行化超过17个 线程,我必须将我的程序重新编码为MPI程序吗?
是的,您需要编写一些MPI代码才能利用您可以使用的节点。 OpenMP以共享内存架构为目标,您需要一个消息传递库才能在节点之间进行通信。
并行化分布式体系结构是不同的(您不能像在OpenMP中那样进行for循环并行化),因为每个节点都有自己的共享内存,并且一个节点无法知道其他节点的状态以便同步工作。你必须自己做。
我想问一下转换OpenMP程序有多困难 进入MPI计划?
根据您的应用程序和编写代码的方式,MPI并行化可以非常简单。你应该详细说明你的算法,以便判断。重要的是:
我希望你进入第一类!
最后,乐趣从这里开始,为了获得良好的加速,您将需要找到妥协并玩游戏,因为您将拥有混合的OpenMP / MPI并行化。