我有一个MATLAB mex库,可以在运行时加载特定于问题的cubin文件。这个mex函数被MATLAB调用了几百次。当我调用cuModuleLoad时,内核是否每次都被CUDA重新加载?还是以某种方式缓存?如果没有,有没有办法将加载的模块保持在两者之间?我目前没有调用cuModuleUnload。
似乎CUDA上下文仅为MATLAB过程创建一次,因为只有第一次调用库的速度很慢。对mex库的后续matlab函数调用很快。所以我想我可以假设正在重用相同的CUDA上下文。
答案 0 :(得分:2)
简短的回答是肯定的,你可以重复使用它们。
MEX文件中的C ++中的全局/静态变量或静态成员仅在MEX文件动态加载时创建一次,只要它们不依赖于Matlab内存管理器(mxMalloc
,mxCreateNumericArray
,等等)。当Matlab退出或MEX文件由clear mex
卸载时,它们将被销毁。此外,可以使用MEX API保护MEX文件:mexLock
以防止意外卸载,mexAtExit
注册析构函数回调等等。