gpt4 book ai didi

c++ - 在 CUDA 中添加时返回不正确的数字

转载 作者:行者123 更新时间:2023-11-28 01:43:00 24 4
gpt4 key购买 nike

我正在尝试按照我找到的教程进行操作 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 警告:“compute_20”、“sm_20”和“sm_21”架构已弃用,可能会在未来的版本中删除(使用 -Wno-deprecated-gpu-targets 来抑制警告)。

我忽略了警告并照常运行 a.out,我得到了输出:

2 + 7 = 1

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

我也看过this solution这里也是。但是,我没有发现答案特别有用,所以如果编译正确,我会很感激一些见解,为什么它没有正确打印到我的终端。

任何帮助将不胜感激。

最佳答案

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

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

为了方便以后调试,考虑实现proper CUDA API error checking以及使用 cuda-memcheck 系统地运行您的程序, cuda-gdb 、valgrind 和 clang sanitizer 。

关于c++ - 在 CUDA 中添加时返回不正确的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46438221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com