OpenCL优化小技巧:预创建所有Kernel

最近做了一些图像处理的算法,跑在高通的开发板上,其中使用了OpenCL进行加速。在此过程中,也总结了几个加速的小技巧。今天就来谈其中一个不太有用的小技巧:预创建所有Kernel。

第一次进行OpenCL加速时,我注意到,创建cl_kernel时,会耗费几毫秒到二十几毫秒的时间。如果算法中需要创建几十个cl_kernel,那花费的时间也有几百毫秒了。这让人很难接受。

后来我又注意到,对于同一个Kernel,只有第一次创建时才会花费那么多时间,后续再次创建(无论前面创建的是否已经释放掉)所花费的时间将会大大减少,几乎可以忽略不计。那么机会就来了:我们可以在初始化时预先创建好所有Kernel,再全部释放掉。然后在实际的处理算法中,和平时一样使用clCreateKernel()clReleaseKernel(),同时也不用担心创建Kernel所花费的额外时间了。

为什么我说这个小技巧不太有用呢?因为只有使用源码,也就是clCreateProgramWithSource()创建program时,才会出现创建Kernel耗时严重的现象。而一般发布出来的算法都会使用二进制文件,也就是clCreateProgramWithBinary(),在保存为二进制时,一定已经先创建所有Kernel了,耗时问题也就不存在了。

但是在加速未完成之前,我们一般还是会直接使用源码来调试。此时预创建所有Kernel,可以排除掉创建Kernel的时间,使得对算法的最终运行时间估计更准确。所以,这个小技巧还是有一点用的:)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值