Valgrind сказал мне, что я следующая проблема в моем коде:Memory Leak - OpenMP
LEAK SUMMARY:
==18114== definitely lost: 0 bytes in 0 blocks
==18114== indirectly lost: 0 bytes in 0 blocks
==18114== possibly lost: 1,776 bytes in 3 blocks
==18114== still reachable: 2,320 bytes in 4 blocks
==18114== suppressed: 0 bytes in 0 blocks
Эта проблема возникает в:
#pragma omp parallel for num_threads(numThreads)
в
parallelCalc= new Calculator[numOff];
#pragma omp parallel for num_threads(numThreads)
for(int i = 1; i<=numOff;i++)
{
std::stringstream sstm;
sstm << filename <<"/" << i<<".off";
std::string aktFilename = sstm.str();
Polyhedron *poly = new Polyhedron(aktFilename.c_str());
parallelCalc[i-1].init(poly,consistentTargets->points,numTarget);
parallelCalc[i-1].hfield();
delete poly;
}
Я пытался установить parallelCalc, совместно используемый в openmp, (я думаю, что это проблема, не так ли?), но когда я это делаю, получаю ошибку MainController::parallelCalc is not a variable in clause shared
. Может ли кто-нибудь дать мне подсказку, как решить эту проблему с памятью?
Есть ли причина, по которой вы используете указатель здесь? Если нет, вы должны использовать локальный автоматический объект цикла. – NathanOliver
Неужели проблема связана с omp? Ошибка при исчезновении ошибки, если вы отключите omp? – Mehno
Да, серийная версия не имеет проблем с памятью. И это тот же код, что и без #pragma omp, я думаю, что openmp производит частные параллельные вычисления для каждого потока, и это проблема утечки, не так ли? – Julian