2011-02-02 15 views
0

私は、カーネルが実行する時間を見つけるためにcudaEventメソッドを使用しています。ここには、マニュアルに記載されているコードがあります。CudaEventでのエラー記録時間

cudaEvent_t start,stop; 
    float time=0; 
    cudaEventCreate(&start); 
    cudaEventCreate(&stop);  
    cudaEventRecord(start,0); 
    subsampler<<<gridSize,blockSize>>>(img_redd,img_greend,img_blued,img_height,img_width,final_device_r,final_device_g,final_device_b); 
    cudaEventRecord(stop,0); 
    cudaEventSynchronize(stop); 
    cudaEventElapsedTime(&time,start,stop); 

今、私はこれを実行すると、それは52428800.0000のようなものを(値が異なるが、この程度である).Iは、それがミリ秒である知っているが、それでも、これは膨大な数の場合は特に、このプログラムで来て時間を確認しようとすると、実行が1分以上かかるわけではありません。誰かがこれがなぜ起こっているのかを指摘することができます。カーネルが実行するのにどれくらいの時間がかかります。

答えて

0

これらの各CUDAコールの戻り値を確認する必要があります。少なくとも、最後にcudaGetLastError()を呼び出して、すべてが成功したことを確認してください。

カーネルの実行中にエラーが発生した場合は、cuda-memcheckを使用してアプリケーションを実行してください。特に、起動できない不具合がある場合は、不正なメモリアクセスをチェックしてください。

+0

プログラムを終了する前にrep.IのcudaGetLastError()関数を呼び出すと "エラーなし"というメッセージが表示されます。イメージを書き込んでいて、正しく表示されるため、コードは大丈夫です。私は午前ただ、実行するのに1分もかからないプログラムのためになぜそのような大きな数字が現れるのだろうと驚いただけです。 – Manish

+0

あなたはどのプラットフォームを使用していますか(OSとビット数、CUDAバージョン)?ホストとデバイスの両方が同じビット数でコンパイルされていることを確認します。つまり、64ビットホスト用にコンパイルする場合は、nvccコマンドラインに '-m64'があることを確認してください。 – Tom

関連する問題