在问题空间上启动单个内核与在较小的问题空间上多次启动相同的内核

问题描述 投票:0回答:1

最近我被要求在我的公司维护一个旧的图像处理项目(5年前) 它使用 openCL。

有一段代码的工作原理如下

**if (oneKernelFlag == true)

launch a gamma correction kernel on the whole image

否则

break the image into grids(ex:- 2*2)
for loop (....) // iterate for each grid 
    launch the same gamma correction kernel on each grid**

类似的逻辑用于在其他几个函数中应用内核。 oneKernelFlag 是硬编码的,并且项目是为每个硬件产品构建的。

我注意到,与启动单个内核(oneKernelFlag == true)相比,执行速度要快得多 多内核启动,时间减少近 30%。

现在,我很困惑启动多个相同的内核有什么用 在较小的问题空间上?这个什么时候有用?

请帮忙

原始开发人员和文档不可用 我在网上找不到具体细节。

gpu opencl
1个回答
0
投票

在小图像区域上多次启动用于图像处理的内核,这曾经具有缓存的好处。对于较旧的 GPU 和 iGPU,只有一小部分图像适合 L2/L3 缓存,当内核重复访问相同的像素颜色时,它们可能会在 L2/L3 缓存中处理得更快,而不是速度较慢的 RAM/VRAM。

但是,调度多个小区域内核调用会带来每次调度的额外延迟/开销。现代 GPU 具有更大的 L2/L3 缓存,可以完全容纳图像,并且 GPU 调度程序可以更好地了解缓存;那么对整个图像进行一次调度会更快。

© www.soinside.com 2019 - 2024. All rights reserved.