opencl内核排队和开始使用ATI卡之间的延迟



我最近已将OpenCL应用程序从NVIDIA GPU移动到Radeon HD 6320 Fusion在Ubuntu 12.04上运行的融合,并且意外地运行速度较慢。

我的程序将设置上的非常大的数据结构复制到GPU(此数据结构再也不会由CPU读取或访问),然后是:

  1. 排队几个内核和一个读取缓冲区(将很小的数据结构复制回主内存)。
  2. 打电话给Clfinish,等待内核和读取缓冲区完成
  3. 这不断重复,偶尔会根据读取缓冲区返回的信息复制一些额外的数据(这意味着读取缓冲区必须在将下一轮添加到队列之前完成。
  4. )。

在两个GPU进行了分析后,ATI GPU的延迟似乎完全是从第一个内核添加到队列中(cl_profling_command_queque)到第一个内核启动执行(cl_profiling_command_start)。在NVIDIA GPU上,这需要每次迭代几微秒。在ATI GPU上,每次迭代都需要20毫秒,这对于我使用太长了。

有什么原因为什么我可以得到这么大的延迟?

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

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

问题是OpenCL规范不能定义可能的等待时间。从排队内核到执行的时间不需要时间,仅在某个时候它将执行。我可能会在ATI OpenCL板上发布,那里的开发人员在此主题上有很好的提高,并且可能会给您一个答案。

最新更新