OpenCL执行模型多个排队的内核

时间:2011-12-06 17:52:30

标签: opencl

我很好奇GPU如何多次执行相同的内核。

我有一个内核连续排队数百次(可能是几千次),并且使用AMD App Profiler我注意到它会非常快地执行内核集群,然后就像发条一样经常内核会“挂“(即执行更长的数量级)。我认为每个第64个内核都会挂起。

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

我是否缺少关于执行模型的东西(可能是其他程序/操作系统访问GPU或GPU内存的计时频率)。我正在使用Windows 7(64位)下的ATI HD5650卡进行测试,其中AMD App SDK 2.5具有有序队列执行功能。

作为旁注,如果我的内核中没有任何全局内存访问(一个相当不切实际的前景),那么分析器会在快速执行的内核和之前执行缓慢的内核之间留下空白一个很大的空隙,我的内核都没有被执行。

作为后续问题,有什么办法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

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

您的测量是否包括读回显然快速执行的结果?