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

OpenCL内核排队与开始在ATI卡上运行之间的延迟,opencl,Opencl,我最近将一个OpenCL应用程序从一个NVIDIA GPU迁移到一个运行在Ubuntu 12.04上的Radeon HD 6320 Fusion,它的运行速度出乎意料地慢了很多 我的程序在安装时将一个非常大的数据结构复制到GPU(CPU不再读取或访问该数据结构),然后: 对几个内核和一个读取缓冲区进行排队(将非常小的数据结构复制回主内存) 调用clFinish以等待内核和读取缓冲区完成 这会不断重复,偶尔会复制一些额外的数据,具体取决于读取缓冲区返回的信息(这意味着读取缓冲区必须在下一轮内核添加

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

我的程序在安装时将一个非常大的数据结构复制到GPU(CPU不再读取或访问该数据结构),然后:

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


    有什么原因导致我会有这么大的延迟吗?

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


    问题是OpenCL规范没有定义可能的等待时间。从内核排队到它的执行没有时间要求,只要求它在某个时刻执行。我可能会在ATI OpenCL板上发表文章,那里的开发人员对这个问题非常熟悉,可能会给你一个答案。

    这是amd平台中的一个已知问题。查看此论坛链接
    希望它是/将是固定的

    你尝试过不同的队列吗?你的论坛链接过时了,没有标题或任何我们可以搜索的内容…更新了链接