【发布时间】: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是答案。如果您仍然怀疑,那么您可以创建一个 nullomp parallel for,其中只包含对omp_get_num_threads的调用来检查工作线程的数量。
标签: c multithreading openmp