OpenCL执行模型多队列内核

OpenCL执行模型多队列内核,opencl,Opencl,我很好奇GPU是如何多次执行同一个内核的 我有一个内核,它连续排队数百次(可能数千次),使用AMD应用程序探查器,我注意到它会以极快的速度执行内核集群,然后就像时钟一样,内核会“挂起”(即执行时间延长了几个数量级)。我认为每第64个内核都会挂起 这很奇怪,因为每次通过内核执行完全相同的操作时,都会使用相同的本地和全局大小。我甚至在重复使用相同的缓冲区 是否有一些关于执行模型的东西我遗漏了(可能是其他程序/操作系统访问GPU或GPU内存的定时频率)。我正在Windows7(64位)下的ATI HD

我很好奇GPU是如何多次执行同一个内核的

我有一个内核,它连续排队数百次(可能数千次),使用AMD应用程序探查器,我注意到它会以极快的速度执行内核集群,然后就像时钟一样,内核会“挂起”(即执行时间延长了几个数量级)。我认为每第64个内核都会挂起

这很奇怪,因为每次通过内核执行完全相同的操作时,都会使用相同的本地和全局大小。我甚至在重复使用相同的缓冲区

是否有一些关于执行模型的东西我遗漏了(可能是其他程序/操作系统访问GPU或GPU内存的定时频率)。我正在Windows7(64位)下的ATI HD5650卡上测试这一点,AMD应用程序SDK 2.5具有顺序队列执行

顺便说一句,如果内核中没有任何全局内存访问(这是一个相当不切实际的前景),探查器会在快速执行的内核之间设置一个间隙,而以前执行缓慢的内核现在是一个很大的空间隙,没有执行我的内核


作为后续问题,是否可以采取任何措施来解决此问题?

您可能看到GPU最大并发任务数的影响。排队的每个任务都被分配给一个或多个多处理器,这些多处理器通常能够在同一时间运行数百个工作项——在同一个内核中,在同一个调用中排队。也许您看到的是OpenCL运行时正在等待一个多处理器释放。这与占用率问题最直接相关——如果工作大小不能使多处理器保持忙碌,通过内存延迟等等,它就有空闲周期。这里的限制取决于内核需要多少寄存器(本地或私有内存)。总之,您希望编写内核来处理多个数据段,而不是将其多次排队

你的测量是否包括从明显快速的执行中读取结果