【问题标题】:MPI OpenMp hybridMPI OpenMp 混合
【发布时间】:2015-03-26 16:37:40
【问题描述】:

我正在尝试在 Linux 双核集群上运行为 MPI 和 OpenMP 编写的程序。

当我尝试设置OMP_NUM_THREADS 变量时

export OMP_NUM_THREADS=2

我收到一条消息

OMP_NUM_THREADS:未定义的变量。

OpenMP 没有获得更好的性能...我也尝试过:

mpiexec -n 10 -genv OMP_NUM_THREADS 2 ./binary

omp_set_num_threads(2) 在程序中,但它并没有变得更好...... 有什么想法吗?

更新:当我用omp_set_num_threads(2) 运行mpiexec -n 1 ./binary 时,执行时间是4s,当我运行mpiexec -f machines -n 1 ./binary 时,执行时间是8s。

【问题讨论】:

  • 您应该将一些粗体文本更改为code
  • 好多了,谢谢:)

标签: mpi cluster-computing openmp


【解决方案1】:

我建议先执行$echo OMP_NUM_THREADS,然后进一步查询程序中的线程数,以确保正在生成线程。为此使用omp_get_num_threads() 函数。此外,如果您使用的是 MacOS,那么这篇博文可以提供帮助: https://whiteinkdotorg.wordpress.com/2014/07/09/installing-mpich-using-macports-on-mac-os-x/ 这篇文章的后半部分将帮助您成功编译和运行 Hybrid 程序。混合程序是否获得更好的性能在很大程度上取决于资源的争用。过度使用锁、屏障——会进一步减慢程序的速度。如果您在此处发布您的代码以供其他人查看并实际帮助您,那就太好了。

【讨论】:

  • omp_get_num_threads() 为所有进程返回 1...也尝试过 mpicc -cc=gcc -fopenmp 但没有任何改变
  • @orestiss 你确定你是在并行区域打的吗?
  • @orestiss 你也可以尝试在平行区域外调用omp_get_max_threads()
  • omp_get_num_threads() 在并行区域中返回 2 也 omp_get_max_threads() 在并行区域之外。当我在启用 openmp 循环的情况下为 1 个进程运行程序时,我得到了一半的时间(更好的性能)。当我为更多进程运行它时,它会变慢......集群配置可能存在问题
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 2013-02-17
  • 2015-12-13
  • 2017-10-09
  • 2016-02-08
  • 2013-11-15
  • 2016-02-15
  • 2019-01-15
相关资源
最近更新 更多