AMD GPU的OpenCL时间测量问题

时间:2012-09-26 15:45:39

标签: c++ opencl gpu amd-processor amd-app

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

我使用集成GPU和Ubuntu Linux的AMD Bobcat CPU(E-350)(CL_PLATFORM_VERSIONOpenCL 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毫秒。

我对clGetEventProfilingInfo / QUEUED / SUBMIT / START的{​​{1}}进行了第二次测量。

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

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

我看到它累计达到了5466毫秒,但为什么它在一半的时间内保持提交状态?

有趣的是:

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

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

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

有没有人有线索?

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

1 个答案:

答案 0 :(得分:1)

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

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