我在OpenMP任務中遇到問題。我正在嘗試使用omp任務爲「for」循環創建並行版本。但是,執行此版本的時間比基本版本長2倍,我使用omp,因此我不知道這是什麼原因。看看代碼波紋管:OpenMP任務並行 - 性能問題
OMP的版本:
t.start();
#pragma omp parallel num_threads(threadsNumber)
{
for(int ts=0; ts<1000; ++ts)
{
#pragma omp for
for(int i=0; i<size; ++i)
{
array_31[i] = array_11[i] * array_21[i];
}
}
}
t.stop();
cout << "Time of omp for: " << t.time() << endl;
OMP任務版本:
t.start();
#pragma omp parallel num_threads(threadsNumber)
{
#pragma omp master
{
for(int ts=0; ts<1000; ++ts)
{
for(int th=0; th<threadsNumber; ++th)
{
#pragma omp task
{
for(int i=th*blockSize; i<th*blockSize+blockSize; ++i)
{
array_32[i] = array_12[i] * array_22[i];
}
}
}
#pragma omp taskwait
}
}
}
t.stop();
cout << "Time of omp task: " << t.time() << endl;
在任務的版本我把同樣的方式循環在OMP的。每個任務都必須執行相同數量的迭代。總任務量等於線程總量。
性能測試結果:
Time of omp for: 4.54871
Time of omp task: 8.43251
什麼可能是一個問題?兩種版本都可以達到相似的性能嗎?附加代碼很簡單,因爲我只想說明我的問題,我試圖解決。我不認爲這兩個版本都會給我同樣的表現,但是我想減少這種差異。
感謝您的回覆。 此致敬禮。