1

GPU で画像フィルターを実行していて、プログラムの各部分の比較にかかる時間を測定する必要があります。最初に time.h ライブラリを試しましたが、常にゼロが返されました。それから私はこの投稿を読みました

カーネルを呼び出す前後にプログラムで同じコードを使用しましたが、それでもゼロを返しています。誰が問題が何であるか教えてもらえますか?

これは私のコードです:

cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
float Elapsed=0,Cycle;
while(count)
{
    cudaEventRecord(start,0);
    ImgFilter<<<dimGrid,dimBlock>>>...
    cudaEventRecord(stop,0);
    cudaElapsedTime(&Cycle,statr,stop);
    Elapsed += Cycle;
}
printf("Time = %f",Elapsed);

「Cycle」も印刷してみましたが、常にゼロです。

4

1 に答える 1

3

cudaEventSynchronize関数を呼び出せません

cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
float Elapsed=0,Cycle;
while(count)
{
    cudaEventRecord(start,0);
    ImgFilter<<<dimGrid,dimBlock>>>...
    cudaEventRecord(stop,0);
    cudaEventSynchronize(stop);
    cudaElapsedTime(&Cycle,statr,stop);
    Elapsed += Cycle;
}
printf("Time = %f",Elapsed);

cudaThreadSynchronizeデバイス関数はすべてのCUDAスレッドの実行が完了する前に戻るため、カーネル呼び出しの後に使用する必要があることに注意してください。

于 2012-05-31T06:38:26.617 に答える