нет параллельных потоков с openMP - PullRequest
5 голосов
/ 01 августа 2011

Моя проблема в том, что я не получаю распараллеливания с openMP.

Моя система: ubuntu 11.4 Процессор Intel® Core iM5 M5 430 @ 2.27 ГГц

Компилятор: версия g ++: 4.5.2 с флагом -fopenmp

С этим кодом я вижу, что есть только один поток:

int nthreads, tid, procs, maxt, inpar, dynamic, nested;

// Start parallel region 
#pragma omp parallel private(nthreads, tid)   {

// Obtain thread number    
tid = omp_get_thread_num();

// Only master thread does this    
if (tid == 0) 
{
printf("Thread %d getting environment info...\n", tid);

// Get environment information 
procs = omp_get_num_procs();
nthreads = omp_get_num_threads();
maxt = omp_get_max_threads();
inpar = omp_in_parallel();
dynamic = omp_get_dynamic();
nested = omp_get_nested();

// Print environment information 
printf("Number of processors = %d\n", procs);
printf("Number of threads = %d\n", nthreads);
printf("Max threads = %d\n", maxt);
printf("In parallel? = %d\n", inpar);
printf("Dynamic threads enabled? = %d\n", dynamic);
printf("Nested parallelism supported? = %d\n", nested);  
}
}

, потому что я вижу следующий вывод:

Number of processors = 4
Number of threads = 1
Max threads = 4
In parallel? = 0
Dynamic threads enabled? = 0
Nested parallelism supported? = 0

В чем проблема?

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

5 голосов
/ 02 августа 2011

Ваш код работает для меня в Ubuntu 11.04 с компилятором g ++ версии 4.5.2, однако мне пришлось изменить

#pragma omp parallel private(nthreads, tid)   {

до

#pragma omp parallel private(nthreads, tid)  
{

для успешной компиляции.

РЕДАКТИРОВАТЬ: Если исправление синтаксиса не работает, моей следующей идеей будет спросить, какую именно команду вы используете для компиляции кода?

0 голосов
/ 07 августа 2011

Является ли выход предваряемым

Thread 0 getting environment info...

Если нет, проблема, как указано выше - открывающая скобка ({) должна быть в новой строке.Чтобы доказать это далее, попробуйте инициализировать

int tid = 1

и посмотреть, все ли еще отображаются выходные данные.Если нет, то компилятор игнорирует #pragma (возможно, из-за проблемы с скобками).

0 голосов
/ 04 августа 2011
#pragma omp parallel private(nthreads, tid)   {

неверный синтаксис, как отмечает hrandjet

Прагма должна заканчиваться новой строкой, поэтому {должно быть на следующей строке.

#pragma omp parallel private(nthreads, tid)   
{

Это работает для меня в Windows XP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...