的valgrind告訴我,我已經在我的代碼如下問題:發生內存泄漏 - 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;
}
我試着在openmp中設置parallelCalc共享(我認爲這是問題,不是嗎?)但是當我這樣做時,出現錯誤MainController::parallelCalc is not a variable in clause shared
。 任何人都可以給我一個提示,如何解決這個內存問題?
你有什麼理由在這裏使用指針嗎?如果沒有,則應該使用循環本地自動對象。 – NathanOliver
是否確定問題與omp有關?如果您禁用omp,錯誤會消失嗎? – Mehno
是的,序列版本沒有內存問題。這是相同的代碼只是沒有#pragma omp我認爲,openmp爲每個線程產生私有的並行運算,這是泄漏的問題,不是嗎? – Julian