mex中的openmp:stackoverflow错误

时间:2010-05-02 08:59:45

标签: c++ matlab openmp mex

我有以下部分代码让我得到堆栈溢出错误


#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”?

此致 埃德

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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