私はかなり前からこれを理解しようとしてきました。
CUDAを使用するmatlab(Linux 64ビット)のMEXファイルを使用しています。コードは正常にコンパイルおよび実行されますが、mexをアンロードする場合(たとえば、再コンパイルする場合やmatlabが終了する場合)、matlabはメッセージなしで、空のダンプですぐにクラッシュします。
私はそれを最小限の実用的な例に減らすことができました:
MEX 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);
}
私の実際のプログラムでは常にクラッシュしますが、この最小限の例では常に再現できるとは限りません。クラッシュすることもあれば、クラッシュしないこともあります。