ここには、正しいと思うものが答えとして与えられていないコードフラグメントがいくつかあります。これを明確にするために助けが必要です。
dotp=0;
for (i=0;i<n;i++){
dotp+= a[i]+b[i];
}
このコードを並列化するための答えは次のとおりです。
dotp=0;
#pragma omp parallel for reduction(+:dotp)
for (i=0;i<n;i++){
dotp+= a[i]+b[i];
}
forループ内で表示するには、最初のプライベートとしてdotpを追加する必要があると思います
dotp=0;
#pragma omp parallel for reduction(+:dotp) firstprivate(dotp)
for (i=0;i<n;i++){
dotp+= a[i]+b[i];
}
これが正しくない場合、なぜ firstprivate を使用する必要がないのでしょうか?