是否有一些CUDA程序的代码内分析

时间:2016-10-30 19:25:37

标签: cuda profiling nvprof

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

例如使用PyOpenCL可以编写像这样的代码

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

这对我的任务非常有用。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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