CN112950451A - 一种基于GPU的极大k-truss发现算法 - Google Patents
一种基于GPU的极大k-truss发现算法 Download PDFInfo
- Publication number
- CN112950451A CN112950451A CN202110325537.5A CN202110325537A CN112950451A CN 112950451 A CN112950451 A CN 112950451A CN 202110325537 A CN202110325537 A CN 202110325537A CN 112950451 A CN112950451 A CN 112950451A
- Authority
- CN
- China
- Prior art keywords
- tress
- vertex
- graph
- maximum
- gpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种基于GPU的极大k‑truss发现算法,步骤如下:(1)首先输入图G、k,求出图G中的k‑core,并将求得k‑core复制到显存中,初始化一个集合D为空集;(2)在显卡中使用多个线程进行处理;(3)在每个流多处理器中,对顶点v执行操作;(4)对于顶点v的邻居复制到当前流多处理器对应的共享内存中;(5)对于顶点中的每个邻居n,分配一个线程t进行处理;(6)当v的所有邻居处理完毕时,将步骤(5)中的寄存器的值求和。本发明采用上述的一种基于GPU的极大k‑truss发现算法,充分利用了CPU的并行性,运行速度快,并且,运行成本低。
Description
技术领域
本发明涉及数据挖掘技术领域,尤其是涉及一种基于GPU的极大k-truss发现算法。
背景技术
Truss作为一种稠密子图结构,与另一种常用的稠密子图结构团相比,truss对子图的限制更小,因此更容易发掘出图中隐藏的信息。Truss是一种非常常用的子图结构,目前已经在图数据挖掘等领域得到了广泛的应用。
极大的k-truss是图中满足k-truss结构的联系最紧密的字图,这个字图的的k值代表了原始数据中各个顶点的最大联系程度,这个字图的大小则代表了这个社群的大小。
在工业上,极大k-truss有很多的应用。首先,通过找到极大的k-truss可以确定原始图数据中顶点间联系的最大紧密程度,这是图的一个很重要的性质。其次,通过k-truss的值,我们可以限制图中其他字图结构的上限和或者下限,可以用于加速其他类型的社区发现算法。
目前,较为广泛使用的方法是单机单线程的计算方法,该算法首先计算每条边上的support值,之后迭代删除最小的support值。这样最后留下的一个k-truss就是图中的极大k-turss。这种方法的好处是效率高,但是计算机能够处理的图的最大大小受限于CPU单核心的处理能力,故不适合在需要处理大图的工业场景中应用。另一种方法是使用现有的图分布式处理引擎,这种方法的好处是可以使用简单的接口对图进行分布式处理,但是由于分布式引擎自身和计算机网络带来的消耗,效率会比较低。同时,由于分布式引擎提供的接口不够灵活,限制了算法的实现,无法选择效率更高的算法。
随着现实世界中图数据的增大,单线程的算法已经无法满足实际生产需要。然而,分布式算法会在通信以及工作协调上产生巨大的开销。并且,由于图数据的特点,无法通过简单的方法对图数据进行相对完美的分割,这进一步加大了分布式系统的开销。据研究,在很多情况下,分布式算法的计算速度比不上单机单线程算法的计算速度。目前的服务器通常具有几十个CPU核心,并且,随着GPU加速的普及,越来越多的应用可以使用GPU进行加速。GPU具有极大的并行度,高端的GPU可以同时执行上千个线,而且用更大的内存和内存带宽。并且,现有服务器可以配备数个甚至数十个GPU,因此,利用GPU对算法进行加速是一种可行的选择。
发明内容
本发明的目的是提供一种基于GPU的极大k-truss发现算法,充分利用了CPU的并行性,运行速度快,并且,运行成本低。
为实现上述目的,本发明提供了一种基于GPU的极大k-truss发现算法,步骤如下:
(1)首先输入图G、k,求出图G中的k-core,并将求得k-core复制到显存中,初始化一个集合D为空集;
(2)在显卡中使用多个线程进行处理,显卡中的流多处理器(streamingmultiprocessor)从0开始连续编码;对显卡中的流多处理器s,顺序取得编号为s,2s,3s...的顶点,直到所有对应定顶点处理完毕;
(3)在每个流多处理器中,对顶点v执行如下操作;
(4)对于顶点v的邻居复制到当前流多处理器对应的共享内存中;
(5)对于顶点中的每个邻居n,分配一个线程t进行如下处理:
a、将n的邻居复制到当前进程对应的共享内存中,并初始化一个变量r=0;
b、检测n与v相同邻居的数量,将这个数量的值存储在r中;
(6)当v的所有邻居处理完毕时,将步骤(5)中的寄存器的值求和,这个值为顶点v的support;如果v的support小于k,将顶点v加入到D中;
(7)在CPU中开启多个线程,每次每个线程从D中取得一个顶点d,进行如下操作:
a、删除顶点d和对应的边,并将删除后的结果同步到GPU的显存中;
b、对d的每个邻居,利用GPU计算他的support值,步骤与(5)相同;如果求得的support值小于k,将k加入到D中;
(8)重复步骤(7),直到d为空;
(9)若最后的图中有顶点剩余,返回删除后的图,否则返回一个空的图。
优选的,基于k-core的过滤算法步骤如下:
(1)在原图上求解k-core,找到图中存在的且使k值最大的k-core;
(2)在步骤(1)得到的k-core中求解极大k-truss,得到k值为R;
(3)令L=0、pre-truss为空;
(4)令mid=(L+R)/2,若pre-turss为空,求解原图中的mid-truss;
若pre-truss不为空,在pre-truss上求解mid-truss;
(5)如果不存在mid-truss,令R=mid,返回步骤(3);
如果存在mid-truss,令L=mid,pre-truss为当前求得的k-truss;
若L>=R,返回L,否则跳转到步骤(4)继续执行。
优选的,最大k-core的计算步骤如下:
S1、设k的初始值为2,初始化集合D为空集;
S2、统计图中所有度小于k的顶点,将其加入到集合D中;
S3、对于集合D中的元素,删掉顶点和对应的边,并统计被删除顶点的邻居顶点的度,如过其邻居顶点的度小于k,将该邻居顶点加入到D中;
首先,对每个图中的顶点,分配一个互斥锁;在个线程删除顶点时,需要得到在该顶点上的互斥锁;在删除边时,需要得到在边的两个不同顶点上的互斥锁;
S4、重复步骤S3,直到D为空;
S5、如果剩余图中不存在顶点,返回k-1;否则令k=k+1,跳转步骤S2。
优选的,边的support定义为:给定一个图G,边(u,v)的支持为在图G中,包含该边的三角形的数量;
k-truss定义为:给定一个图G和一个大于2的正整数k,G的k-truss为G中的满足对G中的任意边(u,v),边的support大于k的极大字图;
极大k-truss定义为:若K为G中的一个k-truss,且k为最大值。
因此,本发明采用上述一种基于GPU的极大k-truss发现算法,充分利用现有计算机的硬件,增加基于k-truss的最大字图发现的速度。
本发明的算法相比于其他的算法,具有如下优点:
(1)单线程算法受限于单个CPU核心的计算能力,而随着技术的发展,单个CPU的计算能力已经趋于瓶颈,发展缓慢。并且,如果想要提升CPU的单核计算能力,成本高且效果不明显,无法满足飞速增大的现实数据。本发明的算法充分利用了CPU的并行性,避免了单线程算法的性能瓶颈。
(2)随着工业界对数据处理需求的发展,出现了很多基于分布式结构的图计算系统。然而基于分布式结构的图计算系统主要有两个缺点。a、分布式系统需要使用网络进行通信,网络通信高延迟低带宽,造成了很大的开销。b、分布式系统需要对图数据进行分割,由于图数据存在二维的空间结构,顶点和顶点之间的联系很复杂,无法进行完美的分割。本发明的算法基于单机进行计算,避免了分布式系统带来的巨大开销。
同时,本发明的算法利用了GPU可以进行大量并行计算的特性。目前,高端的GPU可以同时运行数千个线程。而GPU更加容易进行水平扩展,普通的商用服务器可以支持至少4-8个显卡,而专为GPU加速设计的服务器可以支持十几个显卡甚至更多。这样可以带来数万甚至数十万的并行度,极大的增加单机的计算速度和可以处理图大小的上限。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1是图的存储结构示意图;
图2是显存中三角形计数操作图。
具体实施方式
以下通过附图和实施例对本发明的技术方案作进一步说明。
本发明的算法可以在具有图结构的数据上寻找到一个最大的稠密子图,k-truss要求图中每条边至少属于(k-2)个三角形,相比于另一种常用的社群结构k-clique来说,k-truss对子图稠密度的要求更低。,因此可以在实际应用中发现更大的子图。极大的k-turss为原图中最大的k-truss子图,代表了该图中最大的联系紧密的社群。基于k-truss的社群发现算法工业中又很大的用途,如推荐算法以及金融行业的风向控制。
实施例
一、基于GPU的极大k-truss发现算法
一种基于GPU的极大k-truss发现算法,步骤如下:
由于k-truss的计算量较大,故在本过程中使用GPU进行计算。
1、首输入图G、k,先求出图G中的k-core,并将求得kcore复制到显存中,初始化一个集合D为空集;
2、在显卡中使用多个线程进行处理,显卡中的流多处理器(streamingmultiprocessor)从0开始连续编码。对显卡中的流多处理器s,顺序取得编号为s,2s,3s...的顶点,直到所有对应定顶点处理完毕。
3、在每个流多处理器中,对顶点v执行如下操作;
4、对于顶点v的邻居复制到当前流多处理器对应的共享内存中;
5、对于顶点中的每个邻居n,分配一个线程t进行如下处理:
a、将n的邻居复制到当前进程对应的共享内存中,并初始化一个变量r=0
b、检测n与v相同邻居的数量,将这个数量的值存储在r中;
6、当v的所有邻居处理完毕时,将步骤5中的寄存器的值求和,这个值为顶点v的support。如果v的support小于k,将顶点v加入到D中。
7、在CPU中开启多个线程,每次每个线程从D中取得一个顶点d,进行如下操作:
a、删除顶点d和对应的边,并将删除后的结果同步到GPU的显存中。
b、对d的每个邻居,利用GPU计算他的support值,步骤与5相同。如果求得的support值小于k,将k加入到D中。
8、重复步骤7,直到d为空;
9、若最后的图中有顶点剩余,返回删除后的图,否则返回一个空的图。二、基于k-core的过滤算法
基于k-core的过滤算法,步骤如下:
(1)在原图上求解kcore,找到图中存在的且使k值最大的kcore;
(2)在步骤(1)得到的k-core中求解极大k-truss,得到k值为R;
(3)令L=0、pre-truss为空;
(4)令mid=(L+R)/2,若pre-turss为空,求解原图中的mid-truss;
若pre-truss不为空,在pre-truss上求解mid-truss;
(5)如果不存在mid-truss,令R=mid,返回步骤(3);
如果存在mid-truss,令L=mid,pre-truss为当前求得得k-truss;
若L>=R,返回L,否则跳转到步骤(4)继续执行。
三、max-k-core的计算
max-k-core的计算步骤如下:
由于计算k-core的计算量较小,并且时间复杂度较低,可以直接使用CPU进行多线程状态下的计算。
S1、设k的初始值为2,初始化集合D为空集;
S2、统计图中所有度小于k的顶点,将其加入到集合D中;
S3、对于集合D中的元素,删掉顶点和对应的边,并统计被删除顶点的邻居顶点的度,如过其邻居顶点的度小于k,将该邻居顶点加入到D中。在该步中,可以使用CPU进行并行计算。首先,对每个图中的顶点,分配一个互斥锁。在个线程删除顶点时,需要得到在该顶点上的互斥锁。在删除边时,需要得到在边的两个不同顶点上的互斥锁,这样保证了在多线程并行执行时的正确性。在给不同的线程分配任务时,可以每次给一个线程分配多个顶点,如64个,避免不同线程频繁访问集合D造成性能瓶颈。
S4、重复步骤S3,直到D为空;
S5、如果剩余图中不存在顶点,返回k-1;否则令k=k+1,跳转步骤S2。
四、基本定义
边的support:给定一个图G,边(u,v)的支持为在图G中,包含该边的三角形的数量;
k-truss:给定一个图G和一个大于2的正整数k,G的k-truss为G中的满足对G中的任意边(u,v),边的support大于k的极大字图;
极大k-truss:若K为G中的一个k-truss,且k为最大值。
本发明可以在单机上运行顶点和边的数量更多的图,避免了CPU单核性能带来的性能瓶颈。同时,相比于分布式算法,本发明提出的方法避免了分布式系统网络通信带来的性能损耗,增加了系统的效率。并且,可以在单台计算机上处理更大的图,从而适应现代工业界的需求。该方法可以用于互联网行业中用户的社群信息挖掘,并且可以通过获得的信息进行广告推荐等内容,也可以用于金融行业中的风险控制。同时,该方法求得的k-truss值可以作为其他社群信息的基础,加速图上其他类型社群的查询。
因此,本发明采用上述一种基于GPU的极大k-truss发现算法,充分利用了CPU的并行性,运行速度快,并且,运行成本低。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。
Claims (4)
1.一种基于GPU的极大k-truss发现算法,其特征在于,步骤如下:
(1)首先输入图G、k,求出图G中的k-core,并将求得k-core复制到显存中,初始化一个集合D为空集;
(2)在显卡中使用多个线程进行处理,显卡中的流多处理器(streamingmultiprocessor)从0开始连续编码;对显卡中的流多处理器s,顺序取得编号为s,2s,3s...的顶点,直到所有对应定顶点处理完毕;
(3)在每个流多处理器中,对顶点v执行如下操作;
(4)对于顶点v的邻居复制到当前流多处理器对应的共享内存中;
(5)对于顶点中的每个邻居n,分配一个线程t进行如下处理:
a、将n的邻居复制到当前进程对应的共享内存中,并初始化一个变量r=0;
b、检测n与v相同邻居的数量,将这个数量的值存储在r中;
(6)当v的所有邻居处理完毕时,将步骤(5)中的寄存器的值求和,这个值为顶点v的support;如果v的support小于k,将顶点v加入到D中;
(7)在CPU中开启多个线程,每次每个线程从D中取得一个顶点d,进行如下操作:
a、删除顶点d和对应的边,并将删除后的结果同步到GPU的显存中;
b、对d的每个邻居,利用GPU计算他的support值,步骤与(5)相同;如果求得的support值小于k,将k加入到D中;
(8)重复步骤(7),直到d为空;
(9)若最后的图中有顶点剩余,返回删除后的图,否则返回一个空的图。
2.根据权利要求1所述的一种基于GPU的极大k-truss发现算法,其特征在于,基于k-core的过滤算法步骤如下:
(1)在原图上求解k-core,找到图中存在的且使k值最大的k-core;
(2)在步骤(1)得到的k-core中求解极大k-truss,得到k值为R;
(3)令L=0、pre-truss为空;
(4)令mid=(L+R)/2,若pre-turss为空,求解原图中的mid-truss;
若pre-truss不为空,在pre-truss上求解mid-truss;
(5)如果不存在mid-truss,令R=mid,返回步骤(3);
如果存在mid-truss,令L=mid,pre-truss为当前求得的k-truss;
若L>=R,返回L,否则跳转到步骤(4)继续执行。
3.根据权利要求2所述的一种基于GPU的极大k-truss发现算法,其特征在于,最大k-core的计算步骤如下:
S1、设k的初始值为2,初始化集合D为空集;
S2、统计图中所有度小于k的顶点,将其加入到集合D中;
S3、对于集合D中的元素,删掉顶点和对应的边,并统计被删除顶点的邻居顶点的度,如过其邻居顶点的度小于k,将该邻居顶点加入到D中;
首先,对每个图中的顶点,分配一个互斥锁;在个线程删除顶点时,需要得到在该顶点上的互斥锁;在删除边时,需要得到在边的两个不同顶点上的互斥锁;
S4、重复步骤S3,直到D为空;
S5、如果剩余图中不存在顶点,返回k-1;否则令k=k+1,跳转步骤S2。
4.根据权利要求3所述的一种基于GPU的极大k-truss发现算法,其特征在于:边的support定义为:给定一个图G,边(u,v)的支持为在图G中,包含该边的三角形的数量;
k-truss定义为:给定一个图G和一个大于2的正整数k,G的k-truss为G中的满足对G中的任意边(u,v),边的support大于k的极大字图;
极大k-truss定义为:若K为G中的一个k-truss,且k为最大值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110325537.5A CN112950451B (zh) | 2021-03-26 | 2021-03-26 | 一种基于GPU的极大k-truss发现算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110325537.5A CN112950451B (zh) | 2021-03-26 | 2021-03-26 | 一种基于GPU的极大k-truss发现算法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112950451A true CN112950451A (zh) | 2021-06-11 |
CN112950451B CN112950451B (zh) | 2022-03-11 |
Family
ID=76228206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110325537.5A Active CN112950451B (zh) | 2021-03-26 | 2021-03-26 | 一种基于GPU的极大k-truss发现算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112950451B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113590887A (zh) * | 2021-07-19 | 2021-11-02 | 之江实验室 | 基于Quegel分布式图计算系统的K-truss分解方法 |
CN113704309A (zh) * | 2021-09-02 | 2021-11-26 | 湖南大学 | 图数据处理方法、装置、计算机设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943882A (zh) * | 2017-11-15 | 2018-04-20 | 南京邮电大学 | 基于边扩散性K‑truss分解方法的网络重要节点识别方法 |
-
2021
- 2021-03-26 CN CN202110325537.5A patent/CN112950451B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943882A (zh) * | 2017-11-15 | 2018-04-20 | 南京邮电大学 | 基于边扩散性K‑truss分解方法的网络重要节点识别方法 |
Non-Patent Citations (2)
Title |
---|
MARK BLANCO等: "Exploration of Fine-Grained Parallelism for Load Balancing Eager K-truss on GPU and CPU", 《2019 IEEE HIGH PERFORMANCE EXTREME COMPUTING CONFERENCE (HPEC)》 * |
朱炜杰: "基于k-core和k-truss模型的社交网络关键边检测方法研究", 《中国优秀博硕士学位论文全文数据库(硕士)》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113590887A (zh) * | 2021-07-19 | 2021-11-02 | 之江实验室 | 基于Quegel分布式图计算系统的K-truss分解方法 |
CN113704309A (zh) * | 2021-09-02 | 2021-11-26 | 湖南大学 | 图数据处理方法、装置、计算机设备和存储介质 |
CN113704309B (zh) * | 2021-09-02 | 2024-01-26 | 湖南大学 | 图数据处理方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112950451B (zh) | 2022-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110908667B (zh) | 神经网络联合编译的方法、装置和电子设备 | |
WO2021057746A1 (zh) | 神经网络处理方法、装置、计算机设备及存储介质 | |
CN106991011B (zh) | 基于cpu多线程与gpu多粒度并行及协同优化的方法 | |
Budden et al. | Deep tensor convolution on multicores | |
CN112950451B (zh) | 一种基于GPU的极大k-truss发现算法 | |
CN106095588B (zh) | 基于gpgpu平台的cdvs提取过程加速方法 | |
CN112650590A (zh) | 任务的处理方法、装置及系统、分配方法和装置 | |
CN112162854A (zh) | 一种cpu-gpu间计算任务调度方法、系统及介质 | |
CN113449839A (zh) | 一种分布式训练方法、梯度通信方法、装置以及计算设备 | |
US20220343146A1 (en) | Method and system for temporal graph neural network acceleration | |
Souravlas et al. | Hybrid CPU-GPU community detection in weighted networks | |
CN111985597A (zh) | 模型压缩方法及装置 | |
CN115860061A (zh) | 图神经网络优化方法和图神经网络推理系统 | |
CN106484532B (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
HewaNadungodage et al. | GPU-accelerated outlier detection for continuous data streams | |
CN113761293A (zh) | 图数据强连通分量挖掘方法、装置、设备及存储介质 | |
Kharinov et al. | Object detection in color image | |
CN111028092A (zh) | 基于Louvain算法的社区发现方法、计算机设备及其可读存储介质 | |
CN108009099B (zh) | 一种应用于K-Mean聚类算法中的加速方法及其装置 | |
Bengre et al. | A learning-based scheduler for high volume processing in data warehouse using graph neural networks | |
AlMasri | Accelerating graph pattern mining algorithms on modern graphics processing units | |
CN113726342B (zh) | 面向大规模图迭代计算的分段差值压缩与惰性解压方法 | |
CN115482147B (zh) | 基于压缩数据直接计算的高效并行图处理方法和系统 | |
US20240005127A1 (en) | Smart memory extension to processors | |
US20240104790A1 (en) | Optimizing grid-based compute graphs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |