我試圖運行一個簡單的程序並行運行。我想將它基於二叉樹。根據我想要將工作分配給所有處理器的處理器數量,以便程序並行運行。使用遞歸,我正在檢查是否還有1個或2個處理器,如果有,我使用OpenMP sections
來運行它。但是,它使用的內核越多,算法越慢,我不明白爲什麼。我試圖儘可能自我解釋地編寫代碼。OpenMP - 二叉樹
void fun1(int tab[], int pocz, int kon, int threadsLeft)
{
if (threadsLeft == 2)
{
#pragma omp parallel num_threads(2)
{
#pragma omp sections nowait
{
#pragma omp section
{
for (int i = pocz; i < kon/2; i++)
{
tab[i] = 1;
}
}
#pragma omp section
{
for(int i = kon/2 + 1; i < kon; i++)
{
tab[i] = 0;
}
}
}
}
}
else if (threadsLeft == 1)
{
#pragma omp parallel num_threads(1)
{
#pragma omp sections nowait
{
#pragma omp section
{
for (int i = pocz; i < kon; i++)
{
tab[i] = 2;
}
}
}
}
}
else
{
fun1(tab, pocz, kon/2, threadsLeft/2);
fun1(tab, kon - kon/2, kon, threadsLeft - threadsLeft/2);
}
}
int main()
{
int allThreads = omp_get_num_threads();
int N = 200000000;
int* tab = new int[N];
for (int i = 0; i < N; i++)
{
tab[i] = 0;
}
fun1(tab, 0, N, allThreads);
}
您的問題標題對理解問題沒有幫助;請查看[問]然後[編輯]它更具描述性。 – Mogsdad