CUDA采用EVENT统计时间二三事

来源:互联网 发布:linux服务器远程登录 编辑:程序博客网 时间:2024/05/10 12:37

在统计GPU的计算时间时,使用CUDAEVENT来计时,基本格式如下:

1.定义开始结束事件并初始化创建实例

cudaEvent_t start,stop;

cudaEventCreate(&start);

cudaEventCreate(&stop);

2.计时开始与结束

cudaEventRecord(start,0);

{

  //统计的代码段

   …………

}

cudaEventRecord(stop,0);

3.同步(这一步尤其重要,缺少该步骤时间永远为0)

cudaEventSynchronize();

4.计算相差时间

float costtime;

cudaEventElapsedTime(&costtime,start,stop);

5,销毁(养成好的习惯)

cudaEventDestroy( start );

cudaEventDestroy( stop );

实例

cudaEvent_t start, stop;float time;cudaEventCreate(&start);cudaEventCreate(&stop);cudaEventRecord( start, 0 );kernel<<<grid,threads>>> ( d_odata, d_idata, size_x, size_y, NUM_REPS);cudaEventRecord( stop, 0 );cudaEventSynchronize( stop );//注意函数所处位置cudaEventElapsedTime( &time, start, stop );cudaEventDestroy( start );cudaEventDestroy( stop );


补充问题

利用CUDA event计算程序执行时间,得到的结果一直为0.00000ms??

原因就是没有用cudaEventSynchronize() 或同步的位置不正确,一定要在两侧record之后