[发明专利]一种基于小内存处理大规模数据的并行程序开发方法在审
| 申请号: | 201510013613.3 | 申请日: | 2015-01-12 |
| 公开(公告)号: | CN104572106A | 公开(公告)日: | 2015-04-29 |
| 发明(设计)人: | 高永虎;张清;张广勇;沈铂 | 申请(专利权)人: | 浪潮电子信息产业股份有限公司 |
| 主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/38 |
| 代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 姜明 |
| 地址: | 250101 山东*** | 国省代码: | 山东;37 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 内存 处理 大规模 数据 并行 程序 开发 方法 | ||
技术领域
本发明涉及高性能计算领域,具体地说是一种实用性强、基于小内存处理大规模数据的并行程序开发方法。
背景技术
当前社会人类的数据大爆炸,信息数据越来越多,人们对信息数据的处理能力的要求也越来越高,不仅石油勘探、气象预报、航天国防、科学研究等需求高性能计算,金融、政府信息化、教育、企业、网络游戏等更广泛的领域对高性能计算的需求迅猛增长。
计算速度对于高性能计算尤为重要,高性能计算朝多核、众核发展。但是由于一些应用运算数据规模一直比较大,受限于网络带宽,系统内存等原因,系统无法处理数据量远远超过系统内存的承受,导致计算核心无法充分的利用。对于内存不足的系统,将数据量一次性全部导入内存再处理的方式已经无法满足当前的需求,需要进一步设计一种根据现有有限的硬件设备下能够在单机中处理大规模数据,并且不会降低计算效率、能够充分利用计算核心的方法。
基于此,本发明提供一种基于小内存处理大数据开发方法,对一些无法在小内存的设备条件下运行的程序或不能充分利用计算核心的系统修改,能够处理较大规模的数据,并使系统的计算设备达到计算的负载均衡且满负载的运行,从而最大限度的利用现有设备的性能,提高系统的整体运行的效率,大大缩短程序的运行时间。
发明内容
本发明的技术任务是针对以上不足之处,提供一种实用性强、基于小内存处理大规模数据的并行程序开发方法。
一种基于小内存处理大规模数据的并行程序开发方法,其具体实现过程为:
在内存和外存开辟数据空间,并划分成若干数据块,将任务数据读入到划分的外存数据块中,计算与I/O线程操作不同的内存数据块与外存数据块交互,使得计算该数据块所需时间与I/O的时间相等;
设置读线程、计算线程、写线程,主线程根据CPU的计算核心数量启动计算线程和I/O线程,主线程初始化队列和各个缓存区,然后启动上述各个线程;
当需要计算划分到外存中的数据块时,读线程从内存中获取空的数据块缓冲区,然后将外存数据块中的数据读入到内存中;
计算线程从内存中获取已经读入的数据块,再从内存中获取一个空的数据块缓存区,计算结果存入到空的数据块缓冲区中,将源数据的数据块缓存区清空;
写线程获取计算线程计算完成后目的数据块缓存区中数据,将此数据写到外存中的缓冲区中,输出完毕后将目的数据块缓存区清空。
所述读线程、计算线程、写线程异步并行,需要源缓冲SR_BUF和目标缓冲DR_BUF,DR-BUF、SR_BUF均为由主线程开辟的内存缓冲空间;BUF是一个连续的存储空间,被分割成多份,每份称为一个缓冲块BUF_BLOCK,缓冲块对应一个基本数据块的作业单位;读线程与计算线程共同操作SR_BUF缓冲,计算线程与写线程共同操作DR_BUF缓冲。
每个缓冲或队列可容纳至少两个缓冲对象。
还包括环形队列,该环形队列存储缓冲区的ID,各线程从队列中获取要操作的缓冲区对应的ID,上述环形队列包括下述四个队列:
SR_BUF_FULL_QUEUE:新的计算任务队列,存放新读入的等待计算的源数据块的ID号SR_BUF_ID、数据块的大小信息,由读线程写入,计算线程弹出,当读线程向SR_BUF_ID对应的缓存区中读入新的数据时,将SR_BUF_ID入队,计算线程弹出SR_BUF_ID时,计算SR_BUF_ID对应的源数据;
SR_BUF_FREE_QUEUE:空闲源缓冲队列,存放当前空闲SR_BUF_ID号,由计算线程写入,读线程弹出,当SR_BUF_ID对应的源数据计算完毕时,释放SR_BUF_ID,告知读线程可对其更新数据;
DR_BUF_FREE_QUEUE:空闲目标缓冲队列,存放当前空闲数据块的ID号DR_BUF_ID,记录DR_BUF_ID号,由写线程写入,计算线程弹出;当写线程对DR_BUF_ID对应的缓存区数据输出完毕时,将DR_BUF_ID入队,告知计算线程,该DR_BUF_ID输出完毕可重新用于计算,计算线程弹出DR_BUF_ID时,启动计算,并将结果写入DR_BUF_ID对应的目标缓冲区中;
DR_BUF_FULL_QUEUE:新的写任务队列,存放计算完毕等待写回的目标数据块的ID号DR_BUF_ID,由计算线程写入,写线程弹出;当计算线程向DR_BUF_ID所对应的缓冲区中读入新数据时,将DR_BUF_ID入队,写线程弹出DR_BUF_ID时,对DR_BUF_ID对应的目标数据进行输出。
基于上述队列,该并行程序开发的具体过程为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮电子信息产业股份有限公司,未经浪潮电子信息产业股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510013613.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种业务表单配置的方法和装置
- 下一篇:一种移动终端页面图表的更新方法和装置





