《基于多进程和多线程的并行图像解压缩系统.pdf》由会员分享,可在线阅读,更多相关《基于多进程和多线程的并行图像解压缩系统.pdf(10页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103366386 A (43)申请公布日 2013.10.23 CN 103366386 A *CN103366386A* (21)申请号 201310296548.0 (22)申请日 2013.07.14 G06T 9/00(2006.01) (71)申请人 西安电子科技大学 地址 710071 陕西省西安市太白南路 2 号 (72)发明人 吴宪云 李云松 饶子仁 雷杰 郭杰 王柯俨 张静 刘凯 (74)专利代理机构 陕西电子工业专利中心 61205 代理人 王品华 朱红星 (54) 发明名称 基于多进程和多线程的并行图像解压缩系统 (57) 摘要 本发明公开了一。
2、种基于多进程和多线程的并 行图像解压缩系统, 用于解决现有技术中多进程 间共享资源竞争的问题。该系统包括图像前端处 理、 数据共享内存、 通信共享内存、 图像解压缩和 图像后端处理模块。图像前端处理模块, 创建解 压缩进程和解压缩线程, 准备压缩码流, 启动空闲 解压缩线程 ; 数据共享内存模块, 为每个解压缩 线程分配独立的压缩码流区和恢复图像区 ; 通信 共享内存模块为所有解压缩线程分配标识区域, 用于线程间通信 ; 图像解压缩模块, 用于完成独 立地解压缩过程 ; 图像后端处理模块取出恢复图 像 ; 本发明具有图像解压缩速度高, 数据吞吐率 大, 可靠性高的优点, 可用于深空通信中对空间。
3、图 像的解压缩。 (51)Int.Cl. 权利要求书 1 页 说明书 5 页 附图 3 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书1页 说明书5页 附图3页 (10)申请公布号 CN 103366386 A CN 103366386 A *CN103366386A* 1/1 页 2 1. 一种多进程和多线程的并行图像解压缩系统, 包括 : 图像前端处理模块, 用于创建解压缩进程和解压缩线程, 创建共享内存, 为空闲解压缩 线程准备压缩码流, 以触发解压缩线程进行解压缩, 并为数据共享内存模块提供初始化 ; 图像解压缩模块, 用于完成一次独立的解压缩, 输入压缩码。
4、流, 输出恢复图像给数据共 享内存模块 ; 数据共享内存模块, 用于预先存储每个解压缩线程的待解压缩码流, 存储每个解压缩 线程的恢复图像, 给图像解压缩模块传输码流数据, 同时存储图像解压缩模块输出的恢复 图像 ; 图像后端处理模块, 用于从数据共享内存模块中取出恢复图像 ; 通信共享内存模块, 用于存储每个解压缩进程和解压缩线程的标识位, 根据标识位, 获 知图像前端处理模块中的解压缩线程状态, 并进行相应的操作 ; 根据标识位判断图像后端 处理模块是否进行读取恢复图像。 2. 根据权利要求 1 所述的基于多进程和多线程的并行图像解压缩系统, 其特征在于图 像前端处理模块, 包括 : 解压。
5、缩进程子模块 : 根据图像解压缩任务量、 不同进程数目对吞吐率的增益值创建多 进程 ; 解压缩线程子模块 : 根据图像解压缩任务量、 不同线程数目对吞吐率的增益值创建多 线程 ; 共享内存子模块 : 共享内存子模块用于创建共享内存, 为空闲解压缩线程准备压缩码 流。 3. 根据权利要求 1 所述的基于多进程和多线程的并行图像解压缩系统, 其特征在于数 据共享内存模块, 包括 : 线程分配空间子模块 : 用于为每个解压缩线程分配独立数据空间, 并根据自己的线程 号独立寻址, 避免解压缩线程之间的数据冲突, 去除解压缩线程的数据依赖性 ; 压缩码流存储子模块 : 用于存储每个解压缩线程的压缩码流 。
6、; 恢复图像存储子模块 : 用于存储每个解压缩线程的恢复图像。 4. 根据权利要求 1 所述的基于多进程和多线程的并行图像解压缩系统, 其特征在于通 信共享内存模块, 包括 : 解压缩进程标识子模块 : 用于为所有解压缩进程分配独立的标识位区域 ; 解压缩线程标识子模块 : 用于为所有解压缩线程分配标识位区域, 并根据线程号寻址 到每个线程的标识位区域, 获取解压缩线程的所有状态 ; 线程恢复图像区标识子模块 : 用于判断解压缩线程的恢复图像区是否有解压缩数据。 权 利 要 求 书 CN 103366386 A 2 1/5 页 3 基于多进程和多线程的并行图像解压缩系统 技术领域 0001 本。
7、发明属于图像处理技术领域, 涉及图像解压缩, 特别是一种涉及多进程和多线 程的并行图像解压缩系统, 可用于深空通信中对空间图像的解压缩。 背景技术 0002 随着空间图像数据业务的快速发展, 地面图像解压缩技术面临着任务量快速增加 的难题。 为了解决这个难题, 需要一种高效的并行图像解压缩系统, 高可靠性高速高吞吐率 地完成大量图像解压缩任务, 其中经常涉及多进程和多线程的并行处理方式。 0003 完成大量图像解压缩任务可以有多进程和多线程以及复合多进程与多线三种方 式。无论使用何种方式, 进程和线程都不是越多越好, 两种方式都存在一个临界点, 超过这 个临界点, 都会因为频繁的进程或线程状态。
8、切换而造成程序性能下降。使用多进程方式在 到达临界点之后再增加进程就会引起性能的下降, 而且下降速度比单进程多线程方式到达 临界点之后的下降速度快, 这是因为进程切换比线程切换更费时。 0004 大任务量的并行图像解压缩系统中, 经常会遇到进程间需要通信的问题。常见的 多进程间通信方法有 : 共享内存方式、 匿名管道、 命名管道和发送消息等几种方法来直接完 成, 另外还可以通过 Sockets 口、 配置文件、 注册表等来间接实现进程间数据通讯任务。以 上这几种方法各有优缺点, 具体到进程间进行大数据量的快速交换问题上, 上述方法中共 享内存方法对于多个进程间通信支持最好, 而且具有比较好的安。
9、全性和可靠性。 0005 共享内存是一种自由的进程通讯机制, 所有的进程都可以访问共享内存, 当多个 进程同时访问同一个共享内存时, 由于没有限制机制, 存在共享内存资源的竞争 ; 同时操作 同一个共享内存时, 可能出现数据错误, 导致图像解压缩异常。例如两个进程同时写数据, 或者一个进程写完数据, 另外一个进程还没有读完数据, 其他进程又开始写数据, 导致读写 冲突, 使得读写数据错误。 发明内容 0006 本发明的目的在于针对上述已有技术的不足, 提供一种基于多进程和多线程的并 行图像解压缩系统, 以减少共享内存资源的竞争和冲突。 0007 为实现上述目的, 本发明包括 : 0008 图像。
10、前端处理模块, 用于创建解压缩进程和解压缩线程, 创建共享内存, 为空闲解 压缩线程准备压缩码流, 以触发解压缩线程进行解压缩, 并为数据共享内存模块提供初始 化 ; 0009 图像解压缩模块, 用于完成一次独立的解压缩, 输入压缩码流, 输出恢复图像给数 据共享内存模块 ; 0010 数据共享内存模块, 为每个解压缩线程分配了独立的压缩码流区和恢复图像区, 用于预先存储每个解压缩线程的待解压缩码流, 并存储每个解压缩线程的恢复图像, 给图 像解压缩模块传输码流数据, 同时存储图像解压缩模块输出的恢复图像 ; 说 明 书 CN 103366386 A 3 2/5 页 4 0011 图像后端处理。
11、模块, 用于从数据共享内存模块中取出恢复图像 ; 0012 通信共享内存模块, 用于存储每个解压缩进程和解压缩线程的标识位, 根据标识 位, 获知图像前端处理模块中的解压缩线程状态, 并进行相应的操作 ; 根据标识位判断图像 后端处理模块是否进行读取恢复图像。 0013 上述基于多进程和多线程的并行图像解压缩系统, 其特征在于图像前端处理模 块, 包括 : 0014 解压缩进程子模块 : 根据图像解压缩任务量、 不同进程数目对吞吐率的增益值创 建多进程 ; 0015 解压缩线程子模块 : 根据图像解压缩任务量、 不同线程数目对吞吐率的增益值创 建多线程 ; 0016 共享内存子模块 : 共享内。
12、存子模块用于创建共享内存, 为空闲解压缩线程准备压 缩码流。 0017 上述基于多进程和多线程的并行图像解压缩系统, 其特征在于数据共享内存模 块, 包括 : 0018 线程分配空间子模块 : 用于为每个解压缩线程分配独立数据空间, 并根据自己的 线程号独立寻址, 避免解压缩线程之间的数据冲突, 去除解压缩线程的数据依赖性 ; 0019 压缩码流存储子模块 : 用于存储每个解压缩线程的压缩码流 ; 0020 恢复图像存储子模块 : 用于存储每个解压缩线程的恢复图像。 0021 上述基于多进程和多线程的并行图像解压缩系统, 其特征在于通信共享内存模 块, 包括 : 0022 解压缩进程标识子模块。
13、 : 用于为所有解压缩进程分配独立的标识位区域 ; 0023 解压缩线程标识子模块 : 用于为所有解压缩线程分配标识位区域, 并根据线程号 寻址到每个线程的标识位区域, 获取解压缩线程的所有状态 ; 0024 线程恢复图像区标识子模块 : 用于判断解压缩线程的恢复图像区是否有解压缩数 据。 0025 本系统由于在并行图像解压缩时, 通过图像前端处理模块动态调整进程与线程数 量, 因而能获取吞吐率上的最大增益 ; 同时由于本发明采用数据共享内存模块为每个独立 解压缩线程分配独立的数据空间, 避免了数据资源的冲突, 去除了数据的依赖性 ; 此外由于 本发明采用通信共享内存模块的共享内存标识位实现进。
14、程线程间的通信和调整, 提高了通 信效率, 尽可能地减少了共享内存资源的竞争和冲突。 附图说明 0026 图 1 是本发明的结构框图 ; 0027 图 2 是本发明中图像前端处理模块的结构框图 ; 0028 图 3 是本发明中数据共享内存模块的结构框图 ; 0029 图 4 是本发明中通信共享内存模块的结构框图。 具体实施方式 0030 参照图 1, 本发明提出的基于多进程和多线程的并行图像解压缩系统包括 : 图像 说 明 书 CN 103366386 A 4 3/5 页 5 前端处理模块、 数据共享内存模块、 通信共享内存模块、 图像解压缩模块和图像后端处理模 块。其中 : 0031 图像前。
15、端处理模块, 采用数组数据结构存储已知的进程增益和线程增益 , 根据用 户输入的任务量, 确定需要的总解压缩线程数目, 总线程数目 = 进程数 * 线程数 ; 选择能获 得最佳增益的进程数和线程数, 创建解压缩进程和解压缩线程 ; 该模块循环检测通信共享 内存模块, 获知解压缩线程空闲时, 会给数据共享内存模块的解压缩线程的数据空间放入 压缩码流 ; 0032 数据共享内存模块, 为每个解压缩线程分配独立数据空间A1, A2, B1和B2, 其中A1 和 A2 存储解压缩线程的压缩码流, 为压缩码流区, B1 和 B2 存储解压缩线程的恢复图像, 为 恢复图像区 ; 该模块将码流数据传输给图像。
16、解压缩模块进行解压缩, 同时, 将解压缩后的恢 复图像数据传输给图像后端处理模块进行相关处理 ; 0033 图像解压缩模块, 采用 Spiht 算法完成一次独立的解压缩, 输入压缩码流, 输出恢 复图像到数据共享内存模块, 该模块不依赖于其他线程产生的数据 ; 0034 通信共享内存模块, 为所有解压缩进程和解压缩线程分配独立的标识位区域, 以 表示解压缩线程的所有状态 ; 该通信共享内存模块分别与前、 后端的图像处理模块进行通 信, 即通信共享内存模块将解压缩线程是否空闲的信息传输给图像前端处理模块, 同时将 线程的状态标识信息传输给图像后端处理模块 ; 0035 图像后端处理模块, 循环检。
17、测通信共享内存模块的相应标识位, 判断在数据共享 内存模块的恢复图像区域是否有恢复图像, 如果有, 则提取恢复图像, 重置通信共享内存模 块的相应标识位, 否则, 一直等待, 直到恢复图像区有恢复图像。 0036 参照图 2, 所述的图像前端处理模块, 包括 : 0037 解压缩进程子模块, 用于动态调整解压缩进程数量, 其调整量的依据是任务量的 大小和不同进程数目对吞吐率的增益值, 从而选择能获得最佳增益的进程数 ; 0038 解压缩线程子模块, 根据图像解压缩任务量和不同线程数目对吞吐率的增益值, 创建多线程, 即用数组存储已知线程增益, 根据用户输入的任务量, 确定需要的总线程数 目, 。
18、选择可以获得最佳增益的线程数 ; 0039 共享内存子模块, 在 windows 系统下使用 CreateProcess 函数创建解压缩进程和 使用 CreateThread 函数创建解压缩线程 ; 该子模块循环检测通信共享内存模块, 当获知解 压缩线程空闲时, 会给数据共享内存模块的解压缩线程的数据空间放入压缩码流。 0040 参照图 3, 所述的数据共享内存模块, 包括 : 0041 线程分配空间子模块, 用于为每个解压缩线程分配独立的数据空间 A1, A2, B1 和 B2, 其中 A1 和 A2 为压缩码流区, 用于存储解压缩线程的压缩码流 ; B1 和 B2 为图像恢复区, 用于存储。
19、解压缩线程的恢复图像 ; 根据线程号独立寻址, 避免解压缩线程之间的数据冲突, 去除解压缩线程的数据依赖性 ; 0042 压缩码流存储子模块, 用于使得每个解压缩线程的数据区 A1 和 A2 存放着要解压 缩的码流。其存储压缩码流时, 先启动线程的开始解压缩事件, 当解压缩线程等到该事件 时, 对 A1 里的码流进行解压缩, 并在线程解压缩的同时给数据区 A2 放入压缩码流 ; 当下一 次检测到该线程空闲时, 则直接触发线程对A2里的码流解压缩 ; 同时再在数据区A1中放入 解压缩码流, 如此交替对 A1 和 A2 的码流进行解压缩, 即所谓的乒乓操作, 从而完成压缩码 说 明 书 CN 10。
20、3366386 A 5 4/5 页 6 流的存储 ; 0043 恢复图像存储子模块, 用于当图像解压缩完成后, 将恢复图像存储到恢复图像区 ; 如果恢复图像区B1为空, 就把恢复图像放入B1, 否则, 检测恢复图像区B2是否为空, 如果是 空, 就把恢复图像放入 B2, 如果 B1 和 B2 都为满, 则循环检测, 直至恢复图像区 B1 和恢复图 像区 B2 有一个为空。 0044 参照图 4, 所述的通信共享内存模块, 包括 : 0045 解压缩进程标识子模块, 用于为所有解压缩进程分配独立的标识位区域, 以表征 解压缩进程的状态, 如果解压缩进程已处于异常态, 则重新启动该进程 ; 004。
21、6 解压缩线程标识子模块, 用于为所有解压缩线程分配独立的标识位区域, 以表征 解压缩线程空闲态, 忙碌态, 异常态这三种状态, 其中, 空闲态表示可触发该线程开始解压 缩, 忙碌态表示该线程正在解压缩, 异常态则表示该线程已经异常 ; 如果解压缩线程已处于 异常态, 则要重新启动该线程, 避免一直等待该线程结束而引发异常 ; 0047 线程恢复图像区标识子模块, 用于为所有解压缩线程的恢复图像区分配恢复图像 区标识位, 即恢复图像区B1和B2的活动标识位, 以判断解压缩线程的恢复图像区是否有解 压缩图像。 0048 本发明的工作原理如下 : 0049 首先, 由图像前端处理模块中的解压缩进程。
22、子模块和解压缩线程子模块根据存储 已知的进程增益和线程增益以及用户输入的任务量, 选择可以获得最佳增益的进程数和线 程数, 确定需要的总解压缩线程数目, 即总线程数目=进程数*线程数, 例如, 一个任务判断 需要 32 个线程, 可以把它划分为 4 个进程数与 8 个线程数相乘, 或 2 个进程数与 16 个线程 数相乘, 根据已知的增益计算, 得到 4 个进程数与 8 个线程数相乘的方案的总增益更大, 因 此选择 4 个进程数与 8 个线程数相乘的方案, 并创建解压缩进程和线程 ; 0050 然后, 将创建的解压缩进程和线程传输给系统中数据共享内存模块, 由该模块中 的线程分配空间子模块创建。
23、数据共享内存, 存放所有解压缩线程的解压缩数据, 每个线程 有四块数据区 A1, A2, B1 和 B2, 其中 A1 和 A2 为压缩码流区, 用于存储解压缩线程的压缩码 流 ; B1和B2为图像恢复区, 用于存储解压缩线程的恢复图像, 且A1, A2, B1和B2的大小是固 定的 ; 该共享内存对所有解压缩线程都是可见的, 每个解压缩线程根据自己所属的进程号 和线程号检索到自己的数据区进行操作 ; 压缩码流存储子模块中每个解压缩线程有两个数 据区A1和A2存放该线程要解压缩的码流, 启动线程的开始解压缩事件, 当解压缩线程等到 该事件时, 对 A1 里的码流进行解压缩, 并在线程解压缩的同。
24、时给数据区 A2 放入压缩码流, 当下一次检测到该线程空闲时, 则直接触发线程对A2里的码流解压缩, 同时在数据区A1中 放入解压缩码流, 如此交替对 A1 和 A2 的码流进行存放 ; 0051 当压缩码流区已存放好码流, 则触发图像解压缩模块进行一次独立的解压缩过 程。在解压缩完成之后, 解压缩线程判断恢复图像区标识子模块的恢复数据区 B1 和 B2 的 活动标识, 如果 B1 的活动标识是 0, 就把恢复图像放入 B1, 否则, 检测 B2 的活动标识, 如果 是 0, 把恢复图像放入 B2, 如果 B1 和 B2 的活动标识都为 1, 循环检测, 直至 B1 和 B2 的活动 标识有一。
25、个为 0 ; 在解压缩的图像存放到恢复图像区之后, 将恢复图像区标识置为忙碌, 再 将恢复图像区的数据传输给图像后端处理模块进行处理。 0052 最后, 图像后端处理模块依次检测通信共享内存的所有解压缩线程恢复图像区 B1 说 明 书 CN 103366386 A 6 5/5 页 7 和B2活动标识, 如果某个线程数据恢复区B1或B2的活动标识为1, 就从恢复图像区取出恢 复图像, 将其活动标识置 0, 如此循环。 0053 以上仅是本发明的一个具体事例, 不构成对本发明的任何限制。 显然, 对于本领域 的专业人员来说, 在了解了本发明内容和原理后, 都可能在不背离本发明原理的情况下, 进 行形式和细节上的各种修正和改变, 可以做出不局限于图像前端模块的进程和线程分配方 式、 数据共享内存的使用模式、 用于线程通信的共享内存标志位的定义和图像解压缩模块 解压缩算法的并行图像解压缩系统。 但是这些基于本发明思想的修正和改变仍在本发明的 权利要求保护范围之内。 说 明 书 CN 103366386 A 7 1/3 页 8 图 1 说 明 书 附 图 CN 103366386 A 8 2/3 页 9 图 2 图 3 说 明 书 附 图 CN 103366386 A 9 3/3 页 10 图 4 说 明 书 附 图 CN 103366386 A 10 。