首页> 中国专利> 基于多核架构的大图像实时浏览方法

基于多核架构的大图像实时浏览方法

摘要

本发明公开了一种基于多核架构的大图像实时浏览方法,包括如下步骤:(1)使用内存映射技术,将所述的大图像中指定部位的图象数据读取至缓存池;(2)根据浏览者的指定,将缓存池内的对应的数据块以图象形式进行显示,所显示的图象区域即为当前浏览区域,当浏览者选择当前浏览区域相邻的图象区域进行浏览时,对缓存池内的图象数据进行读取和更新,步骤(1)、步骤(2)中,在显示当前浏览区域的图像数据以及向缓存池内读取图象数据时通过设立并行工作管道,利用CPU多核技术使多个线程并行地处理。本发明大图像实时浏览方法,采用并行工作管道和基于预测的数据处理技术,不需要任何预处理操作,大大提高了浏览的效率。

著录项

  • 公开/公告号CN101650820A

    专利类型发明专利

  • 公开/公告日2010-02-17

    原文格式PDF

  • 申请/专利权人 浙江大学;

    申请/专利号CN200910152972.1

  • 发明设计人 杨鑫;许端清;赵磊;唐大伟;

    申请日2009-09-24

  • 分类号G06T1/00(20060101);G06T1/60(20060101);G06T1/20(20060101);

  • 代理机构33224 杭州天勤知识产权代理有限公司;

  • 代理人胡红娟

  • 地址 310027 浙江省杭州市西湖区浙大路38号

  • 入库时间 2023-12-17 23:27:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-11

    未缴年费专利权终止 IPC(主分类):G06T1/00 授权公告日:20110720 终止日期:20140924 申请日:20090924

    专利权的终止

  • 2011-07-20

    授权

    授权

  • 2010-04-21

    实质审查的生效 IPC(主分类):G06T1/00 申请日:20090924

    实质审查的生效

  • 2010-02-17

    公开

    公开

说明书

技术领域

本发明涉及图像处理技术领域,尤其涉及一种基于多核架构的大图像实时浏览方法。

背景技术

近年来,随着数据获取设备的不断提高,越来越多的高精度大图像出现在医学、遥感、气象、考古等领域中。这些大图像给使用者带来更多细节信息的同时,也给计算机交互式的显示它们带来了巨大的挑战。例如,我们使用Canon 5D相机在敦煌莫高窟285洞窟拍摄的“飞天”佛像全景图数据大小达到了15G,远远超过了计算机内存和显存的容量限制,导致了效率低下的out-of-core数据访问,给图片的实时浏览带来了巨大的问题。

以往对大图像浏览的研究大多利用数据访问的时间相关性和空间相关性,通过缓存最近访问的图像数据,最大限度的降低数据从硬盘到内存的延迟时间。这些算法存在两个明显的不足:首先,这些算法都需要进行大量的预处理操作,这些操作是十分耗时的,大大降低了操作效率;其次,这些算法都是通过设计一些存储层次结构,来缓存已访问的数据,利用数据使用的时间相关性和空间相关性,然而一旦需要访问新的图像数据,就不得不从硬盘调度,产生了明显的I/O延迟,使图像的实时浏览性能突然下降。为此,我们提出了一种基于预测的数据管理方法,通过预测使用者即将可能浏览的图像数据,利用多核架构下的并行工作管道,将这些预测数据快速的提前预取到内存中,从而避免了数据访问中可能产生的延迟。

随着计算机硬件计算能力呈指数速度的增长,尤其是多核技术的出现,使数据的并行处理能力有了巨大的提高。Nvidia公司推出的GTX285图形卡已经可以达到500Gflops的性能,其基于GT200架构的图形卡里包含了多达240个处理器,通过SIMT编程模型实现高性能计算;另外,图形卡的可编程性也越来越灵活,Nvidia公司的CUDA编程架构可以使编程者灵活而且充分的利用GPU的强大并行计算能力进行算法设计。

图像处理本身就是十分适合并行处理的算法,因此很适合利用这些新的硬件性能。为了充分挖掘硬件的并行计算能力,以实现大图像的实时浏览,所以必须重新设计数据结构和算法,否则无法发挥现有硬件的处理能力。

发明内容

本发明提出的是一种基于多核架构的大图像实时浏览方法,采用并行工作管道和基于预测的数据处理技术,不需要任何预处理操作,大大提高了浏览的效率。

一种基于多核架构的大图像实时浏览方法,包括如下步骤:

(1)使用内存映射技术,将所述的大图像中指定部位的图象数据读取至缓存池;

读取指定部位的图象数据时是分若干数据块读入的,每个数据块对应的一个图象区域,每个图象区域大小相同且均为矩形;

作为优选,每个数据块大小不超过cache的容量,每个数据块对应的图象区域为正方形,尺寸应该为2的幂次方。

(2)根据浏览者的指定,将缓存池内的对应的数据块以图象形式进行显示,所显示的图象区域即为当前浏览区域,当浏览者选择当前浏览区域相邻的图象区域进行浏览时,缓存池内的图象数据按如下方法读取和更新:

a)设定位移阈值,若更新后的当前浏览区域在大图像中沿同一方向连续移动的位移绝对值未达到位移阈值时,缓存池内的图象数据不做更新;

b)当更新后的当前浏览区域在大图像中沿同一方向连续移动的位移绝对值达到位移阈值时,仅将更新后的当前浏览区域的在所述的同一方向侧的邻近范围的图象数据作为下次更新可能浏览的数据读入缓存池;

将下次更新可能浏览的数据读入缓存池时,将与当前浏览区域在所述的同一方向侧相隔预定步长的图象区域中的图象数据淘汰;

所述的邻近范围的图象数据是指当前浏览区域同一方向侧正向及两个斜向的共三部分图象数据,而每部分的图象数据包含一个数据块的图象数据或是包含连续的多个数据块的图象数据;

c)当浏览方向发生改变时,仅将改变浏览方向后的当前浏览区域在改变后方向上直接相邻的正向及两个斜向共三个图像区域的图像数据作为下次更新可能浏览的数据读入缓存池;

所述的步骤(1)、步骤(2)中,在显示当前浏览区域的图像数据以及向缓存池内读取图象数据时通过设立并行工作管道,利用CPU多核技术使多个线程并行地处理;利用一个线程来显示当前浏览区域的图像数据,利用其余的线程向缓存池内读取图象数据。

以下结合各步骤详细说明本发明方法:

步骤(1)中:

由于大图像所含的数据量较大,数据并不会同时被使用,读取暂时用不到的数据浪费了大量的硬盘读取时间和带宽,一个比较重要的问题就是一次应该读取多少数据。为了使数据从硬盘到内存的载入速度加快,一种极端的做法可能是一次只读取一个像素。这样做尽管减少了进行一次数据传输的时间,但却大大增加了传输的次数,产生了更大的传输花费。这里,本发明主要从三方面考虑设计数据读取块的大小:

因此本发明根据以下三个方面将整个大图像划分为若干数据块:

第一,由于CPU最终要通过其片上cache读取数据,为了增加其cache命中率,使每次读取的数据块大小不超过cache的容量;

第二,所选取的数据块形状是等方性的,为了操作上的简单,选取正方形作为我们的数据块形状;

第三,为了加快内存访问的速度,数据块的大小和尺寸应该均为2的幂次方。设立了一个缓存池,用来存储刚刚已经访问、正在访问的以及我们预测出的即将可能访问的数据块。这样浏览者可以根据浏览需要,按需的将所对应的数据块读到我们所建立的缓存池中。同时,本发明使用了内存映射技术进行数据的读取,极大的提高了读取的效率;

所述的缓存池是一个长方形的二维结构,根据当前图像浏览的方向性,可动态的调整缓存池的长宽,也就是说,当图像做横向浏览时,缓存池的长度会大于宽度,而当图像做纵向浏览时,缓存池的宽度则会大于长度。当然,缓存池的长宽变换并不是一步完成的,而是在并行工作管道中,随着图像浏览方向的变化,逐渐的分几步操作完成的,渐进式的完成长宽变换。

现有技术多数使用了虚拟内存技术,这种技术可能诱使人们想要把数据全部一次性读进来,但却忽视了两个重要的方面:首先,这些数据并不会同时被使用,而读取这些用不到的数据却浪费了大量的硬盘读取时间和带宽;其次,内存的容量远远小于硬盘,并没有足够的空间来存储我们所需要的大规模数据。另外,一次虚拟存储操作会产生两次I/O操作,一次是从硬盘文件读取数据,一次是进行页面置换操作,开销是很大的。这里,本发明采用内存映射技术,将数据直接映射到进程的地址空间中去,如同整个文件加载到了内存中一样,使访问速度明显加快。

本发明方法不需要象现有技术那样必须预先对数据文件进行分块处理和逻辑组织,而是在需要读取时通过使用内存映射技术根据图像块在整个图像文件的相对位置关系直接读取,从而实现真正的“按需读取”。大图像所包含的数据量是巨大的,每次浏览只需要其中的一部分数据,因此只需要读取所需的一部分数据,从而节省了大量的硬盘读取时间和带宽。

步骤(2)中:

本发明根据图像浏览行进的特点,预测出即将可能访问的数据块,即进行图像浏览时在某一方向上的操作具有持续性的概率很大,因此可以将缓存池设计成一个长方形二维结构。

第一,当浏览者沿同一方向连续更新当前浏览区域时,仅将更新后的当前浏览区域的在所述的同一方向侧的相隔一定步长的相邻区域的图象数据作为下次更新可能浏览的数据读入缓存池,置换上述方向侧与当前浏览区域数据块相隔一定步长的原有的相邻数据块,缓存池中其它的数据块保持不变。这里的相邻数据块是指同一方向侧正向及两个斜向的共三块相邻区域的图象数据,而上述一定步长一般取为数据块宽度的整数倍。由于数据读取的时间要大于数据显示的时间,所以步长选的较长,可以防止可能出现的数据等待;

第二,当图像的浏览方向发生改变,例如从横向浏览变成纵向浏览时,为了减少数据传输的负担,只预测浏览方向侧的部分数据,即空间上最相邻的三个数据块,同时逐渐将缓存池形状从长度大于宽度调整为宽度大于长度;

第三,为了防止过多频繁而无效的数据读取操作,有效地利用缓存池内的数据,设立了一个阈值,通常设为数据块的长度或者宽度,只有当图像浏览操作在某一方向上连续移动的位移绝对值超过这个阈值,才进行数据块的预测和置换更新工作。

针对下次操作可能浏览的数据的判断在现有技术中多数都是根据数据访问的时间相关性和空间相关性,假定当前访问的数据在接下来几次操作中仍然可能会被访问,利用存储层次结构和缓存机制,保存这些刚刚被访问的数据。然而,当操作需要访问新的数据块,即前几次操作中未使用过的数据块时,就不得不从硬盘读取,从而产生明显的等待延迟,影响了图像浏览的实时性。

本发明方法中的当前活跃的数据块为当前浏览区域以及与当前浏览区域相邻的图象数据,这里所述的每一个相邻区域的范围大小与当前浏览区域的范围大小相同,但作为优选,由于在浏览者进行图像浏览时,在某一方向上的操作具有持续性的概率很大,也就是说,假如在对图像进行连续横向浏览时,很可能在接下来的若干步操作中仍然是横向浏览,很少会出现一步横向浏览一步纵向浏览的交叉操作。根据这一特点,当浏览者沿同一方向连续浏览时,仅将当前区域的在所述的同一方向侧的相邻区域的数据作为下次操作可能浏览的数据读入缓冲可以最大限度节省资源,增加数据读取和交换的速度,这里所述的沿同一方向连续浏览中连续的次数可以根据需要设定,例如沿同一方向连续3~5次选择当前图象相邻区域浏览时,就可以以此为依据仅将当前区域的在所述的同一方向侧的相邻区域的数据作为下次操作可能浏览的数据读入缓冲。

在向缓冲区读入图象数据的同时,判断出缓存池内最不可能用到的数据,将其淘汰节省空间。

步骤(3)中:

设立并行工作管道,利用CPU多核技术使多个线程并行地对图象数据进行读取和显示,利用一个线程来显示缓存池内浏览者当前正在浏览的图像区域,利用其余的多个线程将上述数据块预测方法所预测出的数据块快速地读取至缓存池内,同时使用CPU的SIMD指令进一步加快数据的读取和显示。所述的并行绘制管道是可扩展的,不针对某个特定的处理核数或者线程数,只要发现存在可用的空闲线程,其都将会被加入到数据读取的线程组中。

本发明使用信号槽机制来保持此并行工作管道的高效性和可扩展性。当需要进行读取操作时,显示操作线程将向读取操作线程组发送一个执行信号,读取操作线程组收到这个信号后,组内各个线程开始并行的读取数据,当某一线程完成其读取任务后,它将查看执行信号是否依然有效,如果仍然有效,则此线程将继续进行新的数据读取工作,从而保证所有线程均一直处于工作状态。当所有的读取任务执行完毕后,执行信号将会被设置成无效状态。另外,只要发现存在可用的空闲线程,其都将会被加入到数据读取的线程组中,从而保证了并行工作管道的可扩展性,其不针对某个特定的处理核数或者线程数。

基于预测的数据处理方法尽管可以有效的将浏览即将可能需要的数据块提前载入内存,但却需要在短时间内进行大量的硬盘读取操作,这对于通常的单线程操作是一个巨大的挑战。但是,随着多核技术的出现,程序的并行执行能力得到了革命性的增强,这同时也让数据的并行快速读取有了可能。我们采用CPU的多核技术,同时使用了SIMD(Single InstructionMultiple Data)技术来进一步扩大程序执行的并行度。本发明所使用的并行工作管道主要是并行的完成两个任务:图像显示和数据读取。如果有n个可以并行执行的线程,只使其中的一个线程去处理图像的显示操作,而其余n-1个线程均进行数据的读取操作。当图像浏览操作在某一方向上连续移动的位移超过某一阈值时,进行数据块的预测和置换更新工作。显示操作线程将向读取操作线程组发送一个执行信号,读取操作线程组收到这个信号后,组内各个线程开始并行的读取数据,当某一线程完成其读取任务后,它将查看执行信号是否依然有效,如果仍然有效,则此线程将继续进行新的数据读取工作,从而保证所有线程均一直处于工作状态。当所有的读取任务执行完毕后,执行信号将会被设置成无效状态。本发明的并行工作管道是可扩展的,它不针对某个特定的处理核数或者线程数,只要发现存在可用的空闲线程,其都将会被加入到数据读取的线程组中。

在图象浏览时需要对图象放大或缩小:

在图像浏览过程中,对浏览区域进行放大或者缩小是一种基本的操作,尤其对高精度的大图像来说,一些细节信息必须要通过放大操作来观察。传统的方法大多需要经过预处理以对欲浏览图像生成一系列不同分辨率的图片,这种方法显然是耗时而且低效的。由于对图像的放大缩小处理都是对某一局部区域几个像素的计算,与多数像素都是无关的,因此很适合使用大量的线程进行并行处理。

首先,根据浏览区域的图像分辨率来自适应的创建线程的数量;然后,每个线程用来计算所显示区域中的一个像素,这个像素是对原图像中几个邻近像素根据权值计算后的结果。

在进行若干次图像缩小操作之后,一个线程要一次性处理大量的像素,由于GPU的存储能力十分有限,这种情况下不能把所有的像素数据都导入到GPU中去。而且,随着图像的缩小,可以忽略一些细节信息的现实。因此,这时只对一定间隔的像素进行取样,计算这些部分像素的权值用来显示。

本发明使用Nvidia公司推出的CUDA(Compute Unified DeviceArchitecture)解决方案实时的对图像进行放大或者缩小。Nvidia公司的GTX285图形卡有240个处理器,高达141GB/S的吞吐能力,这为程序的并行执行提供了很好的支持。在CUDA架构中,并行执行的程序称为核(kernal),以网格(grid)的形式执行,一个网格中包含有大量的块(block),大量的线程以块作为组织单位,每个块里包含有一定数量的线程,只有在同一个块内的线程才能进行通信,不同的块里的线程是无法直接进行通信的。块里的线程以warp作为执行单位,warp宽度为32,同一个warp内的线程执行同一条指令,half-warp是存储操作的基本单位。CUDA架构提供了容量较大的可供数据存储的全局存储区(global memory),但是在非对齐模式下访存花费可高达500个时钟周期;同时还有一种可供block内线程通讯和存储使用的共享存储区(shared memory),在不存在bankconflicts的情况下,访存花费仅为1个时钟周期,但容量仅为16KB。很明显,对图像进行放大缩小操作将会有大量的访存操作,如果使用全局存储区将会有明显的延迟,但是共享存储区的容量很小,也无法满足我们对图像数据的存储要求。因此,本发明选择CUDA架构提供的纹理单元作为存储载体,尽管纹理单元也属于全局存储区的一部分,但是它具有缓存功能,对数据量较大时的随机数据访问或者非对齐访问有良好的加速效果。

首先,本发明根据浏览区域的图像分辨率来自适应的创建线程的数量;然后,每个线程用来计算所生成图片中的一个像素,这个像素是对原图像中几个邻近像素根据权值计算后的结果。随着图像的逐渐缩小,所采样的邻近像素的间隔将会越来越大,意味着邻近像素间所包含的像素越来越多,由于GPU的存储能力十分有限,这种情况下不能把所有的像素数据都导入到GPU中去。另一方面,根据测试,假设几个邻近像素分别为q1,q2...qn,其权值分别为w1,w2...wn,令w1,...wn-1均为0,wn为1,根据这样的权值计算出来的结果尽管从图像质量上不如以前,但是从图像浏览的角度上看,是不影响其最终的观看效果的。因此,可以根据放大或者缩小的倍数,当达到一定倍数以后,根据一定的步长,将一些像素点权值设置为1,另一些像素点权值设置为0,只导入权值为1的像素数据进入GPU。需要注意的是,当放大到一定倍数时,图像的浏览区域只是整幅大图像的一小块区域,其数据量大小已经满足GPU的存储要求,而这时候图像的细节信息对于浏览来说也是很必要的,所以这时可以向GPU导入所有像素信息,以生成高质量的图片。

本发明方法可以使用GPU所提供的大量多线程并行运算能力,实时的对所浏览图像进行放大或缩小操作。另外本发明方法具有很好的稳定性,一方面,不会因为发生数据等待而在某一时刻出现性能突降的情况,另一方面,不受图像大小的影响,对不同大小的图片都取得了相近的性能;同时,对处理核的数量也表现了良好的可扩展性。

尽管本发明方法主要针对大图像数据,但是也可以很容易拓展到其他涉及到out-of-core数据的应用中,比如在图形绘制中,复杂模型常常具有大量的点面数据和纹理数据,并行工作管道和基于预测的数据管理方法可以用到对这类问题的处理上。

附图说明

图1a为本发明方法中缓冲池的结构示意图;

图1b为图1a中横向浏览图象时缓冲池内数据的变化示意图;

图2为图1a中纵向浏览图象时未优化前的缓冲池内数据的示意图;

图3a为优化后的缓冲池中以区域A为当前浏览区域的示意图;

图3b为优化后的缓冲池中以区域B为当前浏览区域的示意图;

图3c为优化后的缓冲池中以区域C为当前浏览区域的示意图;

图3d为优化后的缓冲池中以区域D为当前浏览区域的示意图;

图4为优化后的缓冲池中纵向浏览过程的示意图;

图5为并行工作管道的工作原理示意图。

具体实施方式

本发明方法实施时,首先设立了一个缓存池,用来存储当前活跃的数据块以及根据预测算法所预测出的即将可能访问的数据块,如图1a所示,缓存池中包含有8*3个数据块,初始状态下,这24个数据块对应着需要浏览的大图像文件的一块连续区域。根据图像浏览的特点,即在某一方向上的操作具有持续性的概率很大,缓存池在设计时也充分考虑到了这一特性。缓存池是一个长方形的二维结构,但是可以根据当前图像浏览的方向,动态的调整缓存池的长宽,也就是说,当图像做横向浏览时,我们的缓存池的长度会大于宽度,而当图像做纵向浏览时,我们的缓存池的宽度则会大于长度。当然,缓存池的长宽变换并不是一步完成的,而是在并行工作管道中,随着图像浏览方向的变化,逐渐地分几步操作完成的,渐进式的完成长宽变换。

根据上述数据块预测和置换算法,即当浏览者沿同一方向连续更新当前浏览区域时,仅将更新后的当前浏览区域的在所述的同一方向侧的相隔一定步长的相邻区域的图象数据作为下次更新可能浏览的数据读入缓存池,置换上述方向侧与当前浏览区域数据块相隔一定步长的原有的相邻数据块,缓存池中其它的数据块保持不变。这里的相邻数据块是指同一方向侧正向及两个斜向的共三块相邻区域的图象数据,而上述一定步长一般取为数据块宽度的整数倍。由于数据读取的时间要大于数据显示的时间,所以步长选的较长,可以防止可能出现的数据等待,本实施例中暂时取步长为数据块宽度的3倍。

如图1a所示,假设是A图像块,与其相邻的几个浏览区域也已经读到缓存池中了,那么随着当前浏览区域的更新,例如当前的浏览方向是从右向左横向浏览,对于数据块A来说,除了数据块E、D、F,其他所有在缓存池中的数据块都认为是数据块A邻近范围的图象数据,由于这些数据已经处于内存中,而且大小均不超过cache的容量,使得访问这些数据几乎没有延迟。由于缓存池的大小是不变的,随着浏览操作的进行,必须要淘汰一些可能不再使用的数据而导入一些新的数据。目前,多数算法都采用操作系统中虚拟内存机制里一些页面置换算法所采用的方法,比如LRU、FIFO等方法。本实施例中选择数据块E、D、F作为预淘汰的数据块,以便将来置换成根据浏览行进方向所预测新的数据。

根据浏览方向的特点,在进行图像浏览时,在某一方向上的操作具有持续性的概率很大,也就是说,假如在对图像进行横向浏览时,很可能在接下来的若干步操作中仍然是横向浏览,很少会出现一步横向浏览一步纵向浏览的交叉操作,例如以A区域为起始的当前浏览区域,连续3次向左浏览后当前浏览区域为L区域(参见图1b),接下来K、M、L相邻的左侧区域(E、D、F区域)是即将最有可能被访问的区域,于是将数据块E置换成在图像文件中与数据块K左相邻的图像数据,数据块D、F也进行类似的处理。如图1b所示。

预淘汰的数据块也随着当前浏览区域的更新而变化,例如当前浏览区域为G区域时,所选的数据块淘汰区域也相应的按照同样的方向行进。数据块E、D、F已经位于缓存池的最左端,因此转到缓存池的最右端,将数据块H、I、J作为数据块淘汰区域,同时导入所预测的数据。需要注意的是,经过预测,数据块H置换的是数据块E在图像文件中的相邻左侧图像块,而数据块N虽然在缓存池中是与数据块H相邻的,但是在图像文件中,它们却是没有任何相对位置关系的,类似的,数据块I、J也进行同样的处理。

如图2所示,当图像的浏览方向发生改变,即从横向浏览变成纵向浏览时,例如当前浏览区域从数据块G移到数据块O,而需要预测的区域则大大增多,数据块E应置换成在图像文件中数据块F下方的数据,数据块K、R、S、B、T、N、H也要做相应的更新。尽管采用了渐进式更新,甚至是随着浏览的进行,舍弃一些数据块的更新,但是经过测试发现这种方法仍然会给传输带来了很大的负担,因此本发明将在满足使用的前提下尽量使所预测的数据量达到最小。

根据实验,将当前浏览数据块与同一方向侧更新区域数据块的间隔步长设为零时,很少出现数据等待的情况,因此,为了减少数据的传输量,将步长设为零。如图3a所示,针对图2中的情况进一步优化了缓存池,图3a至图3d给出了从数据块A->B->D->C的图像浏览过程。将缓存池的大小调整为4*3个数据块,当前浏览区域为数据块A,浏览方向是横向向左,根据本发明提出的预测算法,即将可能浏览的图像区域是数据块A在原图像区域上相邻的同向及斜向三个数据块,这样并行工作管道开始并行的将所预测的这三个数据块读取进缓存池,置换数据块A相邻的三个数据块E、B、I中原有的数据,完成数据的更新;同样的,浏览操作继续横向向左操作时,这时当前浏览区域是数据块B,用同样的预测方法将新数据读进缓存池中的数据块H、D、L位置处,更新后的缓存池中,数据块B和数据块D中所包含的数据实际上在原图像区域中是位置上横向相邻的;当浏览操作继续横向向左操作,当前浏览区域变为数据块D,与此同时,更新数据块G、C、K里的数据;继续横向向左操作,当前浏览区域变为数据块C,而并行工作管道开始并行的更新数据块F、A、J里的内容。

与图1a所示的缓存池不同的是,优化过后的缓存池中并不都是有效的数据块,如图3a中的数据块H、D、L。

如图4所示,当图像浏览区域由数据块A移到数据块J时,只更新数据块E、F、G,而数据块H、D、L并不作处理。

这里所说的无效数据块,只是不再进行数据的更新,但是由于里面仍然存有以前曾经浏览过的图像数据,因此仍起到了数据缓存的作用。通过进行这样的优化,大大减少了数据的量,节省了传输时间。为了防止过多频繁而无效的数据读取操作,需要设立了个阈值,通常设为数据块的长度或者宽度,只有当图像浏览操作在某一方向上连续移动的位移绝对值超过这个阈值,才进行数据块的预测和置换更新工作。

并行工作管道主要是并行的完成两个任务:图像显示和数据读取。如果有n个可以并行执行的线程,我们只使其中的一个线程去处理图像的显示操作,而其余n-1个线程均进行数据的读取操作。如图5所示,显示操作与读取操作并行执行,尽管显示操作的执行时间要少于读取操作的执行时间,但是前面已经说过,只有当图像浏览操作在某一方向上连续移动的位移超过某一阈值时,才进行数据块的预测和置换更新工作,也就是说,显示操作的执行次数要多于读取操作的执行次数,这样就平衡了两种操作的速度差异,避免了显示操作因数据等待而可能出现的停滞。当需要进行读取操作时,即达到阈值要求时,显示操作线程将向读取操作线程组发送一个执行信号,读取操作线程组收到这个信号后,组内各个线程开始并行的读取数据,当某一线程完成其读取任务后,它将查看执行信号是否依然有效,如果仍然有效,则此线程将继续进行新的数据读取工作,从而保证所有线程均一直处于工作状态。当所有的读取任务执行完毕后,执行信号将会被设置成无效状态。并行工作管道是可扩展的,它不针对某个特定的处理核数或者线程数,只要发现存在可用的空闲线程,其都将会被加入到数据读取的线程组中。

在对图像进行放大缩小的操作时,选择CUDA架构提供的纹理单元作为图像存储的载体,尽管纹理单元也属于全局存储区的一部分,但是它具有缓存功能,对数据量较大时的随机数据访问或者非对齐访问有良好的加速效果。

以缩小操作为例,根据浏览区域的图像分辨率来决定创建线程的数量,例如如果分辨率是1024*768,则创建1024*768个线程,每个线程用来计算所生成图片中的一个像素,这个像素是对原图像中几个邻近像素根据权值计算后的结果。随着图像的逐渐缩小,所采样的邻近像素的间隔将会越来越大,意味着邻近像素间所包含的像素越来越多,由于GPU的存储能力十分有限,这种情况下不能把所有的像素数据都导入到GPU中去。另一方面,根据测试,假设几个邻近像素分别为q1,q2...qn,其权值分别为w1,w2...wn,令w1,...wn-1均为0,wn为1,根据这样的权值计算出来的结果尽管从图像质量上不如以前,但是从图像浏览的角度上看,是不影响其最终的观看效果的。因此,可以根据放大或者缩小的倍数,当达到一定倍数以后,根据一定的步长,将一些像素点权值设置为1,另一些像素点权值设置为0,只导入权值为1的像素数据进入GPU。需要注意的是,当放大到一定倍数时,图像的浏览区域只是整幅大图像的一小块区域,其数据量大小已经满足GPU的存储要求,而这时候图像的细节信息对于浏览来说也是很必要的,所以这时可以向GPU导入所有像素信息,以生成高质量的图片。

在处理各种图片的过程中,也遇到了一些每个像素只占三个字节的图片,即只有R、G、B三个分量,这种存储方式对于纹理单元的访问是很不友好的,因为它会导致非合并访问(uncoalesced access)的访存行为,使执行效率降低。在这种情况下,以4个像素为一组,按组访问,然后将其放入共享存储区中,再按照上面所讲的方法进行再处理。需要注意的是,这种方式下访问的顺序很重要,同一个half-warp内的线程的访存地址一定要连续,以达到从纹理单元到共享存储区的合并访问(coalesced access)。

不需要进行耗时的预处理操作,只有在对GPU设置工作环境时需要大约172ms左右的时间,而这样短的时间是可以忽略不计的;在对图像进行缩小操作时,在某些时刻所需时间会有一些波动,产生这些波动的原因是由于当图像浏览缩小到一定倍数时,不会把所有的图像数据都导入到GPU,而是根据取样要求选择一部分数据导入GPU,而对这些数据的选择过程会增加一些寻址花费,也可能会产生访存冲突,因此增加了生成图片的时间。在进行图像浏览操作时,所产生的延迟时间则一直比较平稳,没有大的抖动,在某些时刻,会有一些比较小的抖动,这是由于图像浏览的行进方向突然发生改变,使在并行工作管道里的数据传输量突然增多,而且缓存池结构也要进行一些动态的调整。并行工作管道是可扩展的,在一定范围内,随着处理核数目的增多,完成一次浏览行进操作平均所需要的时间逐渐减少,但是由于目前的硬盘的读写速率仅为35M/S左右,带宽也仅为100M/S左右,因此当处理核增加到一定数量时,必然会出现数据读取的瓶颈,因此当处理核数量增加到32时,所获得的效果并不理想。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号