How to properly free memories after running a MEX file

조회 수: 11 (최근 30일)
Moein Mozaffarzadeh
Moein Mozaffarzadeh 2021년 10월 6일
답변: Sivani Pentapati 2021년 11월 7일
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.

답변 (1개)

Sivani Pentapati
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:
  1. mxCalloc can be used in place of calloc
  2. mxMalloc can be used in place of malloc
  3. mxRealloc can be used in place of realloc
  4. mxFree can be used in place of free
  5. If a memory was allocated using mxcreate, mxDestroyArray can be used to free memory

카테고리

Help CenterFile Exchange에서 GPU Computing에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by