为什么cudaMalloc返回非法内存访问

时间:2015-03-23 18:50:19

标签: c matlab cuda mex

我正在为MATLAB编写mexFunction,并且我已经使用MATLAB示例运行了CUDA MEX功能,没有任何问题。

下面是一个简单的"将数据加载到设备"脚本。它返回3条消息,第一条消息在cudaMalloc之前,另外两条消息在cudMalloc函数之后。

没有错误
cudaMalloc失败了!遇到了非法的内存访问 遇到非法的内存访问

系统:Win7 64Bit,MATLAB 2015a,VS2012 Professional,CUDA 6.5。

有什么想法吗?它对我来说是正确的。

代码:

void process(double *x, double *y, size_t n)
{
float *d_x, *d_y; // Pointers to data on Device.
cudaError_t cudaStatus;

cudaStatus = cudaSetDevice(0);
if (cudaStatus != cudaSuccess) {
    mexPrintf("cudaSetDevice failed!  Do you have a CUDA-capable GPU installed?");        
}   

// Check If no Errors with GPU so far
mexPrintf(cudaGetErrorString(cudaGetLastError()));  mexPrintf("\n");

// Allocate Memory on Device    
cudaStatus = cudaMalloc( (void**)&d_x, n * sizeof(float) );
if (cudaStatus != cudaSuccess) {
    mexPrintf("cudaMalloc failed!  ");        
}
mexPrintf(cudaGetErrorString(cudaGetLastError()));  mexPrintf("\n");

cudaStatus = cudaMalloc( (void**)&d_y, n * sizeof(float) );
mexPrintf(cudaGetErrorString(cudaGetLastError()));  mexPrintf("\n");

// free the memory allocated on the GPU
cudaFree( d_x );
cudaFree( d_y ); }

1 个答案:

答案 0 :(得分:1)

我通过重新启动计算机解决了这个问题,问题中的上述代码工作正常

我只能假设在先前的代码迭代中先前的错误内存分配导致GPU失败。

如果有人对发现这一点有任何见解,或重新初始化设备而不重新启动,我很乐意听到它!

由于