2011-08-01 14 views
5

Moim problemem jest to, że nie dostaję równoległości do OpenMP.brak równoległych wątków z openMP

My System: ubuntu 11,4 Intel (R) główny (TM) i5 CPU M 430 @ 2.27GHz

Kompilator: g ++ wersja: 4.5.2 z flagą -fopenmp

Tym Kod widzę, że istnieje tylko jeden wątek:

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); 
} 
} 

bo widzę następujący wynik:

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

Na czym polega problem?

Czy ktoś może pomóc, proszę?

+4

Czy ustawiłeś zmienną środowiskową OMP_NUM_THREADS? –

+0

Hej! Nie, nie mam. Ale po wykonaniu omp_set_num_threads (2); mam następujący wynik: liczba procesorów = 4 Ilość nici = 1 Maks nici = 2 Równolegle? = 0 Włączone wątki dynamiczne? = 0 Obsługiwany jest równoległy zagnieżdżony? = 0 liczba wątków jest wciąż 1. – Sankp

Odpowiedz

5

Twój kod działa dla mnie na Ubuntu 11.04 z kompilator g ++ w wersji 4.5.2 ale musiałem zmienić

#pragma omp parallel private(nthreads, tid) { 

do

#pragma omp parallel private(nthreads, tid) 
{ 

na to, aby pomyślnie skompilować.

EDYCJA: Jeśli poprawianie składni nie działa, moim następnym pomysłem byłoby pytanie, jaka jest dokładna komenda używana do kompilowania kodu?

0
#pragma omp parallel private(nthreads, tid) { 

jest błędna składnia, jak zauważył hrandjet

Pragma musi kończyć się w nowej linii, więc {powinien być w następnym wierszu.

#pragma omp parallel private(nthreads, tid) 
{ 

Działa to dla mnie w systemie Windows XP.

+2

Więc ... właśnie napisałeś duplikat odpowiedzi @ hrandjet? –

0

Czy wyjście poprzedzone

Thread 0 getting environment info... 

Jeśli nie, problem jest taki, jak podano powyżej - otwarty nawias ({) musi znajdować się w nowej linii. Aby to udowodnić, spróbuj zainicjować i sprawdzić, czy dane wyjściowe są nadal wyświetlane. Jeśli nie, to #pragma jest ignorowana przez twój kompilator (prawdopodobnie z powodu problemu z nawiasami).

Powiązane problemy