多个CUDA内核的时间测量

时间:2017-10-23 21:25:00

标签: cuda gpu gpu-programming

如何衡量多个CUDA内核的特定时间?我试过这种方式。

   cudaEvent_t tic1, tic2, tic3, tic4;
   float time1, time2;
   cudaEventCreate(&tic1);
   cudaEventCreate(&tic2);
   cudaEventCreate(&tic3);
   cudaEventCreate(&tic4);

// launching the 1st kernel to execute on GPU
   cudaEventRecord(tic1, 0);
   kernel1<<<>>>(d_A, d_y, k, d_flag); 
   checkCuda( cudaPeekAtLastError() );  
   checkCuda(cudaDeviceSynchronize());

// calculating elapsed time on 2nd kernel               
   cudaEventRecord(tic2, 0);
   cudaEventElapsedTime(&time1, tic1, tic2);
   cudaEventSynchronize(tic2);

// launching the 2nd kernel to execute on GPU
   cudaEventRecord(tic3, 0);
   kernel2<<<>>>(d_A_sys, d_y_sys, k, d_flag); 
   checkCuda( cudaPeekAtLastError() );  
   checkCuda(cudaDeviceSynchronize());

// calculating elapsed time on 2nd kernel            
   cudaEventRecord(tic4, 0);
   cudaEventElapsedTime(&time2, tic3, tic4);

   cudaEventSynchronize(tic4);

我得到的第一个结果是正确的。但对于第二个内核,时间显示为零。

1 个答案:

答案 0 :(得分:1)

要对时间和持续时间进行复杂(和准确)的测量,您不应该依赖CUDA事件,而是使用nVIDIA的分析机制,它的分析器应用程序nvprof,或者使用visual profiler应用程序nvvp。 / p>

阅读Parallel4All博客上的这篇文章:

CUDA Pro Tip: nvprof is Your Handy Universal GPU Profiler

基本上,您启动可视化配置文件,加载可执行文件,设置命令行参数并生成可以浏览的图形时间轴;它看起来像这样:

enter image description here

或者在启用nvprof的情况下运行可执行文件(不使用可视化分析器),它将生成所有内核执行时间的csv / xml列表,CUDA API调用等,和/或分析结果文件。然后可以在视觉分析器中打开。