【问题标题】:Returning incorrect number while adding in CUDA在 CUDA 中添加时返回错误的数字
【发布时间】:2017-09-27 01:44:41
【问题描述】:

我正在尝试遵循我找到的教程 online。我正在使用 Ubuntu 17,从命令行编译。

#include <stdio.h>
#include <iostream>

__global__ void add(int a, int b, int *c)
{
    *c = a + b;
}

int main()
{
    int a,b,c;
    int *d_c;
    int size = sizeof(int);

    a = 2;
    b = 7;

    cudaMalloc((void **)&d_c,size;
    add<<<1,1>>>(a,b,d_c);
    cudaMemcpy(&c,d_c,size,cudaMemcpyHostToDevice);
    std::cout << a << " + " << b << " = " << c << std::endl;
    cudaFree(d_c);

    return 0;
 }

当我使用nvcc 编译时,出现以下错误:

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

我忽略了警告并像往常一样运行a.out,我得到了输出:

2 + 7 = 1

上次我做数学,这是不正确的。我不确定我这样做是否不正确,或者我所遵循的教程是否太旧,或者它是否与警告有关?任何帮助或线索都可以。我还要提到,在安装gcc-5 之前,我无法使用nvcc 进行编译。我相信我已经使用我在这里找到的these instructions 将它们正确链接在一起。

我也在这里查看了this solution。但是,我没有发现答案特别有用,因此如果编译正确,我将不胜感激,为什么这没有正确打印到我的终端。

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ parallel-processing cuda gpu


    【解决方案1】:

    您对cudaMemcpy() 的呼叫不正确。您应该将结果从设备 (GPU) 内存复制到主机 (CPU) 内存,而不是其他方式。要使用的正确kind 标志是cudaMemcpyDeviceToHost

    cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost);
    

    为了简化将来的调试,请考虑实现proper CUDA API error checking 以及使用cuda-memcheckcuda-gdb、valgrind 和clang sanitizers 系统地运行您的程序。

    【讨论】:

    • 感谢您的回复。但是,我已经更新了我的代码以使用cudaMemcpyDeviceToHost,但我仍然得到 1 的结果。让我尝试错误检查,我在那个线程上取得了几次高峰,但从未想过尝试实现它。跨度>
    • 刚刚发现我的错误,非常感谢您引导我进行错误检查。 GPU Assert 返回了,no CUDA-capable device is detected hello.cu 29 我会继续研究为什么会发生这种情况。
    • 很高兴您立即实施了错误检查。有时需要一段时间才能说服这里的人们这样做。因此,错误消息说的是:您的内核函数甚至没有执行,因为 CUDA 运行时找不到支持 CUDA 的设备。确保您有一张最近的 Nvidia 卡(Fermi 及更高版本,one of these,计算能力 >= 2.0)和driver is properly installed。整理完这些,固定的代码应该可以工作了。
    • 再次感谢您,是的,我安装了 1080ti,它是兼容的。我不确定我做了什么让司机们都搞混了。但是我已经开始了一段穿越黑洞的旅程,当我运行nvidia-smi 时,我发现了Driver/Library version mismatch 的消息。所以我正试图解决这个问题。我相信错误检查是实现任何东西的最佳工具,我也非常相信调试。
    猜你喜欢
    • 2020-11-04
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多