在超级计算机上使用OpenMP
OpenMP on super computer
在我的本地集群上,我可以使用以下脚本在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并行化。
相关文章:
- OpenMP阵列性能较差
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 超级强大的AndroidAudioIO环回,仅输出到左耳
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 查找最近配对时的OpenMP竞赛条件
- 使用输入打破 OpenMP 中的循环
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 指针是如何在具有大量内存的超级计算机中实现的?
- OpenMP vs OpenCL 用于计算机视觉
- 在超级计算机上使用OpenMP