2016-12-04 6 views
4

Was ich möchte eine Funktion ausführen, die eine for-Schleife (soll parallel) in einer parallelen äußeren Schleife enthalten . So sieht es wie folgt aus:Verschachtelt parallel für Schleife ... "Parallel äußere for Schleife" in "parallel innere for Schleife als Funktion"

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(); 
    } 
} 

der obige Code gegeben, I 5 parallele Threads für die Schleife in der main() Funktion erstellen möchten, und ich möchte jedem der 5 Fäden anderen K-Threads erstellen seine laufen eigene parallele for-Schleife.

Obwohl ich weiß, wie geschachtelte For-Schleifen ausgeführt werden, wenn die innere Schleife nicht in einer separaten Funktion ist, kann ich keine Lösung für diese Art von Problem finden.

In der Tat ist dieses Stück Code für die parallele 5-fache Kreuzvalidierung, wo jede Falte eine for-Schleife hat, die parallelisiert werden sollte.

Kann mir jemand helfen?

+0

diese Arbeit mit der Funktion nicht? Wenn ja, was ist das eigentliche Problem? – tadman

+0

@tadman Sorry, aber ich bekomme deine Frage nicht. Ich möchte zuerst 5 Threads erstellen und dann möchte ich eine parallele for-Schleife für jeden Thread ausführen, wobei jeder Thread unabhängig ausgeführt werden sollte. – Mansumen

+0

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

Antwort

4

Sie müssen 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(); 
    } 
} 
Verwandte Themen