于异构平台的面向高维数据的词汇树构建方法_3

文档序号:9810364阅读:来源:国知局
在完成所有数据的累加后,特定的线程会将自己的结果累加到相应的线程上,每经过一次循环,累加所需的次数就减少一半,直至获得整个线程块的局部和。最后通过原子加法累加到全局内存中。
[0038](7)完成节点的分类并得到新的中心点后,程序会将新的子节点发送至主机中的其他线程。主线程会继续从任务队中获取之后待处理的节点,从而缩短程序中的关键路径。而处理新节点的线程会将不同的节点插入不同的队列中,需要多GPU合作的大型的节点会放在一个队列中,可以放在单个GHJ中的节点放在一个队列中,而小于设置的阈值大小的节点会放到另一个队列,只有当前一个队列为空时程序才会从后一个队列中取节点。在程序开始时,所有节点都是大型节点,由所有GHJ共同处理。当开始处理后一个队列时,程序会激活其他线程,多个GPU会同时开始工作,协同方式如图3所示,分别从队列中取得自己的任务,处理新的节点。
[0039](8)新的节点插入队列后,程序会对队列进行遍历,寻找还未进行预处理的节点,并将任务分发到各个负责预处理工作的线程中。对于初始节点是超大型节点的建树工作,由于内存限制,程序会记录内存占用情况并限制节点的预处理工作。在遍历过程中,程序会判断内存是否够存放下预处理的数据,如果不够则该过程会结束,等待下次遍历。如果空间足够那么程序会进行预处理,并将预处理的数据计入内存消耗中。
[0040](9)当层数超出预设值或者节点中高维特征点数小于中心点数时,程序都不会将新节点插入队列中。所以,当队列为空时,程序就会结束,完成高维词汇树的构建工作。
【主权项】
1.一种基于异构平台的高维词汇树构建方法,其特征在于包括:利用异构平台中图形处理器(GPU)强大的并行计算能力与可编程性,提升高维词汇树构建过程的速度;利用高维词汇树算法特性和图形处理器的内存访问模式优化算法;采用主机和图形处理器在高维词汇树算法运行过程中的协调策略; 在高维词汇树的构建中,将高维词汇树中队列管理以及预处理工作放在主机端,生成新节点算法中的分类以及求和两个部分交由GPU进行处理; 在运行建树程序前,将所有图片的高维特征点作为一整个节点放入队列中; 开始运行建树程序,建树过程根据主机端的主线程维护的队列进行,具体步骤如下: 第一步,程序从任务队列中取出待处理的节点,并将需要处理的数据传输到GPU的主存中; 根据节点大小的不同,将采用不同的GPU协同策略:将节点分为下述三种,并放到不同的队列中进行处理;在前一个队列处理完之前程序不处理下一个队列中的节点; 第一种是大型节点,这类节点的大小超过GPU主存的容量,将其划分为可以放入GPU中的数据块;如果是多GPU结构,每个GPU依次拿取自己的数据块;如果是单GPU结构,该GPU顺序处理所有的数据块;每次处理完所有数据块的分类或者求和之后,进行同步,并将结果汇总至主机端内存上的数组中,之后再进行下一部分的处理; 第二种是普通的节点,这类节点的大小可以整块放入GHJ内存中,不需要划分为数据块;GPU按顺序从队列中获取任务,处理完一个任务后即可取下一块任务; 第三种是碎片化节点,这类节点是到了队列的尾部,高维词汇树的底层,产生的许多只有数百、数十个高维特征点的节点;为了充分利用GPU的计算能力,要放入尽量多的碎片化节点以填满GPU的内存,此时GPU每次可以处理上百个节点; 第二步,对节点进行处理,生成K个子节点 首先,在节点中随机寻找K个高维特征点作为初始的中心点,然后对高维特征点进行分类处理,之后对每个分类求和,最后得到新的K个中心点;经过循环上述过程,至中心点结果不变后,得到K个新的中心点; 其中,GPU上节点的处理工作有两部分:一是对每个高维特征点进行分类,二是对每个类别的高维特征点进行求和;对这两部分采用不同的并行模式以提高并行性能: 对于分类计算,每个线程以高维特征点为任务目标,去完成分类任务;线程的任务是首先求出高维特征点与所有中心点的多维距离,然后确定与之距离最短的中心点,将结果存储到全局内存中;由于计算最短距离不适合由多个线程共同完成,所以GPU采用根据高维特征点进行处理的方式,线程各自读取高维特征点进行处理;中心点的数据被存储在线程块的共享内存中,这是所有高维特征点公用的数据,放在共享内存中能够减少不必要的主存访问;当一个线程在处理完一个节点后,读取下一个要处理的高维特征点并循环直至处理完所有的节点; 对于求和计算,GPU按维度进行并行处理,一个线程块处理一组节点,每个线程负责特定的维度,每个线程只存储自己负责的维度的局部和,这样就能将局部和放在共享内存上,减少不必要的GPU主存访问;每次处理完一个点中的特定维度,线程根据线程块中的总线程数累加一定的地址得到下一部分有相同维度的数据;最终,在这组节点中所有线程都完成累加后,有特定的线程将各自负责的值累加到全局变量上; 第三步,将子节点放入队列中 当前节点生成的K个子节点中,超过预定的层数L或者特征点过少的节点不会被放入队列,其余节点会被放到相应节点中; 第四步,重复第一至第三步的过程,当队列为空时,高维词汇树的构建工作完成。2.根据权利要求1所述的基于异构平台的高维词汇树构建方法,其特征在于在第二步中,骤还对于GPU中的内存访问进行了优化,优化目标是减少对全局内存的访问或者将经常访问的数据放置到共享内存上,包括: (1)采用数据压缩的内存访问方式 在每次读取数据时将多个维度的数据拼接成与带宽匹配的数据一次读取;对于分类的过程,一个点中相邻的多个维度放在一起,作为一个数据读取;对于求和的过程,将相邻的多个点的同一个维度抽取出来进行拼接,作为一个数据读取; (2)进行数据重构 在分类的过程中,数据重构,就是使warp中线程访问数据时,数据在GHJ主存中的分布是连续的,即warp访问的特征点的同一维在GPU主存中是连续的;同时,将同一个点的多个维度先作为一块存放,再和相邻点的相同维度一起存放;在求和的过程中,数据重构是将一组特征点的同一维度一起存放,以适应压缩访问的要求; (3)、逆向的数据块遍历和数据块加载顺序的优化 对于大型节点,由于节点大小大于GPU主存的容量,所以需要将其划分为多个数据块依次放入GPU中进行处理;将数据块设计成小于GPU内存的一半,在使用GPU生成新节点的时候就能使用GHJ的第二个工作流进行数据装载的工作,将下一块数据块装载在GPU的另一半内存上; 节点的处理会循环多次,对数据块也会进行多次遍历,为在遍历的过程中减少数据块的读取次数,前一循环的结尾数据块在后一循环开始时仍然储存在GHJ主存中,所以让相邻的两个循环以逆向的方向进行数据块的遍历处理,这样每一个GHJ在头部和尾部都可以节省一次数据块载入的工作。
【专利摘要】本发明属于并行处理器技术领域,具体为一种基于异构平台的面向高维词汇树构建方法。本发明利用异构处理平台(通用处理器和图形处理器(GPGPU)混合架构)上图形处理器强大的并行计算能力与可编程性,提升高维词汇树构建过程的速度。本发明利用图形处理器高并发性的特点加速高维词汇树算法的核心过程,利用高维词汇树算法特性和图形处理器的内存访问模式优化算法的访存过程,并设计了主机和图形处理器在高维词汇树算法运行过程中的协调策略。本发明方法可以有效提升面向高维数据的词汇树的构建速度。
【IPC分类】G06F9/48
【公开号】CN105573834
【申请号】CN201510938217
【发明人】张为华, 季晓枫, 余时强
【申请人】复旦大学
【公开日】2016年5月11日
【申请日】2015年12月16日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1