Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ mex中的openmp:堆栈溢出错误_C++_Matlab_Openmp_Mex - Fatal编程技术网

C++ mex中的openmp:堆栈溢出错误

C++ mex中的openmp:堆栈溢出错误,c++,matlab,openmp,mex,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 =

我得到了以下代码的一小部分,这些代码导致堆栈溢出错误


#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创建。它们会消耗大量内存

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

问候
Edwin

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

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

在mex文件中使用
mxMalloc
代替
malloc
(请参阅)。使用完内存后,不要忘了
mxFree

在mex文件中使用
mxMalloc
代替
malloc
(请参阅)。内存用完后,别忘了
mxFree

何时/何地释放动态分配的内存?何时/何地释放动态分配的内存?@Edwin:是的,我从您的操作中看到了。
malloc
通常在mex文件中工作正常,但这是不可靠的:我发现我运行的代码是相同的,它有时有效,有时无效。我将切换到
mxMalloc
并测试它。对于其他问题,最好看到更大的代码段,包括free.mxMalloc不是线程安全的,因为所有mx*命令都是线程安全的,应该避免在并行区域中使用。@Edwin:是的,我从您的OP中看到了这一点。
malloc
通常在mex文件中正常工作,但这是不可靠的:我发现我运行的代码是相同的,它有时有效,有时无效。我将切换到
mxMalloc
并测试它。对于其他问题,最好看到更大的代码段,包括free.mxMalloc不是线程安全的,所有mx*命令也是如此,应该避免在并行区域中使用。