CUDA上下文中模块的持久性

时间:2014-03-28 07:06:14

标签: matlab cuda nvidia mex

我有一个MATLAB mex库,可以在运行时加载特定于问题的cubin文件。这个mex函数被MATLAB调用了几百次。当我调用cuModuleLoad时,内核是否每次都被CUDA重新加载?还是以某种方式缓存?如果没有,有没有办法将加载的模块保持在两者之间?我目前没有调用cuModuleUnload。

似乎CUDA上下文仅为MATLAB过程创建一次,因为只有第一次调用库的速度很慢。对mex库的后续matlab函数调用很快。所以我想我可以假设正在重用相同的CUDA上下文。

1 个答案:

答案 0 :(得分:2)

简短的回答是肯定的,你可以重复使用它们。

MEX文件中的C ++中的全局/静态变量或静态成员仅在MEX文件动态加载时创建一次,只要它们不依赖于Matlab内存管理器(mxMallocmxCreateNumericArray,等等)。当Matlab退出或MEX文件由clear mex卸载时,它们将被销毁。此外,可以使用MEX API保护MEX文件:mexLock以防止意外卸载,mexAtExit注册析构函数回调等等。