CUDA和MATLAB:MEX文件在清除时崩溃MATLAB

时间:2012-11-27 12:33:00

标签: matlab cuda mex

我尝试在MATLAB中运行一些CUDA MEX文件。 (CUDA 5.0,Linux x86,MATLAB R2012a)

问题是:当我从MATLAB内部卸载函数时,使用某种cudaMalloc / cudaFree的每个MEX文件都会崩溃。

这是一个非常简单的例子(但这也适用于官方的NVidia样本):

#include <stdint.h>
#include "mex.h"

static float* d_test = NULL;

void clearMemory(void)
{
    cudaFree(d_test);
}

void cudaTest()
{
    if (d_test == NULL)
    {
        cudaMalloc((void**) &d_test, 10000 * sizeof(float));
    }

    // Do some CUDA computations here...
}


void mexFunction(int nlhs, mxArray *plhs[],
                int nrhs, const mxArray *prhs[])
{
    mexAtExit(clearMemory);
    cudaTest();
}

这就是我编译代码的方式:

function CUDA_COMPILE( func_name )

  eval(sprintf('!nvcc -I"%s/extern/include" --cuda "%s.cu" --output-file "%s.cpp"', matlabroot, func_name, func_name));
  mex('-I/usr/local/cuda/include', '-L/usr/local/cuda/lib', '-lcudart', [func_name '.cpp']);

end

代码编译并运行正常,但是一旦我从内存中清除MEX函数,MATLAB就会崩溃,即:

clear freeCudaMemory

您知道可能导致此问题的原因吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

更改声明:

void clearMemory(void)

为:

void *clearMemory(void)