2016-12-04 2 views
4

並列の外側ループ内にforループ(パラレルで実行すると仮定)を含む関数を実行したいもの。だから、それは次のようになります。入れ子の並列forループ... "並列inner for loop"の "parallel inner for loop"の中で

上記のコードを考えると
void myfunction(){ 
    ... 
    #pragma omp parallel for 
    for (int i=0;i<10;i++){ 
     do something... 
    } 
} 


int main(){ 
    #pragma omp parallel for 
    for(int i=0;i<5;i++){ 
     myfunction(); 
    } 
} 

、私はmain()機能にループの5つの並列スレッドを作成したい、と私は5つのスレッドのそれぞれがそのを実行するために、別のKスレッドを作成したいです自分自身の並列forループ。

内側のループが別の関数にない場合、ネストされたforループを実行する方法はわかりましたが、私はこの種の問題の解決策を見つけることができません。

実際、このコードは並列5倍交差検証用です。各折りたたみには並列化されるforループがあります。

誰でも手伝ってもらえますか?

+0

が機能してこの仕事をしていますか?もしそうなら、本当の問題は何ですか? – tadman

+0

@tadman申し訳ありませんが、私はあなたの質問を得ることはありません。私は最初に5つのスレッドを作成したいと思うし、それぞれのスレッドが独立して動くはずのスレッドごとに並列forループを実行したい。 – Mansumen

+0

[検索](http://stackoverflow.com/questions/13357065/openmp-and-nested-loops)? – Stargateur

答えて

4

あなたはenable nested parallelismする必要があります。

void myfunction(){ 

    #pragma omp parallel for 
    for (int i=0;i<10;i++){ 
     ... 
    } 
} 


int main(){ 

    omp_set_nested(1);  // Enable nested parallelism  
    omp_set_num_threads(5); // Use 5 threads for all parallel regions 

    #pragma omp parallel for 
    for(int i=0;i<5;i++) 
    { 

     myfunction(); 
    } 
}