2011-12-30 11 views
2

巣私はこれをしたいのためのループの並列内部のforループの並列

omp_set_nested(1); 
#pragma omp parallel for private(j) 
for (i = 0; i < n; ++i) { 
    #pragma omp parallel for 
    for (j = 0; j < m; ++j) { 
    /* do smth */ 
    } 
} 

を私は8つのスレッドを持っている場合は、意味、そして最初のループのみが4つのスレッドを使用して、私は内部ループをしたいです他の4つのスレッドも使用してください。これどうやってするの?

答えて

3

リージョン内に必要なスレッドの数を指定できます。あなたはこれをしなかった場合

ので:

omp_set_nested(1); 
#pragma omp parallel for private(j) num_threads(2) 
for (i = 0; i < n; ++i) { 
    #pragma omp parallel for num_threads(4) 
    for (j = 0; j < m; ++j) { 
     /* do smth */ 
    } 
} 

は、次に外側のループは、2つのスレッドを持つことになります。そして、それらの2つのスレッドのそれぞれは、内側ループのために4つのスレッドを生成します。 (合計8個)

各ループで4つのスレッドを使用したいので、説明が多少混乱します。それがネストされていることを忘れないでください。

関連する問題