【问题标题】:Timer resolution in OpenCL profilingOpenCL 分析中的计时器分辨率
【发布时间】:2016-03-20 11:38:20
【问题描述】:

我需要澄清一下计时器分辨率。我正在尝试在 openCL 中学习分析。我在 OpenCL 中实现了缩减算法,并希望通过获取下面给出的代码中的总运行时间来测量执行内核时间。我在不同的设备上运行了这段代码,结果如下:

在 CPU 上 -- AMD FX 770K 总时间 = 352,855,601 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 69 ns

在 GPU 上 -- AMD Radeon R7 240 总时间 = 172,297 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 1 ns

在另一个 GPU 上——GeForce GT 610 总时间 = 1,725,504 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 1000 ns

上面给出的“总时间”是实际的纳秒?或者我需要将它们除以时间分辨率以获得实际执行时间?计时器分辨率对我们有何帮助?

下面是部分代码:

/* Enqueue kernel */
        err = clEnqueueNDRangeKernel(queue, kernel[i], 1, NULL, &global_size,
            &local_size, 0, NULL, &prof_event);
        if (err < 0) {
            perror("Couldn't enqueue the kernel");
            exit(1);
        }

/* Finish processing the queue and get profiling information */
        clFinish(queue);
        clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_START,
            sizeof(time_start), &time_start, NULL);
        clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_END,
            sizeof(time_end), &time_end, NULL);
        total_time = time_end - time_start;


printf("Total time = %lu\n\n", total_time);

【问题讨论】:

  • 混淆是因为如果你划分然后所有设备都有相似的结果。但这只是因为设备越快,分辨率计数器越快,它会线性扩展。

标签: parallel-processing profiling opencl


【解决方案1】:

规范对此非常清楚:“当前设备时间计数器在 纳秒”

时间总是以纳秒为单位。分辨率查询是为了让您了解数据的准确度。例如,给定您发布的测量值和分辨率,您可以推断出测量值的误差范围:

AMD FX 770K:

  • 实测:352,855,601 ± 69 ns
  • 实际:352,855,532 - 352,855,670

AMD Radeon R7 240:

  • 实测:172,297 ± 1 ns
  • 实际:172,296 - 172,298

GeForce GT 610:

  • 测量:1,725,504 ± 1000 ns
  • 实际:1,724,504 - 1,726,504

【讨论】:

  • 感谢您的回答!
  • 哦,嘿,谢谢@Angry Lettuce 在您对我的回答进行编辑时提供的示例!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2011-10-31
相关资源
最近更新 更多