本发明涉及一种图像处理方法,尤其是一种应用于图像处理的基于双显卡的gpu并行计算方法。
背景技术:
现代gpu提供了顶点处理器和片段处理器两个可编程并行处理部件。在利用gpu执行图像处理等通用计算任务时,要做的主要工作是把待求解的任务映射到gpu支持的图形绘制流水线上。通常的方法是把计算任务的输入数据用顶点的位置、颜色、法向量等属性或者纹理等图形绘制要素来表达,而相应的处理算法则被分解为一系列的执行步骤,并改写为gpu的顶点处理程序或片段处理程序,并调用片段程序进行处理;最后,保存在帧缓存中的绘制结果就是算法的输出数据。
gpu对图像处理的应用已经十分普遍,但是并没有协调多张显卡同步对单张图像进行处理的应用,尤其是对于高分辨率医学图像实时处理,单显卡的处理效率有时无法满足图像的实时性。
技术实现要素:
本发明的目的是提供一种提高图像处理的实时性和处理效率的方法。
为了实现上述目的,本发明的技术方案是:
一种应用于图像处理的基于双显卡的gpu并行计算方法,它包括以下步骤:
步骤一:初始化双显卡的gpu资源;
步骤二:将图像内存划分为图像数据块一和图像数据块二,图像数据块一和图像数据块二在物理空间上连续,设定图像数据块一和图像数据块二的重叠区域大小;
步骤三:创建并启动两个线程,分别调用两张显卡对应的gpu资源,执行图像处理程序,得到图像数据块一和图像数据块二各自的处理结果;
步骤四:丢弃重叠区域的数据,合并图像数据块一和图像数据块二的处理结果,完成双显卡的gpu对一张图像的并发处理。
进一步地,步骤一具体为:
步骤101:安装gpu运行所需的库文件;
步骤102:初始化显卡设备,在平台中寻找gpu资源可以调用的显卡;
步骤103:初始化显卡设备信息,建立gpu运行必需的程序对象;
步骤104:编译gpu并行程序模块。
进一步地,步骤二中,图像内存划分方式为:水平分割、纵向分割或斜向分割;水平分割时:
步骤201:将图像内存以水平分割线均匀分割为两块;
步骤202:沿水平分割线向上下两侧分别构建大小相等的重叠区域一和重叠区域二,重叠区域一和重叠区域二的数据与底层图像内存的数据一致,构建图像数据块一,包括水平分割线上方的部分和重叠区域二,构建图像数据块二,包括水平分割线下方的部分和重叠区域一;
步骤203:对图像数据块一和图像数据块二进行邻域计算,对图像数据块一进行邻域计算时,重叠区域二只提供数据,对图像数据块二进行邻域计算时,重叠区域一只提供数据。
进一步地,所述的步骤二中纵向分割时:先将图像转置90°,再按照水平分割处理。
进一步地,步骤202中所述的重叠区域大小是根据邻域计算的大小来确定的,重叠区域的大小为邻域计算高度的两倍。
进一步地,步骤三具体为:
步骤301:创建并启动两个线程,分别调用两张显卡对应的gpu资源。
步骤302:在两个线程内执行图像处理程序,每个线程分别对应一个图像数据块,使用线程控制接口同步等待两个线程完成相应的处理,记录两张显卡运行时间较长者为图像内存处理的时间。
进一步地,步骤四具体为:
步骤401:图像数据块一丢弃重叠区域二的数据,图像数据块二丢弃重叠区域一的数据;
步骤402:合并图像数据块一和图像数据块二的处理结果;
步骤403:释放gpu资源,输出处理结果。
本发明的有益效果:
本发明提高了图像处理的计算效率,整体效率可以提升70%~80%,对于目前的主流4k图像画面,双显卡的gpu并发机制可以大大提高图像处理的实时性,同时成本上低于同类效果的dsp或者fpga硬件设计,对于高分辨率图像的实时处理和现实意义很大,同时通过设定重叠区域,保证了新的边缘附近的像素计算与原图一致。
附图说明
通过结合附图对本发明示例性实施方式进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显,其中,在本发明示例性实施方式中,相同的参考标号通常代表相同部件。
图1是图像内存水平分割图。
图2是图像内存纵向分割图。
图3是重叠区域示意图。
具体实施方式
下面将参照附图更详细地描述本发明的优选实施方式。虽然附图中显示了本发明的优选实施方式,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施方式所限制。
如图1-3所示,一种应用于图像处理的基于双显卡的gpu并行计算方法,其特征是它包括以下步骤:
步骤一:初始化双显卡的gpu资源,确保设备的有效性;具体为:安装gpu运行所需的库文件;初始化显卡设备,在平台中寻找gpu资源可以调用的显卡;初始化显卡设备信息,建立gpu运行必需的程序对象;编译gpu并行程序模块。
步骤二:将图像内存划分为物理上的连续的两块,设定两块内存间的重叠区域大小,重叠区域大小是根据邻域计算的大小来确定的,重叠区域的大小为邻域计算高度的两倍;具体如图3所示,两个图像内存块分别是1、阴影区域、阴影区域以上部分、阴影区域以下且与阴影区域面积相同的部分;2、阴影区域及阴影区域以下部分,上下两块的计算考虑是不一样的:上半部分的计算不需要进入阴影区域以下且与阴影区域面积相同的部分,阴影区域以下且与阴影区域面积相同的部分只是提供数据以完成到中间线的邻域计算;下半部分的计算不进入阴影区域,阴影区域只是提供数据以完成中间线的邻域计算。
步骤三:创建并启动两个线程,分别调用两张显卡对应的gpu资源,执行图像处理程序,,使用线程控制接口同步等待两个线程完成相应的处理,记录两张显卡运行时间较长者为图像内存处理的时间,得到图像数据块一和图像数据块二各自的处理结果;
步骤四:丢弃重叠区域的数据,合并图像数据块一和图像数据块二的处理结果,完成双显卡的gpu对一张图像的并发处理。具体为:图像数据块一丢弃重叠区域二的数据,图像数据块二丢弃重叠区域一的数据;合并图像数据块一和图像数据块二的处理结果;释放gpu资源,输出处理结果。
考虑更多显卡并发的机制,与双显卡的处理机制基本一致,一般pc架构很难采用多于两个显卡的部署。所以我们以双显卡作为多gpu并发处理的主要结构。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。