CN114117150A - 一种基于gpu的图分析算法通用优化方法 - Google Patents
一种基于gpu的图分析算法通用优化方法 Download PDFInfo
- Publication number
- CN114117150A CN114117150A CN202111459716.4A CN202111459716A CN114117150A CN 114117150 A CN114117150 A CN 114117150A CN 202111459716 A CN202111459716 A CN 202111459716A CN 114117150 A CN114117150 A CN 114117150A
- Authority
- CN
- China
- Prior art keywords
- data
- graph
- gpu
- vertex
- hot
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及图计算技术领域,是一种基于GPU的图分析通用优化方法及装置,解决了GPU并行图分析算法的性能瓶颈问题。本发明的方法包括:数据集预处理操作:去除图数据的冗余部分,并统一数据集格式;数据分块重排序操作:将数据集分块后,对块内顶点按照出度进行重排序,并将重排序后的图以CSR压缩格式表示;GPU共享内存缓存热顶点操作:利用重排序后的热顶点分布方式,将热顶点的属性数据缓存在GPU端的共享内存中。本方法可以增强图数据的空间局部性,实现图的热顶点共享同一缓存块并驻留在GPU端,避免了热顶点在内存不足时被频繁驱逐造成的性能损失,提高了图分析程序的运行效率。
Description
技术领域
本发明涉及图计算技术领域,是一种面向CPU-GPU异构存储系统的图分析通用优化方法及装置。具体涉及对图数据集进行重排序操作以增强数据的空间局部性,而后通过GPU共享内存缓存图的热顶点数据以提升图算法的执行效率。
背景技术
作为计算机科学中的一种重要的数据结构,图可以利用抽象的方式建模各类场景中的复杂关系,因此目前图处理与分析技术被广泛应用于社会生活的诸多领域中,例如计算机生物学、社交网络分析、神经网络等领域。
为了应对众多领域中的大型图分析需求,研究人员致力于开发用于图处理操作的高效率并行图分析算法。由于图形处理单元GPU具有良好的可编程性以及高带宽、高吞吐量等特性,其已成为加速图处理与分析的重要平台。与基于CPU的最新图处理系统相比,基于GPU的图处理系统可以将程序性能提高多个数量级。
虽然GPU在高效运行图分析算法方面展现出明显的优势,但是面对不断增长的图形大小,以及图数据分布的高度偏斜特性,GPU在处理大型图时仍面临巨大挑战。在许多图应用程序中进行分析的现实世界图,诸如交通路线网络图、社交关系网络图等,往往具有数十到数百GB大小,远远超出了当前GPU主流的内存大小,并且对这些图进行分析时GPU呈现出了高度不规则的内存访问模式。因此当输入的图数据大小超过GPU内存容量时,现有的基于GPU的图系统将无法处理或者处理效率急剧下降。
除了大型图带来的挑战外,现实世界图数据集的另一个特性是顶点的连接数遵循偏态幂律分布,即大部分的节点只有较少的连接,而少数节点则有大量的连接。高度偏斜的分布特性决定了具有较多连接数的部分顶点在内存访问模式上表现出高重用性,这种顶点被称为图的热顶点。由于图的热顶点数据在内存中呈现出稀疏分布的特性,因此在读入GPU显存中时往往和冷顶点数据共享同一缓存块,不仅不能充分利用有限的GPU内存资源,还会造成热顶点数据在CPU和GPU之间的频繁置换,从而在GPU端造成大量的页面缺失错误,导致程序性能急剧下降。
为了应对GPU在进行图分析时面临的上述问题,本文提出了一种面向GPU的图分析通用优化算法,用于提升图数据集在GPU端进行分析时的运行效率。
发明内容
本发明针对目前GPU处理大型图数据集的性能瓶颈问题,结合CPU端的图数据重排序相关算法,公开了一种基于GPU进行图分析的通用优化方法。该方法主要分为两个设计模块,一方面可以利用图数据重排序思想进行CPU、GPU之间的数据传输模式的优化;另一方面利用GPU高速共享内存实现热顶点数据的驻留,从而避免了由于数据抖动造成的性能下降问题。
本发明采用的技术方案实现流程图如图1所示,主要包含三个部分:(1)数据集预处理阶段:该步骤将原始图数据集处理为可被图分析程序执行的格式;(2)数据重排序阶段:该步骤通过对热顶点进行重命名、重排序,从而使热数据共享同一缓存块;(3)热顶点缓存阶段:该步骤将热顶点的属性数据缓存至GPU共享内存中,从而防止热数据频繁缺失造成的程序执行性能下降问题。本文发明具体包括以下步骤:
1.数据集预处理阶段
原始的图数据集由两部分组成:(1)图的边数据,由构成边的两个图顶点组成,通常表现为(source_node,dest_node)形式;(2)非图数据部分,用于描述该图来源、版权等非图数据内容。在执行图分析应用之前,本方法需要进行数据集格式的统一,避免后续进行数据分析时执行重复的处理操作。在对数据集进行预处理时,需要去除数据集中的非图数据部分,最后将待分析的图数据集保存到CSV文件。
2.数据重排序阶段
本发明采用了一种轻量级的基于热顶点的图数据重排序技术。该重排序技术基于图顶点的出度对图数据进行重排序操作,以顶点的出度大小作为判断是否是热顶点的依据。通过将稀疏分布的热顶点数据在CPU内存空间中集中存储,在读入GPU时共享同一缓存块,进而提升GPU的内存利用率,减少GPU端发生数据未命中的次数。
在重排序方法的设计中,需要满足两个方面的需求。一方面是通过顶点重命名使热顶点数据集中存储,从而读取数据时共享同一GPU缓存块;另一方面需要尽可能限制重排序的实施范围,从而保留图数据原本的时间空间缓存局部性。为了平衡这两大需求,本发明采用了一种基于分块思想的重排序方法,通过将数据集分成更小的数据块,并在数据块内部进行顶点重排序,从而满足上述两个方面的需求。
本发明中图数据重排序方法的原理如图2所示,具体操作包括以下步骤:
Step1:构建图的邻接表。读取图数据文件,对于每次读入的一行边数据,将第一个节点视为边的起始节点,第二个节点作为边的终点,并将数据插入起始节点的邻接表数组中。整个图结构的邻接表以二维数组的形式表示。
Step2:图数据按需分块。本方法提供1、2、4、.......、512个分块数目的选择,每个数据块内的顶点个数为总顶点数/分块数。应用程序可根据算法需求及数据集大小选择合适的分块大小,数据块越小,对图的原始缓存局部性保存越完整;数据块越大,定位热点数据越精准,但会破坏图的原始缓存结构。默认设置数据集分块数为32,该默认值根据多次性能对比测试结果得出。
Step3:块内顶点排序。在每个数据块内对顶点按照其出度从大到小排序,对每个数据块进行排序后,出度较大的顶点存储在数据块的首部,出度较小的顶点存储在数据块的尾部。
Step4:顶点重命名。将数据集的每个顶点重命名为该顶点在整个数组中位置的索引,即将当前顶点位于数组的位置设置为该顶点的新ID。若该顶点位于数组的第一位,则该顶点的新ID为1。
Step5:保存顶点映射关系。在对顶点按照出度大小进行排序后,将顶点的旧ID与新ID的映射关系保存在map数组中,以便边数组的处理。例如,在将ID为node_a的顶点重命名为node_b时,需要将该变化存储在map数组中,即map[node_a]=node_b。
Step6:边数组更新。在对数据集的每个顶点进行重命名后,根据map数组保存的顶点ID映射关系,将每个顶点的邻接表中存储的所有顶点更新为该顶点的新ID。
Step7:图数据压缩。为了减少图数据集占用GPU内存大小,本发明采用CSR压缩格式对图数据进行压缩,并生成offset数组以及edge数组,CSR存储结构如图3所示。edge数组用来保存所有顶点的邻接表中存储的邻居节点ID;offset数组存储该顶点的邻接表数据在edge数组中的起始位置。对于给定的顶点id,可以通过edge[offset[id]:offset[id+1]]来访问其邻居节点。
3.热顶点缓存阶段
在设计GPU缓存优化策略时,本发明重点关注具备高重用性的顶点,即热顶点数据的缓存模式,并且利用GPU的共享内存进行热顶点数据的缓存。
通过对不同图算法在运行时的内存访问方式进行分析,本文将热数据定位在热顶点的属性数据中,图数据重用模式分析如图4所示。顶点的属性数据指代的是例如出度,访问标识、移除标识等描述该顶点特性的数据,具体需要何种属性数据则根据图算法的分析要求进行指定。相比于offset数组与edge数组的有限重用次数,图算法在顶点的属性数组中表现出了高重用性,因此本方法将热顶点的属性数据作为缓存的目标数据。
GPU共享内存与L1缓存共享同一块内存,因此共享内存的访问速率相比于GPU全局内存可提升数倍。本发明利用GPU共享内存具备的高带宽优势,将热顶点的属性数据缓存在GPU的共享内存中。因此在频繁访问热顶点数据时,利用共享内存的带宽优势可以有效提升应用程序的运行效率。
GPU每个计算单元SM(Streaming Multiprocessor)都具备私有的共享内存,不同SM的共享内存之间不能直接进行通信,并且大小通常只有48KB。本发明结合重排序时的热顶点分布方式,对重排序步骤中定位的热顶点的属性数据进行重用。通过将不同的热顶点属性数据映射到不同的计算单元SM的共享内存中,可以更加充分地利用有限的共享内存资源,并且避免了不同计算单元中的共享内存进行同步数据操作带来的性能开销。
基于GPU共享内存的热顶点数据缓存模式设计方案如图5所示,具体包括以下步骤:
Step1:GPU端为热顶点数据分配缓存空间。在每个计算单元SM的共享内存中分别定义一个共享内存数组,该数组用于缓存计算过程中的热顶点属性数据的中间结果。共享内存数组的长度取决于共享内存的大小与存储数据的类型,即数组长度=单个SM中的共享内存大小/数据类型长度。
Step2:执行图分析程序。调用GPU实现图分析程序的kernel函数,根据算法的原理进行边数组edge或顶点偏移量数组offset的访问,并对顶点属性数据执行相应的计算操作,同时将属性数据的计算结果写入数组对应位置中。例如图的BFS算法中,顶点的属性数组存储的是顶点的访问标识,当线程访问该顶点时,则需将属性数组相应位置的访问标识更新为True。
Step3:属性数据缓存有效性判断。在涉及顶点属性数组的更新操作时,例如需要更新出度、访问标识、移除标志等属性数据时,需要判断该顶点属性数据的缓存有效性。此时需要获取访问该顶点的线程ID,并判断线程ID是否位于共享内存数组的存储范围内,从而确定该顶点是否位于缓存区域。
Step4:更新共享内存的缓存数据。在图分析应用程序执行过程中,如果需要更新相关顶点的属性数据,并且属性数据位于共享内存的缓存范围中,此时直接更新共享内存数组对应位置的属性缓存数据。
Step5:更新全局内存的数据。在写入顶点属性的中间计算结果时,如果相关顶点的属性数据未在共享内存的缓存范围内,则直接更新存储在GPU全局内存中的属性数组对应位置的数据。
Step6:线程同步处理。为确保所有GPU线程执行完毕后正常退出,本方法在执行缓存数据写回操作前设置了线程同步点,从而避免某些线程异常退出导致数据计算错误。
Step7:将缓存数据写回全局内存。在所有GPU线程全部执行完毕后,需要将缓存在共享内存中的数据写回存储在全局内存中的属性数组。为了防止对属性数组同一个位置的多个写操作发生冲突,本方法使用原子操作对数据进行更新。
Step8:统计并分析结果。GPU kernel函数执行完毕后,此时属性数组中存储的数据即为图分析程序的计算结果,例如图顶点的访问记录、顶点的总连接数等。对于不同图分析应用程序,可在CPU端直接访问属性数组并对计算结果进行统计处理。
附图说明
图1:图分析优化方法实现流程图
图2:分块重排序方法原理示意图
图3:CSR格式存储结构示意图
图4:图数据重用模式分析图
图5:共享内存的缓存模式设计图
具体实施方式
本发明的硬件环境主要是一台PC主机,其中PC主机的CPU为Intel(R)Xeon(R)CPUE5-2630 v3,2.40GHz,内存为4GB RAM,64位操作系统;GPU为Quadro K620,GPU核心为3Multiprocessors,128CUDA Cores/MP,全局内存为2001MB,共享内存为48KB/block。为了更好地观察本方法在GPU内存不足时的性能优化效果,在实施阶段本方法使用了一块显存只有2GB的GPU。
本发明的软件实现以Ubuntu18.04为平台,在CUDA环境下,使用CUDA及C++语言开发。Ubuntu18.04内核版本为4.18.0-15-generic,g++版本为5.5.0,CUDA版本为10.1。本方法使用的实验数据为SNAP提供的图数据集。实施过程中测试了ego-Facebook、ego-Twitter、wiki-Vote、web-Google、soc-Pokec、com-Orkut、com-LiveJournal、cit-Patents等八种不同大小的图数据集。
1.重排序部分
1)算法描述
算法输入:data_file、k
算法输出:csr_offset[]、csr_edge[]、vertex_cnt
说明:data_file为原始图数据集文件;k是操作者指定的数据集分块数,默认k=32;csr_offset[]为CSR格式表示的图的偏移量数组;csr_edge[]为CSR格式表示的图的边数组;vertex_cnt为图的顶点数。
2)算法步骤
(1)构建图的邻接表。从数据集中获取图的顶点和边个数,并对二维数组表示的邻接表进行初始化。每从数据集中读取一行边数据,便将其插入邻接表中。
(2)块内顶点重排序。将所有图数据分为k个数据块,并在每个数据块中根据该顶点的出度,即邻接表的大小对顶点进行排序。
(3)建立顶点映射。存储顶点新ID与旧ID的一一对应关系。
(4)更新邻接表数据。根据图顶点的新ID,对存储在邻接表中的每一个顶点进行更新,全部替换为对应顶点重排序后的新ID,并根据顶点的新ID进行排序。
(5)生成CSR格式的压缩图,并返回csr_offset[]、csr_edge[]。
其伪代码如下:
2.热顶点缓存部分
1)CPU端算法描述
算法输入:csr_offset[]、csr_edge[]、vertex_cnt
算法输出:vplist[]
说明:csr_offset[]为CSR格式表示的图的偏移量数组;csr_edge[]为CSR格式表示的图的边数组;vertex_cnt为图的顶点数;vplist[]是顶点属性数据的计算结果数组。
2)CPU端算法步骤
(1)GPU端数组定义及初始化。调用cudaMallocManaged()函数生成GPU端可访问的偏移量数组device_offset、边数组device_edge以及顶点属性数组vplist,并对数组进行初始化及赋值。
(2)调用CUDA kernel函数。kernel函数在GPU端执行图分析操作,根据不同图分析算法的运行原理进行边数组device_edge或顶点偏移量数组device_offset的访问,并将计算结果写入属性数组中。
(3)根据图应用程序要求进行结果分析,并返回分析结果。
其伪代码如下:
3)GPU端算法描述
算法输入:device_offset[]、deivce_edge[]、vplist[]、vertex_cnt
算法输出:vplist[]
说明:device_offset[]为GPU端图的偏移量数组;device_edge[]为GPU端图的边数组;vplist[]是顶点属性数据的计算结果数组、vertex_cnt为图的顶点数。
4)GPU端算法步骤
(1)获取GPU线程ID,以线程ID作为图顶点ID进行图数据遍历。若线程ID超出了图顶点的ID范围,则不使用该线程执行任何操作。
(2)定义并初始化共享内存数组。使用__shared__关键字定义共享内存数组shared_array,本发明中shared_array数组的长度length定义为单个计算单元中共享内存大小/单个属性数据大小。并根据算法要求进行数组初始化。
(3)遍历图节点,并执行图算法分析操作。根据不同图算法的具体要求,对顶点偏移量数组device_offset以及边数组device_edge进行遍历,并对符合算法要求的图节点执行属性数据更新操作。
(4)判断属性数据是否被缓存并执行更新操作。在将计算结果写入属性数组的过程中,首先需要判断该属性数据对应的图节点ID是否缓存shared_array数组中。定义图节点的id为vertex_id,正在执行的GPU线程块的id为block_id,共享内存数组长度为shared_length。若vertex_id位于[block_id:block_id+shared_length)区间范围内,则该图节点的属性数据被缓存在共享内存数组shared_array中,反之则存储在位于全局内存的属性数组vplist中。针对数据存储的位置,对相应的属性数据进行更新操作。
(5)执行共享内存数组的同步操作。在将shared_array缓存的计算结果写回GPU的全局内存之前,本发明将调用_syncthreads()函数,对所有的计算结果进行同步,防止GPU线程异常退出导致计算错误。
(6)将共享内存中缓存的数据写回GPU全局内存。为了防止对vplist数组同一个位置的写操作发生冲突,本方法使用原子操作对数据进行更新。
其伪代码如下:
Claims (3)
1.一种基于GPU的图分析算法通用优化方法,其特征在于实施步骤为:
(1)数据集预处理步骤,读取原始图数据集文件后,去除数据集中与图数据无关的内容及注释,统一数据行之间的分隔符,并将预处理后的数据集保存到CSV文件中,从而得到分析程序可识别的图数据集文件;
(2)数据重排序阶段,将数据集等分为若干个数据块,并在数据块内对图顶点进行重排序;
(3)热顶点缓存阶段,利用GPU高速共享内存进行热顶点数据的缓存设置,从而将热顶点驻留在GPU端。
2.根据权利要求1所述的一种基于GPU的图分析算法通用优化方法,其特征在于本方法在数据集重排序阶段进行的以下操作:
(1)将数据集等分为若干个数据块,并在数据块内部对图顶点按照出度进行分块重排序,从而在集中存储热顶点的同时尽可能保留图的原始时间空间缓存局部性;
(2)数据集的分块数可根据数据集大小、图数据分布方式进行指定,本方法提供1、2、4、.......、512个分块数目的选择,每个数据块内的顶点个数为总顶点数/分块数。
3.根据权利要求1所述的一种基于GPU的图分析算法通用优化方法,其特征在于本方法在热顶点缓存阶段中进行的以下操作:
(1)在每个GPU的计算单元中都分配一块共享内存空间,用于热顶点数据的缓存操作;
(2)通过对图数据的重用模式进行分析,将具有高重用性的热顶点的属性数据作为GPU缓存的目标数据;
(3)利用重排序操作中生成的热顶点的分布方式,将不同数据块内的热顶点属性数据映射到不同GPU计算单元的共享内存中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111459716.4A CN114117150A (zh) | 2021-12-01 | 2021-12-01 | 一种基于gpu的图分析算法通用优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111459716.4A CN114117150A (zh) | 2021-12-01 | 2021-12-01 | 一种基于gpu的图分析算法通用优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114117150A true CN114117150A (zh) | 2022-03-01 |
Family
ID=80366188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111459716.4A Pending CN114117150A (zh) | 2021-12-01 | 2021-12-01 | 一种基于gpu的图分析算法通用优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114117150A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878050A (zh) * | 2023-02-23 | 2023-03-31 | 摩尔线程智能科技(北京)有限责任公司 | 基于多路输入的数据处理装置、方法和计算机设备 |
-
2021
- 2021-12-01 CN CN202111459716.4A patent/CN114117150A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878050A (zh) * | 2023-02-23 | 2023-03-31 | 摩尔线程智能科技(北京)有限责任公司 | 基于多路输入的数据处理装置、方法和计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8400458B2 (en) | Method and system for blocking data on a GPU | |
CN106991011B (zh) | 基于cpu多线程与gpu多粒度并行及协同优化的方法 | |
Khorasani et al. | Scalable simd-efficient graph processing on gpus | |
US10346507B2 (en) | Symmetric block sparse matrix-vector multiplication | |
WO2021254135A1 (zh) | 任务执行方法及存储设备 | |
KR101793890B1 (ko) | 자율 메모리 아키텍처 | |
KR101747966B1 (ko) | 자율 서브시스템 아키텍처 | |
Almasri et al. | Update on k-truss decomposition on gpu | |
Martín et al. | Algorithmic strategies for optimizing the parallel reduction primitive in CUDA | |
Sallinen et al. | High performance parallel stochastic gradient descent in shared memory | |
CN112148736B (zh) | 缓存数据的方法、设备及存储介质 | |
US20230281157A1 (en) | Post-exascale graph computing method, system, storage medium and electronic device thereof | |
US20190278574A1 (en) | Techniques for transforming serial program code into kernels for execution on a parallel processor | |
EP4209914A1 (en) | Reconfigurable cache architecture and methods for cache coherency | |
CN114117150A (zh) | 一种基于gpu的图分析算法通用优化方法 | |
Lu et al. | Characterizing deep learning over big data (dlobd) stacks on rdma-capable networks | |
CN106484532B (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
JP7363145B2 (ja) | 学習装置および学習方法 | |
Guo et al. | Distributed join algorithms on multi-CPU clusters with GPUDirect RDMA | |
JP2018132948A (ja) | 読込プログラム、読込方法および情報処理装置 | |
CN111580969A (zh) | 一种基于多gpu的a*搜索方法 | |
Morari et al. | Efficient sorting on the tilera manycore architecture | |
CN105573834B (zh) | 一种基于异构平台的高维词汇树构建方法 | |
US20220229777A1 (en) | Data storage system with multiple-size object allocator for disk cache | |
Potluri et al. | Efficient breadth first search on multi-gpu systems using gpu-centric openshmem |
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 |