OpenCL内核排队并开始在ATI卡上运行之间的延迟

时间:2012-11-06 04:49:27

标签: opencl

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

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

  1. 对几个内核和一个读缓冲区进行排队(将非常小的数据结构复制回主内存)。
  2. 调用clFinish等待内核和读缓冲区完成
  3. 这会不断重复,偶尔会复制一些额外的数据,具体取决于读取缓冲区返回的信息(这意味着读取缓冲区必须在下一轮内核添加到队列之前完成)。
  4. 在分析两个GPU之后,ATI GPU上的延迟似乎完全来自第一个被添加到队列的内核(CL_PROFILING_COMMAND_QUEUED)到第一个开始执行的内核(CL_PROFILING_COMMAND_START)。在NVIDIA GPU上,每次迭代需要几微秒。在ATI GPU上,每次迭代大约需要20ms,这对我来说太长了。

    我有什么理由得到这么大的延迟吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

这个问题是OpenCL规范没有定义可能的等待时间。从内核排队到执行只是在某个时刻它将执行的时间没有要求。我可能会在ATI OpenCL板上发帖,那里的开发人员已经很好地讨论了这个问题,可能会给你答案。