我正在为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 ); }
答案 0 :(得分:1)
我通过重新启动计算机解决了这个问题,问题中的上述代码工作正常
我只能假设在先前的代码迭代中先前的错误内存分配导致GPU失败。
如果有人对发现这一点有任何见解,或重新初始化设备而不重新启动,我很乐意听到它!
由于