【问题标题】:OpenMP get_num_threads for parallel forOpenMP get_num_threads 用于并行
【发布时间】:2011-12-12 16:19:50
【问题描述】:

找出将用于 omp parallel for 的线程数的最佳方法是什么?我想分配足够的内存供所有线程使用,但在我进入并行部分之前不能使用omp_get_num_threads。例如:

int thread_count = ?
float *data = (float*)malloc(thread_count * data_count * sizeof(float));

#pragma omp parallel for default(shared) private(x)
for (x=0; x<N; x++)
{
    int threadid = omp_get_thread_num();
    //... do stuff with data
}

free(data);

这样做的正确方法是什么,以便我可以知道将使用多少线程并可以相应地分配?谢谢

【问题讨论】:

  • omp_get_num_threads 应该在并行部分之前工作。确切的问题是什么?
  • omp_get_num_threads 只返回当前节的线程数。所以如果在上面使用它会返回1
  • 对不起,omp_get_max_threads 是答案。如果您仍然怀疑,那么您可以创建一个 null omp parallel for,其中只包含对 omp_get_num_threads 的调用来检查工作线程的数量。

标签: c multithreading openmp


【解决方案1】:

您可以拨打omp_get_max_threads()

【讨论】:

  • 我正在处理一个双 C/Fortran 项目,而 Fortran 使用并行块的 OpenMP 方法略有不同,因此可以在这种情况下使用 omp_get_num_threads。能够确切地知道将使用多少是很好的。但这可能是最好的方法。
  • 是的,我分配的内存可能比需要的多,但它可以解决问题。
猜你喜欢
  • 2011-01-05
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多