【发布时间】:2012-09-11 20:51:40
【问题描述】:
以下代码有问题,在执行对 cublasSrotg 的调用时,它会引发异常:“访问冲突写入位置 0x05200600”,这是“dA”指针的地址。运行调试器时,它似乎跳过了对 cudaMalloc 的调用,但我不知道我做错了什么。
cublasHandle_t handle;
cublasCreate(&handle);
float hA[SIZE] = { 1.0f, 2.0f, 3.0f, 4.0f };
int sizef = sizeof(float);
float* dA;
cudaMalloc((void**)&dA, SIZE * sizef);
cublasSetVector(SIZE, sizef, hA, 1, dA, 1);
float s, c;
cublasSrotg(handle, dA, dA + N, &c, &s);
cublasSrot(handle, N, dA, 1, dA + N, 1, &c, &s);
cublasGetVector(SIZE, sizef, dA, 1, hA, 1);
...
【问题讨论】:
-
我建议添加 cuda 错误检查。您可以在 google 上找到有关 cuda 错误检查的更多信息。这将帮助您查看代码哪里出错以及 cuda 错误是什么。
-
cudaError 错误 = cudaMalloc((void**)&dA, SIZE * sizef);看看它返回了什么。如果 cudaMalloc 没有错误,请检查您是否为函数提供了正确的参数。