我最近将一个OpenCL应用程序从NVIDIA GPU转移到在Ubuntu 12.04上运行的Radeon HD 6320 Fusion,它出乎意料地运行得慢得多。
我的程序在设置时将一个非常大的数据结构复制到GPU(这个数据结构永远不会被CPU读取或访问),然后它:
在分析两个GPU之后,ATI GPU上的延迟似乎完全来自第一个被添加到队列的内核(CL_PROFILING_COMMAND_QUEUED)到第一个开始执行的内核(CL_PROFILING_COMMAND_START)。在NVIDIA GPU上,每次迭代需要几微秒。在ATI GPU上,每次迭代大约需要20ms,这对我来说太长了。
我有什么理由得到这么大的延迟吗?
答案 0 :(得分:1)
它是amd平台中的一个已知问题。查看此论坛链接https://community.amd.com/thread/159060 希望它是/将被修复
答案 1 :(得分:0)
这可能是一些事情,您是否正在运行可能需要完成的任何其他GPU程序,以便调度程序可以为您腾出一些时间?
这个问题是OpenCL规范没有定义可能的等待时间。从内核排队到执行只是在某个时刻它将执行的时间没有要求。我可能会在ATI OpenCL板上发帖,那里的开发人员已经很好地讨论了这个问题,可能会给你答案。