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