现在的位置: 首页 > 综合 > 正文

cuda统计时间

2013年05月17日 ⁄ 综合 ⁄ 共 1434字 ⁄ 字号 评论关闭

在CUDA中统计运算时间,大致有三种方法:

 

<1>使用cutil.h中的函数
unsigned int timer=0;                  //创建计时器
cutCreateTimer(&timer);              //开始计时
cutStartTimer(timer);
{
     //统计的代码段
     …………
}

//停止计时
cutStopTimer(timer);

//获得从开始计时到停止之间的时间
cutGetTimerValue( timer);

//删除timer值
cutDeleteTimer( timer);

<2>time.h中的clock函数
clock_t start, finish;
float costtime;
start = clock();
{
     //统计的代码段
      …………
}
finish = clock();

//得到两次记录之间的时间差
costtime = (float)(finish - start) / CLOCKS_PER_SEC;

时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒

 

 

<3>事件event
cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecend(start,0);
{
//统计的代码段
…………
}
cudaEventRecord(stop,0);
float costtime;
cudaEventElapsedTime(&costtime,start,stop);

cudaError_t cudaEventCreate( cudaEvent_t* event )---创建事件对象;
cudaError_t cudaEventRecord( cudaEvent_t eventCUstream stream )--- 记录事件;
cudaError_t cudaEventElapsedTime( float* timecudaEvent_t startcudaEvent_t end )---计算两次事件之间相差的时间;
cudaError_t cudaEventDestroy( cudaEvent_t event )---销毁事件对象。
计算两次事件之间相差的时间(以毫秒为单位,精度为0.5微秒)。

如果尚未记录其中任何一个事件,此函数将返回cudaErrorInvalidValue。如果记录其中任何一个事件使用了非零流,则结果不确定。

 

 

我们来看看cuda创建时的模板中计时是用什么来计时的:

 

unsigned int timer = 0;          
 cutilCheckError( cutCreateTimer( &timer));
 cutilCheckError( cutStartTimer( timer));

 HelloCUDA<<<1, 1, 0>>>(device_result, 11);
 cutilCheckMsg("Kernel execution failed\n");

 cudaThreadSynchronize();
 cutilCheckError( cutStopTimer( timer));
 printf("Processing time: %f (ms)\n", cutGetTimerValue( timer));
 cutilCheckError( cutDeleteTimer( timer));

 

这里的精度就是ms

有兴趣的同学可以去试一下~

 

 

抱歉!评论已关闭.