Я не уверен, что здесь происходит.
Это может быть случай, когда вы скомпилировали с помощью библиотеки OpenMP, которая предоставляет весь API библиотеки OpenMP, но работает только как последовательный режим (см., Например, this link для соответствующего коммутатора компилятора Intel).
Другая возможность заключается в том, что переменная среды OMP_THREAD_LIMIT
установлена в 1
в вашей среде. Смотрите, например этот код:
#include <iostream>
#include <omp.h>
int main() {
omp_set_num_threads(8);
#pragma omp parallel
#pragma omp single
std::cout << "Number of threads in the current parallel region is " << omp_get_num_threads() << std::endl;
return 0;
}
При компиляции с поддержкой OpenMP и запустить, это дает мне:
$ g++ -fopenmp nbthreads.cc -o nbthreads
$ ./nbthreads
Number of threads in the current parallel region is 8
$ OMP_THREAD_LIMIT=1 ./nbthreads
Number of threads in the current parallel region is 1
Помимо этих двух возможностей, я понятия не имею.
Edit: благодаря Z boson «s комментарий, я уверен, что у меня есть ключ от тайны.
С тем же кодом, что и здесь ранее один, вот что я получил:
$ g++ -o nbthreads nbthreads.cc -lgomp
$ ./nbthreads
Number of threads in the current parallel region is 1
Таким образом, вы просто по ошибке использовали -lgomp
вместо -fopenmp
во время компиляции/связывания коды. Это дает вам код OpenMP, эквивалентный только 1 потоку, даже если вы явно запрашиваете больше.
Какой именно компилятор? – Jeff
gcc (Ubuntu 4.8.4-2ubuntu1 ~ 14.04) 4.8.4 –