CUDA返回值错误35的含义是什么?

3

我简单的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;
}

控制台输出 输出显示 c = 0,但我期望输出 a 和 b 的和(应该是 45,因为 a = 10,b = 35) 请解释一下这段代码到底发生了什么


1
你正在忽略从Cuda函数返回的值。它们不会返回错误吗? - Daniel Langr
1
显示 err = 35,基本上是运行时错误代码。 - r00tk1ll3r
4
Cuda错误35是“cudaErrorInsufficientDriver”。根据文档:这表示安装的NVIDIA CUDA驱动程序比CUDA运行时库旧。这不是受支持的配置。用户应安装更新的NVIDIA显示驱动程序以允许应用程序运行。在此处检查兼容性:https://docs.nvidia.com/deploy/cuda-compatibility/index.html。 - Daniel Langr
1
在我看来(但可能不同于其他人...我不能保证),您的贡献也可以转化为一个答案。与丹尼尔形成对比,强调您对调试的建议。它们可以作为一个单独的、在我看来也有帮助的答案,提供解决问题的不同方式。或者,既然您之前评论中提到了文档和一般正确的答案,您可以解释一下并参考丹尼尔更直接适用的链接。 - Yunnosch
1
请现在进行适当的代码更改。请注意,通常情况下更改已有答案的问题必须非常小心。SO用户不喜欢“移动目标”问题,这是危险的。但是,如果考虑到历史记录,我建议的编辑仍将足够匹配现有的答案。我在iliars的好答案中添加了一个解释性和保护性的评论。 - Yunnosch
显示剩余15条评论
1个回答

2

你不需要存储它,只需使用std::cout << cudaGetErrorString(err); - iliar
1
大家好,投票的 Stack Overflow 用户们。如果问题已经显示了所提出的调试工具,请不要因为这个答案提出它而抱怨(对于那些遇到同样问题的人来说,这是一个非常有用的答案),也不要因为这个答案后面加上了它而抱怨问题本身(这是一个更有帮助的问题,包括标题和这个调试代码)。请看看历史和共同目标。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接