对CUDA内核函数运行时间测量的方法

方法一:

[cpp]  view plain  copy
  1. cudaEvent_t start1;  
  2. cudaEventCreate(&start1);  
  3. cudaEvent_t stop1;  
  4. cudaEventCreate(&stop1);  
  5. cudaEventRecord(start1, NULL);  
  6. // 需要测时间的内核函数kernel;  
  7. cudaEventRecord(stop1, NULL);  
  8. cudaEventSynchronize(stop1);  
  9. float msecTotal1 = 0.0f;  
  10. cudaEventElapsedTime(&msecTotal1, start1, stop1);  

方法二:

[cpp]  view plain  copy
  1. StopWatchInterface * timer_cublas;  
  2. sdkCreateTimer(&timer_cublas);  
  3. sdkStartTimer(&timer_cublas);  
  4. // 需要测时间的内核函数kernel;  
  5. cudaSyncThreads()  
  6. sdkStopTimer(&timer_cublas);  
  7. double dSeconds = sdkGetTimerValue(&timer_cublas)/((double)nIter);  

关于方法二中的cudaSyncThreads()说明,如果在sdkStopTimer之前不加该函数,会导致测量时间仅仅是核函数在CPU上启动的耗时,而没有考虑在GPU中的耗时,使得结果和方法一小很多。所以要等CUDA启动的GPU线程同步之后,才能停止计时,这样得到的耗时才是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值