2011-12-30 4 views
2

용 루프 병렬 내부 평행 이렇게 : I은 8 개 개의 스레드가있을 경우둥지 I 원하는위한 루프

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 */ 
    } 
} 

그것이 의미하고, 제 1 루프는 단지 4 개의 스레드를 사용하며, I는 내부 루프를 원하는 다른 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 개의 스레드를 사용하기 때문에 설명이 다소 혼란 스럽습니다. 중첩 된 것을 잊지 마십시오. 따라서 배가됩니다.