用于存储管理的系统和方法与流程

文档序号:31755644发布日期:2022-10-12 00:47阅读:47来源:国知局
用于存储管理的系统和方法与流程
用于存储管理的系统和方法
1.相关申请的交叉引用
2.本公开要求于2020年2月12日提交的申请号为16/789,271的美国专利申请的优先权和优先权权益,其通过引用并入本文。


背景技术:

3.图处理对作为图且包括多个数据实体的数据集进行处理。在图中,每个数据实体都可以以节点和边的形式存储。节点表示对象,例如人、动作、车辆等。多个节点之间的关系用节点的边来表示。因此,可以通过对节点和节点的边执行图处理来分析数据集。
4.为了处理图,图通常以实际大小被加载到处理器(例如cpu)的高速缓存中。但是,随着图的不断扩大,图的大小可能会超过高速缓存的存储容量。
5.此外,作为一种基于指针的数据结构,图的多个节点之间的关系由指针描述,但对指针追踪的依赖对高速缓存的延迟和带宽提出严格要求。


技术实现要素:

6.本公开的实施例提供了一种存储管理方法。该方法包括:接收将目标节点数据分配给存储空间的请求,其中,存储空间包括缓冲器和外部存储器,目标节点数据包括属性数据和结构数据,并表示具有多个节点和边的图的目标节点;确定与目标节点数据相关联的节点度;基于所确定的节点度在存储空间中分配目标节点数据。
7.本公开的实施例还提供了一种计算系统。该系统可以包括:外部存储器,用于存储一组指令;以及处理器,包括缓冲器和被配置为执行该组指令以使计算系统执行以下操作的电路:接收将目标节点数据分配给存储空间的请求,其中,存储空间包括缓冲器和外部存储器,目标节点数据包括属性数据和结构数据,并表示具有多个节点和边的图的目标节点;确定与目标节点数据相关联的节点度;基于所确定的节点度在存储空间中分配目标节点数据。
8.应当理解,如上所述,前面的一般描述和下面的详细描述都只是示例性的和解释性的,并不对本公开的实施例进行限制。
附图说明
9.以下详细描述和附图说明了本公开的实施例和各个方面。图中所示的各种特征未按比例绘制。
10.图1示出了根据本公开的一些实施例的示例性的图的示意图。
11.图2a示出了根据本公开的一些实施例的示例性的矩阵形式的图表示。
12.图2b示出了根据本公开的一些实施例的示例性的图的结构图。
13.图3示出了根据本公开的一些实施例的示例性的计算系统的示意图。
14.图4示出了根据本公开的一些实施例的示例性的神经网络加速器架构的示意图。
15.图5a示出了根据本公开的一些实施例的示例性的管理单元的示意图。
16.图5b示出了根据本公开的一些实施例的示例性的节点分配的示意图。
17.图6示出了根据本公开的一些实施例的用于在图处理中进行存储管理的方法的流程图。
具体实施方式
18.下文更详细地描述了本公开的特定方面。如果与通过引用合并的术语或定义相冲突,则以本文提供的术语和定义为准。
19.本公开的实施例提供了用于在图处理中进行存储管理的系统和方法。在一些实施例中,根据图的节点的节点度将该节点分配给缓冲器或外部存储器。例如,将节点度大于给定阈值的节点分配给缓冲器。由于具有更高节点度的节点被更频繁地访问,因此根据本公开的实施例的系统和方法将缓冲器的宝贵空间分配给具有较高节点度的节点,可以提高缓冲器的效率。在本公开的一些实施例中,节点的属性数据被分配给缓冲器,而节点的结构数据被单独分配给外部存储器。因此,可以避免在缓冲器中进行指针追踪(pointer-chasing),并且还可以更好地利用存储空间。
20.图1示出了根据公开的一些实施例的示例性的图100。图是一种包括多个节点和节点之间的多条边的数据结构。节点是与属性数据相关联的对象。属性数据包括属于对象(个人或事物)的特性或特征,尤其是对象(个人或事物)特有的特性或特征。例如,在社交网络中节点是人,并且人与属性数据相关联,例如,人的属性数据包括用户id、名称、性别、年龄等。作为另一个示例,节点是公交车站,并且公交车站与属性数据相关联,例如,公交车站的属性数据包括在公交车站停车的公交车、公交车到达时间等。节点还可以与结构数据相关联,结构数据描述节点之间的边。例如,结构数据包括边的方向和边的权重。如图1所示,节点0-4可以是社交网络中的人,并且两个节点之间的边可以指示两个人之间的链接。例如,边102 指示节点0和节点1互加好友。图1示出了示例性的边102-112。
21.尽管图1的图100被表示为无向图,但图也可以是有向图。在公交车站的示例中,从第一公交车站到第二公交车站的边可以是有向边,由公交车站和边组成的图是有向图。此外,可以对边进行加权。例如,对从第一公交车站到第二公交车站的边进行加权,以在边上指示乘客数量。
22.图100可以被表示为数据结构,例如矩阵(例如,压缩稀疏行(compressed sparserow,csr)矩阵)、表、链接列表等。图2a示出了根据本公开的一些实施例的示例性的矩阵200形式的图表示。
23.在一些实施例中,如图2a所示,矩阵200可用于表示图1的图100,其中矩阵元素的数值指示两个节点之间的边。例如,节点0有一条与节点1相连的边,因此矩阵元素(1,0)和(0,1)的数值为1。矩阵200可以进一步被压缩为csr矩阵。
24.可以理解的是,也可以使用表格、链接列表和其他形式来表示图。为了提供更多的通用性,图2b示出了根据本公开的一些实施例的图210的结构图。图210可以以任何适当的形式呈现,图2b仅仅是图210的图示。
25.图210中的每个节点可以包括属性数据202和结构数据204。在一些实施例中,属性数据202包括节点的节点id、节点的一个或多个属性以及指向节点的结构数据 204的指针。例如,节点id指示节点(例如,节点0、1、2、3或4)的标识。一个或多个属性可以与节点的特性
相关联。如上所述,在社交网络的示例中,一个或多个属性包括节点的名称、性别、年龄等,并且以数值表示。属性数据202中的指针用于定位节点的结构数据204。例如,指针包括结构数据204的地址,如上所述,结构数据204描述节点之间的边。如图2b所示,节点0有链接到节点1的一条边,节点1有链接到节点2和4的两条边,节点2有链接到节点1、3和4的三条边,节点3有链接到节点2和4的两条边,节点4有链接到节点1、2和3的树状边。连接到节点的边的数量也称为节点度。例如,节点0的节点度为1,节点2的节点度为3。
26.图3示出了根据本公开的一些实施例的计算系统300的示意图。计算系统300 包括处理设备302和动态随机存取存储器(dynamic random access memory,dram) 304。dram 304作为片外存储器(也称为外部存储器304),可用作主存储器来存储数据并由处理设备302访问。处理设备302可以是中央处理单元(central processingunit,cpu)或用于图处理/神经网络处理的加速器,并且处理设备302包括管理单元306、高速缓存308(也称为缓冲器308)和总线310。当计算系统300包括多个处理设备时,高速缓存308可以包括多个处理设备的高速缓存。可以理解,处理设备302还可以包括其他组件,例如算术逻辑单元(arithmetic logic unit,alu)、外围设备、接口等。
27.在一些实施例中,处理设备302是神经网络加速器。图4示出了根据本公开的一些实施例的示例性的神经网络加速器架构400。在本公开的背景中,神经网络加速器也被称为机器学习加速器或深度学习加速器。在一些实施例中,加速器架构400 可被称为神经网络处理单元(neural network processing unit,npu)架构400。如图 4所示,加速器架构400包括多个核402、命令处理器404、直接存储器访问(directmemory access,dma)单元408、联合测试动作组(joint test action group,jtag) /测试访问端(test access end,tap)控制器410、外围接口412、总线414等。
28.可以理解,核402可以基于通信数据执行算法操作。核402可以包括一个或多个处理元件,该处理元件可以包括单指令多数据(single instruction multiple data, simd)架构,该单指令多数据架构包括被配置为基于从命令处理器404接收的命令执行一个或多个操作(例如,乘法、加法、乘-累加等)的一个或多个处理单元。为了对所通信的数据包执行操作,核402可以包括用于处理数据包中的信息的一个或多个处理元件。每个处理元件可以包括任意数量的处理单元。根据本公开的一些实施例,加速器架构400包括多个核402,例如,四个核。在一些实施例中,多个核 402彼此通信耦合。例如,多个核402可以与支持大型神经网络模型的有效流水线的单向环形总线连接。下面将参考图4详细说明核402的架构。
29.命令处理器404可以与主机单元420交互,并将相关命令和数据传递给相应的核402。在一些实施例中,命令处理器404在内核模式驱动程序(kernel mode driver, kmd)的监督下与主机单元交互。在一些实施例中,命令处理器404修改到每个核 402的相关命令,以便多个核402尽可能地并行工作。修改后的命令可以存储在指令缓冲器中。在一些实施例中,命令处理器404被配置为协调一个或多个核402并行执行。
30.dma单元408可以协助在主机存储器421和加速器架构400之间传输数据。例如,dma单元408协助将数据或指令从主机存储器421加载到核402的本地存储器中。dma单元408还可以协助在多个加速器之间传输数据。dma单元408可以允许片外设备访问片上存储器和片外存储器而不引起主机cpu中断。此外,dma单元408可以协助在加速器架构400的各组件之间传输数据。例如,dma单元408协助在多个核402之间或每个核内传输数据。因此,dma单元
408还可以生成存储地址并启动存储器读取周期或写入周期。dma单元408还可以包含可由一个或多个处理器写入和读取的若干个硬件寄存器,该若干个硬件寄存器包括存储地址寄存器、字节计数寄存器、一个或多个控制寄存器和其他类型的寄存器。这些寄存器可以指定源、目标、传输方向(从输入/输出(i/o)设备读取或写入i/o设备)、传输单元的大小、和在一次突发中传输的字节数的某种组合。应当理解,加速器架构400可包括第二dma单元,其可用于在其他加速器架构之间传输数据,以允许多个加速器架构在不涉及主机cpu的情况下直接通信。
31.jtag/tap控制器410可以指定专用调试端口(例如jtag接口)来实现串行通信接口,以实现对加速器的低开销访问,而无需直接从外部访问系统地址和数据总线。jtag/tap控制器410还可以具有片上测试访问接口(例如,tap接口),该接口实现协议以访问一组测试寄存器,该测试寄存器呈现芯片逻辑电平和各个部件的设备能力。
32.如果存在外围接口412(如pcie接口),则其用作(且通常是)芯片间总线 (inter-chip bus),以提供加速器和其他设备之间的通信。
33.总线414(例如i2c总线)包括芯片内总线和芯片间总线。正如系统架构所要求的,芯片内总线将所有内部组件相互连接。虽然并非所有组件都连接到每个其他组件,但所有组件都连接到与它们需要通信的其他组件。芯片间总线将加速器与其他设备(例如,片外存储器或外围设备)连接起来。例如,总线414提供跨核的高速通信,并且还可以将核402与其他单元(例如,片外存储器或外围设备)连接。通常,如果存在外围接口412(例如,芯片间总线),则总线414仅与芯片内总线有关,尽管在一些实现方式中,总线414仍可能与专用的总线互连通信(inter-buscommunication)有关。
34.加速器架构400还可以与主机单元420通信。主机单元420可以是一个或多个处理单元(例如,x86中央处理单元)。如图4所示,主机单元420可以与主机存储器421相关联。在一些实施例中,主机存储器421是与主机单元420相关联的集成存储器或外部存储器。在一些实施例中,主机存储器421包括主机磁盘,主机磁盘是用于向主机单元420提供额外存储器的外部存储器。主机存储器421可以是双数据速率同步动态随机存取存储器(例如,double data rate synchronous dynamicrandom-access memory,ddr-sdram)等。与集成在加速器芯片内的片上存储器相比,主机存储器421作为更高级别的高速缓存,被配置为以较慢的访问速度存储大量数据。存储在主机存储器421中的数据可以被传输到加速器架构400,以用于执行神经网络模型。
35.在一些实施例中,具有主机单元420和主机存储器421的主机系统(例如,图 3的计算系统300)包括编译器(图中未示出)。编译器是将用一种编程语言编写的计算机代码转换为加速器架构400的指令以创建可执行程序的程序或计算机软件。在机器学习应用中,编译器可以执行各种操作,例如,预处理、词法分析、解析、语义分析、将输入程序转换为中间表示、神经网络初始化、代码优化、和代码生成、或其组合。例如,编译器编译神经网络来生成静态参数,例如,神经元之间的连接和神经元的权重。
36.在一些实施例中,包括编译器的主机系统将一个或多个命令推送到加速器架构400。如上所述,这些命令可以由加速器架构400的命令处理器404进一步处理,被临时存储在加速器架构400的指令缓冲器中,并被分配到相应的一个或多个核(例如,图4中的核402)或处理元件。一些命令可以指示dma单元(例如,图4的 dma单元408)将指令和数据从主机存
储器(例如,图4的主机存储器421)加载到加速器架构400中。然后,这些被加载的指令被分配给分配了相应任务的每个核 (例如,图4的核402),由一个或多个核处理这些指令。
37.可以理解,核402接收的前几个指令可以指示核402将数据从主机存储器421 加载/存储到核的一个或多个本地存储器中。然后,每个核402启动指令流水线,该指令流水线涉及(例如,通过定序器)从指令缓冲器中提取指令,(例如,通过图 4的dma单元408)解码指令,生成(例如,对应于操作数的)本地存储地址,读取源数据,执行加载/存储操作,然后写回结果。
38.根据一些实施例,加速器架构400还包括全局存储器(图中未示出),该全局存储器具有用作主存储器的存储器块(例如,4块8gb第二代高带宽存储器(secondgeneration of high bandwidth memory,hbm2))。在一些实施例中,全局存储器存储经由dma单元408从主机存储器421获取的指令和数据。然后,将指令分配给分配了相应任务的每个核的指令缓冲器,核可以相应地处理这些指令。
39.在一些实施例中,加速器架构400还包括存储器控制器(图中未示出),该存储器控制器被配置为管理对全局存储器内的特定存储器块(例如hbm2)的数据读写。例如,存储器控制器管理来自另一个加速器的核(例如,来自dma单元408 或对应于另一个加速器的dma单元)或来自核402(例如,来自核402中的本地存储器)的数据读写。可以理解,在加速器架构400中可以提供不止一个存储器控制器。例如,全局存储器中的每个存储器块(例如hbm2)都有一个存储器控制器。
40.存储器控制器可以生成存储地址并启动存储器读或写周期。存储器控制器可以包含若干个硬件寄存器,这些硬件寄存器可以由一个或多个处理器写入和读取。这些寄存器可以包括存储地址寄存器、字节计数寄存器、一个或多个控制寄存器以及其他类型的寄存器。这些寄存器可以指定源、目标、传输方向(从输入/输出(i/o) 设备读取或写入i/o设备)、传输单元的大小、在一次突发中传输的字节数和存储器控制器的其他典型特征的某种组合。
41.虽然在本公开的一些实施例中,图4的加速器架构400可用于卷积神经网络 (convolutional neural network,cnn),但应当理解,图4的加速器架构400可用于各种神经网络,例如,深度神经网络(deep neural network,dnn)、递归神经网络(recurrent neural network,rnn)等。此外,在一些实施例中,可以配置各种处理架构,例如,神经网络处理单元(neural network processing unit,npu)、图处理单元(graphic processing unit,gpu)、现场可编程门阵列(field programmable gate array, fpga)、张量处理单元(tensor processing unit,tpu)、专用集成电路 (application-specific integrated circuit,asic)、任何其他类型的异构加速器处理单元(heterogeneous accelerator processing unit,hapu)等。
42.继续参考图3,计算系统300可以提供具有一系列存储地址的存储空间,用于访问(例如,写入/读取)计算系统300中的数据。存储空间包括dram 304和高速缓存308。因此,一系列存储地址包括指向dram 304的第一组地址和指向高速缓存308的第二组地址。因此,根据本公开的实施例,在计算系统300中,高速缓存 308还可以存储部分数据,而不存储存储在dram 304中的数据的副本。换句话说, dram 304和高速缓存308作为一个整体提供计算系统300的存储功能。
43.管理单元306可以确定存储器请求(例如,存储器读取请求或存储器写入请求) 是否指向dram 304或高速缓存308。在图3的一些实施例中,管理单元306被示为处理设备302的一部分。然而,可以理解,管理单元306也可以实现为软件组件。下面将进一步描述示例性的管理单元306的细节。
44.高速缓存308是一种片上的高速存储器,用于进程中的计算、数据和其他工作的存储。高速缓存308可以是处理设备302的alu的处理器寄存器之后的下一个最近的存储器。高速缓存308的大小可以相对较小,因此也可以被称为便笺式存储器 (scratchpad memory)。由于高速缓存308在计算系统300中具有相应的存储地址,并且还与dram 304一起向计算系统300提供存储功能,因此高速缓存308通常不包含存储在dram 304中的数据的副本。
45.如处理设备302所要求的,总线310可以将所有内部组件相互连接。虽然并非所有组件都连接到每个其他组件,但所有组件都连接到与它们需要通信的其他组件。
46.图5a示出了根据本公开的一些实施例的示例性的管理单元306的示意图。
47.如图5a所示,管理单元306包括请求处理子单元502、阈值生成子单元504和数据分配子单元506。这些子单元可以通过接口或总线(例如,总线310)进一步连接到计算系统300的其他组件。在一些实施例中,管理单元306通过例如使用硬件描述语言的专用集成电路(application specific integrated circuit,asic)来实现。在一些实施例中,通过在例如处理设备302上执行指令来实现管理单元306。
48.在一些实施例中,管理单元306从处理设备302接收指令,以将图(例如,图 1的图100)加载到计算系统300的存储空间。图可以包括多个节点。在被加载之前,图可以被存储在外部存储设备(例如,硬盘)中。在一些实施例中,指令包括将节点分配给计算系统300的存储空间的请求。这些指令通过编译与图处理相关的计算程序来生成。
49.请求处理子单元502可以接收将节点分配给存储空间的请求。如上所述,存储空间包括dram 304和高速缓存308。该请求还可以包括节点在外部存储设备中的地址。基于节点在外部存储设备中的地址,可以提取和预处理节点。
50.在一些实施例中,请求处理子单元502确定节点的节点度。例如,请求处理子单元502遍历图(例如,图100或210)以确定节点的节点度。更具体地,请求处理子单元502遍历节点的结构数据,以确定与该节点相关联的一个或多个相邻节点的数量。
51.继续参考图2b,通过遍历图210,请求处理子单元502可以确定,例如,节点 2具有指向三条边的指针,因此节点2具有三个相邻节点。应当理解,图2b的指针可以不以“指针”的形式呈现。在一些实施例中,当图(例如,图210)以压缩稀疏行(csr)的格式呈现时,图2b的指针是阵列(例如,阵列[])中偏移量的形式,指示一个或多个相邻节点的地址。例如,节点0的偏移量p0可以是
‘0’
,表示相邻节点的地址存储在阵列[0]中。在另一个示例中,偏移量p2和偏移量p3可以分别是
‘3’

‘6’
,指示相邻节点的地址存储在一系列的阵列[3]-阵列[6]中。换句话说,节点2的相邻节点的数量可以是偏移量p3和p2之间的差(即,6-3=3)。
[0052]
因此,请求处理子单元502可以将与节点(例如,节点2)相关联的一个或多个相邻节点的数量确定为节点度(例如,3)。
[0053]
阈值生成子单元504可以确定节点分配的条件。该条件可以包括节点度大于给定阈值。在一些实施例中,阈值由计算系统300的管理员确定。在一些实施例中,阈值通过用于加载图的指令来确定。在一些实施例中,阈值生成子单元504确定高速缓存308的可用容量,
并基于可用容量调整阈值。例如,可以使用线性或非线性函数基于可用容量计算阈值,或者可以通过基于可用容量调整给定阈值来确定阈值。例如,高速缓存308可以仅具有用于存储三个节点的可用容量,并且图(例如,图 210)包括五个节点,因此,调整阈值以反映高速缓存308中有限的可用空间。可以理解,高速缓存308可以经由例如总线310将可用信息传递给阈值生成子单元504。
[0054]
数据分配子单元506可以基于来自请求处理子单元502和阈值生成子单元504 的请求和条件,将节点(例如,图210的节点2)分配给存储空间。在一些实施例中,数据分配子单元506确定节点是否满足给定条件(例如,节点度大于给定阈值)。当节点的节点度满足给定条件时,数据分配子单元506将节点分配给高速缓存308。
[0055]
在一些实施例中,数据分配子单元506将节点的属性数据和结构数据分配给高速缓存308,因此,可以提高访问节点的速度。
[0056]
然而,通过将节点的属性数据和结构数据分配给高速缓存308,节点数据占用高速缓存308中的相当大的可用空间。因此,在一些实施例中,数据分配子单元506 将节点的属性数据分配给高速缓存308,并将节点的结构数据分配给dram 304。图5b示出了根据本公开的一些实施例的示例性的节点分配510的示意图。如图5b 所示,节点0的属性数据被分配给缓冲器(例如,高速缓存308),节点0的结构数据被分配给外部存储器(例如,dram 304)。
[0057]
为了将属性数据和结构数据分别分配给高速缓存308和dram 304,数据分配子单元506还可以生成节点的属性数据和结构数据之间的映射关系。在一些实施例中,映射关系存储为节点的属性数据的一部分。因此,通过在高速缓存308中仅分配属性数据,可以有效地利用高速缓存308的存储空间。
[0058]
当节点的节点度未能满足给定条件时,数据分配子单元506可以将节点分配给 dram 304。节点未能满足给定条件,意味着该节点不经常被计算程序访问。因此,尽管节点被分配给具有相对较慢的访问速度的dram 304,但计算系统的整体性能不会受到显著影响。
[0059]
例如,参考图5b,当给定条件是节点度大于2时,节点度为3的节点2和节点 4满足给定条件。因此,将节点2和节点4的属性数据分配给高速缓存308以加速图210的访问速度,并且将节点2和节点4的结构数据分配给dram 304以节省高速缓存308的存储空间。由于未能满足给定条件,节点度分别为1、2和2的节点0、 1和3被分配给dram 304。
[0060]
如上所述,计算系统300的存储空间的一系列存储地址可以包括指向dram 304 的第一组地址和指向高速缓存308的第二组地址。因此,在将节点(例如,图210 的节点2)分配给高速缓存308之后,节点的地址落在第二组地址内。可以理解,在一些实施例中,节点的结构数据可以被单独分配在dram 304中,并且节点的结构数据的地址落入第一组地址内,并且可以基于节点的指针来确定节点的结构数据的地址,该指针与dram 304中的结构数据的地址相关联。因此,尽管节点的结构数据可以与节点的属性数据分开被分配,但是可以基于高速缓存308中节点的地址来访问结构数据。
[0061]
图6示出了根据本公开的一些实施例的用于在图处理中进行存储管理的方法 600的流程图。方法600可由例如图3的计算系统300执行。方法600可以包括以下步骤。
[0062]
在步骤602中,计算系统可以接收将目标节点数据分配给存储空间的请求。存储空间可以包括缓冲器(例如,图3的高速缓存308)和外部存储器(图3的dram 304)。目标节点数
据可以表示包括多个节点和多个节点之间的边的图(例如,图 1-图2b的图100、200或210)的目标节点。目标节点数据可以包括属性数据和结构数据。例如,属性数据还可以包括目标节点的标识、目标节点的属性和指向结构数据的指针中的至少一项。结构数据可以包括目标节点的边。
[0063]
在一些实施例中,计算系统可以接收用于图处理的指令。例如,可以通过编译计算程序来生成指令,该计算程序用于确定图的节点之间的关系。用于图处理的编译指令可以包括将目标节点数据分配给存储空间的请求。可以理解,由目标节点数据表示的目标节点可以是图中多个节点中的任意一个。
[0064]
在步骤604中,计算系统可以确定与目标节点数据相关联的节点度。与节点关联的节点度可以是连接到该节点的边的数量。换言之,节点度是连接到节点的相邻节点的数量。例如,在图1的图100中,节点0的节点度是1,因为只有节点1连接到节点0,而节点1的节点度是3,因为节点0、2和4连接到节点1。为了确定与目标节点数据相关联的节点度,计算系统可以遍历目标节点数据的结构数据,以确定通过相应边连接到目标节点的一个或多个节点的数量,并将一个或多个节点的数量确定为节点度。在一些实施例中,图的每个节点包括节点度的信息。例如,节点的给定字段可用于包含节点度的信息,计算系统300可基于此类信息确定目标节点的节点度。
[0065]
在一些实施例中,目标节点采用压缩稀疏行(csr)的格式。在csr中,可以基于偏移量来确定目标节点的相邻节点。因此,为了确定目标节点的节点度,计算系统可以基于与目标节点相关联的第一偏移量和第二偏移量来确定目标节点的节点度。例如,第一偏移量可以是指示目标节点的边的偏移量,第二偏移量可以是指示在csr中存储在目标节点旁边的节点的边的偏移量。因此,由第一偏移量指示的边的第一数量和由第二偏移量指示的边的第二数量之间的差是目标节点的节点度。
[0066]
在步骤606中,计算系统(例如,图5的数据分配子单元506)可以基于所确定的节点度在存储空间中分配目标节点。在一些实施例中,计算系统可以确定节点度是否满足给定条件。响应于确定节点度满足给定条件,计算系统可以部分地将目标节点数据分配给存储空间。在一些实施例中,计算系统可以将目标节点数据的属性数据分配给缓冲器,并将目标节点数据的结构数据分配给外部存储器。被分配在缓冲器中的目标节点数据的属性数据还可以包括外部存储器中的结构数据的地址的映射关系。例如,被分配在缓冲器中的目标节点数据的指针与外部存储器中的结构数据的地址相关联。可以理解,计算系统还可以将目标节点的属性数据和结构数据分配给缓冲器。
[0067]
响应于确定节点度不满足给定条件,计算系统(例如,图5的数据分配子单元 506)可以将目标节点数据分配给外部存储器。
[0068]
给定条件可以通过例如图5的阈值生成子单元504来确定。在一些实施例中,给定条件可以包括节点度大于给定阈值。给定阈值可以由计算系统预先确定或计算。例如,计算系统(例如,阈值生成子单元504)可以确定缓冲器的可用容量,并基于可用容量调整给定条件。因此,当缓冲器可用于图的节点的空间较少时,可以增加阈值。只有具有较高节点度的节点才能被分配给缓冲器。
[0069]
根据本公开的各种实施例,附图中的流程图和图表示出了设备、方法和计算程序产品的可能实现方式的架构、功能和操作。在这方面,流程图或图表中的块可以表示软件程
序、段或部分代码,其包括用于实现特定功能的一个或多个可执行指令。还应注意的是,在一些替代实现方式中,块中标注的功能可能与附图中标注的顺序不同。例如,连续显示的两个块实际上可以基本上同时执行,或者有时可以按照相反的顺序执行,这取决于所涉及的功能。还将注意到,图表或流程图的每个块以及图表和流程图中的块的组合可以由执行指定功能、动作或专用硬件与计算机指令的组合且基于专用硬件的系统来实现。
[0070]
使用以下权利要求进一步说明本公开的实施例,该权利要求包括:
[0071]
1.一种存储管理方法,包括:
[0072]
接收将目标节点数据分配给存储空间的请求,其中,所述存储空间包括缓冲器和外部存储器,所述目标节点数据包括属性数据和结构数据,并表示具有多个节点和边的图的目标节点;
[0073]
确定与所述目标节点数据相关联的节点度;
[0074]
基于所确定的节点度将所述目标节点数据分配给所述存储空间。
[0075]
2.根据权利要求1所述的存储管理方法,其中,所述基于所确定的节点度将所述目标节点数据分配给所述存储空间包括:
[0076]
确定所述节点度是否满足给定条件;以及
[0077]
响应于确定所述节点度满足所述给定条件,将所述目标节点数据部分地分配给所述缓冲器。
[0078]
3.根据权利要求2所述存储管理方法,其中,将所述目标节点数据部分地分配给所述缓冲器包括:
[0079]
将所述属性数据分配给所述缓冲器;以及
[0080]
将所述结构数据分配给所述外部存储器。
[0081]
4.根据权利要求3所述存储管理方法,其中,所述目标节点的属性数据包括所述目标节点的标识、所述目标节点的属性和指针中的至少一项;以及
[0082]
所述目标节点的结构数据包括所述目标节点的边。
[0083]
5.根据权利要求4所述存储管理方法,其中,被分配在所述缓冲器中的所述目标节点的指针与所述外部存储器中的结构数据的地址相关联。
[0084]
6.根据权利要求2-5中任一个所述存储管理方法,其中,还包括:
[0085]
响应于确定所述节点度不满足所述给定条件,将所述目标节点数据分配给所述外部存储器。
[0086]
7.根据权利要求2-6中任一个所述存储管理方法,其中,还包括:
[0087]
确定所述缓冲器的可用容量;以及
[0088]
基于所述可用容量调整所述给定条件。
[0089]
8.根据权利要求7所述存储管理方法,其中,所述给定条件包括所述节点度大于给定阈值。
[0090]
9.根据权利要求1-8中任一个所述存储管理方法,其中,所述确定与所述目标节点数据相关联的节点度包括:
[0091]
遍历所述目标节点数据的结构数据,以确定通过相应边连接到所述目标节点的一个或多个节点的数量;以及
[0092]
将连接到所述目标节点的一个或多个节点的数量确定为所述节点度。
[0093]
10.根据权利要求1-9中任一个所述存储管理方法,其中,所述目标节点数据采用压缩稀疏行的格式,所述确定与所述目标节点数据相关联的节点度还包括:
[0094]
基于与所述目标节点数据相关联的第一偏移量和第二偏移量,确定所述目标节点的节点度。
[0095]
11.一种计算系统,包括:
[0096]
外部存储器,用于存储一组指令;
[0097]
处理器,包括缓冲器和被配置为执行所述一组指令以使得计算系统执行以下操作的电路:
[0098]
接收将目标节点数据分配给存储空间的请求,其中,所述存储空间包括所述缓冲器和所述外部存储器,所述目标节点数据包括属性数据和结构数据,并表示具有多个节点和边的图的目标节点;
[0099]
确定与所述目标节点数据相关联的节点度;
[0100]
基于所确定的节点度将所述目标节点数据分配给所述存储空间。
[0101]
12.根据权利要求11所述计算系统,其中,在所述基于所述确定的节点度将所述目标节点数据分配给所述存储空间中,所述处理器被配置为执行所述一组指令以使得所述计算系统执行:
[0102]
确定所述节点度是否满足给定条件;以及
[0103]
响应于确定所述节点度满足所述给定条件,将所述目标节点数据部分地分配给所述缓冲器。
[0104]
13.根据权利要求12所述计算系统,其中,在将所述目标节点数据部分地分配给所述缓冲器中,所述处理器被配置为执行所述一组指令以使得所述计算系统执行:
[0105]
将所述属性数据分配给所述缓冲器;以及
[0106]
将所述结构数据分配给所述外部存储器。
[0107]
14.根据权利要求13所述计算系统,其中,所述目标节点的属性数据包括所述目标节点的标识、所述目标节点的属性和指针中的至少一项;以及
[0108]
所述目标节点的结构数据包括所述目标节点的边。
[0109]
15.根据权利要求14所述计算系统,其中,被分配在所述缓冲器中的所述目标节点的指针与所述外部存储器中的结构数据的地址相关联。
[0110]
16.根据权利要求12-15中任一个所述计算系统,其中,所述处理器被配置为执行所述一组指令以使得所述计算系统执行:
[0111]
响应于确定所述节点度不满足所述给定条件,将所述目标节点数据分配给所述外部存储器。
[0112]
17.根据权利要求12-16中任一个所述计算系统,其中,所述处理器被配置为执行所述一组指令以使得所述计算系统执行:
[0113]
确定所述缓冲器的可用容量;以及
[0114]
基于所述可用容量调整所述给定条件。
[0115]
18.根据权利要求17所述计算系统,其中,所述给定条件包括所述节点度大于给定阈值。
[0116]
19.根据权利要求11-18中任一个所述计算系统,其中,在所述确定与所述目标节
点数据相关联的节点度中,所述处理器被配置为执行所述一组指令以使得所述计算系统执行:
[0117]
遍历所述目标节点数据的结构数据,以确定通过相应边连接到所述目标节点的一个或多个节点的数量;以及
[0118]
将连接到所述目标节点的一个或多个节点的数量确定为所述节点度。
[0119]
20.根据权利要求11-19中任一个所述计算系统,其中,所述目标节点数据采用压缩稀疏行的格式,在所述确定与所述目标节点数据相关联的节点度中,所述处理器被配置为执行所述一组指令以使得所述计算系统执行:
[0120]
基于与所述目标节点数据相关联的第一偏移量和第二偏移量,确定所述目标节点的节点度。
[0121]
如本文所用,术语“包括”、“包含”或其任何其他变体旨在涵盖非排他性包含,使得包含元素列表的过程、方法、组合物、物品或装置不仅包括那些元素,还可以包括未明确列出的其他元素或此类过程、方法、组合物、物品或装置固有的其他元素。术语“示例性的”被用在“示例”角度,而非“理想的”。
[0122]
如本文所用,除非另有特别说明,否则术语“或”包括所有可能的组合,除非不可行。例如,如果声明数据库可能包括a或b,则除非另有明确说明或不可行,否则数据库可能包括a、b或a和b。作为第二个示例,如果声明数据库可能包括 a、b或c,则除非另有明确说明或不可行,否则数据库可能包括a、b、或c、或 a和b、或a和c、或b和c、或a和b和c。
[0123]
应当理解,为清楚起见,在不同的实施例的上下文中描述的本公开的某些特征也可以在单个实施例中组合提供。相反,为了简洁起见,在单个实施例的上下文中描述的本公开的各种特征也可以分开提供,或者在任何合适的子组合中提供,或者在合适的本公开的任何其他描述的实施例中提供。在各种实施例的上下文中描述的某些特征不应被视为这些实施例的基本特征,除非没有那些元素,该实施例是不能实行的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1