簡體   English   中英

未調用CUDA內核函數

[英]CUDA kernel function not called

我剛開始使用CUDA,但遇到了一些問題。 我在下面發布的代碼基本上是NVIDIA網站上最簡單的示例,並添加了一些內存副本和打印語句以確保其正常運行。

代碼可以編譯並運行而不會產生抱怨,但是當我打印矢量c時,它全為零,就好像根本沒有調用GPU內核函數一樣。

幾乎是完全一樣的,因為這后基本CUDA -讓內核使用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;
}

在上一個cudaMemcpy調用中,您傳遞的內存復制方向標志不正確。

cudaMemcpy( c, C, sizeof(float)*N, cudaMemcpyHostToDevice );

它應該是:

cudaMemcpy( c, C, sizeof(float)*N, cudaMemcpyDeviceToHost );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM