2017-08-19 4 views
-1

私はちょうどCUDAとCを始めており、簡単な追加をしようとしています。私は結果を印刷しようとすると 、私は取得しています出力として、次の CUDA不正確な答えを与えるベクトルの例を追加する

は私がしてa.outを生成するコマンド「NVCCのtest.cu」を実行しています、コードをコンパイルするには、「+ 4 3が1です」

ありがとうございました。

#include <stdio.h>                     

__global__ void add(int a, int b, int *c){               
     *c = a + b;                     
}                         

int main(){                                               
     int a,b,c;                     
     int *dev_c;                     

     a=3;                      
     b=4;                      

     cudaMalloc((void**)&dev_c, sizeof(int));             
     add<<<1,1>>>(a,b,dev_c);                 
     cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);         
     printf("%d + %d is %d\n", a, b, c);               
     cudaFree(dev_c); 

     return 0;                     
} 
+0

'int * dev_c;'の値と '* cudaMemcpy'に渡す前に値*を指していることを知りたいことがあります。私は知らない、ちょうどデバッグの疑惑。 –

+0

高速かつ簡単なデバッグのために、printfをカーネルに移動して、実際に実行され、パラメータが正しいかどうかを確認することもできます。 – dari

+0

@dariはカーネルで 'printf'を使うべきではありませんか? –

答えて

1

デバッグ目的のために、あなたはカーネル内のprintfを使用する必要があります。ここでは

はtest.cuです。しかし、私はあなたの問題はcudaMemcpyがよく

cudaMemcpy(& C、dev_c、はsizeof(int型)、cudaMemcpyDeviceToHost)が動作しませんでしたので、dev_cは生のポインタではないことだと思います。

関連する問題