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