How to properly free memories after running a MEX file

3 views (last 30 days)
Moein Mozaffarzadeh
Moein Mozaffarzadeh on 6 Oct 2021
Answered: Sivani Pentapati on 7 Nov 2021
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.

Answers (1)

Sivani Pentapati
Sivani Pentapati on 7 Nov 2021
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

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by