一种基于计算机集群的压缩程序并行化的处理方法

文档序号:6618895阅读:214来源:国知局
专利名称:一种基于计算机集群的压缩程序并行化的处理方法
技术领域
本发明涉及一种计算机并行处理方法,特别是关于一种基于计算机集群的压 縮程序并行化的处理方法。
背景技术
当今计算机技术已经进入了并行化、高数据量的时代,使用快速压縮算法对 于处理海量数据至关重要,但是由于使用传统的压縮软件处理海量的数据非常耗 时,同时开发一种新的压縮算法具有相当的困难,因此将传统的压縮软件进行并 行化开发非常具有现实意义。目前已经有一些人对原本的串行压縮算法进行了并 行化改写,但是由于改写核心的压縮算法非常复杂,所以对于原本的串行压縮算 法完全并行化的过程很缓慢,且没有一种比较通用的方法来解决这一问题。
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可 用性的服务平台。在客户端看来, 一个集群就像是一个服务实体,但事实上集群 由一组服务实体组成。相对于单一计算机,集群计算机具有更高的可用性、可管 理性、可伸縮性的特点,可承担只有超级计算机才能胜任的工作。计算机集群中 的每台计算机都是运行其自己进程的一个独立服务器,可高度紧密地协作完成计 算工作。这些独立服务器可以彼此通信,协同起来向用户提供应用程序、系统资 源和数据,并以单一系统的模式加以管理,对用户来说就像是形成了一个单一系 统。在大多数模式下,计算机集群中所有的节点是的地位是相同的,用户不用关 心有多少计算机承担了系统实现的任务,而只需要关注系统的整体处理能力。由
于集群计算机的兴起,基于计算机集群下编写程序的软件必不可少,MPI(Message Passing Interface)标准正是在诸多的并行程序开发方法中的佼佼者,而MPICH2 是MPI的标准实现。
对于一般的集群环境来实现海量数据的压縮或解压縮过程的通常方法为根 据具体问题,设计具体的并行算法。这种方法的优点是处理问题的方法具有针对 性,在特定的问题上使得程序的执行具有很高的效率。但是这种方法的缺陷在于, 它针对特定问题的算法不具备普适性,没有一个通用的框架结构,导致这些并行 算法在再开发和扩展设计时没有通用性。

发明内容
针对上述问题,本发明的目的是提供一种可建立在普通串行压縮软件之上,实现对海量数据进行高层压縮并行化处理的基于计算机集群的压縮程序并行化 的处理方法。
为实现上述目的,本发明采取以下技术方案 一种基于计算机集群的压縮程 序并行化的处理方法,其特征在于它包括一提供者进程、多个加工者进程和一 生产者进程;所述加工者进程中设置串行压縮算法,所有加工者进程并行运行; 所述提供者进程包括MakeBlock模块、SendBlockNum模块、SendFileSize模块、 Produce模块和提供者Run模块;所述MakeBlock模块用于将待加工数据分成多 个定长的待发送数据块,将所述待发送数据块的个数和相关信息存入提供者维护 表中;所述SendBlockNum模块用于将待发送数据块的个数输入所述使用者进程; 所述SendFileSize模块用于将所述待加工数据的大小输入所述使用者进程;所 述Produce模块用于向所述提供者进程的发送缓冲中填入准备发送的待发送数 据块;所述提供者Run模块将所述待发送数据块从所述发送缓冲中取出,并发送 给发出请求的加工者进程;当所述提供者进程中没有所述待发送数据块时,所述 提供者Run模块结束所有空闲的加工者进程;所述加工者进程包括Process模块 和加工者Run模块;所述Process模块用于接收所述待发送数据块,并将待发送 数据块压缩为加工后数据块;所述加工者Run模块用于循环的向所述提供者进程 请求所述待发送数据块,并向所述使用者进程发送所述加工后数据块;所述使用 者进程包括ReceiveBlockNum模块、ReceiveFileSize模块、Consume模块和使 用者Run模块;所述ReceiveBlockNum模块接收所述SendBlockNum模块发送的 所述待发送数据块的个数;所述ReceiveFileSize模块用于接收所述 SendFileSize模块发送的所述待加工数据的大小;所述Consume模块用于根据 使用者维护表,对收到的所有所述加工后数据块进行集中的整理和快速数据块组 合操作;所述使用者Run模块用于循环接收所述加工者模块发送来的加工后数据 块,同时对所述使用者维护表进行维护。
所述Process模块中支持多种串行压縮算法。
所述待发送数据块和所述加工后数据块在所述提供者进程、加工者进程和使 用者进程之间传送时,均附加唯一的序号。
所述提供者维护表和使用者维护表中均包含序号和描述数据块结构体;其中 序号为所述待发送数据块的顺序;描述数据块结构体用于描述所述待发送数据块 和所述加工后数据块的内容或者存放位置。
所述提供者进程将所述待发送数据块发送给空闲的加工者进程,所述使用者 进程接收具有使用权的加工者进程发送的加工后数据块。
5当进行解压縮过程时,所述提供者进程读取所述待加工数据的头索引结构, 找到各所述待发送数据块。
本发明由于采取以上技术方案,其具有以下优点1、本发明的压縮并行化 处理进程中采用了一种提供者-加工者-使用者框架,直接对不同压縮算法实现并 行化,实现通过现有的串行压縮算法对海量有序数据块进行统一的并行化处理, 不但保持了原有压縮算法的不同特性,而且还可扩展新的压縮算法使其并行化。 2、本发明的提供者-加工者-使用者框架中,加工者对于提供者和使用者均采用 进程间争抢使用权的机制,在处理过程中不存在失效的加工者进程,因此可以保 证提供者-加工者-使用者框架下唯一的加工者数据处理进程的效率。3、本发明 的使用者进程的回收排序中使用了 0++标准模版库的map容器,因此其排序速度 大大高于一般的排序方法。本发明的方法可广泛用于计算机集群系统,对于加速 压縮文件的处理和集群并行算法的设计与实现均有着重要意义。


图1是本发明的提供者-加工者-使用者框架结构示意图 图2是本发明的压縮并行化处理进程工作过程示意图 图3是本发明的保证回收后数据顺序有效性的分析示意图
具体实施例方式
下面结合附图和实施例对本发明进行详细的描述。
本发明用于处理在计算机集群环境下的压縮过程中的串行压縮算法的并行 化问题,但由于压縮问题的解决思路和解压縮问题类似,因此本发明的方法也可 以应用于解压縮过程。在压縮过程中,本发明是在原有串行压縮软件上,实现一 种通用的高层压縮并行化处理进程的方法。在不修改原有串行压縮算法的前提 下,通过将海量数据划分为多个定长的数据块,再将其分发到计算机集群的各个 计算节点中,最后通过原有的串行压縮算法在不同的计算节点上同时对数据块进 行数据压縮或解压縮处理。为了实现有序可并行数据块的分发一>计算一>回收的 过程,本发明基于经典的生产者消费者框架,在压縮并行化处理进程中使用一个 提供者(Provider)-加工者(Processor)-使用者(User)框架,简称PPU框架, 这一框架可完美解决压縮和解压縮时的文件有序序列的发送和回收整理。
PPU框架通过将在MPICH2上开启的压縮并行化处理进程分为三类进程, 分别是提供者进程(Provider)、加工者进程(Processor)和使用者进程(User), 用此框架可以来简化设计思路和提高开发和执行的效率。这些进程的主要功能 是提供者进程将待加工数据划分为多个定长的数据块,之后向提出请求的加工者进程发送待加工的数据块,当待加工的数据块完全送出后,逐步终止所有空闲 加工者进程;加工者进程主要向提供者进程请求待发送数据块,然后对请求得来 的待发送数据块进行加工处理,将处理后的加工后数据块发送给使用者进程;使 用者进程接收加工者进程发来的加工后数据块,同时维护加工后数据块信息的顺 序性。通过上述的三类进程的不同分工处理,使得只改动加工者进程就可实现并 行化不同串行压縮程序,通过三类进程的准确分工可解决对于不同压縮过程的快 速开发。
如图1所示,在MPICH2运行环境下处理压縮过程时,用户将待加工数据A 输入本发明的PPU框架中,对待加工数据A进行压縮或解压縮的并行化处理后, 输出与待加工数据A对应的加工后数据B。本发明的压縮并行化处理进程中所有 开启进程被分为一个提供者进程1、多个加工者进程2和一个使用者进程3。由 于提供者进程1和使用者进程3与加工者进程2之间的交互只有数据流的传送, 所以加工者进程2的处理过程中对于任何具体的串行压縮算法的并行化处理是 完全独立的,故可以利用原有的串行压縮程序通过这个结构改写成为并行压縮程 序。
如图2所示,本发明的提供者进程1包括MakeBlock模块11、 SendBlockNum 模块12、 SendFileSize模块13、 Produce模块14和提供者Run模块15;加工 者进程2包括Process模块21和加工者Run模块22;使用者进程3包括 ReceiveBlockNum模±央31、 ReceiveFileSize模±央32、 Consume模块33和使用 者Run模块34。 Application模块4用于整个压縮程序并行化处理进程的启动, 自动对所有启动的进程进行分类,还负责检验用户输入参数的合法性等操作。
提供者进程1中,MakeBlock模块11用于将用户输入的待加工数据A分成 多个定长的待发送数据块丄,然后将分块后的待发送数据块i的个数和相关信 息存入提供者维护表M中。SendBlockNum模块12用于将待发送数据块Z'的个数 输入使用者进程3,以保证使用者进程3可以准确接收加工者进程2加工后数据 块,'。SendFileSize模块13用于将用户输入的待加工数据A的大小输入使用者 进程3,以保证在使用者进程3中能对加工后数据块,'准确建立头索引结构。 Produce模块14用于向提供者进程1的发送缓冲中填入要发送的待发送数据块 丄。提供者R皿模块15将待发送数据块乂'从发送缓冲中取出,并发送给Process 模块21;同时保证提供者进程1中还有待发送数据块乂'时,向来请求待发送数 据块l的待发送数据块l的加工者进程2发送待发送数据块^';提供者Run模 块15还保证当提供者进程1中没有待发送数据块l时,可以结束所有的空闲加工者进程2。
加工者进程2中,Process模块21用于根据加工者进程2中预置的原有串 行压缩算法,将接收到的待发送数据块,压縮为加工后数据块,'。由于Process 模块21在压縮处理中和其他加工者进程2之间没有任何依赖,因此保证了多个 加工者进程2的压縮并行化处理进程,从而快速实现对不同串行压縮算法的并行 化的可能。加工者Run模块22用于循环的向提供者进程1请求待发送数据块丄, 之后经过加工者进程2中的Process模块21,最后向使用者进程3发送加工后 数据块l'。
使用者进程3中,ReceiveBlockNum模块31对应于提供者进程1的 SendBlockNum模块12,接收提供者进程1发送的待发送数据块I的个数。 ReceiveFileSize模块32用于对应提供者进程1的SendFileSize模块13,接收 提供者进程1发来的待加工数据A的大小。Consume模块33用于对使用者进程3 回收的所有加工后数据块l',根据使用者维护表N进行集中的整理和快速数据 块组合操作。使用者Run模块34用于负责循环接收加工者模块2发送来的加工 后数据块X"和对使用者进程3中的使用者维护表N进行维护。
本发明的方法应用于压縮过程工作过程如下
1) 首先用户通过Application模块4程序启动压縮程序并行化处理进程, 初始化PPU框架,同时在计算机集群中构造提供者进程l、加工者进程2和使用 者进程3。压縮程序并行化处理进程中,自始至终这三类进程都是并行执行的。
2) 提供者进程1启动后,调用MakeBlock模块ll,将用户输入的待加工数 据A进行分块处理,之后向提供者维护表M中输入待发送数据块vl'的个数和相关 信息。
3) 加工者进程2启动后,运行加工者Run模块22。
4) 使用者进程3启动后,运行使用者ReceiveBlockNum模块31。
5) MakeBlock模块11工作完成后,压縮程序并行化处理进程运行 SendBlockNura模块12,将待发送数据块丄的个数输入使用者进程3中的 ReceiveBlockNum模块31,之后提供者需要执行SendFileSize13模块。
6) 当提供者成功执行SendBlockNum模块后加工者进程需要执行 SendFileSize模块13,将待加工数据A的大小输入使用者进程3中的 ReceiveFileSize模块32,之后运行提供者Run模块15。
7) 运行Produce模块14,向提供者进程1的发送缓冲中填入待发送数据块,。
88) 运行提供者Run模块15相应加工者Run模块22的请求,将Produce模 块14中生成的待发送数据块l从发送缓冲中取出发送给Run模块22, Process 模块22将接收到的待发送数据块A经过Process模块21压縮为加工后数据块 八
9) 加工者Run模块22向使用者进程3中的发送经Process模块21加工后 数据块l'。
10) 使用者Run模块34,循环接收加工者模块2发送的加工后数据块", 待全接受到后之后进入Consume模块33。
11) Consume模块33根据使用者维护表N对加工后数据块,'进行缓存和集 中处理,输出加工后数据B。在将加工后数据块"写入加工后数据B时,根据使 用者维护表N在输出数据B的开始部分建立加工后数据块,'的索引结构。
为了让加工者进程2的数据处理保持高效运行,本发明的加工者进程2对于 提供者进程1和使用者进程3均采用进程间争抢使用权的机制。即提供者进程1 不按照加工者进程2的先后顺序发送待发送数据块^,而是当哪个加工者进程2 空闲下来,就把待发送数据块^发送给它。而对于使用者进程3而言,也不是按 顺序接收加工者进程2发出的加工后数据块^',而是提供使用者进程3的使用 权,供加工者进程2争夺。当一个加工者进程2争夺到了使用者进程3的使用权, 使用者进程3就接受那个加工者进程2发送的加工后数据块丄'。因此这就出现 了在使用者进程3中,接收到的加工后数据块,'与待发送数据块A对应的顺序 被打乱的情况,在压縮处理过程中,会出现待加工数据A与加工后数据B不一致 的情况。
为了让加工者进程2保持高效循环工作的同时,还保证使用者进程3最终得 到有序的加工后数据B,使用者进程3必须能够接收所有加工者进程2发来的无 序的加工后数据块,',同时使用者还能够对接收来的无序的加工后数据块,'进 行排序操作。因此本发明采取了即〔++中的标准模板库中的map容器来维护使用 者进程3中的使用者维护表N,同时使用在不同进程之间发送特定的待发送数据 块l序号的方法,来解决上述问题。
如图3所示,提供者进程1中维护一张提供者维护表M,使用者进程3中维 护一张使用者维护表N,用于保证数据块的有序性。提供者维护表M分为两列块: 数据块序号,用于描述待发送数据块^的顺序;描述块结构体,用于具体描述待 发送数据块l的内容或者存放位置等信息。使用者维护表N分为两列块数据块 序号,用于自动维护所有接收到的零散的加工后数据块^',其值对应于数据块A
9的数据块序号;描述块结构体,用于具体描述加工后数据块,'的内容或者存放 位置等信息。在步骤8)中,提供者进程i向加工者进程2顺序发送数据模块^
的同时,还发送数据块A序号。之后在步骤9)中,加工者进程2向使用者进程 3发送加工后数据块"的同时,还发送数据块序号,通过Consume模块33根据 使用者维护表N对无序接收的加工后数据块"进行高效排序。
具体高效排序的方法为在使用者进程中使用0++标准模板库中的map容器 对加工后数据块^"进行回收排序。由于0++标准模板库中的map容器的内部是由 红黑树来实现的,所以当通过迭代器按顺序遍历map中的数据时具有高效性。红 黑树是一种自平衡二叉査找树,它可以在O(log n)的时间复杂度内对map容器 中的使用者维护表N进行査找、插入和删除的操作,其中n是二叉査找树中节点 的数目。因此本发明在提供者进程l、加工者进程2和使用者进程3之间相互传 送数据块的时候,均附加传递了唯一的数据块序号,这个数据块序号为待发送数 据块l的顺序编号。根据上面所述的条件,map容器就可以自动维护所有接收到 的零散的加工后数据块f ,使用者进程3最终输出有序的加工后据B。
在应用本发明的方法处理解压縮过程时,首先提供者进程1读取在经过压縮 后的待加工数据A的文件头内容,之后通过文件头索引结构,可以准确找到每个 待解压縮的待发送数据块丄。待发送数据块^'的头索引结构,即每个待发送数 据块l的起始指针位置和数据块长度。最后的过程就如处理压縮过程类似,即从 提供者进程1将待发送数据块丄分发给加工者进程2,再通过使用者进程3来回 收所有经过解压縮处理的加工后数据块",将它们进行缓存和集中处理,输出 加工后数据B。但是,由于解压縮后原始的文件不需要索引结构,因此在解压縮 过程中使用者进程3将加工后数据块i'写入加工后数据B时,并不需要在输出 数据B的开始部分建立加工后数据块"的索引结构。
本发明的PPU框架在处理并行有序数据块方面具有相当的通用性,因此PPU 框架可以很方便的应用到相关领域,如对于可以有独立计算单元的科学计算领 域,图形图像学领域,以及视频领域等。
权利要求
1、一种基于计算机集群的压缩程序并行化的处理方法,其特征在于它包括一提供者进程、多个加工者进程和一生产者进程;所述加工者进程中设置串行压缩算法,所有加工者进程并行运行;所述提供者进程包括MakeBlock模块、SendBlockNum模块、SendFileSize模块、Produce模块和提供者Run模块;所述MakeBlock模块用于将待加工数据分成多个定长的待发送数据块,将所述待发送数据块的个数和相关信息存入提供者维护表中;所述SendBlockNum模块用于将待发送数据块的个数输入所述使用者进程;所述SendFileSize模块用于将所述待加工数据的大小输入所述使用者进程;所述Produce模块用于向所述提供者进程的发送缓冲中填入准备发送的待发送数据块;所述提供者Run模块将所述待发送数据块从所述发送缓冲中取出,并发送给发出请求的加工者进程;当所述提供者进程中没有所述待发送数据块时,所述提供者Run模块结束所有空闲的加工者进程;所述加工者进程包括Process模块和加工者Run模块;所述Process模块用于接收所述待发送数据块,并将待发送数据块压缩为加工后数据块;所述加工者Run模块用于循环的向所述提供者进程请求所述待发送数据块,并向所述使用者进程发送所述加工后数据块;所述使用者进程包括ReceiveBlockNum模块、ReceiveFileSize模块、Consume模块和使用者Run模块;所述ReceiveBlockNum模块接收所述SendBlockNum模块发送的所述待发送数据块的个数;所述ReceiveFileSize模块用于接收所述SendFileSize模块发送的所述待加工数据的大小;所述Consume模块用于根据使用者维护表,对收到的所有所述加工后数据块进行集中的整理和快速数据块组合操作;所述使用者Run模块用于循环接收所述加工者模块发送来的加工后数据块,同时对所述使用者维护表进行维护。
2、 如权利要求1所述的一种基于计算机集群的压縮程序并行化的处理方法, 其特征在于所述Process模块中支持多种串行压縮算法。
3、 如权利要求1所述的一种基于计算机集群的压縮程序并行化的处理方法, 其特征在于所述待发送数据块和所述加工后数据块在所述提供者进程、加工者 进程和使用者进程之间传送时,均附加唯一的序号。
4、 如权利要求2所述的一种基于计算机集群的压縮程序并行化的处理方法, 其特征在于所述待发送数据块和所述加工后数据块在所述提供者进程、加工者 进程和使用者进程之间传送时,均附加唯一的序号。
5、 如权利要求1或2或3或4所述的一种基于计算机集群的压縮程序并行化的处理方法,其特征在于所述提供者维护表和使用者维护表中均包含序号和描 述数据块结构体;其中序号为所述待发送数据块的顺序;描述数据块结构体用于 描述所述待发送数据块和所述加工后数据块的内容或者存放位置。
6、 如权利要求1或2或3或4所述的一种基于计算机集群的压縮程序并行化 的处理方法,其特征在于所述提供者进程将所述待发送数据块发送给空闲的加 工者进程,所述使用者进程接收具有使用权的加工者进程发送的加工后数据块。
7、 如权利要求5所述的一种基于计算机集群的压缩程序并行化的处理方法, 其特征在于所述提供者进程将所述待发送数据块发送给空闲的加工者进程,所 述使用者进程接收具有使用权的加工者进程发送的加工后数据块。
8、 如权利要求1或2或3或4或7所述的一种基于计算机集群的压縮程序并 行化的处理方法,其特征在于当进行解压縮过程时,所述提供者进程读取所述 待加工数据的头索引结构,找到各所述待发送数据块。
9、 如权利要求5所述的一种基于计算机集群的压缩程序并行化的处理方法,其特征在于当进行解压縮过程时,所述提供者进程读取所述待加工数据的头索引结构,找到各所述待发送数据块。
10、 如权利要求6所述的一种基于计算机集群的压縮程序并行化的处理方法,其特征在于当进行解压縮过程时,所述提供者进程读取所述待加工数据的头索引结构,找到各所述待发送数据块。
全文摘要
本发明涉及一种基于计算机集群的压缩程序并行化的处理方法,其特征在于它包括一个提供者-加工者-生产者框架;提供者-加工者-生产者框架中包括提供者进程、加工者进程和生产者进程;提供者进程将待加工数据划分为多个定长的待发送数据块,之后向加工者进程发送待发送数据块,当待发送数据块完全送出后,逐步终止空闲的加工者进程;加工者进程向提供者进程请求待发送数据块,将加工后数据块发送给使用者进程;使用者进程接收加工者进程发来的加工后数据块,将加工后数据块顺序输出;加工者中包含多个串行压缩算法,并将串行压缩算法并行化运行;待发送数据块和加工后数据块在提供者进程、加工者进程和使用者进程之间传送时,均附加唯一的数据块序号。
文档编号G06F9/46GK101556546SQ20091008502
公开日2009年10月14日 申请日期2009年5月27日 优先权日2009年5月27日
发明者刘振恒, 迪 张, 军 梁, 陈炜钊, 泓 鲍 申请人:北京联合大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1