在群集上使用OpenMP
Using OpenMP on a cluster
我使用openMP库使代码并行。我需要在学院的HPC(16个节点)上运行代码。当我运行代码时,HPC会将来自不同刀片的节点随机分配给我的程序。我不知道节点是否有共享内存,但代码执行正常。我的问题:
-
如果内存是分布式的而不是共享的,代码会给我一个错误吗?或者它会正常运行但生成错误的数据吗?
-
有没有办法知道我的代码使用的节点是否有共享内存?
(我知道我可以使用MPI在分布式内存上使用代码,但目前我没有时间。)
OpenMP是一个并行编程模型,仅通过线程在共享内存系统上运行,除非使用特殊的通信调用(如MPI、系统套接字调用或PGAS编程模型),否则无法与其他节点通信。OpenMP应用程序执行良好是正常的,因为您总是可以在节点内创建线程。
关于您的问题:
1) OpenMP运行时将只看到节点内的共享资源,而不是节点外的所有资源。这意味着您的OpenMP二进制文件不会传播到HPC集群的其他节点(同样,除非您使用MPI)。关于计算资源,除非您通过OMP_NUM_threads环境变量明确请求不同数量的线程,否则OpenMP运行时将创建与处理器一样多的线程。
2) 您的代码将始终在线程之间共享内存,这是正常的,因为线程描述。来自维基百科https://en.wikipedia.org/wiki/Thread_(计算)
同一进程中可以存在多个线程,执行同时(一个开始,另一个结束)并共享资源例如内存,而不同的进程不共享这些资源。
相关文章:
- OpenMP阵列性能较差
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 查找最近配对时的OpenMP竞赛条件
- 使用输入打破 OpenMP 中的循环
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- OpenMP 加上unordered_map<字符串、双字符串的缩减>
- OpenMP 与有序和关键指令并行
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- OpenMP for 循环并行性问题
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 在群集上使用OpenMP