[发明专利]一种GPU上基于内存统一管理的MapReduce实现方法有效

专利信息
申请号: 201310710435.0 申请日: 2013-12-20
公开(公告)号: CN103714009A 公开(公告)日: 2014-04-09
发明(设计)人: 金海;郑然;刘凯;章勤;冯晓文 申请(专利权)人: 华中科技大学
主分类号: G06F12/02 分类号: G06F12/02;G06F17/30
代理公司: 华中科技大学专利中心 42201 代理人: 朱仁玲
地址: 430074 湖北*** 国省代码: 湖北;42
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 gpu 基于 内存 统一管理 mapreduce 实现 方法
【权利要求书】:

1.一种GPU上基于内存统一管理的MapReduce实现方法,其特征在于,包括以下步骤: 

(1)初始化GPU中块的数量Bs、每个块中的线程数目N、以及用户的输入数据量大小M; 

(2)为每个块在全局内存上分配中间数据缓冲区,对map计算生成的键值对进行连续的归约操作,通过在键值对的值中设置归约次数和在计算中不断累计,统计键值对出现的频率信息,并根据出现频率对键值对进行排序,提取出高频的键值对; 

(3)将步骤(2)得到的高频键值对插入到共享内存中,在任务处理中,通过使用标记数组对全局内存和共享内存的分配进行统一管理,且只有当共享内存资源使用完毕之后,才开始在全局内存中分配空间。 

2.根据权利要求1所述的MapReduce实现方法,其特征在于,块的数量Bs的取值范围是1至30,线程数量N的取值范围是32至512。 

3.根据权利要求1所述的MapReduce实现方法,其特征在于,步骤(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); 

(2-8)对中间数据缓冲区中的键值对和步骤(2-6)生成的键值对执行reduce计算,并在键值对的值中累计归约次数; 

(2-9)在块号bid对应的中间数据缓冲区中的内存分配区gm_pool[]中分配新的全局内存空间,用于存放步骤(2-6)生成的键值对,在该键值对的值中初始化归约次数为1,并将该键值对的偏移地址填入索引数组buckets[]中; 

(2-10)设置i=i+num_threads;然后返回步骤(2-5); 

(2-11)所有线程进行同步操作,并将所有块对应的中间数据缓冲区的键值对合并到全局结果缓冲区; 

(2-12)从全局结果缓冲区中的键值对中提取出现频率较高的键值对,获取该键值对的数量H,并将H个键值对在偏移数组global_offset[]中对应的值保存在排序结果缓冲区sort_index[]中。 

4.根据权利要求3所述的MapReduce实现方法,其特征在于,步骤(2-12)中,所有键值对中出现频率最高的5%-10%的键值对是高频率的键 值对。 

5.根据权利要求1所述的MapReduce实现方法,其特征在于,步骤(3)包括以下子步骤: 

(3-1)重新初始化GPU每个块对应的中间数据缓冲区中索引数组buckets[]和内存分配区gm_pool[]的所有元素为零,并在中间数据缓冲区中设置内存分配标记数组mem_flag[]; 

(3-2)在共享内存中建立内存分配区sm_pool[],初始化内存分配区sm_pool[]的偏移地址sm_offset=0,内存分配区sm_pool[]的内存占满标记sm_flag=0; 

(3-3)设置计数器i=tid; 

(3-4)判断i是否小于H,若是则转入步骤(3-5),否则转入步骤(3-8); 

(3-5)取出排序结果缓冲区sort_index[i]对应的键值对,并将该键值对中的归约次数初始化为0; 

(3-6)将步骤(3-5)得到的键值对存放在共享内存的内存分配区sm_pool[]中,,将该键值对的偏移地址填入索引数组buckets[]中,并在内存分配标记数组mem_flag[]中分配空间,并填入标记1; 

(3-7)设置i=i+Bs,然后返回步骤(3-4); 

(3-8)GPU的所有线程进行同步操作; 

(3-9)设置i=tid+M*p%; 

(3-10)判断i是否小于M,若是则转入步骤(3-11),否则转入步骤(3-21); 

(3-11)每个线程分别取出输入数据中的第i条记录,并对第i条记录执行map计算,以生成键值对; 

(3-12)每个线程在对应的中间数据缓冲区中查找是否已经存在与步骤(3-11)相同键值的键值对,若是则转入步骤(3-13),否则转入步骤(3-17); 

(3-13)获取查找到的键值对的下标k,判断mem_flag[k]是否为1,若是则转入步骤(3-14),否则转入步骤(3-15); 

(3-14)从内存分配区sm_pool[]中取出查找到的键值对,然后转入步骤(3-16); 

(3-15)从内存分配区gm_pool[]中取出查找到的键值对; 

(3-16)对中间数据缓冲区中的键值对和步骤(3-11)生成的键值对执行reduce计算; 

(3-17)判断内存占满标记sm_flag是否为0,若是则转入步骤(3-18),否则转入步骤(3-21); 

(3-18)在内存分配区sm_pool[]中划分新的空间,用于存放生成的键值对,将该键值对的偏移地址写入索引数组buckets[]中,并在内存分配标记数组mem_flag[]中分配空间,并填入标记1; 

(3-19)判断内存分配区sm_pool[]的空间是否占满,若是则转入步骤(3-20),否则转入步骤(3-22); 

(3-20)设置sm_flag=1,然后转入步骤(3-22); 

(3-21)在内存分配区gm_pool[]中划分新的空间,用于存放生成的键值对,将该键值对的偏移地址写入索引数组buckets[]中,并在内存分配标记数组mem_flag[]中分配空间,并填入标记0; 

(3-22)设置i=i+num_threads,然后返回步骤(3-10); 

(3-23)GPU的所有线程进行同步操作,并将所有块对应的中间数据缓冲区的键值对合并到全局结果缓冲区。 

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201310710435.0/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top