2016-12-04 9 views
4

병렬 외부 루프에서 for 루프 (병렬로 실행되는 것으로 가정)를 포함하는 함수를 실행하려면 어떻게해야합니까? . 그래서처럼 보이는 다음 위의 코드를 감안할 때중첩 된 병렬 for ... "병렬 inner for for 루프"에서 "parallel for outer for 루프"

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 개 병렬 스레드를 만들려면, 내가 실행하는 또 다른 K 스레드를 생성하기 위해 5 개 각 스레드를 원하는 그 자신의 병렬 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(); 
    } 
}