在添加CUDA时返回错误的数字
Returning incorrect number while adding in CUDA
我正在尝试遵循我在网上找到的教程。我使用的是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
编译。我相信我已经使用这些说明正确地将它们链接在一起。
我也在这里也查看了此解决方案。但是,我没有发现答案特别有用,因此如果正确编译的话,我会很感激,为什么它不能正确地打印到我的终端。
任何帮助将不胜感激。
您对cudaMemcpy()
的呼叫不正确。您应该从设备(GPU)内存将结果复制到主机(CPU)内存,而不是其他方式。正确使用的kind
标志是cudaMemcpyDeviceToHost
:
cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost);
为了简化未来的调试,请考虑实现适当的CUDA API错误检查以及使用cuda-memcheck
,cuda-gdb
,Valgrind和Clang SaniTizers系统地运行程序。
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 错误含义;以二进制形式打印数字
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 分布MPI散点错误的数字
- 涉及模运算符优先级的错误以及C++中具有大数字的括号
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 为什么C++显示错误的数字?
- 错误:数字常量 #define BOOT_PROTOCOL 0x00 之前的预期'>'
- 我的代码似乎在查找最大数字时存在语法错误
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- C++:按数字排序链表错误
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- 一个数字的提升精神解析器的分段错误
- 错误:数字常数之前的预期无限制ID:std :: array和std ::向量大小分配
- C++数组中的错误数字
- 构造函数错误:错误:数字常量之前的预期“”,“”或“..”
- [错误]数字常量之前的预期标识符.-setlocale
- 错误:“数字”之前的预期类型说明符