Openmpmp性能,omp_get_max_threads大于核心数

时间:2014-04-28 23:52:54

标签: c++ multithreading performance parallel-processing openmp

我是新手并行编程。我运行一个用C ++编写的自己的Gibbs采样器。程序概述看起来像这样。

 for(int iter=0; iter <=itermax; iter++){ //loop1
 #pragma omp parallel for schedule(dynamic) 
 for(int jobs= 0;  jobs<=1000; jobs++){ // loop2
     small_job();
     #pragma omp critical(dataupdate){
        data_updates()
     }
 } 
   jobs_that_cannot_be_parallelized();
}

我在64核的机器上运行。由于small_job长度可变且很小,因此我分配了omp_get_max_threads = 128.使用的核心数似乎是正确的(参见图最后一小时加载)。number of threads。每个峰都属于loop2。

然而,当我查看实际的cpu使用情况时(参见图cpu usage,系统似乎使用了大量的cpu,用户只使用了20%。这是因为我在loop2中产生了大量的线程决定omp_get_max_threads的最佳做法是什么?我知道我没有提供足够的信息,但我真的很感激任何其他建议,使程序更快。

0 个答案:

没有答案