2012-05-07 10 views
8

私は並列モードでLIBSVMを実行しようとしていますが、私の質問はOpenMPで一般的です。 LIBSVM FAQによれば、#pragma呼び出しでOpenMPを使用するようにコードを修正しました。コードがうまくコンパイルOpenMPが動作しているかどうかを確認するには?

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp 

:私はまた、それがなるよう-fopenmp引数を追加することによって、(UN用* X)Makefileを修正しました。

/sbin/ldconfig -p | grep gomp 

、それが-probably-インストールされていることを参照してください:(それは私のPCではないので)私は、OpenMPがでインストールされているかどうかを確認

libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1 
libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1 

。私がプログラムを実行するとき、私は速度の改善を見ません。また、「top」とチェックすると、プロセスは最大で100%CPU(8つのコアがあります)を使用していますが、CPUボトルネック(%100のCPU使用率でもう1人のユーザー)もなく、プロセスが複数のコアを使用している%100(または別のインジケータ)。

複数のコアが動作していることを確認する方法はありますか?

+0

ちょっと考えましたが、最大ではありません。スレッドが1つしか実行されていない場合は100%/コア数? – Tibor

+1

マルチコアを使用している場合(少なくとも私のサーバのインストールでは)、私は100%よりもはるかに大きな値を表示します。 –

+1

@Tibor、デフォルトではIrixモードがデフォルトの100%を示します。 n個のCPUの全負荷。 Irixモードをオフにすると( 'I'を押すと)、すべてのCPUが使用されると100%が表示されます。 –

答えて

7

機能omp_get_num_threads()を使用することができます。これは、プログラムで使用されているスレッドの数を返します。

+6

並列領域内で 'omp_get_num_threads()'を呼び出さなければなりません。それ以外の場合は常に1を返します。 –

1

omp_get_max_threads()を使用すると、プログラムで使用できるスレッドの最大数を取得できます。また、可能なすべての戻り値の最大値はomp_get_num_threads()です。環境変数OMP_NUM_THREADSでプログラムで使用するスレッド数を明示的に設定することができます。 bash経由で

$export OMP_NUM_THREADS=8; your_program 
関連する問題