【发布时间】:2020-03-07 20:25:27
【问题描述】:
我的简单C++ cuda代码源代码
#include <iostream>
#include <cuda.h>
using namespace std;
__global__ void AddIntsCUDA(int *a, int *b, int *c)
{
*c = *a + *b;
}
int main()
{
int a, b, c;
int *d_a, *d_b, *d_c;
int size = sizeof(int);
cudaMalloc((void **)&d_a, size);
cudaMalloc((void **)&d_b, size);
cudaMalloc((void **)&d_c, size);
a = 10;
b = 35;
c = 0;
cudaMemcpy(d_a, &a, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, &b, size, cudaMemcpyHostToDevice);
AddIntsCUDA<<<1, 1>>>(d_a, d_b, d_c);
cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost);
cout << "The Answer is "<< c << endl;
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
system("pause");
return 0;
}
Console Output 输出显示 c = 0,但我期望 a 和 b 输出的总和(应该像这个 45,因为 a = 10,b = 35) 解释一下这段代码到底发生了什么
【问题讨论】:
-
您忽略了从 Cuda 函数返回的值。他们不返回错误吗?
-
显示 err = 35 它基本上是运行时错误代码
-
Cuda 错误 35 是“cudaErrorInsufficientDriver”。来自文档:这表明安装的 NVIDIA CUDA 驱动程序比 CUDA 运行时库旧。这不是受支持的配置。用户应安装更新的 NVIDIA 显示驱动程序以允许应用程序运行。在此处检查兼容性:docs.nvidia.com/deploy/cuda-compatibility/index.html.
-
@iliar 在我看来(但诚然可能不是其他人......我不能保证),你的贡献也可以变成一个答案。与 Daniel 形成鲜明对比的是,强调您对调试的建议。他们对解决问题的不同方式提出了单独的并且在我看来也很有帮助的答案。或者,由于您之前的评论提到了文档和一般正确答案,您可以对此进行解释并参考 Daniels 更直接适用的链接。
-
zaid 请立即更改相应的代码。请注意,通常必须非常小心地更改已经有答案的问题。 SO 用户不喜欢“移动目标”问题,这是危险的地方。但是,如果考虑到历史,我提出的编辑仍将充分匹配现在存在的答案。我添加了一个解释并希望保护对 iliars 好答案的评论。