valgrind hat mir gesagt, dass ich in meinem Code folgendes Problem:Speicherleck - 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
Dieses Problem tritt auf in:
#pragma omp parallel for num_threads(numThreads)
in
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;
}
Ich habe versucht, setze parallelCalc in openmp freigegeben, (ich denke, das ist das Problem, nicht wahr?), aber wenn ich das tue, bekomme ich den Fehler MainController::parallelCalc is not a variable in clause shared
. Kann mir jemand einen Hinweis geben, wie man dieses Speicherproblem löst?
Gibt es einen Grund, warum Sie hier einen Zeiger verwenden? Wenn nicht, sollten Sie stattdessen ein lokales automatisches Schleifenobjekt verwenden. – NathanOliver
Sind Sie sicher, dass das Problem mit omp zusammenhängt? Verschwindet der Fehler, wenn Sie omp deaktivieren? – Mehno
ja, die serielle Version hat keine Speicherprobleme. Und es ist der gleiche Code nur ohne #pragma omp denke ich, dass openmp private prarallelcalcs für jeden Thread produziert und das ist das Problem des Lecks, nicht wahr? – Julian