【问题标题】:Delay between OpenCL kernel being queued and starting to run on ATI cardsOpenCL 内核排队和开始在 ATI 卡上运行之间的延迟
【发布时间】:2017-05-02 13:39:14
【问题描述】:

我最近将一个 OpenCL 应用程序从 NVIDIA GPU 转移到在 Ubuntu 12.04 上运行的 Radeon HD 6320 Fusion,但它的运行速度出乎意料地慢了很多。

我的程序在设置时将一个非常大的数据结构复制到 GPU(CPU 永远不会再读取或访问此数据结构),然后它:

  1. 对多个内核和一个读取缓冲区进行排队(将一个非常小的数据结构复制回主内存)。
  2. 调用 clFinish 以等待内核和读取缓冲区完成
  3. 这会不断重复,有时会根据读取缓冲区返回的信息复制一些额外的数据(这意味着读取缓冲区必须完成,然后才能将下一轮内核添加到队列中)。

在分析两个 GPU 之后,ATI GPU 上的延迟似乎完全是从第一个内核被添加到队列 (CL_PROFILING_COMMAND_QUEUED) 到第一个内核开始执行 (CL_PROFILING_COMMAND_START)。在 NVIDIA GPU 上,每次迭代需要几微秒。在 ATI GPU 上,每次迭代大约需要 20 毫秒,这对于我的使用来说太长了。

我有什么理由会延迟这么大吗?

【问题讨论】:

  • 你试过不同的队列吗?

标签: opencl


【解决方案1】:

这是 amd 平台中的一个已知问题。检查此论坛链接https://community.amd.com/thread/159060 希望它/将被修复

【讨论】:

  • 您的论坛链接过时了,没有标题或任何内容可供我们搜索...
  • 更新了链接
【解决方案2】:

可能有很多问题,您是否正在运行任何其他可能需要完成的 GPU 程序,以便调度程序可以为您腾出一些时间?

问题在于 OpenCL 规范没有定义可能的等待时间。从排队内核到它的执行对时间没有要求,只是在某个时候它会执行。我可能会在 ATI OpenCL 板上发帖,那里的开发人员对这个主题很了解,可能会给你一个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2011-08-30
    • 2011-05-08
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多