これは、openmp cで行列を転置するプログラムです。コンパイラiはgccを使用しています。 私はprivate(i、j)とprivate(i)の両方を別々に試しました。それはスレッド化されているので、私は変更が正確に起こっているのを見つけることができませんでした。このコードで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」のプライベート/共有属性を心配しています。 –
OMP_NESTEDを設定しましたか?そうでない場合は、内部の並列処理が省略されます(これはおそらくあなたが望むものです:-))。 (25スレッドを開始)。あなたは可能な限り小さな範囲で変数を宣言するスタイルを採用する方がずっと優れています。それではここでプライベートについて心配する必要はありません。 –