OpenMPタスク構造を使用して配列の要素の合計を見つけるために、次のコードを使用しています。
コードはn = 10000
まで正しい結果を得ています。OpenMPタスク - より大きな反復回数〜10kでセグメント化エラーが発生するのはなぜですか?
それ以外では、セグメント違反が発生しています。 gdb
を使用して、reduce()
への再帰呼び出しの1つで障害が発生することがわかりました。入力配列の割り当てに問題はなく、私はそれを確認しました。
誰かが問題の原因について何か提案していますか?
int reduce (int *arr, unsigned long int n)
{
int x;
if (n <= 0)
return 0;
#pragma omp parallel
{
#pragma omp single nowait
{
#pragma omp task shared(x)
x = reduce(arr, n-1) + arr[n-1];
#pragma omp taskwait
}
}
return x;
}
'n 'が' unsigned'のときに '<0'になる方法はありますか? – yano
スタックサイズを増やし、 'OMP_STACKSIZE'を見てください – Gilles
コードを書式化してください。これはとても不必要に醜いです、それは痛いです。 – Zulan