在群集上使用OpenMP

Using OpenMP on a cluster

本文关键字:OpenMP 群集      更新时间:2023-10-16

我使用openMP库使代码并行。我需要在学院的HPC(16个节点)上运行代码。当我运行代码时,HPC会将来自不同刀片的节点随机分配给我的程序。我不知道节点是否有共享内存,但代码执行正常。我的问题:

  1. 如果内存是分布式的而不是共享的,代码会给我一个错误吗?或者它会正常运行但生成错误的数据吗?

  2. 有没有办法知道我的代码使用的节点是否有共享内存?

(我知道我可以使用MPI在分布式内存上使用代码,但目前我没有时间。)

OpenMP是一个并行编程模型,仅通过线程在共享内存系统上运行,除非使用特殊的通信调用(如MPI、系统套接字调用或PGAS编程模型),否则无法与其他节点通信。OpenMP应用程序执行良好是正常的,因为您总是可以在节点内创建线程。

关于您的问题:

1) OpenMP运行时将只看到节点内的共享资源,而不是节点外的所有资源。这意味着您的OpenMP二进制文件不会传播到HPC集群的其他节点(同样,除非您使用MPI)。关于计算资源,除非您通过OMP_NUM_threads环境变量明确请求不同数量的线程,否则OpenMP运行时将创建与处理器一样多的线程。

2) 您的代码将始终在线程之间共享内存,这是正常的,因为线程描述。来自维基百科https://en.wikipedia.org/wiki/Thread_(计算)

同一进程中可以存在多个线程,执行同时(一个开始,另一个结束)并共享资源例如内存,而不同的进程不共享这些资源。