2012-03-01 17 views
0

私はGeForce 9800 GX2を使用しています。私は、ドライバをインストールし、CUDA SDK私はこのようにSを見て簡単なプログラムを書いた:CUDAカーネルが起動しない

__global__ void myKernel(int *d_a) 
{ 
    int tx=threadIdx.x; 
    d_a[tx]+=1; 
    cuPrintf("Hello, world from the device!\n"); 


} 
int main() 
{ 
    int *a=(int*)malloc(sizeof(int)*10); 
    int *d_a; 
    int i; 
    for(i=0;i<10;i++) 
     a[i]=i; 
    cudaPrintfInit(); 
    cudaMalloc((void**)&d_a,10*sizeof(int)); 
    cudaMemcpy(d_a,a,10*sizeof(int),cudaMemcpyHostToDevice); 
    myKernel<<<1,10>>>(d_a); 
    cudaPrintfDisplay(stdout, true); 
    cudaMemcpy(a,d_a,10*sizeof(int),cudaMemcpyDeviceToHost); 

    cudaPrintfEnd(); 
    cudaFree(d_a); 
} 

は、コードが正常にコンパイルされますが、カーネルは...何のメッセージがカーネル側から出力されません起動してはならないと思われます。これを解決するにはどうすればよいですか?

+4

あなたは、いくつかのエラーチェックを追加することによって開始することができます。これらのAPI呼び出しのすべてがステータスを返します。どのエラーが報告されているのか、そしてどのようなエラーが発生しているのかを確認するために、それらのすべてをチェックする必要があります。 – talonmies

+0

また、SDKサンプルコードを実行しましたか? LinuxまたはWindows? SDKサンプルはコンパイルされ、動作しますか?それらのすべて? – Patrick87

+0

私はランタイムエラーを識別するためのAPIを入れてみましたが、それはまたuser997704 @ –

答えて

1

は、あなたのコメントの中で、あなたがCUDA対応のGPUを持っているか、あなたは正しいドライバがインストールされていないということはありませんどちらかのことを意味し、「ノーCUDA対応デバイス」を取得していると言うことを考えます。両者があると言えば、確認のためにドライバを再インストールすることをお勧めします。

他のいくつかの注意事項:

  1. リモートデスクトップを介してこれをやろうとしていますか?これは、RDP Microsoftは、リモートでの表示を転送するためにRDPを非表示デバイスとしてではなく、のGeForceのような表示のGPUとGPUの振る舞いをすることによって動作することができますテスラGPUをサポートTCCをダミーの表示装置を使用しているため動作しません。これは不可能です。コンソールで実行するか、コンソールでログインしてVNCを使用します。
  2. はまた、それが正しくGPUとドライバ/ランタイムバージョンを検出したことを確認しDEVICEQUERY SDKサンプルコードを実行してみてください。
  3. すべてのCUDA API呼び出しでエラーをチェックする必要があります。 cudaPrintfDisplay()
  4. コールcudaDeviceSynchronize()
関連する問題