【问题标题】:OpenCL Execution model multiple queued kernelsOpenCL 执行模型多个排队内核
【发布时间】:2011-12-06 17:52:29
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      相关资源
      最近更新 更多