【问题标题】:OpenCL time measurment issues with AMD GPUAMD GPU 的 OpenCL 时间测量问题
【发布时间】:2015-12-17 01:51:24
【问题描述】:

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

我使用带有集成 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 毫秒。

我对@9​​87654324@ 进行了第二次测量,用于QUEUED / SUBMIT / START / END

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

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

我看到它加起来是 5466 毫秒,但是为什么它在提交状态停留了一半的时间?

有趣的是:

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

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

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

有人知道吗?

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

【问题讨论】:

  • 您是否向设备发送任何数据?您可能也测量了一些 I/O 时间。尝试减少传输的数据量,或者只是禁用 clEnqueueWriteBuffer 以查看它如何改变您的测量结果。
  • 我向设备发送了一些数据,但我在运行内核之前执行此操作,并且测量之前的 clFinish(...) 应该完成队列中的所有任务。我也使用 CL_TRUE 进行数据复制,它会阻塞直到数据被传输。
  • 编辑说明:您需要阅读,我们如何在此处格式化帖子。你的格式太可怕了!您将 HTML 与 Markdown 混合在一起。我们在这里使用 Markdown。我刚刚解决了你的问题,但这肯定是一项艰巨的任务。很多乱七八糟的......

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多