[发明专利]一种基于小内存处理大规模数据的并行程序开发方法在审
| 申请号: | 201510013613.3 | 申请日: | 2015-01-12 |
| 公开(公告)号: | CN104572106A | 公开(公告)日: | 2015-04-29 |
| 发明(设计)人: | 高永虎;张清;张广勇;沈铂 | 申请(专利权)人: | 浪潮电子信息产业股份有限公司 |
| 主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/38 |
| 代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 姜明 |
| 地址: | 250101 山东*** | 国省代码: | 山东;37 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 内存 处理 大规模 数据 并行 程序 开发 方法 | ||
1.一种基于小内存处理大规模数据的并行程序开发方法,其特征在于,其具体实现过程为:
在内存和外存开辟数据空间,并划分成若干数据块,将任务数据读入到划分的外存数据块中,计算与I/O线程操作不同的内存数据块与外存数据块交互,使得计算该数据块所需时间与I/O的时间相等;
设置读线程、计算线程、写线程,主线程根据CPU的计算核心数量启动计算线程和I/O线程,主线程初始化队列和各个缓存区,然后启动上述各个线程;
当需要计算划分到外存中的数据块时,读线程从内存中获取空的数据块缓冲区,然后将外存数据块中的数据读入到内存中;
计算线程从内存中获取已经读入的数据块,再从内存中获取一个空的数据块缓存区,计算结果存入到空的数据块缓冲区中,将源数据的数据块缓存区清空;
写线程获取计算线程计算完成后目的数据块缓存区中数据,将此数据写到外存中的缓冲区中,输出完毕后将目的数据块缓存区清空。
2.根据权利要求1所述的一种基于小内存处理大规模数据的并行程序开发方法,其特征在于,所述读线程、计算线程、写线程异步并行,需要源缓冲SR_BUF和目标缓冲DR_BUF,DR-BUF、SR_BUF均为由主线程开辟的内存缓冲空间;BUF是一个连续的存储空间,被分割成多份,每份称为一个缓冲块BUF_BLOCK,缓冲块对应一个基本数据块的作业单位;读线程与计算线程共同操作SR_BUF缓冲,计算线程与写线程共同操作DR_BUF缓冲。
3.根据权利要求2所述的一种基于小内存处理大规模数据的并行程序开发方法,其特征在于,每个缓冲或队列可容纳至少两个缓冲对象。
4.根据权利要求2所述的一种基于小内存处理大规模数据的并行程序开发方法,其特征在于,还包括环形队列,该环形队列存储缓冲区的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对应的目标数据进行输出。
5.根据权利要求4所述的一种基于小内存处理大规模数据的并行程序开发方法,其特征在于,基于上述队列,该并行程序开发的具体过程为:
主线程根据CPU的计算核心数启动nThreads个计算线程和同等数量的I/O线程,将计算数据划分为合适的基本数据块,并在外存开辟同样数量大小的内存,将数据库中的数据读入到外存中;
在内存中开辟内存块,其内存块的数量是线程数量的倍数;
创建四个队列SR_BUF_FULL_QUEUE、SR_BUF_FREE_QUEUE、DR_BUF_FREE_QUEUE、DR_BUF_FREE_QUEUE,并初始化队列,即将内存块的ID存入FREE队列中,最后主线启动所有线程;
读线程从SR_BUF_FREE_QUEUE队列中获取一个空的数据块ID,将一个外存数据块读入到此ID对应的数据块中,然后将此数据块的ID入队到队列SR_BUF_FULL_QUEUE中;
计算线程分别从SR_BUF_FULL_QUEUE和DR_BUF_FREE_QUEUE获取数据块的ID,计算源数据并将结果存入到目的数据块中,计算完成将源数据块清空并将其ID入队到SR_BUF_FREE_QUEUE对列中,将目的数据块的ID入队到DR_BUF_FULL_QUEUE对列中;
写线程中DR_BUF_FULL_QUEUE中获取待写的数据块的ID,将ID对应的数据块写入到外存中,写完成后将数据块中数据清空并将其ID入队到DR_BUF_FREE_QUEUE队列中;
计算线程与读写线程异步并行执行,直到系统结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮电子信息产业股份有限公司,未经浪潮电子信息产业股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510013613.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种业务表单配置的方法和装置
- 下一篇:一种移动终端页面图表的更新方法和装置





