[发明专利]一种GPU上基于内存统一管理的MapReduce实现方法有效
| 申请号: | 201310710435.0 | 申请日: | 2013-12-20 |
| 公开(公告)号: | CN103714009A | 公开(公告)日: | 2014-04-09 |
| 发明(设计)人: | 金海;郑然;刘凯;章勤;冯晓文 | 申请(专利权)人: | 华中科技大学 |
| 主分类号: | G06F12/02 | 分类号: | G06F12/02;G06F17/30 |
| 代理公司: | 华中科技大学专利中心 42201 | 代理人: | 朱仁玲 |
| 地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 gpu 基于 内存 统一管理 mapreduce 实现 方法 | ||
技术领域
本发明属于计算机高性能计算领域,更具体地,涉及一种GPU上基于内存统一管理的MapReduce实现方法。
背景技术
近年来,随着并行计算的发展,传统上只用于处理图形渲染计算任务的GPU逐渐被用于通用计算领域。相对于CPU,GPU在大规模数据并行处理方面具有强大的优势且性价比较高,可以弥补CPU性能不足的应用场景。
为了充分利用GPU这种众核处理器的性能,需要编写适合其体系结构的并行程序。而GPU的硬件结构和传统多核CPU差别较大,内存层次比CPU复杂,且使用便签式存储器(ScratchPad Memory,简称SPM)这类不同于CPU上Cache机制的硬件设计,导致GPU编程与传统的串行编程有较大的区别,具有一定编程难度。为了解决这个问题,学术界提出将分布式计算中的MapReduce编程模型移植到GPU,以简化编程方式。MapReduce只向上层应用开发提供简单的接口,而将与应用本身关系不大的细节实现隐藏在框架之内,这样的编程模型设计极大的提高了并行编程的效率。
目前,GPU上的MapReduce编程模型的实现采用两层哈希表结构:在GPU每个块的共享内存中分别设置一个哈希表,在全局内存中设置一个全局哈希表。这个框架局限于处理不同的键值比较少的情况,当不同的键增多后时间开销急剧上升。另外,现有方案在全局内存和共享内存中设置独立的缓冲区,在内存资源的管理上存在内存空间浪费的问题,并在键值对的检索上存在重复查找的问题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种GPU上基于内存统一管理的MapReduce实现方法,其目的在于,解决现有MapReduce编程模型的实现过程中的内存空间浪费和键值对检索上的重复查找的技术问题,且GPU线程的并发度更高,线程间的同步开销更小,具有更好的扩展性。
为实现上述目的,按照本发明的一个方面,提供了一种GPU上基于内存统一管理的MapReduce实现方法,包括以下步骤:
(1)初始化GPU中块的数量Bs、每个块中的线程数目N、以及用户的输入数据量大小M;
(2)为每个块在全局内存上分配中间数据缓冲区,对map计算生成的键值对进行连续的归约操作,通过在键值对的值中设置归约次数和在计算中不断累计,统计键值对出现的频率信息,并根据出现频率对键值对进行排序,提取出高频的键值对;
(3)将步骤(2)得到的高频键值对插入到共享内存中,在任务处理中,通过使用标记数组对全局内存和共享内存的分配进行统一管理,且只有当共享内存资源使用完毕之后,才开始在全局内存中分配空间。
优选地,块的数量Bs的取值范围是1至30,线程数量N的取值范围是32至512。
优选地,步骤(2)包括以下子步骤:
(2-1)在全局内存上为GPU的每个块分配大小为gm_size的中间数据缓冲区,同时分配一个大小为global_size的全局结果缓冲区和大小为num_sort的排序结果缓冲区sort_index[],中间数据缓冲区和全局结果缓冲区中均包括索引数组buckets[]、内存分配区gm_pool[];
(2-2)在共享内存上设置针对全局结果缓冲区内存分配的偏移数组global_offset[]和针对中间数据缓冲区内存分配的偏移数组gm_offset[];
(2-3)初始化GPU的线程号tid、块号bid、总线程数num_threads=Bs*N,将每个块中的线程进行分组,并获取线程分组的数目num_groups=num_threads/32,线程分组号gid=tid/32,偏移数组global_offset[]中每个线程分组的起始内存分配地址global_object_offset[gid]=global_size*(gid+num_groups*bid)/(num_groups*Bs),以及偏移数组gm_offset[]中每个线程分组的起始内存分配地址gm_offset[gid]=gm_size*gid/num_groups;
(2-4)设置计数器i=bid*N+tid;
(2-5)判断i是否小于M*p%,若是则转入步骤(2-6),否则转入步骤(2-11);
(2-6)每个线程分别取出输入数据中的第i条记录,并对第i条记录执行map计算,以生成键值对;
(2-7)每个线程在对应的中间数据缓冲区中查找是否已经存在与步骤(2-6)相同键值的键值对,若是则转入步骤(2-8),否则转入步骤(2-9);
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310710435.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种翻背带机的翻背带机构
- 下一篇:冷却器用的液压胀管机





