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
}
我不知道這是否是正確的並行,因爲它的花費比它應該更多的時間。我如何改進我的代碼?
循環體編譯成10條機器指令。創建,排隊和執行OpenMP任務的成本要高出幾個數量級。你現在可以發現問題嗎? – 2014-11-03 17:34:06
@HristoIliev那麼,你有什麼建議?這個代碼是否可以並行? – 2014-11-03 20:34:04
在這種情況下,您應該使用'#pragma omp parallel for',因爲這個編譯指針是爲此目的而設計的。 – Turing85 2014-11-06 08:54:40