相关疑难解决方法(0)

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

我需要知道我的应用程序通过OpenMP生成的线程总数.不幸的是,该omp_get_num_threads()功能也不会在这里,因为它只产生的线程在目前球队数量的工作.

但是,我的代码以递归方式运行(基本上是分而治之),只要仍有空闲的处理器,我想生成新的线程,但不会更多.

有没有办法绕过限制omp_get_num_threads并获得正在运行的线程总数

如果需要更多细节,请考虑以下伪代码,它们非常接近地模拟我的工作流程:

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)
Run Code Online (Sandbox Code Playgroud)

如果我使用total_num_threads值4来调用此代码,则条件注释(1)始终求值true(因为每个线程团队最多包含两个线程),因此代码将始终生成两个新线程,无论已经运行了多少线程在更高的层次上.

我正在寻找一种独立平台的方法来确定我的应用程序中当前运行的线程总数.

c++ parallel-processing openmp

12
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×1

openmp ×1

parallel-processing ×1