【发布时间】:2015-02-07 17:12:24
【问题描述】:
我是 CUDA 编程的初学者,但这种情况看起来并不复杂,但它不起作用。
#include <cuda.h>
#include <cuda_runtime.h>
#include <iostream>
__global__ void add(int *t)
{
t[2] = t[0] + t[1];
}
int main(int argc, char **argv)
{
int sum_cpu[3], *sum_gpu;
sum_cpu[0] = 1;
sum_cpu[1] = 2;
sum_cpu[2] = 0;
cudaMalloc((void**)&sum_gpu, 3 * sizeof(int));
cudaMemcpy(sum_gpu, sum_cpu, 3 * sizeof(int), cudaMemcpyHostToDevice);
add<<<1, 1>>>(sum_gpu);
cudaMemcpy(sum_cpu, sum_gpu, 3 * sizeof(int), cudaMemcpyDeviceToHost);
std::cout << sum_cpu[2];
cudaFree(sum_gpu);
return 0;
}
我是这样编译的
nvcc main.cu
它可以编译,但返回值为 0。我尝试从内核中打印,但它不会打印,所以我假设我没有执行。你能解释一下为什么吗?
【问题讨论】:
-
将proper cuda error checking 添加到您的代码中。您也可以尝试使用
cuda-memcheck运行您的代码。 -
感谢您的提示。错误检查在第一个 cudaMalloc 上报告“未知错误”。
cuda-memcheck检测到 0 个错误。 -
您的机器配置有问题。 CUDA 在该机器上无法正常工作,因为它没有正确安装,或者因为其他一些机器问题。您可能需要仔细遵循 the getting started guide appropriate for your OS 中的说明,包括验证步骤。
-
好的,这可能是一个原因,谢谢。
标签: cuda