1
這是一個在openmp c中轉置矩陣的程序,我用的編譯器是gcc。 我試了私人(我,j)和私人(我)分開。因爲它是線程的,我無法找到準確發生的變化。private(i,j)在這段代碼中的作用是什麼?如果我從私人(i,j)省略i或j,會有什麼變化嗎?
#pragma omp parallel for private (i,j)
for(i=1; i<size; i++)
{
#pragma omp parallel for
for(j=0; j<i; j++)
{
temp = mat1[i][j];
mat1[i][j] = mat1[j][i];
mat1[j][i] = temp;
}
}
運行時間每次都不一樣。儘管我有雙核心,但我嘗試了5線程。謝謝。
請參閱http://stackoverflow.com/q/37845291/620382 – Zulan
我會更擔心temp的private/shared屬性。 –
您是否設置了OMP_NESTED?如果沒有,那麼內部並行就會被忽略(這可能是你想要的:-)),如果你有,那麼你可能會超出你的要求! (開始25個線程)。你最好採用一種在最小範圍內聲明變量的風格。那麼你不必擔心私人在這裏。 –