私はスタックオーバーフローエラーを取得する次のコードの一部を取得しました
#pragma omp parallel shared(Mo1, Mo2, sum_normalized_p_gn, Data, Mean_Out,Covar_Out,Prior_Out, det) private(i) num_threads( number_threads )
{
//every thread has a new copy
double* normalized_p_gn = (double*)malloc(NMIX*sizeof(double));
#pragma omp critical
{
int id = omp_get_thread_num();
int threads = omp_get_num_threads();
mexEvalString("drawnow");
}
#pragma omp for
//some parallel process.....
}
共有で宣言された変数は、malloc によって作成されます。そしてそれらは大量のメモリを消費します
上記のコードに関して 2 つの質問があります。1) 並列 for ループに入る前にスタック オーバーフロー エラー (セグメンテーション違反) が発生するのはなぜですか? シーケンシャル モードで実行すると問題なく動作します.... 2) 上記の「normalized_p_gn」のように各スレッドにメモリを動的に割り当てる権利がありますか?
よろしくエドウィン