- 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
13 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (1)
Sivani Pentapati
el 7 de Nov. de 2021
The crashes can be related to creation and destruction of pointers. The following mex functions can be used instead of inbuilt C functions:
0 comentarios
Ver también
Categorías
Más información sobre GPU Computing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!