在群集上使用OpenMP

时间:2015-11-03 20:45:56

标签: c++ openmp

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

  1. 如果内存是分布式的并且没有共享,或者它是否正常运行但生成错误的数据,代码是否应该给我一个错误?

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

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

1 个答案:

答案 0 :(得分:3)

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

关于你的问题:

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

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

  

多个线程可以存在于同一个进程中,执行   同时(一个在其他人完成之前开始)并共享资源   例如内存,而不同的进程不共享这些   资源。