2014-11-03 28 views
1

我完全不熟悉openmp並學習如何使用task來並行化循環。我做了以下循環:如何確定使用「任務」的循環是否並行化?

#pragma omp parallel default(none) firstprivate(left) private(i) shared(length, pivot, data) 
    { 
#pragma omp for 
     for(i = 1; i<length-1; i++) 
     { 
#pragma omp task 
      { 
       if(data[left] > pivot) 
       { 
        i = length; 
       } 
       else 
       { 
        left = i; 
       } 
      } 
     } 
#pragma omp taskwait 
    } 

我不知道這是否是正確的並行,因爲它的花費比它應該更多的時間。我如何改進我的代碼?

+3

循環體編譯成10條機器指令。創建,排隊和執行OpenMP任務的成本要高出幾個數量級。你現在可以發現問題嗎? – 2014-11-03 17:34:06

+0

@HristoIliev那麼,你有什麼建議?這個代碼是否可以並行? – 2014-11-03 20:34:04

+0

在這種情況下,您應該使用'#pragma omp parallel for',因爲這個編譯指針是爲此目的而設計的。 – Turing85 2014-11-06 08:54:40

回答

0

在這種情況下,由於(#pragma omp for)執行該任務,所以task指令完全不相關。

任務用於無界循環。

相關問題