图像处理的GPU加速技术研究与评价

发布时间:2011-10-06 21:33:53

图像处理的GPU加速技术研究与评价

刘伟峰 蒋楠 宋付英 孟凡密 陈芳莉

(中国石油化工股份有限公司石油勘探开发研究院信息技术研究所,北京,100083liuwf@pepris.com

: 针对大多数图像处理问题的计算密集性,提出了图像处理的GPU加速技术。首先,描述了相对于CPU,采用GPU能够带来计算效率提升的体系结构基础。其次,将直方图生成和快速傅里叶变换计算二维卷积两个具有代表性的图像处理算法移植至GPU。最后,利用同样市场价格组合的CPUGPU进行实验,利用多分辨率图像作为测试数据,比对CPUGPU方案的计算效率。结果显示,与相同算法的CPU实现相比,其GPU实现分别将计算效率最高提高到了17倍和40倍。

关键词: 图形处理器;直方图;快速傅里叶变换;二维卷积;统一计算设备架构

Evaluation and Comparative Research of GPU Acceleration Techniques of Image Processing

LIU Wei-fengJIANG NanSONG Fu-yingMENG Fan-miCHEN Fang-li

(Information and Technology Station, SINOPEC Exploration & Production Research Institute, Beijing 100083)

Abstract: For the compute-intensive character of image processing, we propose GPU acceleration techniques of image processing. In this paper, first, we describe the efficient architecture of GPU. Second, we implement two representative image processing algorithms, histogram generation and Fast Fourier Transformation-based two-dimensional convolution, on GPU. Finally, using the same market price CPU and GPU as hardware platform, and using multi-resolution images as test datasets, we compare the computational efficiency of GPU with CPU. The results show the speed of the two algorithms implemented on GPU can be improved by up to 17 times and 40 times compared to CPU-based implementations.

Keywords: GPUhistogramFFT2D convolutionCUDA


1 引言

随着科学技术的迅猛发展,图像处理技术已经成为了近代信息处理领域一项非常重要的技术,并已在遥感、医学、生物特征鉴别、运动分析等领域得到了广泛应用。由于大多数图像处理问题是计算密集型的,所以许多串行处理方法在应用中遇到了难以实时计算的困难。随着并行计算机及并行处理技术的发展,并行图像处理技术应运而生,但这些技术往往要么运行于大型集群上,要么还在被作为测试并行机性能的辅助技术使用,其推广完全受制于硬件环境的推广。本文利用已被广泛接受并使用的GPUgraphics processing unit, 图形处理器作为硬件载体,在其上并行地实现了两个图像处理的常用算法——直方图生成和快速傅里叶变换计算二维卷积,并对其执行性能数据与CPU上的相同算法执行性能数据进行了比对。实验结果显示,同样的图像处理算法,GPU组合对比于同样市场价格的CPU,其计算效率是后者的17-40。可得出结论,将原有CPU执行的算法移植至GPU执行能够获得很高的效率提升,而且是经济、可行的。

2 GPU介绍

过去的二十年间,中央处理器遵循摩尔定律发展,在不断提升性能的同时降低价格,为高性能计算提供了有效的支持。然而,自2003年以来,这种趋势发生了变化,不断提高的CPU频率带来了高功耗和高发热量,使得CPU频率止步于4 GHz,并向提高频率以外的方向发展。从那时起,以游戏加速和图形处理为初衷设计的GPU以超出摩尔定律的速度发展,并开始在高性能计算领域被大量使用。图1为近年来CPUGPU的浮点运算速度对比图[1]

1 GPUCPUFLOPS理论峰值

Fig.1 Theoretical peak FLOPS on GPUs and CPUs

带来这种数据处理能力差别的主要原因在于GPU是典型的关注于计算而不太在乎如何访问存储器的流处理机,流式编程模型的约束使得GPU以并行的方式运行高运算强度arithmetic intensity 即算法运算时间开销和存储器操作时间开销的比率的应用,因此可以同时处理很多数据元素。一般来讲,能够在GPU上高效执行的算法都是可将问题分割为高度独立单元且每个单元都具有高运算强度的算法。高度重复且仅局部相关的图像处理属于这一类算法,例如,滤波运算对所有像素执行同样的运算,而且是处理顺序无关的,这样的运算可以通过对每个像素执行相同的指令在GPU上并行实现。

2.1 体系结构

GPU的流式数据并行模型保证在多数据流上执行相同指令,以nVidia G80核心为代表的GPU包含1-16个多处理器multiprocessors,每个多处理器包含8个流处理器stream processors2个专用于执行如平方根倒数等标量运算的特殊功能单元special functional units。其中一个多处理器内部的所有流处理器以SIMD单指令多数据的结构执行同样指令,而不同的多处理器可以以MIMD多指令多数据结构执行不同的指令。从线程角度讲,每个多处理器可并行运行768个活动线程,即包含16个多处理器GPU可并行运行12288个活动线程。从存储器角度讲,每个多处理器有16 KB可读写共享内存shared memory8 KB只读常量内存constant memory8 KB只读纹理内存texture memory8192个寄存器Registers。图2表示了这种架构。在图像处理的GPU加速算法设计中,如何针对这种架构分割像素或图像块以映射到并行线程进行处理,再经由多级存储器将被处理的像素或图像块重新组合成结果图像是高效算法设计的关键。

2 nVidia G80 GPU架构简图(N = 1, 2, 4, 8, 12, 14, 16)

Fig.2 Simplified view of the nVidia G80 GPU architecture

开始在GPU上计算之前,需要加载输入数据到GPU的设备内存显存中,计算过后,如果CPU需要计算结果,就要从GPU把结果数据读回CPU,数据流图见图3。与此相对,在CPU上执行程序不需要这些额外的操作。所以评估GPU性能时,必须考虑数据加载和读回造成的性能损耗[2]

2.2 编程接口

一直以来,编写GPU程序主要是通过图形APIOpenGLDirectX来完成,但由于图形编程的学习曲线相对较长,运用GPU进行高性能运算由于软件层面的限制难以大面积普及[3]2007年,由nVidia推出的CUDACompute Unified Device Architecture,统一计算设备架构编程接口弥补了这一不足。利用CUDA编程接口,可以用C语言直接调用GPU资源,而无需将其映射到图形API,为GPU的非图形编程普及消除了障碍。

3 GPU程序的数据流

Fig.3 GPU application data flow

3 实验设计

采用价格完全相等的两套硬件平台进行实验,CPU实验平台选用1500元人民币20083月价格,下同Intel Core2 Duo E6750 CPUIntel GMA3100集成显卡0价格GPU实验平台选用400元人民币的Intel Pentium Dual-Core E2140 CPU1100元人民币的nVidia GeForce 8800GT GPU14个多处理器/256 MB显存。内存配置均为2GB 800MHz DDR2内存。

测试数据选用4×4像素到8192×8192像素22倍数依次递增的真实图像各3张,共36张。实验结果取3张图像运算时间的平均值。由于篇幅所限,本文不给出算法运算结果或图像处理前后对比图。

4 算法实现和实验结果分析

基于以往经验,选用256-bin直方图生成和快速傅里叶变换计算二维卷积两个常用图像处理算法进行图像处理的GPU加速实验。对GPU程序,使用CUDA编程接口实现与CPU端完全相同的算法,并统一采用32-bit浮点数运算,以保证结果的公平性。

4.1 256-bin直方图

直方图描述图像中像素强度的分布,是多种图像处理技术的基础。本算法生成256-bin直方图,根据经验,此级别的直方图对一般应用是足够的。其CPU实现相对简单,不再赘述。

GPU上,算法需改为并行处理:(1)将图像拆分成子序列分给执行线程;(2)每线程执行子序列并将执行结果存储为子直方图;(3)将多个子直方图合并成最终结果。其中步骤(2)中子直方图数量的设置是算法的关键,多个线程将计算结果写入同一个子直方图可以减少子直方图数量以减低存储空间需求,但也会带来费时的共享内存冲突问题。直观的解决方案是每线程对应单独的子直方图,但目前GPU可分配给单线程的共享内存为85 bytes,最多可以存储1 byte/bin64-bin子直方图,不足以存储4 bytes/bin256-bin的子直方图,所以本文使用每warpGPU32个线程组成的SIMD集合对应一个子直方图的方案,并用线程标记的方法协助控制共享内存冲突,其中每线程标记占用5 bitswarp 32个线程 32 = 25。从实验结果来看,控制共享内存冲突给整体性能带来的额外开销很小。CPU/GPU生成256灰度级直方图的实验数据对比见表1由于篇幅所限,只在表中列出6个尺寸级别的实验数据,下同

1 CPU/GPU算法生成直方图执行时间(毫秒)

由表1可见,相对于CPUGPU在处理大尺寸图像时具有绝对的优势。在8192×8192尺寸图像的直方图生成中,GPU的时间消耗为65.166 ms,计算效率是CPU6.19倍,排除内存分配、数据加载和读回的时间后,GPU的核心时间消耗仅为19.862 ms,计算效率是CPU17.59倍。

但是,由表1可见,相对于CPUGPU在处理小尺寸图像时处于劣势。其原因在于数据加载和读回的时间消耗。但考虑在实际应用中,往往是大量图像的批处理,这种劣势可以忽略。

4.2快速傅里叶变换计算二维卷积

卷积在图像处理领域有着广泛的应用,二维卷积的快速算法是先将图像的FFTFast Fourier Transformation快速傅里叶变换结果和卷积核FFT结果在频域求乘法,最后用逆FFT求得二维卷积的结果。其中,FFT的使用可以提高卷积的运算效率,实际上,快速卷积计算也是FFT的重要应用之一。实现FFT二维卷积算法需要注意的主要问题是在对图像边缘像素的处理中,需要用图像边缘像素对图像进行扩展和补齐。设原图像尺寸为imageW×imageH,卷积核尺寸为kernelW×kernelH,补齐后图像尺寸为fftW×fftH,其中:fftW = imageW + kernelW – 1fftH = imageH + kernelH – 1

但为便于GPU运算和节约带宽,本文算法统一选取最终图像尺寸为小于等于10242n数或最近的512的倍数。比如,原图像尺寸为1220×120,卷积核尺寸为7×7,算得fftWfftH分别为1226126,则最终参与运算的图像尺寸fftW×fftH需补足为1536×128

CPU实现中的FFT计算选用了FFTW函数库,由于使用动态规划dynamic programming寻找最佳解再由计算机自动生成程序以使算法达到最高度优化[4],该库在高性能计算领域被广泛采用,是业界公认执行效率最高的FFT库。GPU实现中的FFT计算选用了nVidia开发的CUFFT库,该库模拟了FFTW库的运算机制,在函数调用上与FFTW几乎没有差别。

FFT计算二维卷积算法实现中,主要的运算量来自:1imageW×imageH尺寸二维FFT1fftW×fftH尺寸二维FFT1fftW×fftH尺寸二维FFT1imageW×imageH尺寸和fftW×fftH尺寸的频域相乘。CPU/GPU利用FFT计算二维卷积的实验数据对比见表2,其中卷积核尺寸7×7

2 CPU/GPU算法FFT计算二维卷积执行时间(毫秒)

2实验数据反映的趋势与表1基本相同,在处理大尺寸图像时GPU的总计算效率能够达到CPU21.1GPU核心计算效率能达到CPU40.2处理小尺寸图像时由于数据加载和读回的时间消耗使GPU慢于CPU

5 结论

本文通过对两个常用图像处理算法GPU实现的实验结果分析,得出结论,与CPU相比,GPU依据其硬件结构先天的并行计算特点,在运行以图像处理为代表的可分割为独立单元且每个单元都具有高运算强度的算法中能够得到极高的效率提升。在处理大量数据时,这种提升更加明显。

考虑到价格因素,我们认为,相对于CPU,以同样的市场价格选用更高计算能力的GPU是可行的。采用CUDA编程接口,为GPU重新设计和编写原有图像处理算法以获得数十倍的效率提升是值得的。

在实验过程中,也发现GPU加速技术有2个局限:(1)当前GPU只支持32-bit浮点算术精度,虽然在大多数图像处理算法中这个局限不会带来可辨别的影响,但在高精度需求的问题中会得到误差相对于CPU更大的结果;(2)由于数据加载和读回的时间消耗使GPU处理小量数据不如CPU更加高效,解决办法是提高CPU-GPU数据传输总线的带宽,这在下一代PCI-E总线标准中有望改善。

[1]Green S. GPU Physics[EB/OL]. In: SIGGRAPH 2007 GPGPU Course[R]. http://www.gpgpu.org/s2007/slides/15-GPGPU-physics.pdf

[2]Pharr M. GPU Gems 2[M]. Boston: Addison-Wesley, 2005: 509~519.

[3]WU En-Hua. State of the Art and Future Challenge on General Purpose Computation by Graphics Processing Unit[J]. Journal of Software, 2004, 15(10): 1493~1504.[ 吴恩华. 图形处理器用于通用计算的技术、现状及其挑战[J]. 软件学报, 2004, 15(10): 1493~1504.]

[4]Frigo M, Johnson S. FFTW: An Adaptive Software Architecture for the FFT[A]. In: ICASSP conference proceedings[C]. Seattle, Washington, USA, 1998: 1381~1384.


图像处理的GPU加速技术研究与评价

相关推荐