私はこのコードを実行すると答えとして2542199.979500
が得られます。ただし、正解は1271099.989750
です。誰かがエラーがどこにあるのか教えていただけますか?正しい合計が得られない - openmp
これはバグが含まれているコードです:
さらに#include <omp.h>
#define N 1000
main()
{
int i, nthreads;
int chunk = 10;
float a[N], b[N], c[N], d[N];
double result;
#pragma omp parallel
{
nthreads = omp_get_num_threads();
printf("no of threads %d", nthreads);
#pragma for shared(a,b,c,d,result) private(i) schedule(static,chunk)
for (i=0; i < N; i++){
a[i] = i * 1.5;
b[i] = i + 22.35;
}
#pragma for shared(a,b,c,d,result) private(i) schedule(static,chunk)
for(i=0; i < N; i++){
result = result + (a[i]+b[i]);
}
}
printf("value is %f", result);
}
スレッドの数が3であるとき、私は結果が使用されるスレッドの数に依存 3813299.969250
を取得します。これはopenmpのバグでしょうか、間違っていますか?最終的なプラグマの
あなたは私達にあなたのコードの意図を伝えることはできますか?私はあなたが期待しているアウトプットをなぜ期待しているのですか? –
私はopenmpなしで同じことをして、得た1271099.989750 – user602774
今、どのようなものが正しいと思いますか?私の質問はあなたのコードは何ですか? "私のコードはN個の数字を並べ替える"、 "私のコードは1個からN個まで数字を追加する"のようなものです。同様に、あなたのコードは何をしますか? –