用于图神经网络和图应用的可编程访问引擎架构的制作方法

文档序号:28699873发布日期:2022-01-29 13:02阅读:43来源:国知局
用于图神经网络和图应用的可编程访问引擎架构的制作方法

1.本说明书涉及图神经网络(gnn)领域,尤其涉及对gnn的数据访问进行加速。


背景技术:

2.图神经网络(“gnn”)可以是用于非结构化数据建模和处理的有效模型。最近,gnn 越来越多地用于诸如推荐系统、风险控制系统等应用中。图数据可以是非结构化的。因 此,对图数据进行访问可以导致随机存储器访问。


技术实现要素:

3.本说明书的实施例提供了一种用于在进行图神经网络(gnn)处理时访问gnn属性数 据的系统,包括:多个核,所述多个核中的每个包括键-值提取器和滤波器,并且是可使 用软件接口编程以支持gnn属性数据的多种数据格式,其中:键-值提取器可根据gnn属 性数据的多种数据格式中的一种来使用软件接口进行编程,以用于执行与访问gnn属性 数据相关联的键-值提取,并且多个核中的至少一个的滤波器可根据gnn属性数据的多种 数据格式中的一种使用软件接口编程以用于采样与访问gnn属性数据相关联的节点标识 符;以及第一存储器,与多个核通信耦合,其中第一存储器被配置为存储由多个核共享 的数据。
4.在一些实施例中,软件接口包括至少一个或多个以下用于对键-值提取器进行编程的 可配置参数:第一存储器的存储器地址,其存储键-值提取的键;第二存储器的存储器地 址,其存储键-值提取的值;待提取的键-值对的数量;待提取的数据长度;第一存储器 中用于写入结果的目标存储器地址;或指示是否启用重新排序的标志。
5.在一些实施例中,软件接口包括以下用于对滤波器进行编程的可配置参数中的至少 一个:采样算法;或用于滤波由采样算法生成的经采样结果的正则表达式。
6.在一些实施例中,多个核中的至少一个的键-值提取器还可以通过软件接口编程为: 确定第一存储器的存储与键对应的值的存储器地址;从存储器地址中提取与键对应的值; 并将提取的值写入到第一存储器中。
7.在一些实施例中,多个核包括第一核;第一核的键-值提取器可通过软件接口编程为: 确定第一存储器中的从其要提取根节点的边数据的地址,其中边数据包括根节点的邻近 节点的标识符,以及从确定的地址中提取根节点的边数据;并且第一核的滤波器可通过 软件接口编程为:使用采样算法从边数据中的邻近节点的标识符中进行采样以确定一个 或多个经采样节点标识符,并将一个或多个经采样节点标识符写入到第一存储器中。
8.在一些实施例中,根节点的边数据包括关于根节点的每条边的权重值;以及第一核 的滤波器还可以通过软件接口编程为:根据关于根节点的每条边的权重值进行采样以确 定一个或多个经采样节点标识符。
9.在一些实施例中,多个核包括第二核;并且第二核的键-值提取器可通过软件接口编 程为:确定第一存储器中从其要提取根节点的边列表指针的地址,从所确定的地址提取 根节点的边列表指针,其中边列表指针指向存储在第二存储器中的根节点的边列表,并 且
边列表中的每个将根节点连接到邻近节点,基于来自所述第二存储器的所述根节点的 边列表,提取根节点的邻近节点的一个或多个标识符,并将根节点的相邻节点的一个或 多个标识符写入到第一存储器中以供第一核访问。
10.在一些实施例中,多个核包括第三核;并且第三核的键-值提取器可通过软件接口编 程为:接收与根节点对应的根节点标识符,根据根节点标识符来确定边列表指针,并将 边列表指针写入到第一存储器中以供第二核访问。
11.在一些实施例中,多个核包括第三核和第四核;第三核的键-值提取器可通过软件接 口编程为:接收与根节点对应的根节点标识符,根据根节点标识符提取与根节点对应的 指针,其中与根节点标识符对应的指针指向根节点的结构数据,并且根节点的结构数据 包括边列表指针,并且将与根节点对应的指针写入到第一存储器中以供第四核访问;以 及第四核的键-值提取器可通过软件接口编程为:确定第一存储器中从其要提取对应于根 节点的指针的地址;从确定的地址中提取来自存储器缓冲器中的与根节点对应的指针, 根据与根节点对应的指针来确定边列表指针,并将边列表指针写入到第一存储器中以供 第二核访问。
12.在一些实施例中,多个核包括第五核和第六核;第五核的键-值提取器可通过软件接 口编程为:确定第一存储器中从其要提取经采样节点标识符的地址,从确定的地址中提 取来自第一存储器的经采样节点标识符,提取指向存储在第二存储器中的经采样节点标 识符的属性数据的经采样指针,并将经采样指针写入第一存储器以供第六核访问;以及 第六核的键-值提取器可通过软件接口编程为:确定第一存储器中从其要提取经采样指针 的地址,从所确定的地址中提取来自第一存储器的经采样指针,使用经采样指针从第二 存储器中提取属性数据,并将属性数据发送到专用处理器以用于进行gnn处理。
13.在一些实施例中,多个核中的每个还包括重新排序记分板,其中重新排序记分板可 通过软件接口编程为:从同一核中的键-值提取器或滤波器接收数据;并对接收到的数据 进行排序。
14.在一些实施例中,多个核中的每个在现场可编程门阵列(fpga)上被实施。
15.根据本说明书的方法和系统,gnn存储器访问系统可以被实施为gnn加速器。gnn加 速器可以包括可通过一个或多个软件可编程接口配置的多个核。通过一个或多个软件可 编程接口,gnn加速器可以被配置或编程为在处理gnn数据访问时提供极大的灵活性。 由于gnn存储器访问系统的核是可编程的,因此它们可以被灵活编程为匹配各种不同的 数据格式(例如,数据结构或布局),包括压缩稀疏行(csr)格式、坐标(coo)格式、链 表格式、数组格式、动态图格式、键-值格式、关于边的权重值格式、编码属性格式、间 接节点-标识符格式、任意跳数格式、跳过提取权重或属性格式、其他格式或其任意组合。 与具有用于处理特定gnn数据格式的内部管道硬编码/连线的现有gnn加速器相比,本文 所述的gnn存储器访问系统可编程为与已知的主流gnn数据格式兼容。因此,改进了gnn 存储器访问系统的功能,并且扩展了系统的可用性以处理和支持以不同数据格式表示的 gnn。
附图说明
16.图1是根据本说明书的一些实施例的示例图的示意图。
17.图2是根据本说明书的一些实施例的使用gnn加速器架构的示例系统的示意图。
18.图3是根据本说明书的一些实施例的用于加速gnn性能的示例系统的示意图。
19.图4是根据本说明书的一些实施例的示例gnn访问引擎的示意图。
20.图5是根据本说明书的一些实施例的示例改进的gnn存储器访问系统的示意图。
21.图6是根据本说明书的一些实施例的执行属性数据访问的示例改进的gnn存储器访 问系统的示意图。
22.图7是根据本说明书的一些实施例的执行属性数据访问的示例改进的gnn存储器访 问系统的示意图。
23.图8是根据本说明书的一些实施例的用于在进行gnn处理时访问gnn属性数据的示 例方法的流程图。
具体实施方式
24.下面结合附图来描述本说明书的实施例的细节。附图示出了本说明书的一些实施例, 并且本说明书可以以各种方式实施并且不受本文描述的实施例的限制。相反,提供这些 实施例是为了更彻底地理解本说明书并且将本说明书的范围完整地传达给本领域技术人 员。
25.在许多实施例中,对应方法的步骤不一定按照本说明书中所示和所述的顺序执行。 在一些其他实施例中,该方法可以包括比本说明书中所述的步骤更多或更少的步骤。另 外,本说明书中所述的单个步骤可以被划分为多个步骤以用于在其他实施例中进行描述, 并且可以将本说明书中所述的多个步骤组合为单个步骤以用于在其他实施例中进行描述。
26.数据可以是结构化的或非结构化的。对于结构化数据,可以根据预设的数据模型或 方案来布置信息。对于非结构化数据,可以不使用预设数据模型或预定义方式来布置信 息。例如,文本文件(例如,电子邮件、报告等)可以包括不具有预定义结构的信息(例 如,单独字母或单词)。因此,非结构化数据可以包括使得使用传统程序或数据结构难 以理解的不规则性和歧义性。
27.表示非结构化数据的一种方式是通过使用图。图是一种数据结构,包括两个组件— —节点(或顶点)和边。例如,图g可以被定义为一组节点v和该组节点之间的一组边 e的集合。图中的节点可以具有一组特征或属性(例如,用户配置文件)。例如,节点 可以具有多达f个特征或属性。因此,对于具有n个节点的图,节点属性矩阵的维度可 以为n
×
f。如果节点与其他节点共享边,则该节点可以被定义为另一节点的相邻节点。 图可以是高度灵活的数据结构,因为图可能不需要预定义的规则来确定图中必须有多少 节点或边。由于图可以提供很大的灵活性,因此它是广泛用于存储或表示非结构化数据 (例如文本文件)的数据结构之一。
28.图1是根据本说明书的一些实施例的示例图的示意图。如图1所示,图包括节点n111、 n112、n113、n114、n115和n116。此外,图包括边e121、e122、e123、e124、e125、 e126和e127。每个节点具有一个或多个相邻节点。例如,节点n112和n113与节点n111 相邻,因为节点n112与节点n111共享边e121,并且节点n113与节点n111共享边e122。
29.当在存储器中存储图时,节点、边和属性可以以许多不同的数据格式(也称为数据 结构)存储。例如,图可以以压缩稀疏行(csr)格式、坐标(coo)格式、链表格式、数组 格式、
动态图格式、键-值格式、关于边的权重值格式、编码属性格式、间接节点标识符 格式、任意跳数格式、跳过提取权重或属性格式等来存储。不同的数据格式可能需要不 同的数据访问方法。
30.利用数组格式,图的节点标识符可以存储在数组中,其中每个节点标识符提供指向 对应节点的属性数据的位置的地址或指针。可以将所有节点的属性存储在一起,并且可 以通过读取存储在对应节点标识符中的地址或指针来访问它们。通过将属性数据与对应 节点分离,数据结构可以提供对图的更快的遍历访问。
31.利用csr格式,图的节点和边可以存储在单独的数组中,其中这些数组的索引对应 于节点标识符和边标识符。边数组可以按照每条边的来源进行分类,并且包括边信息或 边的另一端上的节点标识符。节点数组可以将偏移量存储到边数组中,从而为每个节点 的第一边提供偏移量。例如,如图1所示,图的边数组可以是“n112、n113、n111、n113、 n114、n111、n112、n115、n112、n115、n116、n113、n114、n114”。前两个条目“n112
”ꢀ
和“n113”表示源自第一个节点n111的两条边。接下来的三个条目“n111”、“n113
”ꢀ
和“n114”表示源自第二个节点n112的三条边。相同的逻辑可以应用于边数组的其余部 分。节点数组可以只包括边数组中的偏移量,诸如“1,3,6,9,12,14”。csr格式被 认为适用于通过将条目打包在压缩数组中来存储稀疏图,从而允许快速遍历图的节点和 边。
32.利用coo格式,图的边可以存储为元组列表,其中每条边的元组可以包括源节点标 识符、目的节点标识符、边的合适属性信息或其任意组合。例如,如图1所示,边e121 可以表示为[n111,n112]。在一些实施例中,如果边被加权,则元组中的额外条目可以 被创建来记录每条边的权重值。例如,如图1所示,如果边121的权重值为3,则元组 表示为[n111,n112,3]。在一些实施例中,以coo格式存储的图数据未被排序。例如,所 有边的元组可以按任何顺序存储。coo格式可以适合于经常更新的图。例如,如果在图 中添加了新的节点或新的边,coo格式只需为新添加的数据添加一个或多个元组。
[0033]
利用链表格式,图的节点和/或边可以被存储在链表中。例如,图节点可以被存储在 第一链表中,并且边可以被存储在第二链表中。第一链表和第二链表可以被交叉引用(例 如,通过使用交叉表指针)。与基于数组的数据格式相比,基于链表的数据格式可以提 供更好的灵活性和更高的随机访问速度,但可能会遭受较低的顺序访问速度。
[0034]
利用动态图格式,图可以使用诸如链表的数据结构来扩展。
[0035]
利用键-值搜索和键-值反转搜索格式,图的节点和/或边可以被存储为键-值对,使 得键-值搜索可以在图上被高效地执行。例如,对于给定的节点标识符,键-值搜索格式 可以对节点标识符的属性数据、边或相邻节点执行高效搜索。此外,反向搜索还可以以 高效的方式执行。例如,对于给定的属性数据、边或相邻节点,键-值反向搜索格式可以 执行对于对应节点标识符的高效搜索。
[0036]
利用边格式上的权重值,图中的每条边可以携带权重值(例如,类似于coo格式)。 关于边的权重值可以用于例如gnn采样过程。
[0037]
利用编码属性格式,可以通过基于节点的节点标识符来执行附加计算而获取节点的 属性数据的存储器位置。计算可以指对属性数据的编码存储器位置进行解码。
[0038]
利用任意跳数格式,可以高效地访问间接连接到给定节点的节点。例如,如图1所 示,节点n116经由至少三条边(例如边e121、e124和e127)与节点n111连接。尽管 节点n116
与节点n111相距三条边,但如果给定节点n111,仍然可以以高效地方式来访 问节点n116。
[0039]
利用跳过提取权重或属性格式,属性数据和边的权重值不必一起被提取。例如,对 于给定的节点标识符,其边的权重值可以被高效地提取,而不用提取对应于节点标识符 或节点标识符的相邻节点的属性数据。
[0040]
图神经网络(gnn)是一种可以直接对图进行操作的神经网络。gnn可以比传统的神经 网络(例如,卷积神经网络)更适合对图进行操作,因为gnn可以更好被配备为适应图 的任意大小或图的复杂拓扑。gnn可以对以图格式所描述的数据执行推断。gnn能够执行 节点级、边级或图级预测任务。
[0041]
gnn处理可以涉及gnn训练和gnn推断,其两者都可以涉及gnn计算。节点(或顶 点)上的典型gnn计算可以涉及聚合其邻居的(直接邻居或每个邻居的邻居)的特征, 然后计算节点的新激活,以确定节点的特征表示(例如,特征向量)。因此,针对少量 节点的gnn处理通常需要显著大量节点的输入特征。将所有邻居用于消息聚合成本太高, 因为输入特征所需的节点会很容易覆盖图的大部分,尤其是对于规模巨大的现实世界图 (例如,具有数十亿条边的数亿个节点)。
[0042]
为了执行gnn,系统可以从存储器中检索图数据,并将数据发送到一个或多个处理 器以用于处理。图2是根据本说明书的一些实施例的使用gnn加速器架构的示例系统的 示意图。如图所2示,系统200包括一个或多个处理器210、gnn模块220、存储器230 和一个或多个专用处理器240。在一些实施例中,一个或多个处理器210包括一个或多 个cpu(central processing units)。在一些实施例中,一个或多个专用处理器240可以包 括一个或多个图处理单元(gpu)或专用神经网络处理单元(例如,专用图神经网络处理单 元)。在一些实施例中,存储器230可以包括同步动态随机存取存储器(sdram),诸如 双倍数据速率(ddr)sdram。
[0043]
如图2所示,gnn模块220可以从一个或多个处理器210接收关于gnn的指令和信 息,并且从存储器230中提取与gnn相关的数据。在从存储器230接收到数据之后,gnn 模块220可以处理数据,并将处理后的数据发送到一个或多个专用处理器240以进行处 理。
[0044]
在一些实施例中,如图2所示,gnn模块220可以包括图结构处理器221、gnn采样 器222、gnn属性处理器223和地址映射器224。图结构处理器221可以从一个或多个处 理器210接收关于gnn的指令和信息,并且从存储器230提取关于越来越多节点及其边 的信息。图结构处理器221然后可以将提取的信息发送到gnn采样器222。
[0045]
gnn采样器222被配置为根据一个或多个节点的边信息来选择一个或多个经采样节 点以用于gnn处理。在一些实施例中,gnn采样器222可以根据正采样或负采样来选择 一个或多个经采样节点。例如,基于正采样,可以从与一个或多个节点相邻的节点中选 择一个或多个经采样节点。应当理解,可以使用除正采样和负采样之外的任何算法来选 择经采样节点。
[0046]
在选择了经采样节点后,gnn采样器222可以将经采样节点的选择信息发送到gnn 属性处理器223。基于经采样节点的信息,gnn属性处理器223被配置为从存储器中230 提取经采样节点的信息。在一些实施例中,经采样节点的信息可以包括每个经采样节点 的一个或多个特征。gnn采样器222还可以被配置为将所提取的经采样节点的信息以及 一个或多个节点及其边的信息发送到专用处理器240。专用处理器240可以基于从gnn属 性处理器
223接收到的信息来执行gnn处理。
[0047]
在一些实施例中,图结构处理器221和gnn属性处理器223可以使用地址映射器224 从存储器230提取信息。地址映射器可以被配置为基于节点标识符和边来提供存储器230 中的硬件地址信息。例如,可以使用标识符n111(例如,图1的节点n111)来识别作为输 入gnn的一部分的节点。如果图结构处理器221想要提取节点n111的信息(例如,节点 n111的属性数据),则图结构处理器221可以将标识符n111提供给地址映射器224,并 且地址映射器224可以确定存储器230中的存储节点n111的信息(例如节点n111的属性 数据)的物理地址。在一些实施例中,地址映射器224还可以确定存储器230中的存储关 于节点n111的边(例如,图1的边e121和e122)的信息的一个或多个物理地址。
[0048]
图2所示的系统200可以用于在加速gnn性能时加速许多不同系统的gnn存储器访 问。图3是根据本说明书的一些实施例的用于加速gnn性能的示例系统的示意图。如图 3所示,系统300包括访问引擎310。图3中所示的访问引擎310可以类似于图2中所示 的gnn模块220。访问引擎310可以被配置为从存储器(例如,图3中所示的ddr)检索执 行gnn计算所需的数据。例如,访问引擎310可以检索节点标识符、边标识符和与节点 标识符相对应的属性数据。由访问引擎310检索的数据可以被提供给执行引擎(例如,执 行引擎gemm 340或执行引擎vpu 350)或处理器以用于gnn相关计算。例如,如图3所 示,系统300包括两个执行引擎,执行引擎gemm 340和执行引擎vpu 350。执行引擎gemm 340可以被配置用于通用矩阵乘法(gemm)算法并且执行引擎vpu 350可以被配置用于向 量处理单元(vpu)。两种类型的引擎都可以以加速的方式来执行特定的gnn相关计算。
[0049]
虽然系统300可以包括加速引擎和处理器以加快gnn相关计算,但是正是访问引擎 310可能成为系统300的整体性能的瓶颈,因为由访问引擎执行的数据检索可能比执行 引擎执行数据处理更慢。图4是根据本说明书的一些实施例的示例gnn访问引擎的示意 图。可以理解,图4中所示的访问引擎400可以类似于图3中所示的访问引擎。如图4 所示,访问引擎400可以包括getneighbor模块410、getsample模块420、getattribute 模块430和getencode模块440。
[0050]
在一些实施例中,getneighbor模块410被配置为针对输入节点标识符来访问或识 别相邻节点。例如,类似于图2所示的图结构处理器221,getneighbor模块410可以接 收关于gnn的指令和信息,并且从ddr(例如,对应于图2的存储器230)提取关于一个或 多个节点、它们的边和它们的邻居(相邻节点)的信息。getneighbor模块410然后可以 将提取的信息发送到getsample模块420(例如,对应于图2的gnn采样器222)。
[0051]
在一些实施例中,getsample模块420被配置为从getneighbor模块410接收关于 一个或多个节点的信息并对一个或多个节点执行节点采样以用于gnn处理。例如,类似 于图2所示的gnn采样器222,getsample模块420可被配置为根据一个或多个节点的边 信息来选择一个或多个经采样节点以用于gnn处理。在一些实施例中,gnn采样器222 可以根据正采样和/或负采样来选择一个或多个经采样节点。在选择了经采样节点之后, getsample模块420可以将经采样节点的选择信息发送到getattribute模块430。
[0052]
在一些实施例中,getattribute模块430可以被配置为从getsample模块420接收 所选或经采样节点的信息,并从存储器(例如,图4中所示的ddr或图2中所示的存储 器230)提取关于经采样节点的属性信息。例如,类似于gnn属性处理器223,getattribute 模块430
可以被配置为基于接收到的经采样节点(例如,经采样节点标识符)从存储器230 提取经采样节点的属性数据。在一些实施例中,经采样节点的属性数据可以包括每个经 采样节点的一个或多个特征。
[0053]
如图2、图3、和图4所示,当基于gnn的系统执行存储器访问(例如,经由图3的 访问引擎)时,基于gnn的系统可以预定其硬编码/连线的内部管道(例如,图4的模块 410-440)来执行多个步骤,包括确定邻居、采样节点并提取关于经采样节点的属性。基 于gnn的系统中的访问引擎的硬编码/连线的内部管道意味着基于gnn的系统可能仅支持 一种特定(或几种类似的)数据结构。例如,图4中所示的访问引擎可以支持压缩稀疏 行(csr)格式,其中图的节点和边可以被存储在单独的数组中,其中这些数组的索引对应 于节点标识符和边标识符。然而,对于许多其他gnn数据格式,例如存储(行、列、值) 元组列表(例如,每个元组对应于非零值并包含非零值的行/列索引)的坐标列表(coo) 格式,图1中所描述的访问引擎中的硬编码/连线的内部管道可能无法正确解析数据格式 并访问数据。
[0054]
当基于gnn的系统接收以多种类型格式的gnn或图时,会出现其他问题。例如,常 用的图格式可以包括基于csr格式、coo格式、链表格式、数组格式、动态图格式、键
‑ꢀ
值格式、关于边的权重值格式、编码属性格式、间接节点-标识符格式、任意跳数格式、 跳过提取权重或属性格式等的数据格式。一些基于gnn的系统也接收不同类型格式组合 的gnn或图。为了能够支持所有类型的这些格式或数据结构,需要在访问引擎上进行新 的设计,以概括在提取数据时的流程以用于进行gnn处理。
[0055]
本说明书的实施例提供了用于跨广范围的数据格式的访问数据以用于进行gnn处理 的新颖系统和方法。图5是根据本说明书的一些实施例的示例改进的gnn存储器访问系 统的示意图。如图5所示,gnn存储器访问系统500包括多个核510、总线520和一个或 多个存储器缓冲器530。在一些实施例中,多个核510可以访问对数据进行托管以用于 gnn的存储器。例如,存储器存储装置可以是ddr(例如,图4中所示的ddr)。总线520 可以与核510和存储器缓冲器530通信耦合。在一些实施例中,总线520可以是提供多 个核510和存储器缓冲器530之间互连的纵横开关。在一些实施例中,存储器缓冲器530 可以是多组缓冲器。在一些实施例中,gnn存储器访问系统500可以替代上述访问引擎。 例如,gnn存储器访问系统500可以替代图3中所示的gnn处理系统300的访问引擎。 在一些实施例中,gnn存储器访问系统500可以替代图2的gnn模块220或者图4中所 示的getneighbor模块410、getsample模块420和getattribute模块430。在一些实 施例中,gnn存储器访问系统500还可包括用于管理存储器访问(例如,存储器存储装置 中的存储器访问)的存储器管理系统540。
[0056]
在一些实施例中,多个核510中的每个可以包括键-值提取器511、滤波器512或重 新排序记分板513。在一些实施例中,多个核510,包括键-值提取器511、滤波器512 和重新排序记分板513可以是可编程硬件(例如,现场可编程门阵列(fpga))。例如, 多个核510可以由软件、软件接口或由软件用户通过软件接口编程。键-值提取器511可 以被配置或编程为执行键-值提取功能。例如,键-值提取器511可以接收标识符(键), 并且提取与标识符(值)对应的数据。滤波器512可以被配置或编程为执行滤波功能。例 如,对于具有多个标识符的输入,滤波器512可以基于一个或多个滤波规则(例如,采样 算法)从多个标识符中选择子集。在一些实施例中,重新排序记分板513是可以被配置为 对从键-值提取器511或滤波器512接收到的数据执行排序或重新排序的单元。
[0057]
软件接口可以以各种方式被实施。在一些实施例中,可以使用一个软件接口对多个 核510进行编程。在一些实施例中,多个核510中的每个可以由对应的软件接口来编程。 在一些实施例中,多个核可以被分成组,并且每个组可以通过对应的软件接口进行编程。
[0058]
在一些实施例中,被表示为第一核的核510中的至少一个可以被配置或编程为替代 图4中的getneighbor模块410。例如,第一核可以被配置为针对输入节点标识符来访 问或识别相邻节点。因此,类似于图4中的getneighbor模块410,第一核执行键-值提 取功能,其中输入节点标识符为键,且相邻节点或相邻节点标识符为值(例如,基于键 来提取值)。因此,第一核可以使用键-值提取器511来执行键-值提取功能。键-值提取 器511可以接收输入节点标识符(键)并提取与输入节点标识符对应的相邻节点标识符 (值)。在一些实施例中,键-值提取器511可以被配置或编程为从缓冲器530中提取输入 节点标识符,并将相邻节点标识符写回到缓冲器530,使得相邻节点标识符可以由其他 核来访问510。
[0059]
在一些实施例中,被表示为第二核的核510中的至少一个可以被配置或编程为替代 图4中的getattribute模块430。例如,第二核可以被配置为从第一核接收所选或经采 样的节点或节点标识符的信息,并从存储器(例如,图4中所示的ddr)提取关于经采样 节点的属性数据。因此,类似于图4中的getattribute模块430,第二核执行键-值提 取功能,其中经采样节点标识符为键以用于提取属性数据作为值。因此,第二核可以使 用键-值提取器511来执行键-值提取功能。键-值提取器511可以接收经采样节点标识符 (键)并提取与经采样节点标识符对应的属性数据(值)。
[0060]
在一些实施例中,被表示为第三核的核510中的至少一个可以被编程为替代图4中 的getsample模块420。例如,第三核被配置/编程为接收相邻的节点标识符并根据相邻 的节点标识符进行节点采样以生成经采样节点标识符。因此,类似于图4中的getsample 模块420,第三核执行滤波功能,其根据相邻的节点标识符来选择节点标识符的子集。 因此,第三核可以使用滤波器512来执行滤波功能,并根据相邻的节点标识符来选择图 中的节点标识符的子集作为经采样节点标识符。
[0061]
在一些实施例中,为了实现图4中的可适用于不同数据格式的各个模块的功能,多 个核510可能需要为每个模块配置或编程。图6是根据本说明书的一些实施例的执行属 性数据访问的示例改进的gnn存储器访问系统的示意图。如图6所示,gnn存储器访问 系统600包括多个核611-617。在一些实施例中,图6中所示的gnn存储器访问系统600 类似于图5中所示的gnn存储器访问系统500,并且多个核611-617类似于图5中所示 的多个核510。gnn存储器访问系统600还包括存储器缓冲器630(例如,类似于图5的 存储器缓冲器530)和与多个核611-617和存储器缓冲器630通信耦合的总线620(例如, 类似于图5的总线520)。在一些实施例中,gnn存储器访问系统600还包括存储器管理 (例如,类似于图5中所示的存储器管理540)。如图6所示,多个核611-617被配置或 编程(例如,经由软件接口)为在访问属性数据时执行各个步骤。例如,各个步骤可以包 括图6中使用箭头所示的步骤1-16。gnn存储器访问系统600可以对许多不同类型的数 据格式(包括csr格式、链表格式、数组格式、动态图格式、间接节点-标识符格式、任 意跳数格式,或其组合)执行属性数据访问。例如,基于特定的数据格式,多个核可以 被编程为适应数据格式。在一些实施例中,当访问系统600需要访问以新数据格式存储 的属性数据时,多个核可被再次编程为适应新数据格式。
[0062]
如图6所示,在步骤1中,核611被配置或编程为接收根节点标识符。在一些实施 例
中,根节点标识符从主机(诸如图2的处理器210)被接收。在步骤2中,核611的 键-值提取器可以被配置或编程为基于根节点标识符(键)来提取对应于根节点的指针(值)。指针指向根节点的结构数据,其可以包括边列表指针。在一些实施例中,对应于 根节点的指针从存储器存储装置中提取。例如,如图6所示,核611可以访问作为存储 器存储装置的一部分的ddr。在一些实施例中,根节点标识符已经包括关于与根节点对 应的指针的信息。因此,可以不需要步骤1-2来执行键-值提取以将根节点标识符转换为 指针。在与根节点对应的指针被提取后,将指针写入存储器缓冲器630以供下一个核(例 如核612)的访问。由于存储器缓冲器630经由总线620与多个核611-617通信耦合,所 以多个核611-617中的每个都可以访问存储器缓冲器630并从其提取数据。
[0063]
在步骤3中,核612被配置或编程为从存储器缓冲器630接收且提取与根节点对应 的指针。在步骤4中,核612的键-值提取器可以被配置或编程为基于接收到的与根节点 对应的指针,提取与根节点对应的边列表指针(值)。边列表指针指向根节点的边指针 列表。在一些实施例中,可以从存储器存储装置中提取边列表指针。例如,如图6所示, 核612可以访问作为存储器存储装置的一部分的ddr。在检索到边列表指针之后,核613 被编程或配置为将边列表指针写入存储器缓冲器630。
[0064]
在步骤5中,核613被配置或编程为从存储器缓冲器630接收且提取边列表指针。 在步骤6中,核613的键-值提取器可以被配置或编程为基于边列表指针来提取关于一条 或多条边的边数据,并将边数据写入存储器缓冲器630。在一些实施例中,从存储器存 储装置中提取边数据。例如,如图6所示,核613可以访问作为存储器存储装置的一部 分的ddr。在步骤6中提取的边数据可以包括连接根节点与其相邻节点的边。在一些实 施例中,边数据包括边标识符或相邻节点的节点标识符。在一些实施例中,一个或多个 边标识符或节点标识符被连续存储在数组中,并且数组的存储器地址由边列表指针所指 向。在一些实施例中,除了存储器地址之外,边列表指针还可以包括根节点的边或相邻 节点的数量。因此,当内613的键-值提取器提取边数据时,键-值提取器可以基于存储 器地址来定位边数据,并提取边数大小的数组。
[0065]
在步骤7中,核614被配置或编程为从存储器缓冲器630接收且提取边数据。在一 些实施例中,边数据包括相邻节点的节点标识符。在一些实施例中,节点标识符以链表 格式或动态图格式被存储。因此,可能需要一个或多个额外步骤来提取相邻节点的所有 节点标识符。例如,在步骤8中,将链表中的下一个指针可以被提供给核613的键-值提 取器,并且核613的键-值提取器可以被配置或编程为基于下一个指针来提取关于一条或 多条边的边数据。这个步骤可以重复,直到链表中的每个指针都被处理。在步骤9中, 核614的滤波器被配置或编程为从相邻节点的节点标识符中进行采样并且选择一个或多 个经采样节点标识符。在一些实施例中,可以根据一个或多个采样算法对相邻节点的节 点标识符进行采样,并且可以通过软件接口将采样算法编程到滤波器中。核613还被配 置或编程为将经采样节点标识符写入存储缓冲器630。
[0066]
在步骤10中,核615被配置或编程为从存储器缓冲器630接收并提取经采样节点标 识符。在步骤11中,核615的键-值提取器可以被配置或编程为提取指向经采样节点标 识符的结构数据的经采样指针,并将经采样指针写入存储器缓冲器630。在一些实施例 中,经采样指针可以从存储器存储装置中提取。例如,如图6所示,核615可以访问作 为存储器存储
装置的一部分的ddr。在一些实施例中,经采样节点标识符的结构数据可 以包括指向经采样节点标识符的属性数据的经采样属性指针。
[0067]
在步骤12中,核616被配置或编程为从存储器缓冲器630接收且提取指向经采样节 点标识符的结构数据的经采样指针。在步骤13中,键-值提取器可以被配置或被编程为 使用经采样指针来提取指向经采样节点标识符的属性数据的经采样属性指针。在一些实 施例中,经采样属性指针可以从存储器存储装置中被提取。例如,如图6所示,核616 可以访问作为存储器存储装置的一部分的ddr。核616还被配置或编程为将经采样属性 指针写入存储器缓冲器630。在一些实施例中,经采样节点标识符已经包括关于经采样 指针的信息。结果,可能不需要步骤12-13来执行键-值提取以将经采样节点标识符转换 为经采样指针。在一些实施例中,步骤12-13可以适合于包括与指针间接关联的节点标 识符的数据格式(例如,间接节点标识符格式)。
[0068]
在步骤14中,核617被配置或编程为从存储器缓冲器630接收且提取经采样属性指 针。在一些实施例中,可能存在不止一个根节点。因此,可能需要一个或多个额外步骤 来提取每个根节点标识符的所有经采样属性指针。例如,在步骤15中,可以发起循环操 作以针对另一个根节点标识符执行步骤1-14中的一些或全部。核中的一个(例如,核617) 可以被配置或编程为发起循环操作。在一些实施例中,可能需要访问经采样节点的相邻 节点。例如,在任意跳数格式中,可能需要访问与根节点相距多条边的间接连接节点。 因此,可能需要一个或多个额外步骤来提取这些节点的属性指针。例如,在步骤15中, 可以发起循环操作以对经采样节点执行步骤1-14中的一些或全部。核中的一个(例如, 核615)可以被配置或编程为基于经采样节点标识符来发起循环操作。
[0069]
在步骤16中,核617的键-值提取器可以被配置或编程为使用经采样属性指针来提 取经采样节点标识符的属性数据。在一些实施例中,经采样节点标识符的属性数据可以 从存储器存储装置中提取。例如,如图6所示,核611可以访问作为存储器存储装置的 一部分的ddr。在一些实施例中,核617还可以被配置或编程为将所提取的属性数据发 送到其他单元用于进行gnn处理(例如,图2中所示的专用处理器240或图3中所示的执 行引擎)。
[0070]
如图6所示,gnn存储器访问系统600包括多个核,其可以被配置或编程为实现图2 中所示的访问引擎的许多功能。同时,由于gnn存储器访问系统600的核可通过一个或 多个软件可编程接口而编程,它们可以被灵活编程为匹配各种不同的数据结构,包括csr 格式、链表格式、数组格式、动态图格式、间接节点标识符格式、任意跳数格式或其任 意组合。此外,如果数据格式从旧数据格式改变为新数据格式,则多个核可被再次编程 为适应新数据格式。因此,gnn存储器访问系统的功能得到了极大的改进,并且系统的 可用性得到了扩展以处理许多更多的输入数据格式。
[0071]
在一些实施例中,为了实现图4中的用于各种gnn数据格式(诸如coo格式)的各 个模块的功能,图5中所示的多核510可能需要以不同的方式进行配置或编程。图7是 根据本说明书的一些实施例的执行属性数据访问的示例改进的gnn存储器访问系统的示 意图。如图7所示,gnn存储器访问系统700包括多个核711-717。在一些实施例中,根 据存储图数据的gnn数据格式,一些核(例如,核716-717)可以被配置或编程为实施 适当的数据访问方法来访问以数据格式存储的数据。在一些实施例中,图7中所示的gnn 存储器访问系统700似于图5中所示的gnn存储器访问系统500,并且多个核711-717 类似于图5中所示的多个核
510。gnn存储器访问系统700还包括存储器缓冲器730(例 如,类似于图5的存储器缓冲器530)和与多个核711-717和存储器缓冲器730通信耦 合的总线720(例如,类似于图5的总线520)。在一些实施例中,gnn存储器访问系统 700还包括存储器管理(例如,类似于图5中所示的存储器管理540)。如图所7示,多个 核711和717被配置或编程为在访问属性数据时执行各个步骤。例如,各个步骤可以包 括使用图7中的箭头所示的步骤1-11。gnn存储器访问系统700可以对多种不同类型的 数据格式(包括coo格式、数组格式、键-值格式、关于边的权重值格式、编码属性格式 或其组合)执行属性数据访问。
[0072]
如图7所示,在步骤1中,核711被配置或编程为接收根节点标识符。在一些实施 例中,根节点标识符从主机(诸如图2的处理器210)被接收。在步骤2中,核711的 键-值提取器可以被配置或编程为基于根节点标识符(键)来提取与根节点对应的边列表 指针(值)。边列表指针指向根节点的边指针列表。在一些实施例中,可以从存储器存储 装置提取边列表指针。例如,如图7所示,核711可以访问作为存储器存储装置的一部 分的ddr。在检索边列表指针之后,核711被编程或配置为将边列表指针写入存储器缓 冲器730。由于存储器缓冲器730经由总线720与多个核711-715通信耦合,因此多个 核711-715中的每个可以访问存储器缓冲器730且从其提取数据。
[0073]
在步骤3中,核712被配置或编程为从存储器缓冲器630接收且提取边列表指针。 在步骤4中,核712的键-值提取器被编程或配置为基于边列表指针来提取关于一条或多 条边的边数据。在一些实施例中,边数据可以从存储器存储装置中提取。例如,如图7 所示,核712可以访问作为存储器存储装置的一部分的ddr。在步骤4中所提取的边数 据可以包括连接根节点与其相邻节点的边。在一些实施例中,边数据包括边标识符和/ 或相邻节点的节点标识符。在一些实施例中,边数据包括权重值,并且核712的键-值提 取器可以被编程或配置为与边数据一起提取每条边的权重值。在一些实施例中,核712 的重新排序记分板可以被配置或编程为基于每条边的权重值对边数据进行排序。边的排 序权重值可以促进后续节点采样步骤。例如,可以将与权重值大于阈值的边连接的相邻 节点采样为正样本。在一些实施例中,可以对边数据进行排序,使得具有更低权重值的 边被存储在具有更高权重值的边之前。在一些实施例中,核712被进一步编程或配置为 将边数据存储到存储器缓冲器730中。
[0074]
在步骤5中,核713被配置或编程为从存储器缓冲器730接收且提取边数据。在一 些实施例中,边数据包括相邻节点的节点标识符。在一些实施例中,边数据包括边的权 重值。在步骤6中,核713的滤波器被配置或编程为从相邻节点的节点标识符中采样并 且选择一个或多个经采样节点标识符。在一些实施例中,根据边的权重值来选择经采样 节点标识符。例如,边信息可以从之前的步骤(例如,步骤4)中被排序。结果,核713 的滤波器可以被配置或编程为从边数据的第一部分(例如,具有更小权重值的边)中选择 经采样节点标识符。核713还被配置或编程为将经采样节点标识符写入存储器缓冲器 730。
[0075]
在步骤7中,核714被配置或编程为从存储器缓冲器730接收且提取经采样节点标 识符。在一些实施例中,图以编码的属性格式被存储。因此,可能需要额外的步骤来从 经采样节点标识符中获取经采样节点的属性数据。例如,在步骤8中,核714的键-值提 取器可以被配置或编程为提取经采样节点标识符的代码,并将编码的经采样节点标识符 写入存储器缓冲器730。在一些实施例中,经采样节点标识符的代码可以从存储器存储 装置中被提
取。例如,如图7所示,核714可以访问作为存储器存储装置的一部分的ddr。 在步骤9中,核715的键-值提取器被配置或编程为从存储器缓冲器730接收且提取编码 的经采样节点标识符。在步骤10中,核715的键-值提取器可以被配置或编程为使用编 码的经采样节点标识符来提取经采样节点标识符的属性数据。在一些实施例中,可以从 存储器存储装置中提取属性数据。例如,如图7所示,核715可以访问作为存储器存储 装置的一部分的ddr。在一些实施例中,图不以编码属性格式被存储。结果,可以跳过 步骤8-9,并且核714被配置或编程为使用经采样节点标识符来提取经采样节点标识符 的属性数据。在一些实施例中,核714或核715还可以被配置或编程为将提取的属性数 据发送到其他单元以用于进行处理(例如,图2中所示的专用处理器240或图3中所示的 执行引擎)。
[0076]
如图7所示,gnn存储器访问系统700包括多个核,其可以被配置或编程为实现图2 中所示的访问引擎的许多功能。同时,由于gnn存储器访问系统700的核是可通过一个 或多个软件可编程接口编程的,所以它们可以被灵活编程为匹配各种不同的数据结构, 包括coo格式、数组格式、键-值格式、关于边的权重值格式、编码属性格式或其任意组 合。如图6和7所示,系统600和700的硬件设置可以是相同或类似的。同时,基于对 系统的每个组件(例如,多个核)进行编程或配置的不同方式,gnn存储器访问系统可 以被配置为支持广范围的图数据结构。因此,gnn存储器访问系统的功能得到了极大的 改进并且系统的可用性得到了扩展以处理许多更多的输入数据格式。
[0077]
应当理解,被编程到图6和7中所示的多个核中的步骤是示例性的。取决于确切的 gnn数据结构,可以对更多核或更少核进行编程,并且可以相应地调整每个核上的编程 为在访问给定gnn数据结构时最匹配需要。图5、图6和图7中所示的gnn存储器访问 系统的优点之一是可编程硬件中所提供的灵活性,使得潜在的各种gnn数据结构可以由 gnn存储器访问系统通过硬件编程来处理。
[0078]
如图6和图7所示,gnn存储器访问系统中的每个核可以被编程为在每种类型的数 据结构中执行属性数据访问时满足特定需要。用于对这些核进行编程的软件接口可以提 供许多可编程或可配置参数以用于进行编程。例如,对于每个核的键-值提取器,参数可 以包括存储键-值提取的键的存储器缓冲器的存储器地址、存储键-值提取的值的存储器 存储装置的存储器地址、待提取的键-值对的数量、待提取的数据长度、用于写入键-值 提取的结果的存储器缓冲器的目标存储器地址、或指示是否启用重新排序的标志。对于 每个核的滤波器,参数可以包括采样算法或用于对由采样算法生成的经采样结果进行滤 波的正则表达式。
[0079]
本说明书的实施例还提供了用于在gnn处理时访问gnn属性数据的方法。图8是根 据本说明书的一些实施例的用于在gnn处理时访问gnn属性数据的示例方法的流程图。 可以理解,图8中所示的方法800可以由图5中所示的系统500执行。
[0080]
在步骤810中,为了使用软件接口对多个核进行编程,使用软件接口对多个核中的 每个的键-值提取器进行编程为执行与访问gnn属性数据相关联的键-值提取器。例如, 如图6和图7所示,gnn存储器访问系统600和700中的每个核的键-值提取器被编程为 在访问gnn属性数据时执行一个或多个步骤。
[0081]
在一些实施例中,方法800还包括确定对应于gnn处理的数据格式的步骤。数据格 式可以包括例如链表格式、数组格式、动态图格式、键-值格式、关于边的权重值格式、 编码
属性格式、间接节点标识符格式、任意跳数格式、跳过提取权重或属性格式、其他 格式或其组合。可以根据确定的数据格式对多个核进行编程。例如,如果数据格式被确 定为csr格式,则可以以与图6中所示的gnn存储器访问系统600中的多个核类似的方 式对多个核进行编程。在另一示例中,如果数据格式被确定为coo格式,则可以以与图 7中所示的gnn存储器访问系统700中的多个核类似的方式对多个核进行编程。在一些 实施例中,如果数据格式从旧数据格式改变为新数据格式,则多个核可被再次编程为适 应新数据格式。
[0082]
数据格式可以通过各种手段来确定。例如,其可以被手动指定或输入或自动检测。 在一些实施例中,实施方法800的gnn加速器可以接收根节点以用于进行gnn处理。gnn 加速器可以确定存储了根节点的属性数据的外部存储器的存储器地址。通过读取属性数 据的头部(诸如,属性数据的元数据部分),gnn加速器可以学习根节点的(和其他图 节点的)属性数据的数据格式。数据格式可以被用于计算每个图节点的属性数据的数据 大小。例如,如果数据格式为csr,则数据大小包括三个一维数组的大小;而如果数据 格式为coo,则数据大小包括3元组的大小。在学习到数据大小后,gnn加速器可以从外 部存储器的存储器地址中提取该数据大小的数据以获得根节点的属性数据。数据可以包 括连接了根节点与其邻近节点的边的边标识符、邻近节点的节点标识符、边的权重或其 任意组合。gnn加速器可以基于所提取的数据来执行采样以获得一个或多个经采样节点 以用于进行根节点的gnn处理。在一些实施例中,采样可以是基于连接了根节点和邻近 节点的边的权重。例如,可以根据权重对边进行排序/重新排序。与权重大于阈值的边对 应的邻近节点可以被获得为经采样节点。随后,gnn加速器可以确定经采样节点的属性 数据在存储器(例如外部存储器)中的存储器地址。通过从存储器地址中读取该数据大 小的数据,gnn加速器可以获得经采样节点的属性数据,并将所提取的属性数据发送到gnn处理器(如gpu、tpu、npu等)以进行根节点的gnn处理。
[0083]
在一些实施例中,上述功能可以通过对gnn加速器中的多个核中的每个的键-值提取 器、滤波器、重新排序板进行编程来实现。使用软件接口对键-值提取器进行编程可以包 括对可配置参数中的至少一个进行编程。例如,可配置参数可以包括存储器缓冲器的存 储键-值提取的键的存储器地址、存储器存储装置的存储键-值提取的值的存储器地址、 待提取的键-值对的数量、待提取的数据长度、存储器缓冲器的用于写入键-值提取结果 的目标存储器地址、或指示是否启用重新排序的标志。
[0084]
在一些实施例中,键-值提取器可以被编程为确定第一存储器的存储了与键对应的值 的存储器地址、从存储器地址中提取与键对应的值、并将所提取的值写入第一存储器。 例如,如图6的步骤3和4中所示,核612的键-值提取器被编程为基于存储器缓冲器 630中确定的存储器地址而从存储器缓冲器630中提取对应于根节点的指针,其中所提 取的对应于根节点的指针为键-值提取中的键。核612的键-值提取器然后使用该键来提 取对应于根节点的边列表指针,并将边列表指针写入存储器缓冲器。在一些实施例中, 附加的可配置参数可以被编程为用于每个键-值提取器。例如,如图6中的步骤3和4所 示,对应于根节点的指针的长度可以被确定并被编程为待提取的多个键-值对的可配置参 数。此外,边列表指针的长度可以被确定并被编程为待提取的数据长度的可配置参数。
[0085]
在一些实施例中,为了对多个核中的每个的键-值提取器进行编程,通过软件接口对 第一核的键-值提取器进行编程为确定存储器缓冲器中的从其要提取根节点的边数据
15和16所示,核617的键-值提取器被编程为使用来自存储器存储装置的经采样属性指 针来提取经采样节点标识符的属性数据。核617的键-值提取器还可以被编程为将所提取 的属性数据发送到其他单元以进行gnn处理。
[0091]
在一些实施例中,可以将附加步骤编程到多个核中作为对多个核中的每个的键-值提 取器进行编程的步骤的一部分。例如,针对系统中的键-值提取器的图6或图7中所示的 任何步骤都可以被编程到多个核的键-值提取器中。
[0092]
参考回到图8。在步骤820中,为了使用软件接口对多个核进行编程,使用软件接 口对多个核中的至少一个的滤波器进行编程为采样与访问gnn属性数据相关联的节点标 识符。例如,如图6和图7中所示,核614或核713的滤波器可以被编程为从相邻节点 的节点标识符中采样并选择一个或多个经采样节点标识符。核614或核713(例如,核614 或核713的键-值提取器或滤波器)可以进一步被编程为将经采样节点标识符写入存储器 缓冲器630。
[0093]
在一些实施例中,使用软件接口对滤波器进行编程可以包括对可配置参数中的至少 一个进行编程。例如,可配置参数可以包括采样算法或用于对由采样算法生成的经采样 结果进行滤波的正则表达式。在一些实施例中,可以将附加步骤编程到多个核中作为对 多个核中的每个的滤波器进行编程的步骤的一部分。
[0094]
对于图8的方法800中所述的每个步骤,基于在gnn处理时的数据结构的确切类型, 可以将单个步骤编程到多个核中或者可以将多个步骤编程到一个核中。
[0095]
在前述部分中所述的每个过程、方法和算法可以在由一个或多个计算机系统或包括 计算机硬件的计算机处理器所执行的代码模块中体现,并且由这些代码模块完全或部分 自动化。过程和算法可以部分或全部在专用电路中被实施。
[0096]
当本文所公开的功能以软件功能单元的形式被实施并作为独立产品销售或使用时, 它们可以被存储在处理器可执行的非易失性计算机可读存储介质中。本文所公开的特定 技术解决方案(全部或部分)或有助于当前技术的方面可以以软件产品的形式体现。软 件产品可以被存储在存储介质中,包括使计算设备(其可以是个人计算机、服务器、网 络设备等)执行本技术的实施例的方法的所有或一些步骤的多个指令。存储介质可以包 括闪存驱动器、便携式硬盘驱动器、rom、ram、磁盘、光盘、可操作以存储程序代码的 另一介质、或其任意组合。
[0097]
特定实施例还提供了一种系统,该系统包括处理器和存储指令的非暂时性计算机可 读存储介质,该指令可由处理器执行以使得系统执行与以上公开的实施例的任何方法中 的步骤对应的操作。特定实施例还提供了一种非暂时性计算机可读存储介质,其被配置 有可由一个或多个处理器执行的指令,所述指令使得一个或多个处理器执行与以上公开 的实施例的任何方法中的步骤对应的操作。
[0098]
本文公开的实施例可以通过与客户端交互的云平台、服务器或服务器组(以下统称 为“服务系统”)来实施。客户端可以是终端设备或者由用户在平台注册的客户端,其 中终端设备可以是移动终端、个人计算机(pc),以及可以安装有平台应用程序的任何设 备。
[0099]
上述各种特征和过程可以彼此独立地使用或者可以以各种方式组合。所有可能的组 合和子组合都旨在落入本公开的范围内。此外,在一些实施方式中可以省略某些方法或 过程块。本文所述的方法和过程也不限于任何特定的顺序,并且与其相关的块或状态可 以
以从所示或讨论的顺序中删除、执行,包括基本上同时或以相反的顺序,这取决于所涉 及的功能,如本领域技术人员将理解的。
[0108]
如本文所用,“或”是包括性的而非排他性的,除非另有明确说明或上下文另有说 明。因此,本文中的“a、b、或c”是指“a、b、a和b、a和c、b和c,或a、b和c”, 除非另有明确说明或上下文另有说明。此外,“和”既是联合又是几个,除非另有明确 说明或上下文另有说明。因此,本文中的“a和b”是指“a和b,共同或分别地”,除 非另有明确说明或上下文另有说明。此外,可以为本文作为单个实例描述的资源、操作 或结构提供多个实例。此外,各种资源、操作、引擎和数据存储之间的边界在某种程度 上是任意的,并且在特定说明性配置的上下文中示出了特定操作。功能性的其他分配被 设想并且可以落入本公开的各种实施例的范围内。一般而言,在示例配置中作为单独资 源呈现的结构和功能性可以实施为组合结构或资源。类似地,呈现为单个资源的结构和 功能性可以实施为单独的资源。这些和其他变化、修改、添加和改进落入由所附权利要 求表示的本公开的实施例的范围内。因此,说明书和附图被认为是说明性的而不是限制 性的。
[0109]
术语“包括”或“包含”被用于指示随后声明的特征的存在,但其不排除其他特征 的添加。有条件的语言,例如“可以”、“可能”、“或许”或“会”,除非另有特别 说明或在所使用的上下文中以其他方式理解,通常旨在传达某些实施例包括,而其他实 施例不包括某些特征、元素和/或步骤。因此,这种有条件的语言通常并不意在暗示特征、 元素和/或步骤对于一个或多个实施例以任何方式是必需的,或者一个或多个实施例必然 包括用于在有或没有用户输入或提示的情况下决定是否这些特征、元素和/或步骤被包括 或将在任何特定实施例中执行的逻辑。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1