我刚开始使用CUDA,我有一些问题。下面我发布的代码基本上是NVIDIA网站上最简单的例子,添加了一些内存副本和打印语句,以确保其运行正常。
代码编译并运行,没有抱怨,但是当我打印向量c时,它得到了所有的零,好像GPU内核函数根本没有被调用一样。
这几乎和这个帖子Basic CUDA - getting kernels to run on the device using C++完全一样。
症状是一样的,虽然我似乎没有犯这个错误。有什么想法吗?
#include <stdio.h>
static const unsigned short N = 3;
// Kernel definition
__global__ void VecAdd(float* A, float* B, float* C)
{
int i = threadIdx.x;
C[i] = A[i] + B[i];
}
int main()
{
float *A, *B, *C;
float a[N] = {1,2,3}, b[N] = {4,5,6}, c[N] = {0,0,0};
cudaMalloc( (void **)&A, sizeof(float)*N );
cudaMalloc( (void **)&B, sizeof(float)*N );
cudaMalloc( (void **)&C, sizeof(float)*N );
cudaMemcpy( A, a, sizeof(float)*N, cudaMemcpyHostToDevice );
cudaMemcpy( B, b, sizeof(float)*N, cudaMemcpyHostToDevice );
VecAdd<<<1, N>>>(A, B, C);
cudaMemcpy( c, C, sizeof(float)*N, cudaMemcpyHostToDevice );
printf("%f %f %f\n", c[0],c[1],c[2]);
cudaFree(A);
cudaFree(B);
cudaFree(C);
return 0;
}
发布于 2014-02-24 01:07:37
在上一次cudaMemcpy
调用中,您传递了不正确的内存复制方向标志。
cudaMemcpy( c, C, sizeof(float)*N, cudaMemcpyHostToDevice );
它应该是:
cudaMemcpy( c, C, sizeof(float)*N, cudaMemcpyDeviceToHost );
https://stackoverflow.com/questions/21982826
复制相似问题