首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMP:获取正在运行的线程总数

OpenMP:获取正在运行的线程总数
EN

Stack Overflow用户
提问于 2011-01-16 16:19:03
回答 2查看 44.3K关注 0票数 17

我需要知道我的应用程序通过OpenMP生成的线程总数。不幸的是,omp_get_num_threads()函数在这里执行而不是的工作,因为它只产生当前团队中的线程数。

但是,我的代码是递归运行的(基本上是分而治之),只要仍然有空闲的处理器,我就想生成新的线程,但是没有更多了。

是否有一种方法可以绕过omp_get_num_threads的限制并获得运行线程的总数?

如果需要更详细的信息,请考虑以下伪代码,它非常接近地建模了我的工作流:

代码语言:javascript
复制
function divide_and_conquer(Job job, int total_num_threads):
  if job.is_leaf(): # Recurrence base case.
    job.process()
    return

  left, right = job.divide()

  current_num_threads = omp_get_num_threads()
  if current_num_threads < total_num_threads: # (1)
    #pragma omp parallel num_threads(2)
      #pragma omp section
        divide_and_conquer(left, total_num_threads)
      #pragma omp section
        divide_and_conquer(right, total_num_threads)

  else:
    divide_and_conquer(left, total_num_threads)
    divide_and_conquer(right, total_num_threads)

  job = merge(left, right)

如果我使用total_num_threads值为4调用这段代码,带有(1)的条件注释将始终计算为true (因为每个线程团队最多包含两个线程),因此无论有多少线程在更高的级别上运行,代码总是会生成两个新线程。

我正在寻找一种确定当前在我的应用程序中运行的线程总数的platform-independent 方法.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-16 17:19:46

考虑到您知道正在创建的线程的确切数量,我想出的最简单的解决方案是保留您自己的线程计数器。

请注意,我对OpenMP完全一无所知,因为我从未真正使用过它。

票数 -4
EN

Stack Overflow用户

发布于 2011-01-17 15:49:46

您展示的代码有一个问题,即"omp节“必须在"omp节”的词法范围内。我假设您的意思是"omp并行“是"omp并行部分”。另一种方法是使用"omp任务“,这样就不必计算线程数。您只需将线程分配到并行区域,并允许OpenMP实现将任务分配给线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4706494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档