- mxCalloc can be used in place of calloc
- mxMalloc can be used in place of malloc
- mxRealloc can be used in place of realloc
- mxFree can be used in place of free
- If a memory was allocated using mxcreate, mxDestroyArray can be used to free memory
How to properly free memories after running a MEX file
조회 수: 4 (최근 30일)
이전 댓글 표시
Hi,
I have written a MEX function in CUDA and C. When I run this MEX function in a loop, Matlab crashes after 200 iterations (more or less). When i look at the report, it says: memory access violation. See the attachement for more details please.
I've gone through my code and made sure that I use "cudaFree" and "delete [ ]" (at the end of the code) for every "cudaMalloc" and "new" commnad I use to allocate memory in the device (GPU) and host (CPU). I also have used "mexAtExit(cleanup);" at the end.
void cleanup()
{
mexPrintf("Memory cleanup completed, return: %d\n", cudaThreadExit());
return;
}
What else do I need to be careful with? Obviously, I'm missing something. Otherwise, Matlab should not crash, right?
Of course I can use "cudaDeviceReset();" at the end of the code to free up all the memories, but it imposes a delay to my code which is not welcome. So, i do not want to use this command.
Please help.
Moein.
댓글 수: 0
답변 (1개)
Sivani Pentapati
2021년 11월 7일
The crashes can be related to creation and destruction of pointers. The following mex functions can be used instead of inbuilt C functions:
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 GPU Computing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!