2017-04-02 78 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個物理內核。我們如何利用所有這些? A 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_1的結果,如果需要,他們在expensive_2

#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)? –