论文部分内容阅读
图像处理主要包括图像压缩、图像增强、图像复原、图像分割和图像分析等,其在许多应用领域受到广泛重视并取得了重大成就,如航空航天、生物医学工程、工业检测、气象、公安司法、军事制导、文化艺术等。现代图像处理面临着高分辨率、高速度的挑战,海量的基础数据和时效性的高要求,没有万亿次的计算能力是无法应对的。GPU(GraphicsProcessingUnits)在处理能力和存储带宽上相对CPU都有无可比拟的优势。近年来GPU发展迅速,从最初的仅用于图像渲染到现在已经可以基于GPU进行通用计算。GPGPU(GeneralPurposeGPU)的发展为高要求的图像处理提供了解决方案。目前,GUP通用计算标准主要包括NVIDIACUDA和后起的OpenCL。OpenCL是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,广泛适用于多核处理器、图形处理器、Cell类型架构及其他并行处理器。使用OpenCL在GPU上并行实现图像处理的相关操作,可以预期几十倍甚至几百倍于CPU的效率,对于高要求的图像处理无疑是一个很好的解决方法。
本文从OpenCV库中挑选了17个基本图像处理函数,基于OpenCL标准对这些函数进行了GPU加速。本文中我们将这些图像处理函数分为三类:数据无关、数据共享和数据相关。对于每一类算法,本文结合相应案例进行优化技术的研究分析。数据无关类算法的瓶颈在访存上,对于连续的数据无关类算法使用向量化的方法提高带宽利用率;对于离散的数据无关类算法,则需要充分利用系统的缓存,本文比较了使用全局存储的缓存功能和使用纹理内存的缓存功能两种方法的优劣,结果显示使用纹理内存在性能上有些许的优势,但是优势并不是很明显。对于数据共享类算法,本文对比分析了使用图像对象和全局内存+局部内存两种方式的优劣。结果表明只有当需要共享的数据量小时,图像对象的优势才得以充分发挥;而当需要共享的数据量较大时,使用全局内存+局部内存的方式性能更优。数据相关类算法直接使用GPU多线程进行并行处理并不容易,算法的瓶颈在于数据依赖引起的并行度低下,最重要的是研究算法本身,选择高效的并行计算算法。
本文在HD5850和TeslaC2050两个平台上对优化的OpenCL函数进行测试,结果显示对于8UC1图像类型,TeslaC2050平台OpenCL性能更优,而对于8UC4图像类型,HD5850平台OpenCL性能更好。在TeslaC2050平台上,OpenCL代码对CUDA代码平均加速比为2.40,相对CPU代码平均加速比为17.30。