最近的一个高通平台的项目, 对性能要求很苛刻, 我们采用了 OpenCL 实现了主要的功能, 但是瓶颈出现在从 CPU 向 GPU 内存拷贝的部分。 虽然 OpenCL 的 map API 是为了解决这个问题而设计的, 但是在一些固有的框架内, map 并不能避免所有的内存拷贝。
高通针对 OpenCL 有两个非常有用的扩展, 可以有效的解决这个问题:
https://www.khronos.org/registry/cl/extensions/qcom/cl_qcom_ion_host_ptr.txt
https://www.khronos.org/registry/cl/extensions/qcom/cl_qcom_ext_host_ptr.txt
通过这样的方式, 可以把 Android ION memroy 和 GPU 共享, 避免了额外的内存拷贝, 效率有显著的提升, 同时可以降低一定的能耗。 是非常不错的解决方案。