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.....

}  

在 shared 中声明的变量是由 malloc 创建的。它们消耗大量内存

关于上述代码有2个问题。1)为什么在进入并行for循环之前会产生堆栈溢出错误(即分段错误)?它在顺序模式下运行时工作正常...... 2)我是否有权为每个线程动态分配内存,如上面的“normalized_p_gn”?

问候埃德温

4

2 回答 2

2

代替malloc,mxMalloc在 mex 文件中使用(请参见此处)。mxFree当你完成记忆时不要忘记。

于 2010-05-02T19:57:02.070 回答
1

我们不能排除的一种可能性是,您的代码片段没有显示任何数字,即您只是在并行运行时试图分配过多的内存。如果您可以确认这不是您的问题,请评论或编辑您的问题,我会再看一下。

于 2010-05-02T10:10:45.320 回答