2011-08-01 11 views
5

私の問題は、openMPとの並列化ができないということです。openMPとの並列スレッドがありません

私のシステム:2.27GHz @ Ubuntuの11.4 インテル(R)Core(TM)i5ののCPUのM 430

コンパイラ: 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); 
} 
} 

:私は唯一つのスレッドがあることがわかりコード210

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

問題点は何ですか?

助けてもらえますか?私はそれが正常にコンパイルするため

#pragma omp parallel private(nthreads, tid) 
{ 

#pragma omp parallel private(nthreads, tid) { 

を変更しなければならなかったが

+4

OMP_NUM_THREADS環境変数を設定しましたか? –

+0

ねえ! いいえ、私はしていません。しかし、omp_set_num_threads(2)を実行した後。プロセッサの 数=スレッド並行= 1つの 最大スレッド= 2 の4 数: 私は次の出力を得ましたか? = 0 ダイナミックスレッドが有効になっていますか? = 0 ネストされた並列処理がサポートされていますか? = 0 スレッド数はまだ1です。 – Sankp

答えて

5

あなたのコードは、G ++コンパイラのバージョン4.5.2でのUbuntu 11.04に私のために動作します。

編集:構文を修正してもうまくいかない場合は、コードをコンパイルするために使用している正確なコマンドが何であるか尋ねることです。 hrandjet

によって示されるよう

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

は、誤った構文であるプラグマは、新しい行で終了しなければならないので、{次の行にあるべきです。

#pragma omp parallel private(nthreads, tid) 
{ 

これはWindows XPで動作します。

+2

だから、あなたは@ hrandjetの答えの複製を投稿しましたか? –

0

がない場合

Thread 0 getting environment info... 

によって前置き出力され、問題は上述した通りである - オープンブラケット({)は、新しい行でなければなりません。これをさらに証明するには、初期化を試してください。出力がまだ表示されているかどうかを確認してください。

int tid = 1 

そうでなければ#pragmaはコンパイラによって無視されています(おそらくブラケットの問題のためです)。

関連する問題