【问题标题】:Is there some in-code profiling of CUDA program是否有一些 CUDA 程序的代码内分析
【发布时间】:2016-10-30 19:25:36
【问题描述】:

在 OpenCL 世界中,有一个函数 clGetEventProfilingInfo 以纳秒为单位返回事件的所有分析信息,如排队、提交、开始和结束时间。这很方便,因为我可以随时printf 那个信息。

例如PyOpenCL 可以这样写代码

profile = event.profile                                                                
print("%gs + %gs" % (1e-9*(profile.end - profile.start), 1e-9*(profile.start - profile.queued)))

这对我的任务很有帮助。

是否可以在代码中获取此类信息,而不是使用nvprofcompany 等外部分析工具?

【问题讨论】:

  • cudaEvent 系统可以通过cudaEventElapsedTime 为您提供相当于profile.end-profile.start 的功能

标签: cuda profiling nvprof


【解决方案1】:

如需快速、轻量级的计时,您可能需要查看cudaEvent API

摘自以上链接:

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);


cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice);

cudaEventRecord(start);
saxpy<<<(N+255)/256, 256>>>(N, 2.0f, d_x, d_y);
cudaEventRecord(stop);

cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost);

cudaEventSynchronize(stop);
float milliseconds = 0;
cudaEventElapsedTime(&milliseconds, start, stop);

printf("Elapsed time: %f ms\n", milliseconds);

如果您想要一个功能更全面的分析库,您应该查看CUPTI

【讨论】:

    【解决方案2】:

    到目前为止,除了nvprof 之外,没有其他工具可以收集分析数据。但是,您可以在代码中使用nvprof。看看this Nvida document。 你可以使用cuProfilerStart()cuProfilerStop() 来探测你的代码的一部分。 他们在里面cuda_profiler_api.h

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2021-12-06
      • 2020-11-23
      • 1970-01-01
      • 2020-10-29
      • 2012-04-21
      • 1970-01-01
      • 2019-04-25
      相关资源
      最近更新 更多