-2

コードスニペット

   cudaEventRecord(start, 0);

   /* creates 1D FFT plan */
   cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH);
   /* executes FFT processes */
   cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD);

   cudaEventRecord(stop, 0);
   cudaEventSynchronize(stop);

cuFFT が計画を作成するのに必要な時間と実行時間の両方を測定します。

計画の作成に必要な時間を含めずに、実行時間のみを測定するにはどうすればよいですか?

4

1 に答える 1

1

プランの作成時間を除いた実行時間の計算に必要な時間は、次のスニペットで測定できます。質問の行を並べ替えるだけです。

cufftResult     cuRet ;

/* creates 1D FFT plan */
cuRet = cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH);
if (CUFFT_SUCCESS != cuRet)
{
    printf ("Failed in plan creation\n") ;
    return ;
}

cudaEventRecord(start, 0);
/* executes FFT processes */
cuRet = cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD);
if (CUFFT_SUCCESS != cuRet)
{
    printf ("Failed in FFT execution\n") ;
    return ;
}
if (cudaThreadSynchronize() != cudaSuccess)
{
    printf("Failed to synchronize\n");
    return;
}

cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);

cudaEventRecordとの戻り値を確認してください。ここcudaEventSynchronizeには示していませんが、エラーを確認する適切な方法はここにあります

于 2013-11-24T05:12:58.207 に答える