У меня немного неприятная проблема с openmp.Когда я запускаю следующий код, кажется, что он работает только в одном потоке.
omp_set_num_threads(8);
#pragma omp parallel for schedule(dynamic)
for(size_t i = 0; i < jobs.size(); i++) //jobs is a vector
{
std::cout << omp_get_thread_num() << "\t" << omp_get_num_threads() << "\t" << omp_in_parallel() << std::endl;
jobs[i].run();
}
Это печатает ...
0 1 1
для каждой строки.
Я вижу, используя top, что openmp порождает столько потоков, сколько у меня есть набор задач процесса.Они в основном бездействуют, пока он работает.Программа скомпилирована и связана с флагом -fopenmp с помощью gcc.Я использую redhat 6. Я также попытался использовать параметр num_threads(8)
в прагме, который не имел значения.Программа связана с другой библиотекой, которая также использует openmp, так что, возможно, это проблема.Кто-нибудь знает, что может вызвать такое поведение?Во всем моем прошлом опыте openmp это сработало.