一种面向宽度优先搜索算法的加速装置、方法及存储介质与流程

文档序号:18142284发布日期:2019-07-10 11:12阅读:330来源:国知局
一种面向宽度优先搜索算法的加速装置、方法及存储介质与流程

本发明涉及大数据、图计算及计算机体系结构领域,尤其涉及一种面向宽度优先搜索算法的加速方法与装置。



背景技术:

在涉及大数据、图计算及计算机体系结构领域,图是描述事物关联属性最常用的一种数据结构,现实生活中的诸多应用场景都可以用图结构来表示,例如社交网络、交通网络、生物信息网络和知识图谱等。为了满足图应用及图处理技术的需求,各种图算法也是层出不穷。

宽度优先搜索(breadthfirstsearch,bfs)算法是解决图遍历问题的经典算法,也是很多重要图算法的基础。其基本思想是,对于图结构g=(v,e),顶点集合v以及边集合e,给定源顶点后,bfs算法将开始搜索图g中源顶点所有可达的邻居顶点。在算法开始时,将源顶点放入当前层的活跃顶点队列。如果当前层队列存在活跃顶点,依次检查队列中活跃顶点的所有邻居顶点;如果某一个邻居顶点没有被访问过,则更新该邻居顶点的父亲和距离信息,然后将该邻居顶点放入下一层的活跃顶点队列。循环迭代,直到处理完当前层队列中的所有顶点,开始下一层的搜索。传统的bfs算法以一种类似树的层次遍历的方式自上而下进行搜索,即由父节点来搜索子节点,称之为“自顶向下”方法。

为了提升算法性能,beamer等人开创性的提出了一种“自底向上”和“自顶向下”相结合的bfs算法。“自底向上”bfs算法每次让所有未访问过的顶点检查所有入边的邻居,即由子节点来搜索父节点。如果找到一个处于当前层队列的父节点,则将该顶点加入下一层的活跃顶点队列,并结束对该顶点的处理。通过动态的选择两种方法,可以大幅度的提升bfs算法的执行效率。

除了上述针对算法本身的改进之外,选多工作采用专用硬件的方式进一步加速bfs算法的处理。与基于通用cpu的优化手段相比,采用专用的硬件加速器在性能和功耗等方面都更具有优势。现有基于加速器的图计算优化方案主要集中于提升内存子系统的性能,缺乏对提升加速器自身计算性能的研究。

随着图数据规模的持续爆炸式增长,面向bfs的图计算因其所具有的数据规模大但局部性差、计算-访存比小等特点,对以控制流体系结构为主的现代计算机系统带来了严峻的挑战,如何高效的进行图数据处理成为近年来的研究重点。

综上可知,现有技术在实际使用上,显然存在不便与缺陷,所以有必要加以改进。



技术实现要素:

针对上述的缺陷,本发明的目的在于提供一种面向宽度优先搜索算法的加速装置,极大地提高了图数据处理的计算效率。

为了实现上述目的,本发明提供了一种面向宽度优先搜索(bfs)算法的加速装置,其特征在于,包括:

一内存模块(drammemory),用于存储图数据与搜索结果;

一执行单元模块,又包括多个执行单元(processingelement,pe),用于根据所述面向宽度优先搜索算法的内在特征,构架多级流水线以执行遍历搜索任务;

一访存复用模块(requestmultiplexer),用于根据设定的优先级处理所述流水线的访存请求;

一调度模块(dispatch),用于将所述内存模块的响应数据分发到空闲的所述执行单元;

一控制模块(controlunit),用于控制与管理所述内存模块、执行单元模块、访存复用模块和/或调度模块。

上述的面向宽度优先搜索算法的加速装置,其中,所述控制模块,包括一执行环境的初始化模块,用于将图数据集g=(v,e)划分并分配给不同的所述执行单元处理,其中v为顶点集合,e为边集合。

上述的面向宽度优先搜索算法的加速装置,其中,所述控制模块,又包括一执行同步模块,用于负责在每一层遍历搜索任务结束后控制所述执行单元间同步。

上述的面向宽度优先搜索算法的加速装置,其中,所述面向宽度优先搜索算法的内在特征为访存类型,所述执行单元模块根据所述访存类型,定制化所述多级流水线,所述各级流水均持续地从fifo缓存队列中读取上级流水的内存响应,同时向所述内存模块发出新的访存请求,以实现高并发的流水机制。

上述的面向宽度优先搜索算法的加速装置,其中,所述多级流水线包括依优先级从低到高的探视检查(visitationcheck)、邻居集合(neighborgathering)和级别更新(levelupdate)三级流水。

上述的面向宽度优先搜索算法的加速装置,其中,所述探视检查流水级,用于依次检查子集vi中每一个顶点vj的访问状态,如果发现未访问过的顶点v,则向所述内存模块发起访存请求,以获取所述顶点v的地址信息,并将所述访存请求缓存于fifo队列中;如果没有发现,则持续检查后续的顶点v,直到子集vi的每一个顶点vj检查完毕;其中i,j为正整数。

上述的面向宽度优先搜索算法的加速装置,其中,所述邻居集合流水级,用于获取上一级响应的邻居信息,根据地址信息,持续不断地向所述内存模块发起访存请求,获取顶点中所有邻居顶点的识别地址id。

上述的面向宽度优先搜索算法的加速装置,其中,所述级别更新流水级,用于依次检查所述邻居顶点在当前层队列中的访问状态,判断顶点v是否是下一层待处理的活跃顶点;所述控制模块根据下一层活跃顶点的数目决定是否需要开始新一轮的优先搜索。

上述的面向宽度优先搜索算法的加速装置,其中,所述访存复用模块,用于将所述各级流水的访存请求复用到所述内存模块的一个内存控制器上,以使所述内存控制器每一个时钟周期都在进行读或写操作。

上述的面向宽度优先搜索算法的加速装置,其中,所述调度模块,用于在获取内存的响应数据后,根据所述内存的标识信息,将所述响应数据分配到空闲的对应流水级。

为了实现本发明的另一发明目的,本发明还提供一种专用图处理器,包括上述面向宽度优先搜索算法的加速装置,其可以充分利用专用的硬件加速器在性能和功耗等方面的优势。

为了实现本发明的另一发明目的,本发明还提供一种面向宽度优先搜索算法的加速方法,通过优化处理的并发度和带宽利用率,极大地提高算法的执行效率。

为了实现上述目的,本发明提供了一种面向宽度优先搜索算法的加速方法,其中,包括:

设置一内存的步骤,用于存储图数据与搜索结果;

设置多个执行单元的步骤,用于根据所述面向宽度优先搜索算法的内在特征,构架多级流水线以执行遍历搜索任务;

设置一访存复用步骤,用于根据设定的优先级处理所述流水线的访存请求;

设置一调度步骤,用于将所述内存步骤的响应数据分发到空闲的所述执行单元;

设置一控制步骤模块,用于实现对上述各步骤的控制与管理。

上述的面向宽度优先搜索算法的加速方法,其中,所述控制步骤,包括一执行环境的初始化步骤,用于将图数据集g=(v,e)划分并分配给不同的所述执行单元处理,其中v为顶点集合,e为边集合。

上述的面向宽度优先搜索算法的加速方法,其中,所述控制步骤,又包括一执行同步控制步骤,用于负责在每一层遍历搜索任务结束后控制所述执行单元间同步。

上述的面向宽度优先搜索算法的加速方法,其中,所述面向宽度优先搜索算法的内在特征为访存类型,所述多个执行单元根据所述访存类型,定制化所述多级流水线,所述各级流水均持续地从fifo缓存队列中读取上级流水的内存响应,同时向所述内存发出新的访存请求,以实现高并发的流水机制。

上述的面向宽度优先搜索算法的加速方法,其中,所述多级流水线为:探视检查、邻居集合和级别更新三级流水。

上述的面向宽度优先搜索算法的加速方法,其中,所述探视检查流水级,用于依次检查子集vi中每一个顶点vj的访问状态,如果发现未访问过的顶点v,则向所述内存模块发起访存请求,以获取所述顶点v的地址信息,并将所述访存请求缓存于fifo队列中;如果没有发现,则持续检查后续的顶点v,直到子集vi的每一个顶点vj检查完毕;其中i,j为正整数。

上述的面向宽度优先搜索算法的加速方法,其中,所述邻居集合流水级,用于获取上一级响应的邻居信息,根据地址信息,持续不断地向所述内存模块发起访存请求,获取顶点中所有邻居顶点的识别地址id。

上述的面向宽度优先搜索算法的加速方法,其中,所述级别更新流水级,用于依次检查所述邻居顶点在当前层队列中的访问状态,判断顶点v是否是下一层待处理的活跃顶点;所述控制模块根据下一层活跃顶点的数目决定是否需要开始新一轮的优先搜索。

上述的面向宽度优先搜索算法的加速方法,其中,所述访存复用步骤,用于将所述各级流水的访存请求复用到所述内存的一个内存控制器上,以使所述内存控制器每一个时钟周期都在进行读或写操作。

上述的面向宽度优先搜索算法的加速方法,其中,所述调度步骤,用于在获取内存的响应数据后,根据所述内存的标识信息,将所述响应数据分配到空闲的对应流水级。

为了实现本发明的另一发明目的,本发明还提供了一种存储介质,用于存储一种用于执行上述加速方法的计算机程序。

本发明设计的上述面向宽度优先搜索算法的加速装置与方法。本发明的总体思路是结合宽度优先搜索算法的阶段性处理特点,设计定制化的多级流水线,同时对各级流水线的访存请求按照不同的优先级进行处理,提高外部存储的带宽利用率,在计算过程中,根据图数据规模进行并行扩展,实现宽度优先搜索算法的加速。

附图说明

图1是本发明的总体架构示意图;

图2是一种采用本发明所示加速装置的图处理器示意图;

图3是本发明一种执行单元pe的模块示意图;

图4是本发明一种面向宽度优先搜索算法的加速方法示意图。

附图标记:

1-加速装置(面向bfs算法)

11-控制模块(controlunit)

12-执行模块

121-执行单元(processingelement,pe)

1211-探视检查(visitationcheck)流水线

1212-邻居集合(neighborgathering)流水线

1213-级别更新(levelupdate)流水线

13-访存复用模块(requestmultiplexer)

14-调度模块(dispatch)

15-内存模块(drammemory)

151-内存控制器

152-内存

主机接口(hostinterface)

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,说明书中针对“一个实施例”、“实施例”、“示例实施例”等的引用,指的是描述的该实施例可包括特定的特征、结构或特性,但不必然包含这些特定特征、结构或特性。此外,这种表述并非指的是同一个实施例。进一步,在结合实施例描述特定的特征、结构或特性时,无论有没有明确的描述,已经表明将这样的特征、结构或特性结合到其它实施例中是在本领域技术人员的知识范围内的。

在说明书及后续的权利要求书中使用了某些词汇来指称特定模块、组件或部件,本领域普通技术的员应可理解,技术使用者或制造商可以不同的名词或术语来称呼同一个模块、组件或部件。本说明书及后续的权利要求书并不以名称的差异来作为区分模块、组件或部件的方式,而是以模块、组件或部件在功能上的差异来做为区分的准则。在通篇说明书及后续的权利要求项中所提及的“包括”和“包含”为一开放式的用语,故应解释成“包含但不限定于”。以外,“连接”一词在此包含任何直接及间接的电性连接手段。间接的电性连接手段包括通过其它装置进行连接。

此外,在下面的说明书和权利要求中,将提及许多术语,其应当被定义为具有以下含义。单数形式“一”和“所述”包括复数指代物,除非上下文另外明确规定。“可选的”或“可选地”表示随后描述的事件或情况可能发生或不发生,并且该描述包括事件发生的情况以及事件不发生的情况。

在本发明的一个实施例中,本发明的总体架构如图1所示一种面向宽度优先搜索算法的加速装置1,包括:控制模块(controlunit)11、执行模块12、访存复用模块13(requestmultiplexer)、调度模块14(dispatch)和内存模块15(drammemory),其中,执行模块12又包括多个执行单元121(processingelement,pe),其中,该控制模块(controlunit)11控制与管理该加速装置1中各个模块(执行模块12、访存复用模块13、调度模块14或内存模块15)。其中,执行单元模块12结合bfs算法的内在特征,设计了定制化的多级流水线,用于执行主要的遍历搜索任务;访存复用模块13,按照一定优先级处理执行单元121各级流水的访存请求;调度模块14,用于将该内存模块15的响应数据分发到空闲的执行单元121;该内存模块15,用于存储图数据和搜索结果。

在图1、图3和图4中,该控制模块11作为控制单元对该加速装置1的各模块进行管理,具体包括执行环境的初始化,将图数据集划分并分配给不同的执行单元121处理;控制各执行单元间同步,使每一层遍历结束后负责执行单元间的同步。

该执行单元121根据bfs算法的访存类型,进行了定制化的多级流水线设计,具体划分为探视检查流水线1211(visitationcheck),邻居集合流水线1212(neighborgathering)以及级别更新流水线(levelupdate)三级流水。各级流水都会持续地从fifo缓存队列中读取上级流水的内存响应,同时向内存控制器发出新的访存请求,实现高并发的流水机制。

该探视检查流水线1211将依次检查子集中每一个顶点v的访问状态。如果顶点v没有访问过,该探视检查流水线1211向该内存模块15发起访存请求,获取该顶点邻居的地址信息。该邻居集合流水线1212获取上一级响应的邻居信息后,根据地址信息,持续不断的向该内存模块15发起访存请求,获取v所有邻居顶点的id。该级别更新流水线依次检查上述邻居顶点在当前层队列中的访问状态,判断顶点v是否为下一层待处理的活跃顶点。该控制模块11根据下一层活跃顶点的数目决定是否需要开始新一轮的宽度优先搜索。

该访存复用模块13的主要功能是将执行单元121各级流水的访存请求复用到一个内存控制器151上,充分利用内存带宽,保证内存控制器151每一个时钟周期都在进行读或写操作,提高内存带宽的利用率。

该调度模块14获得该内存模块15的响应数据后,根据其内部的标识tag信息,随后将响应数据分配到空闲执行单元121的对应流水级。

在图2中,本发明的该加速装置1可以用于一种图处理器gpu。

在图4中,本发明揭示一种面向宽度优先搜索算法的加速方法,包括如下:

步骤s100,从主机(host)将图数据g=(v,e)写入加速器的内存模块,其中顶点集合为v以及边集合为e。

步骤s200,假设pe的数目为n,在初始化阶段,控制模块首先随机选择一个顶点s作为遍历的源顶点,并将s设为当前层的活跃顶点;然后控制模块根据执行单元(pe)121的数目,把顶点集合v划分为n份互不相交的子集vi分配给不同的执行单元(pe)121,同时向执行单元(pe)121发送激活信息,每个执行单元(pe)121将会处理其对应分配的子集vi,其中,n,s,i,j均为正整数。

步骤s300,根据bfs算法的特点,执行单元(pe)121上设计了三级流水,如图2所示。当执行单元(pe)121接受到控制模块11的激活信号后,首先由探视检查(visitationcheck)流水线1211检查子集vi中每一个顶点的访问状态。如果发现未访问过的顶点vj,探视检查(visitationcheck)流水线1211将向内存发起vj邻居信息的访存请求,并将访存请求缓存于fifo队列中;如果没发现,则持续检查后续的顶点,直到子集vi的每一个顶点都检查完毕。

步骤s400,邻居集合(neighborgathering)流水线1212获得探视检查(visitationcheck)流水线1211请求的邻居信息后,具体为顶点vj所有邻居顶点在内存中的地址信息,会持续不断的向该内存模块15发起邻居顶点id的访存请求,这些访存请求也将先缓存于该流水级的fifo队列中。

步骤s500,级别更新(levelupdate)流水线1213获取了vj的邻居顶点识别地址(id)后,会依次检查是否有邻居顶点属于当前层的活跃顶点。如果存在,则更新顶点vj的父亲信息和距离信息,并将vj设置为下一层的活跃顶点。

步骤s600,执行单元121的三级流水(步骤s300~s500)在工作过程中,会持续不断的向该内存模块15发起并发的访存请求(存储于图3左侧的3个fifo队列中),该访存复用模块13则负责将执行单元的各级流水的访存请求复用到一个内存上,保证该内存每一个时钟周期都在进行读或写操作。该访存复用模块13采用一种基于优先级的算法来处理各级流水中fifo队列的访存请求。级别更新(levelupdate)流水线1213的访存请求拥有最高优先级,而探视检查(visitationcheck)流水线1211的访存请求优先级最低,这样做的目的是避免各级流水中fifo队列里的数据积压。

步骤s700,该访存复用模块13在处理过程中给每一条请求都会分配一个标识(tag)信息,标明该访存请求所属的执行单元识别地址(id),以及其目的流水级。当这些请求得到内存的响应后,该调度模块14会基于该标识信息(tag),将响应数据分发到空闲执行单元的对应流水级,以进一步提高算法执行效率。

步骤s800,当执行单元结束对子集中顶点的遍历搜索后(步骤s300~s700),向该控制模块11发送结束信息,并且告知该控制模块11下一层是否有待处理的活跃顶点。假如下一层有待处理的活跃顶点,该控制模块11将向执行单元发送激活信号,开始新一层的bfs遍历。

步骤s900,bfs算法的最终遍历结果将存储于该内存模块15,并经由主机接口(hostinterface)写回主机。

本发明的另一实施例中,进一步包括一种存储介质,用于存储执行图4所示方法的计算机处理程序。

在本发明的具体实施例中,涉及的计算机程序包括适合于当计算机程序在计算机上运行时执行根据本发明的方法的所有步骤的计算机程序代码部件。优选地,在计算机可读介质上体现计算机程序。

本发明的有益效果在于:通过匹配图计算特征的定制化流水线设计,支持多执行单元和执行单元内部多级流水线的高并发处理;通过对访存请求的优先级划分,提高外部存储的带宽利用率,实现高性能的宽度优先搜索算法。

当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1