1

我最近比较了两种做内核运行时测量,我看到了一些令人困惑的结果。

我使用带有集成 GPU 和 Ubuntu Linux ( CL_PLATFORM_VERSIONis ) 的 AMD Bobcat CPU (E-350 OpenCL 1.2 AMD-APP (923.1))。

基本的 gettimeofday 想法如下所示:

clFinish(...)  // that all tasks are finished on the command queue
gettimeofday(&starttime,0x0)
clEnqueueNDRangeKernel(...)
clFlush(...)
clWaitForEvents(...)
gettimeofday(&endtime,0x0)

这表示内核需要大约 5466 毫秒。

我用clGetEventProfilingInfofor QUEUED/ SUBMIT/ START/进行的第二次测量END

使用 4 个时间值,我可以计算在不同状态下花费的时间:

  • 排队时间:0.06 毫秒,
  • 提交时间:2733 毫秒,
  • 执行时间:2731 ms(实际执行时间)。

我看到它加起来是 5466 毫秒,但是为什么它会在一半的时间内保持提交状态?

有趣的是:

  • 提交状态始终是实际执行时间的一半,即使对于不同的内核或不同的工作负载(因此它不能是恒定的设置时间),

  • 对于 CPU,提交状态的时间为 0,执行时间等于 gettimeofday 结果,

  • 我在 Intel Ivy Bridge 上使用 CPU 和 GPU 在 Windows 上测试了我的内核,但我没有看到那里的效果。

有人有线索吗?

我怀疑 GPU 运行内核两次(导致 gettimeofday 是实际执行时间的两倍)或者函数 clGetEventProfilingInfo 对于 AMD GPU 无法正常工作。

4

1 回答 1

1

我在 AMD 论坛上发布了这个问题。他们说这是 AMD 分析器中的一个错误。

http://devgurus.amd.com/thread/159809

于 2012-10-05T07:25:49.770 回答