多CUDA核的时间测量

多CUDA核的时间测量,cuda,gpu,Cuda,Gpu,如何测量多个CUDA内核的特定时间?我试过这种方法 cudaEvent_t tic1, tic2, tic3, tic4; float time1, time2; cudaEventCreate(&tic1); cudaEventCreate(&tic2); cudaEventCreate(&tic3); cudaEventCreate(&tic4); // launching the 1st kernel to execut

如何测量多个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);
cudaEvent_t tic1、tic2、tic3、tic4;
浮动时间1,时间2;
cudaEventCreate(&tic1);
cudaEventCreate(&tic2);
cudaEventCreate(&tic3);
cudaEventCreate(&tic4);
//启动要在GPU上执行的第一个内核
cudaEventRecord(tic1,0);
内核1(d_A,d_y,k,d_标志);
选中CUDA(cudaPeekAtLastError());
选中CUDA(cudaDeviceSynchronize());
//计算第二个内核上的运行时间
cudaEventRecord(tic2,0);
CudaEventReleasedTime(&time1,tic1,tic2);
cudaEventSynchronize(tic2);
//启动第二个内核在GPU上执行
cudaEventRecord(tic3,0);
内核2(d_A_sys,d_y_sys,k,d_标志);
选中CUDA(cudaPeekAtLastError());
选中CUDA(cudaDeviceSynchronize());
//计算第二个内核上的运行时间
cudaEventRecord(tic4,0);
CudaEventReleasedTime(&time2,tic3,tic4);
cudaEventSynchronize(tic4);

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

要对时间和持续时间进行复杂(且准确)的测量,您不应依赖CUDA事件,而应使用nVIDIA的分析机制、其分析程序应用程序nvprof或visual profiler应用程序nvvp

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

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


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

只需使用Nvidia的visual profiler即可。它易于使用,有许多选项,您可以保存结果以备将来使用。请将每次调用置于前面调用
cudaEventSynchronize()
之前,然后再调用
cudaeventslessdtime()
。谢谢@Robert Crovella。现在它起作用了。我在安装在远程服务器上的特斯拉K80上使用CUDA 7.0工具包。我一直想使用视觉分析器,但不知道如何使用。如果有人能帮助我。谢谢@Zindarod的帮助。“你不应该依赖CUDA事件,而应该使用nVIDIA的评测机制”,这取决于你是在测量开发和性能测试,还是在运行时通知用户。OP没有明确他的目标