How to properly free memories after running a MEX file
3 views (last 30 days)
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.
mexPrintf("Memory cleanup completed, return: %d\n", cudaThreadExit());
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.