【问题标题】:opencl long kernel execution timeopencl 内核执行时间长
【发布时间】:2015-08-24 20:32:52
【问题描述】:

我在 GPU 上的 opencl 上实现了一些图像处理。在主机程序上,我启动此内核 4 次,总时间约为 13 毫秒(在 AMD 分析器上),我认为这是一个很好的结果,但如果我通过 QueryPerformanceTimer 测量主机上的内核执行时间,它显示大约 26 毫秒。 clEnqueueNDRangeKernel 执行时间小于 1 毫秒。 26-13 毫秒在哪里?如何修复它?我使用 AMD SDK 3.0 在 GPU 1:AMD Radeon HD 6900 系列上启动它。如果我启动内核一次,但在内核中我添加 4 次循环结果是相同的。

【问题讨论】:

  • 可能是你在将内核入队后没有阻塞,你得到的是提交内核到队列所花费的时间——而不是内核执行时间。楼主能发一下代码吗?

标签: opencl gpu gpgpu amd


【解决方案1】:

´clEnqueueNDRangeKernel´ 顾名思义,它是一个“入队”调用。 SoO 它只将工作排入命令队列。这并不意味着在调用返回之前工作已经完成,实际上它可能还没有开始。 API 可能刚刚将工作打包成一个整洁的命令结构,并将其添加到队列中(提交阶段)。

您必须使用事件计时器 (clEvents) 和启用了 Profiling 的队列来测量内核执行情况。这是设备上的实际执行时间。

或者,可以通过测量从“入队”到“完成”的总“往返”时间。但这将包括通常隐藏在管道场景中的所有开销,因此通常首选第一种方法。

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多