2010-11-29 9 views
2

OSクラスの台形ルールの並列プログラミングを少しやっていますが、これは宿題に関する質問ですが、ソースコードを探していません。OpenMPスレッド数質問

少しの研究の後、私はサブスレッドを計算するために各スレッドを使うことに決めました。 使用して:私の積分関数で

g = (b-a)/n; 
    integral += (func(a) + func(b))/2.0; 

# pragma omp parallel for schedule(static) default(none) \ 
     shared(a, h, n) private(i, x) \ 
     reduction(+: integral) num_threads(thread_count) 
    for (i = 1; i <= n-1; i++) { 
     x = a + i*g; 
     integral += func(x); 
    } 

を、FUNC(x)は、私は、ファイルから読み込む機能です。

私は教授に電子メールでスレッドの数をどのように選びたいか質問します。 (台形ルールの場合はNで均等に割り切れる必要があるため)

しかし、彼は定義する必要はなく、マシン上のコアの数に基づいて定義します。少し混乱イムを言って....だから、不必要

答えて

5

あなたの教授が正しい:。。OpenMPのは、通常、コアの数である、デフォルトでスレッドの最適な数を選択します

あなたは必要ありません。 Nで割り切れるスレッドの数を心配するために、OpenMPは自動的にスレッド間で反復を配布し、均等に割り切れない場合は、スレッドが少しずつ作業を終了します。

+0

これでnum_threads(スレッド数)を取り出すだけで私のプログラムがうまくいきますか? btwはデフォルト(none)でも定義する必要があります –

+1

@Mercfh:いいえ、その場合は明示的に共有を宣言する必要があるので、良い考えかもしれません。最初のデフォルト共有はC++とFortranで異なり、明示的にすると移植に役立ちます。 – pafcu

+0

@pafcu、あなたの言うことは、デフォルトの権利にNO?私はnum_threads(スレッド数)を取り出すことができますし、コンパイラはそれを正確に処理する必要がありますか? –