很长一段时间以来,我一直试图弄清楚这一点。
我在使用 CUDA 的 matlab(Linux 64 位)中使用 MEX 文件。代码编译并执行得很好,但是当我想卸载 mex 时(例如重新编译它或 matlab 退出时),matlab 立即崩溃,没有任何消息并且转储为空。
我能够将其简化为一个最小的工作示例:
墨西哥 cpp 文件:
#include <stdint.h>
#include "mex.h"
extern "C" void cudaTest();
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
cudaTest();
}
使用 NVCC 编译的 CUDA 文件:
void cudaTest() {
float* d_test = NULL;
cudaMalloc((void**) &d_test, 10000 * sizeof(float));
cudaFree(d_test);
}
虽然我的真实程序总是崩溃,但这个最小的例子并不总是可重现的。有时它会崩溃有时不会..