2

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

この問題の原因は何か分かりますか? 前もって感謝します!

4

1 に答える 1

2

次の変更宣言:

void clearMemory(void)

に:

void *clearMemory(void)
于 2013-02-22T12:33:23.590 に答える