3

我最近将一个 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 毫秒,这对我来说太长了。

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

4

2 回答 2

1

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

于 2013-09-12T09:51:01.010 回答
0

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

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

于 2012-12-13T22:57:28.253 回答