2011-08-26 32 views
3

爲什麼使用以下代碼在執行時間方面有好處?OpenMP關鍵部分意外提升性能

#pragma omp parallel for 
for(i=0; i<size; i++) 
{ 
    #pragma omp critical 
    { 
    funcall1(); 
    funcall2(); 

    for(j=0;j<size2;j++) 
    { 
     funcall3(); 
    } 

    } 

} 

運行兩次串行版本,但我不知道爲什麼

+2

可能高速緩存一致性如果預留的代碼似乎是由4個內核來執行這些步驟 –

+0

單核.. 一個線程可以進入臨界區,如果前一個線程執行的函數調用? 你能否更好地解釋你的答案? – lucy

+0

每個外部循環運行在sep核心上,內部循環將被關鍵核心鎖定,因此函數調用中的任何緩存值都可用於下一個調用 –

回答

0

看起來像第二個變量j可以優化範圍,它可能被展開。