我在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 }
答案 0 :(得分:1)
从omp_set_dynamic(n)maual页面: n ...一个值,指示运行时是否可以调整后续并行区域中可用的线程数。如果非零,运行时可以调整线程数,如果为零,运行时将不会动态调整线程数
尝试使用#pragma omp parallel num_threads(n)转动omp_set_dynamyc来设置所需的线程数。