GPU图像并行处理设计模型研究*

2016-12-13 02:06全吉成王宏伟
舰船电子工程 2016年11期
关键词:线程图像处理程序

王 平 全吉成 王宏伟

(空军航空大学航空航天情报系 长春 130022)



GPU图像并行处理设计模型研究*

王 平 全吉成 王宏伟

(空军航空大学航空航天情报系 长春 130022)

GPU通用计算的发展为图像处理提供了新的技术手段,目前一些图像处理算法已经移植到GPU中且得到了较好的加速效果,但是并没有形成通用的并行设计模型,推广性差。为此,论文在研究GPU结构特点以及已有的GPU图像处理并行算法的基础上,提出了单GPU和多GPU图像并行处理设计模型,并通过图像平滑并行算法在GPU中的执行验证了该模型的有效性。试验结果表明,该模型在GPU图像处理中通用性较好,为更多算法的并行化处理提供了理论借鉴。

图像算法; 并行化; GPU; 模型; 通用性

Class Number TN911

1 引言

随着图像获取手段的发展,获取图像的效率逐渐加快以及图像分辨率急剧增长,现有的图像处理工具已经无法满足海量图像数据的快速处理,造成影像数据的大量堆积。因此如何快速、高效地进行海量图像数据处理是图像处理领域亟待解决的问题。

图形处理器(Graphic Process Unit,GPU)在通用计算方面取得了快速发展,计算能力已经远远超过了CPU,成为实现高性能计算的重要部件[1]。近年来,不少专家学者将图像处理算法移植到GPU中[2~5],并取得了很高的算法加速比,加快了图像算法并行化处理的发展。这些映射到GPU中算法只是一些特定的算法,并没有形成通用的GPU图像处理并行设计模型,难以推广到其他的图像处理算法中。

本文根据GPU体系结构的特点以及对已有的GPU图像处理并行算法的分析,提出了通用的GPU图像并行处理设计模型,并通过图像平滑算法进行GPU并行处理来验证模型的有效性,进而可以将模型扩展到更多图像处理算法中。

2 GPU图像并行处理设计模型

GPU图像处理并行设计模型主要描述图像串行算法进行GPU并行处理的一般性的解决方案。 这样可以让我们复用已经建立的设计模型,为自己的算法并行化问题找到有效的解决方法。在大量图像处理算法并行化分析的基础上,本文提出的针对单个GPU的通用的GPU图像处理并行设计模型包括以下四个步骤:串行算法的并行化分析,并行粒度划分,映射到GPU中,程序的优化,如图1所示。如果含有多个GPU,并行设计模型应该包括五个步骤:串行算法的并行化分析,任务划分,并行粒度划分,映射到GPU中,程序的优化,如图2所示。

图1 GPU图像并行处理设计模型

图2 GPUs图像并行处理设计模型

1) 串行算法的并行化分析:串行算法的并行化分析就是找寻串行算法中计算量最大、处理时间最耗时、数据相关性小的部分,然后对其进行并行化分析。这主要以下三个方法[6]:

(1)根据算法中已有的并行性将算法改变成并行算法;

(2)从算法本身要处理的问题特征着手把传统算法并行化;

(3)根据已有经典并行算法的设计思路,改造传统图像处理算法。

2) 任务划分:在并行算法中,将整个任务分成若干个子任务,每个GPU对应一个子任务。在多核CPU上启动多个线程,每个线程控制一个设备,实现设备间的并行计算。

3) 并行粒度划分:GPU中执行的核函数Kernel可以看做一个线程网格,一个线程网格包含若干个线程块,每个线程块包含若干个线程,如图3所示。在GPU具体执行中,线程块和块中线程被调度分别实现粗粒度和细粒度并行[7]。并行粒度划分就是将图像并行算法映射到线程块和块中的线程中,从而实现GPU内粗、细粒度并行执行。

图3 GPU内部线程组织方式

4) 映射到GPU中:将并行算法映射到GPU众核的架构上,通过多线程并行执行来实现算法的并行运行。具体步骤如下:

(1)分配显存空间,将影像数据从主存传输到显存中;

(2)设置执行配置即设置线程块大小和数量,启动核函数Kernel;

(3)将结果影像数据从显存传输到主存。

5) 程序优化:在以上几个步骤完成后,程序能够正确运行,并且结果验证准确,这是程序优化的前提,也是程序优化的起点。程序优化包括存储器优化、指令优化和编码优化。存储器优化是指优化存储器利用率和最大化全局存储器吞吐量[8]。指令优化是指使用GPU提供的存储器控制、线程控制等各种优化指令,能显著提升程序的性能。编码优化指程序编写时,尽可能少用if分支语句;使用#unroll指令展开循环语句;在保证精度的情况下,尽可能的使用专用的算术指令等[9~10]。总而言之,程序优化的核心思想是改进计算访存比以及各存储层次上的延迟隐藏[11]。

3 并行设计模型的验证

3.1 算法并行化分析

图像平滑算法是针对单个像素进行计算,各个像素之间的操作没有相关性,而且计算量大,并行程度高,适合移植到GPU中进行并行处理。

3.2 并行粒度划分

平滑后的图像与GPU线程网格对应,将图像进行分块,使每个图像块与一个线程块对应,每个图像分块中像素与线程块中的线程相对应,保证线程块中线程对每一个像素进行处理。这样就实现了线程块之间的在SM中粗粒度并行执行,以及线程块内的线程在CUDA核心中细粒度并行执行。

3.3 映射到GPU中

根据图像大小分配显存大小,将图像数据从主存传输到显存。然后设置线程块大小和数量,启动核函数,最后将结果影像数据从显存中传输到主存中合成结果影像。部分代码如下所示:

cudaMalloc((void**)&ImageDevice , ImageSize); //在GPU上分配内存空间

cudaMemcpy(ImagedataDevice,ImagedataHost,ImageSize,cudaMemcpyHostToDevice);//将图像数据由内存复制到显存中

dim3 dimBlock(m,n)

dim3 dimGrid((width+dimBlock.x-1) /dimBlock.x) , (height+dimBlock.y-1) /dimBlock.y) //划分线程块大小和数量

Kernel<<>>(ImagedataDevice,width,height); //启动GPU核函数

CopyDataFormDevice(ImagedataOut,ImagedataDevice); //将GPU上运算结果传输到主机内存

FreeDeviceAndHost();//释放主机端和GPU端的内存

3.4 程序优化

经过将并行算法映射到GPU中能够正确运行且结果验证准确,才可以在此基础对程序做进一步的优化,来提高程序的性能。平滑算法中每一个像素的计算都使用相同的平滑算子,而且共享存储器读写速度非常快,可以被同一线程块的所有线程访问。因此为降低对全局存储器DRAM内存的存取,将平滑算子传入共享存储器中,从而提高数据的存取速度。

4 实验结果与分析

实验平台使用GTX580显卡,全局存储器大小为1.5G,共享存储器为48KB,有16个流多处理器,512个流处理器。CPU为AMD Athlon (tm) II X4 640,内存为10G。分别在CPU和单GPU上进行图像平滑操作。

测试数据为256×256、512×512、1024×1024、2048×2048、4096×4096、8192×8192的灰度图。将不同分辨率的图像分别在CPU、原始GPU和程序优化后GPU进行平滑处理,对处理时间进行计时,取实验10次的结果得到平均执行时间。实验结果如表1所示。

表1 算法在不同环境下的运行时间

从表1可以看出,在GPU环境下不同分辨率的图像进行平滑操作的时间明显缩短,经过程序优化之后,执行时间又得到了进一步减小。不同分辨率图像在GPU和优化后GPU上运行时间与在CPU上运行时间的加速比曲线如图4所示。

图4 GPU优化前后并行算法加速比

从图4可以看出随着图像分辨率的增大,优化前GPU和优化后GPU的并行算法加速比曲线都呈上升趋势,当图像分辨率为8192×8192时,优化前GPU和优化后GPU的并行算法加速比都分别达到最大的34.3倍和37.3倍。

图5 双GPU并行处理流程图

对图像平滑算法进行双GPU试验时,需要按GPUs图像并行处理设计模型的步骤2对任务进行划分,将图像数据拆分为两部分,分别在两个GPU上并行处理。在双GPU环境下,CPU需创建两个线程分别控制不同的GPU设备进行图像处理,然后在CPU中合成最终结果,处理流程如图5所示。

对双GPU图像平滑算法进行测试时,使用单GPU实验图像数据,结果如表2所示。

表2 单GPU和双GPU的处理时间比较

从表2可以看出,当图像分辨率较低时,双GPU处理速度稍低于单GPU处理速度,随着分辨率增加到一定程度,双GPU处理速度优势才越来越明显。

从单GPU和双GPU两个实验结果中表明,并行设计后的图像平滑算法在GPU中取得了很好的加速效果,从而验证了GPU图像处理并行设计模型的有效性。

5 结语

本文在对大量图像并行算法研究的基础上,提出了GPU图像处理并行设计模型,通过并行平滑算法在GPU中的执行从而验证了模型的有效性。该模型简单易懂,通用性强,为更多图像处理算法并行化并移植到GPU中提供了理论基础。

[1] 袁涛,马艳,刘定生.GPU在遥感图像处理中的应用综述[J].遥感信息,2012,27(6):110-117.

[2] 方留杨,王密,李德仁.CPU和GPU协同处理的光学卫星遥感影像正射校正方法[J].测绘学报,2013,42(5):668-675.

[3] 李朋龙,邓非,何江,等.GPU-CPU协同航空影像快速正射纠正方法[J].测绘地理信息,2016,41(2):44-47.

[4] 王化喆,魏先勇.基于GPU的遥感图像前期处理算法研究与应用[J].现代电子技术,2016,39(3):47-50.

[5] D GRANATA, U AMATO, B ALFANO. MRI denoising by nonlocal means on multi-GPU[J]. Journal of Real-Time Image Processing,2016:1-11.

[6] 吴颀峰.基于GPU的数字图像处理算法研究[D].赣州:江西理工大学,2011.

[7] 肖汉,张祖勋.基于GPGPU的并行影像匹配算法[J].测绘学报,2010,39(1):46-51.

[8] 肖汉.基于CPU_GPU的影像匹配高效能异构并行计算研究[D].武汉:武汉大学,2011.

[9] 张舒,褚艳利.GPU高性能运算之CUDA[M].北京:中国水利水电出版社,2009.

[10] NVIDIA Corporation. CUDA Programming Guide 1.0[EB/OL]. http://www.nvidia.com,2009(8):11.

[11] 马安国,成玉,唐遇星,等.GPU异构系统中的存储层次和负载均衡策略研究[J].国防科学技术大学学报,2009,31(5):38-43.

Parallel Design Model of GPU Image Processing

WANG Ping QUAN Jicheng WANG Hongwei

(Department of Aeronautic and Astromautic Intelligence, Aviation University of Air Force, Changchun 130022)

The development of GPU general computing provided a new technique for image processing, and some image processing algorithms had been transplanted to GPU and got a better acceleration effect. But it could not form a general parallel design model. Thus, based on the study of the characteristics of GPU structure and the existing parallel algorithms of GPU image processing, this paper proposed a parallel image processing design model of single GPU and multi GPU. And this paper took the algorithm design of parallel image smooth as an example to testify the effectiveness of this model. The experimental results showed that the proposed model had good generality, and it could provide a theoretical reference for the parallel processing of more algorithms in the GPU image processing.

image algorithms, parallel, GPU, model, generality

2016年5月6日,

2016年6月25日

王平,男,硕士研究生,研究方向:数字图像处理和GPU并行计算。全吉成,男,博士,教授,博士生导师,研究方向:二维可视化技术。王宏伟,男,硕士,讲师,研究方向:数字图像处理和地理信息系统。

TN911

10.3969/j.issn.1672-9730.2016.11.021

猜你喜欢
线程图像处理程序
海战场侦察图像处理技术图谱及应用展望
人工智能辅助冠状动脉CTA图像处理和诊断的研究进展
实时操作系统mbedOS 互斥量调度机制剖析
给Windows添加程序快速切换栏
基于国产化环境的线程池模型研究与实现
基于ARM嵌入式的关于图像处理的交通信号灯识别
试论我国未决羁押程序的立法完善
机器学习在图像处理中的应用
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序