openmp в mex: ошибка stackoverflow - PullRequest
0 голосов
/ 02 мая 2010

я получил следующую часть кода, которая выдает мне ошибку переполнения стека


#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 ]

2 голосов
/ 02 мая 2010

Вместо malloc используйте mxMalloc в mex файлах (см. здесь ). Не забудьте mxFree, когда вы закончите с памятью.

1 голос
/ 02 мая 2010

Одна возможность, которую мы не можем исключить, ваш фрагмент кода не показывает никаких чисел, это то, что вы просто пытаетесь выделить слишком много памяти, когда выполняете это параллельно. Если вы можете подтвердить, что это не ваша проблема, прокомментируйте или отредактируйте свой вопрос, и я еще раз посмотрю.

...