最近在做一个图像处理的算法,跑在高通平台上,需要使用OpenCL加速。代码分为三个部分:
1. 初始化
2. 处理图像
3. 释放资源
为了尽可能地减少算法的运行时间,我将一切可以预处理的内容都放到了初始化中,其中就包括了创建buffer。在初始化中,我调用clCreateBuffer()
创建了9个buffer,共计约占用600MB内存。然后在处理图像中重复使用这些buffer,最后在释放资源中释放所有buffer。
但是在实际测试后发现,每调用一次clCreateBuffer()
,都会花费大约70ms的时间,这样一来,创建所有buffer就花费了约600ms的时间。同样地,在释放这些buffer时,每个也会花费几十毫秒的时间。如此,初始化和释放资源的时间就令人比较难以接受。
经同事提醒,我想到了高通文档《Qualcomm® Snapdragon™ Mobile Platform OpenCL General Programming and Optimization》中提到的ION内存。文档中说,使用ION可以避免内存拷贝。那么对缩短创建buffer的时间会不会也有帮助呢?毕竟在我的印象中,使用new
创建一段几百MB的内存也才花费几毫秒的时间。
使用ION内存来创建OpenCL buffer需要
cl_qcom_ion_host_ptr
扩展(在上述文档中有提到),其说明及示例代码在OpenCL官网可以查到,为了方便,我直接贴