2011-07-03 14 views
1

私は、異なるグリッドサイズで2回実行するカーネルを持っています。CUDA、cuPrintfが「不特定の起動失敗」を引き起こしますか?

私の問題はcuPrintfです。カーネルを実行する前にcudaPrintfInit()がなく、カーネル実行後にcudaPrintfDisplay(stdout, true)cudaPrintfEnd()がない場合、私はエラーはありませんが、そこに置くと「不特定の起動失敗」エラーが発生します。私のデバイスコードで

、このように一つだけのループは、印刷のためにそこにある:

if (threadIdx.x==0) { 
    cuPrintf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y); 
} 

私はCUDA能力を2.0とカードでCUDA 4.0を使用していますので、私はこの構文で私のコードをコンパイルしています:

nvcc LB2.0.cu -arch=compute_20 -code=sm_20 

答えて

1

あなたはCC 2.0 GPU上にある場合、あなたはまったくcuPrintfを必要としない - CUDAは、内蔵のCC-2.0以降のGPU用のprintfました。だからこれでcuPrintfにお電話を置き換える:

#if __CUDA_ARCH__ >= 200 
if (threadIdx.x==0) { 
    printf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y); 
} 
#endif 

を(あなたがsm_20も以前のバージョンのためにあなたのコードをコンパイルしている場合のみの#if/#endifの行を必要とするあなたを注意してください、あなたが与えた例のコンパイルコマンドラインで。あなたはそれらを削除することができます)。

printfでは、cudaPrintfInit()またはcudaPrintfDisplay()は必要ありません。これは自動です。しかし、多くのデータを印刷する場合は、オプションを指定して、デフォルトのprintf FIFOサイズをcudaDeviceSetLimit()に増やす必要があります。

関連する問題