如何衡量NVIDIA CUDA的内核时间?

时间:2012-05-14 15:06:28

标签: cuda gpu gpgpu nvidia

我想测量GPU的内核时间,如何在NVIDIA CUDA中测量它? e.g。

__global__ void kernelSample()
{
  some code here
  get start time 
  some code here 
  get stop time 
  some code here
}

2 个答案:

答案 0 :(得分:36)

您可以这样做:

__global__ void kernelSample(int *runtime)
{
  // ....
  clock_t start_time = clock(); 
  //some code here 
  clock_t stop_time = clock();
  // ....

  runtime[tidx] = (int)(stop_time - start_time);
}

它给出了两次调用之间的时钟周期数。但要小心一点,计时器会在几秒后溢出,所以你应该确保连续调用之间的代码持续时间很短。您还应该知道编译器和汇编器确实执行指令重新排序,因此您可能需要检查时钟调用是否最终在SASS输出中彼此相邻(使用cudaobjdump来检查)。

答案 1 :(得分:5)

试试这个,它以毫秒为单位测量2个事件之间的时间。

  cudaEvent_t start, stop;
  float elapsedTime;

  cudaEventCreate(&start);
  cudaEventRecord(start,0);

 //Do kernel activity here

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

 cudaEventElapsedTime(&elapsedTime, start,stop);
 printf("Elapsed time : %f ms\n" ,elapsedTime);