gpt4 book ai didi

c++ - 在集群上使用 OpenMP

转载 作者:行者123 更新时间:2023-11-28 00:10:19 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

关于您的问题:

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

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

Multiple threads can exist within the same process, executing concurrently (one starting before others finish) and share resources such as memory, while different processes do not share these resources.

关于c++ - 在集群上使用 OpenMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33508741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com