openmp随机只使用一个核心

时间:2011-03-10 19:39:22

标签: c++ openmp

我在Ubuntu 10.04,gcc版本4.4.3。我正在使用omp.h和g ++参数-fopenmp编译c ++代码。大多数时候一切都按预期工作。我有四核超线程,所以几乎有8个内核。

随机地,当我运行我的软件(和监视系统监视器)所有8个核心高达100%,粉丝开始,所有这一切都很好。在半秒之内所有核心,但1关闭到不活动,一个仍在工作。

此时如果我取消我的程序(只是简单的Ctrl + C)并重新启动它 - 它按预期工作,所有核心保持100%工作。

以下是代码片段,以防它有用:

28 #include <time.h>
29 #include <omp.h>
30 #include <string>
...
713 #ifdef _OPENMP
714         if(omp_get_dynamic())
715                 omp_set_dynamic(1);
716 #endif
717 
718 #pragma omp parallel
719         {
720 #pragma omp for schedule(dynamic) private(node)
721                 for (int c = 0; c < buffer->GetCount(); c++) {
... initialize objects pointers etc
724 #pragma omp critical(BUFFER_LOOKUP)
725                         {
... perform chunk of code that is a choke
734                         }

1 个答案:

答案 0 :(得分:1)

从omp_set_dynamic(n)maual页面: n ...一个值,指示运行时是否可以调整后续并行区域中可用的线程数。如果非零,运行时可以调整线程数,如果为零,运行时将不会动态调整线程数

尝试使用#pragma omp parallel num_threads(n)转动omp_set_dynamyc来设置所需的线程数。