首页> 中国专利> 一种在集群环境中对遥感影像数据进行高效并行存取的方法

一种在集群环境中对遥感影像数据进行高效并行存取的方法

摘要

一种在集群环境中对遥感影像数据进行高效并行存取的方法,在GDAL库基础上,通过构建一个遥感影像数据重分布模块,将大量非连续的小型数据读写请求聚合成少量连续的大型数据读写请求,提高了并行读写遥感影像文件的效率。技术方案为:各进程与主进程通信确定数据重分布的方案;如果不需要数据重分布,各进程直接按行读写数据;如果需要且是按行数据划分,那么奇数号进程负责读写文件,偶数号进程与左邻奇数号进程通信;如果需要且是按列或按块数据划分,每一行最左端的进程负责读写文件操作,其它进程与本行最左端的进程通信。本发明克服了GDAL库在按列或按块并行读写遥感影像文件效率低下且出错的问题,可被用于遥感影像处理并行算法的研发。

著录项

  • 公开/公告号CN102819407A

    专利类型发明专利

  • 公开/公告日2012-12-12

    原文格式PDF

  • 申请/专利权人 中国科学院地理科学与资源研究所;

    申请/专利号CN201210278969.6

  • 发明设计人 占利军;秦承志;

    申请日2012-08-07

  • 分类号G06F3/06;

  • 代理机构北京科迪生专利代理有限责任公司;

  • 代理人成金玉

  • 地址 100101 北京市朝阳区大屯路甲11号

  • 入库时间 2023-12-18 07:36:17

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-01-21

    授权

    授权

  • 2013-01-30

    实质审查的生效 IPC(主分类):G06F3/06 申请日:20120807

    实质审查的生效

  • 2012-12-12

    公开

    公开

说明书

技术领域

本发明涉及一种在集群环境中对遥感影像数据进行高效并行存取的方法, 技术应用领域为遥感影像数据并行处理等。

背景技术

随着对地观测技术的长足进步,遥感影像数据日益增长,遥感影像处理呈 现出数据密集和计算密集的特点,现有的遥感影像处理串行算法模式和传统硬 件平台已成为性能瓶颈,完全不能满足海量遥感数据快速处理的需求。以集群 为代表的高性能计算设备的普及为遥感影像高效处理提供了契机,为了有效利 用集群等高性能设备,迫切需要研发遥感影像处理并行算法。然而当前研发的 遥感影像处理并行算法在I/O部分存在两方面问题:1)由于遥感影像数据存储 格式繁多,要求所研发的遥感影像处理并行算法应能支持多种常用的遥感影像 数据格式;2)如果不能提升大规模遥感影像数据的I/O效率,将直接影响并行 算法实际应用的性能。

目前在遥感影像数据处理领域广泛使用GDAL(Geospatial Data  Abstraction Library,地理空间数据抽象库)来读取遥感影像数据,该库提供了 一个统一的标准接口来读写近75种格式的遥感影像数据,具有效率高、可扩 展性好等优点。如果GDAL能被用于遥感影像处理并行算法的研发,那么将解 决遥感影像数据存储格式繁多问题。

然而在研发遥感影像处理并行算法过程中发现,GDAL存在适用性差的问 题。当前大多数遥感影像处理算法都可采用简单规则数据划分的并行策略来进 行并行化,常用的数据划分方式有按行划分、按列划分和按块划分,上述三种 数据划分方式有各自优势,需根据算法特点和数据特点来选择。作为遥感影像 处理并行算法的I/O库,需支持上述三种基本数据划分方式。然而,GDAL只 支持按行数据划分,当多个进程使用GDAL按列或按块并行读写某一遥感影像 数据文件时,效率很低(远远低于按行数据划分),结果的正确性也得不到保 证。

GDAL按列或按块并行读写遥感影像文件效率低下且出错的原因在于产生 了大量非连续的数据读写请求。从用户视角看遥感影像文件应该是二维的栅格, 但从文件视角来看目前大部分的遥感影像文件是按行线性存储的一维条带,因 此当使用按列或按块数据划分方式对遥感影像文件进行划分时,每个进程需要 访问遥感影像文件多个相对较小、非连续的数据段。由于GDAL是建立在文件 系统之上的应用层I/O库,而现有的文件系统一次数据读写请求只能访问一段 连续数据,因此每个进程使用GDAL都将产生大量的小型数据读写请求,导致 性能急剧下降。此外,各个进程访问的数据不连续,并且可能跨越较大的数据 块,使得GDAL的加锁机制出现困难,最终导致结果错误。

发明内容

本发明的目的是提供一种在集群环境中对遥感影像数据进行高效并行存取 的方法,该方法建立在GDAL库基础上,通过构建一个遥感影像数据重分布模 块,将大量非连续的小型数据读写请求聚合成少量连续的大型数据读写请求, 从而提高了GDAL按列或按块并行读写某一遥感影像数据文件的效率,同时也 保证了结果的正确性,解决了GDAL在遥感影像处理并行算法研发中适用性差 的问题。

本发明的技术解决方案为:一种在集群环境中对遥感影像文件数据进行高 效并行存取的方法,步骤如下:

(1)在集群环境中,使用消息传递(MPI)并行编程技术,各个进程将各 自要读写的遥感影像数据块的范围信息发给主进程,主进程负责收集各个进程 的读写范围信息。

(2)主进程根据所有进程的读写范围信息判断数据划分方式,并根据数据 划分方式来确定各个进程数据重分布的方式,并将数据重分布所需的信息发送 给各个进程。数据重分布的目的有两个:一个是将各个进程由于按行或者按块 划分导致的非连续读写请求变成连续读写请求,一个是将大量的小型读写请求 聚合成少量的大型读写请求。

如果是按行数据划分,主进程认为所有进程的读写请求已经是连续的,如 果进程数目不多,即读写请求数目较少,没有超过设定的阈值(进程数目多少 是相对的,该阈值依赖于集群环境,默认值为小于32,用户也可根据实际情况 设置该值),主进程认为各个进程不需要进行数据重分布操作;如果进程数目 较多即已超过设定的阈值(进程数目多少是相对的,该阈值依赖于集群环境, 默认值为大于32,用户也可根据实际情况设置该值),即读写请求数目很多, 主进程认为各个进程需要执行数据重分布操作;如果是按列或按块数据划分, 主进程认为各个进程应该在存取遥感影像文件前先进行数据重分布。

为了使各个进程获得数据重分布的所需的信息,主进程发送三组信息至各 个进程:1)是否需要数据重分布;2)数据划分方法(按行、按列、按块); 3)操作数据方式,读操作和写操作,简称读写。

(3)各个进程接收和解析主进程发来的数据重分布信息。如果接收到的信 息是不需要进行数据重分布,那么各个进程使用GDAL库的RasterlO函数直 接按原来按行数据划分方式来读写。

(4)如果各个进程接收到的信息是需要进行数据重分布,并且原来的数据 划分方式是按行数据划分,那么采用如下数据重分布策略。

下面以读遥感影像文件数据为例,解释按行数据划分使用数据重分布的方 案(第一种数据重分布方法)。假设有2n个进程(P[1],P[2],…P[2n]), 这些进程以按行划分的方式将遥感影像文件划分成2n个数据块(Block[1], Block[2],…Block[2n]),各个进程如果直接去读需要产生2n个读请求(P[1] 读Block[1],P[2]读Block[2]等)。为了减少读请求数目,采用两步操作。第一 步,奇数号进程首先生成一个临时缓冲区,然后一次读取两个数据块到该临时 缓冲区,即P[2k-1]调用GDAL库的RasterlO函数读取数据块Block[2k-1]和 Block[2k],由于这两个数据块合并后在文件中是连续分布的,所以只需要一次 读请求操作;第二步,奇数号进程P[2k-1]与相邻偶数号进程P[2k]通信,P[2k-1] 将临时缓冲区的连续数据分成两个数据块Block[2k-1]和Block[2k],并将数据块 Block[2k]以消息传递的方式发送至进程P[2k]。通过上述两步操作,这样读请求 数目可以降为原来的一半。

对于各个进程按行写也是如此,第一步是奇数号进程P[2k-1]生成临时缓冲 区,偶数号进程即P[2k]将数据块Block[2k]以消息传递的方式发送至进程 P[2k-1],P[2k-1]将Block[2k]和Block[2k-1]合并成连续数据,并放置到临时缓 冲区;第二步是P[2k-1]调用GDAL库的RasterlO函数将临时缓冲区中的数据 连续写进影像文件,由于临时缓冲区中的数据是连续的,所以可以一次写入, 这样写请求次数也可降低为原来一半。

(5)如果各个进程接收到的信息是需要进行数据重分布,并且原来的数据 划分方式是按列或按块数据划分,那么采用如下数据重分布策略。

下面以读遥感影像文件数据为例,解释按块数据划分使用数据重分布的方 案(按列划分可以看成是按块划分的一种特例)(第二种数据重分布方法)。 假设有m×n个进程(P[1][1],P[1][2],…P[1][n],P[2][1],…P[m][n]), 这些进程以按块划分的方式将遥感影像文件划分成m×n个数据块 (Block[1][1],Block[1][2],…Block[1][n],Block[2][1],…Block[m][n]), 各个进程如果直接去读要产生m×n个读请求(P[1][1]读Block[1][1],P[m][n] 读Block[m][n]等)。为了减少读请求数目,采用两步操作。第一步,每一行最 左端的进程P[*][1]先生成一个临时缓冲区,然后P[*][1]调用GDAL库的 RasterlO函数读取数据块Block[*][1],Block[*][2],…Block[*][n],由于这些数 据块合并后在文件中是连续分布的,因此只需一次读请求操作即可将这些数据 块读到临时缓冲区中;第二步,P[*][1]将其临时缓冲区中的连续数据分成各个 数据块Block[*][1],Block[*][2],…Block[*][n],并将这些数据块以消息传递的 方式发送至进程P[*][1],P[*][2],…P[*][n];通过这种数据重分布方案,读请 求数目将从原来的m×n降低为m。

对于各个进程按列或按块写遥感影像文件数据也是如此,第一步是每一行 最左端的进程P[*][1]先生成一个临时缓冲区,然后每一行各个进程P[*][1], P[*][2],…P[*][n]将自己的数据块Block[*][1],Block[*][2],…Block[*][n]以消 息传递的方式发送至进程P[*][1],P[*][1]合并这些数据块,生成连续数据,并 放置到临时缓冲区;第二步P[*][1]调用GDAL库的RasterlO函数将临时缓冲 区的连续数据写入遥感影像文件,由于临时缓冲区中的数据是连续的,所以可 以一次写入;通过这种数据重分布方案,写请求数目从原来的m×n降低为m。

本发明与现有技术相比的优点在于:

(1)目前在遥感影像数据处理中广泛使用GDAL库来读写遥感影像文件, 但是多进程使用GDAL按列或按块并行读写遥感影像文件会得到错误的结果, 而按行读写能保证结果正确。本发明在GDAL基础上构建了一个数据重分布模 块,能自动将按列或按块并行读写转化成按行并行读写,从而保证了结果的正 确性。通过使用本发明,GDAL库可被用于遥感影像处理并行算法的研发,从 而解决了遥感影像数据存储格式繁多的问题。

(2)多进程使用GDAL按列或按块并行读写遥感影像文件会产生大量非 连续的I/O请求,从而大大降低了读写速度。本发明构建的数据重分布模块通 过通信的手段将大量非连续的小型读写请求聚合成少量连续的大型读写请求, 从而提高了并行读写遥感影像文件的效率。通过使用本发明,遥感影像处理并 行算法使用GDAL库并行读写遥感影像文件的效率将大大提升。

附图说明

图1为本发明方法的流程图;

图2为使用本发明方法与直接使用GDAL库并行读写遥感影像文件的结果 对比图;其中(a)表示4个进程直接使用GDAL按2×2分块并行读写得到的结 果;(b)是4个进程使用本发明按块并行读写遥感影像文件得到的结果;

图3为使用本发明与直接使用GDAL库并行读写遥感影像文件的效率对比 图。

具体实施方式

下面结合如图1所示的流程图,4个进程以按块数据划分方式(2×2)来 并行写宽24496像素、高17100像素、大小为1.65G tiff格式的灰度遥感影像 文件为例,说明本发明的具体实施方法:

1.各个进程将各自要读写的遥感影像数据块范围信息打包后发送至主进 程。数据包格式为<进程号,数据块左上角坐标,宽,高>,比如进程4使用消 息传递并行编程库(MPI)将如下消息包发送给主进程1,<2,(12248,0),12248, 8550>。

2.主进程通过消息传递技术接收各个进程发来的消息,判断出数据划分方 式,并据此生成数据重分布的信息,打包后发送至所有进程。数据包格式为< 进程号,是否需要数据重分布,数据划分方法,数据操作方式>。如果主进程判 断出是使用按行数据划分方式,那么将进一步判断进程数目有无超过设定的阈 值,如果超过阈值,主进程认为应该使用数据重分布策略,如果是按列或按块 数据划分,那么直接判断应该使用数据重分布策略。比如此时主进程判断出是 按2×2分块来进行数据划分,这时主进程认为应该使用数据重分布策略,并 生成消息包发送给各个进程,比如发送给进程2的消息包为:<2,是,2×2 按块,写>。

3.各个进程收到主进程传来的关于数据重分布的消息包,并进行解析。比 如这时进程2收到消息包为<2,是,2×2按块,写>。

4.根据解析得到的消息,各个进程执行相应的并行读写策略:如果不需要 数据重分布,那么各个进程使用GDAL库执行按行并行读写操作;如果需要数 据重分布,且是按行数据划分的,则采用按第一种数据重分布方法,即奇数号 进程负责读写文件,偶数号进程与左邻奇数号进程通信;如果是按列或按块数 据划分,则采用按第二种数据重分布方法,即每一行最左端的进程负责读写文 件操作,其它进程与本行最左端的进程通信。比如进程2解析数据包后得知它 需要在读写文件前进行数据重分布操作,而且根据2×2分块数据划分方式, 进程2会把它的数据发送至进程1;而进程1根据解析后的消息生成一个临时 缓冲区,存放自己的数据以及从进程2接收的数据,最后进程1调用GDAL的 RasterlO函数将缓冲区的数据写入遥感影像文件。进程4和进程3的操作分别 与进程2和进程1相似,由进程3重组两块数据,然后写入遥感影像文件。

对比分析实验:

在集群环境上分别使用本发明方法和直接使用GDAL库来并行读写遥感影 像文件,来验证两种方式读写结果的正确性,图2为对该遥感影像文件做聚合 分析后的结果,其中(a)表示4个进程直接使用GDAL按2×2分块并行读写得 到的结果,可以看到(a)中有三块黑色矩形区域,这三块区域代表空值,表示直 接使用GDAL按块并行读写会得到错误结果;(b)是4个进程使用本发明按块并 行读写遥感影像文件得到的结果,显示本发明得到的结果正确。

为了验证本发明方法是否能提升并行读写遥感影像文件的效率,实验统计 了在不同分块情况下使用本发明方法并行读写遥感影像文件所花的时间。如图 3所示,本发明实验使用的遥感影像数据文件宽24496像素、高17100像素, 图3的横坐标为分块数目a×b,a表示按行划分数目,b表示按列划分数目。 可以看出使用本发明方法读写遥感影像文件所花的时间远远小于直接使用 GDAL的方法,从而也证明了本发明方法能大幅提升并行读写遥感影像文件的 效率,具有较好的实用价值。

本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的 现有技术。

以上所述仅是本发明的优选实施方式,应当指出,对于本领域的普通技 术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰, 这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号