2

私は次のコードを持っています:

#pragma omp parallel sections num_threads(2) {
  #pragma omp section
   Function_1;
   #pragma omp section
   Function_2;
}

しかし、Function_1 と Function_2 の中で、私は並列を持っていますが、それを実行するスレッドは 1 つだけです。では、Function_1 と Function_2 を並行して実行し、これらの関数内で複数のスレッドを実行するにはどうすればよいでしょうか?

どうも!

4

1 に答える 1

3

あるリージョンを別のリージョン内に持つことをparallelネストと呼びます。デフォルトでは、ネストされたリージョンは非アクティブです。つまり、連続して実行されます。それらをアクティブにするために、次のことができます。

  • 環境変数OMP_NESTEDをに設定しますtrue
  • 囲みparallel領域の前に次の呼び出しを挿入します。omp_set_nested(1);

次の方法で、ネストされた並列処理が機能するレベルの数を制限することもできます。

  • 環境変数OMP_MAX_ACTIVE_LEVELSnum、または
  • 呼び出しomp_set_max_active_levels(num);

ここnumで、 は目的の最大アクティブ レベルです。たとえば、 の値を指定すると、レベルよりも深くネストされた3すべての領域が非アクティブになります。parallel3

于 2012-11-18T14:38:09.840 に答える