0

私はスタックオーバーフローエラーを取得する次のコードの一部を取得しました


#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」のように各スレッドにメモリを動的に割り当てる権利がありますか?

よろしくエドウィン

4

2 に答える 2

2

の代わりに、 mex ファイルmallocで使用します (こちらを参照)。思い出し終わったら忘れずに。mxMallocmxFree

于 2010-05-02T19:57:02.070 に答える
1

除外できない可能性の1つは、コードスニペットで数値が表示されないことです。これを並行して実行すると、単にメモリを割り当てすぎている可能性があります。これが問題ではないことを確認できた場合は、質問にコメントまたは編集してください。もう一度確認します。

于 2010-05-02T10:10:45.320 に答える