2017-04-02 1 views
0

의 우리가이 코드를 가지고 있다고 가정하자 : 중첩 된 루프에서 OpenMP에서 코어가 분할됩니까?

for(size_t i=0; i<5; i++){ 
    //do something expensive here 
    for(size_t i=0; i<5; i++){ 
    //do somehting expensive here too 
    } 
} 

이의 우리가 적어도 25 개 물리적 코어가 가정하자. 우리는 어떻게 그것들 모두를 이용할 수 있습니까? 첫 번째 값 비싼 계산 때문에 collapse을 사용할 수 없습니다. 이 경우 가장 효율적인 솔루션은 무엇입니까?

+0

int가 작동해야하는 경우 size_t를 사용하는 것은 의미가 없습니다. 귀하의 질문이나 mop_nested에 대한 귀하의 이의 제기가 확실하지 않습니다. – tim18

답변

0

루프를 분리하면됩니다. 현재 코드가

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

을의 경우, 그들은 expensive_2에 필요한 경우 가능 expensive_1의 결과를 저장,이 안으로 들어가.

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

#pragma omp parallel for collapse(2) 
for(int i = 0; i < 5; ++i) 
{ 
    for(int j = 0; j < 5; ++j) 
    { 
    expensive_2(j); 
    } 
} 
+1

확실히 두 번째 병렬로 붕괴 (2 번)를 원했습니까? –