CN112860420A - 基于硬件虚拟化的数据处理方法及装置 - Google Patents
基于硬件虚拟化的数据处理方法及装置 Download PDFInfo
- Publication number
- CN112860420A CN112860420A CN201911184586.0A CN201911184586A CN112860420A CN 112860420 A CN112860420 A CN 112860420A CN 201911184586 A CN201911184586 A CN 201911184586A CN 112860420 A CN112860420 A CN 112860420A
- Authority
- CN
- China
- Prior art keywords
- programmable logic
- operator
- logic device
- data processing
- kernel
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 9
- 238000012545 processing Methods 0.000 claims abstract description 80
- 238000000034 method Methods 0.000 claims abstract description 39
- 230000006870 function Effects 0.000 claims description 51
- 238000010801 machine learning Methods 0.000 claims description 39
- 238000004422 calculation algorithm Methods 0.000 claims description 11
- 238000013528 artificial neural network Methods 0.000 claims description 8
- 238000004364 calculation method Methods 0.000 description 15
- 230000005540 biological transmission Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 3
- 238000011176 pooling Methods 0.000 description 3
- 229910052799 carbon Inorganic materials 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005094 computer simulation Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000014616 translation Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- VEMKTZHHVJILDY-UHFFFAOYSA-N resmethrin Chemical compound CC1(C)C(C=C(C)C)C1C(=O)OCC1=COC(CC=2C=CC=CC=2)=C1 VEMKTZHHVJILDY-UHFFFAOYSA-N 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- 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
-
- 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/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本说明书一个或多个实施例提供一种基于硬件虚拟化的数据处理方法及装置,该方法可以包括:针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于物理可编程逻辑器件上配置的计算内核,所述计算内核用于实现预定义的计算功能;确定所述数据处理系统中定义的算子;将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
Description
技术领域
本说明书一个或多个实施例涉及数据处理技术领域,尤其涉及一种基于硬件虚拟化的数据处理方法及装置。
背景技术
在相关技术中,对于数据处理的灵活性要求越来越高。例如,在机器学习场景中,通过不断调整机器学习模型和输入参数,能够逐步提升人工智能(AI)算法的准确性。因此,相关技术中提出了通过可编程逻辑器件来替代传统的CPU,利用可编程逻辑器件的可编程特性,满足数据处理的灵活性需求。类似地,在其他场景中同样存在对可编程逻辑器件的应用需求,以提升数据处理的灵活性。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种基于硬件虚拟化的数据处理方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种基于硬件虚拟化的数据处理方法,包括:
针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于物理可编程逻辑器件上配置的计算内核,所述计算内核用于实现预定义的计算功能;
确定所述数据处理系统中定义的算子;
将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
根据本说明书一个或多个实施例的第二方面,提出了一种基于硬件虚拟化的数据处理装置,包括:
实例化单元,针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于物理可编程逻辑器件上配置的计算内核,所述计算内核用于实现预定义的计算功能;
确定单元,确定所述数据处理系统中定义的算子;
分配单元,将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种基于硬件虚拟化实现数据处理的架构示意图。
图2是一示例性实施例提供的一种基于硬件虚拟化的数据处理方法的流程图。
图3是一示例性实施例提供的一种基于FPGA虚拟化的机器学习系统扩展方法的流程图。
图4是一示例性实施例提供的一种扩展后的机器学习系统的架构图。
图5是一示例性实施例提供的一种CL执行器所封装的接口功能的示意图。
图6是一示例性实施例提供的一种基于FPGA虚拟化实现机器学习任务的示意图。
图7是一示例性实施例提供的一种设备的结构示意图。
图8是一示例性实施例提供的一种基于硬件虚拟化的数据处理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
在一实施例中,本说明书的基于硬件虚拟化的数据处理方案可以应用于计算设备中,该计算设备在硬件上包括如图1所示的主机11和FPGA(Field Programmable GateArray,现场可编程门阵列)芯片12。主机11可以包括PC111和服务器112,或者诸如平板设备、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)、手机、可穿戴设备(如智能眼镜、智能手表等)等其他类型的电子设备,本说明书并不对此进行限制。同时,除了FPGA芯片12之外,计算设备还可以采用诸如CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)等其他类型的可编程逻辑器件(Programmable Logic Device,PLD),本说明书并不对此进行限制。
在运行过程中,主机11可以形成如图1所示的机器学习系统13或其他类型的数据处理系统。而通过对FPGA芯片12进行虚拟化,可以形成若干数量的虚拟FPGA(VirtualFPGA,简称vFPGA),这些vFPGA可以充分利用FPGA芯片12的强大算力来实现并行计算,以提升数据处理效率。同时,基于FPGA芯片12的可编辑特性,可以适用于机器学习系统13的灵活变化。
图2是一示例性实施例提供的一种基于硬件虚拟化的数据处理方法的流程图。如图2所示,该方法可以包括以下步骤:
步骤202,针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于物理可编程逻辑器件上配置的计算内核,所述计算内核用于实现预定义的计算功能。
在一实施例中,数据处理系统可以包括存在数据处理需求的任意系统,本说明书并不对此进行限制。例如,数据处理系统可以包括机器学习系统。再例如,数据处理系统可以包括交易数据统计系统。又例如,数据处理系统可以包括大数据挖掘系统。
在一实施例中,计算设备在硬件结构上可以包括主机和物理可编程逻辑器件。数据处理系统运行于主机上,而物理可编程逻辑器件可以协助处理数据处理系统的计算需求。为了更好地区别于虚拟可编程逻辑器件,此处强调性地采用了物理可编程逻辑器件这一说法,而该物理可编程逻辑器件即前文所述的可编程逻辑器件,譬如该物理可编程逻辑器件可以包括前文所述的FPGA、CPLD或其他类型,本说明书并不对此进行限制。由于物理可编程逻辑器件能够支持用户的编程操作,以调整可编程逻辑器件所能够实现的计算功能,使得物理可编程逻辑器件具有极高的灵活性,即便数据处理系统的计算需求发生变化时,譬如机器学习系统采用不同的机器学习模型,可编程逻辑器件均能够适用。
在一实施例中,通过将物理可编程逻辑器件关联(或称为注册)至数据处理系统,使得数据处理系统可以通过相关设备接口对物理可编程逻辑器件进行内存分配、数据传输等。譬如,物理可编程逻辑器件可以通过OpenCL关联至数据处理系统。
类似地,物理可编程逻辑器件所承载的上述计算内核也可以基于OpenCL实现开发。首先,用户可以采用譬如C或C++等高级语言编写内核函数;然后,在OpenCL编译环境中将高级语言编写的内核函数编译为硬件描述语言,再通过板级支持包(Board SupportPackage,BSP)映射为相应的二进制流,最终将该二进制流被烧录至物理可编程逻辑器件以形成相应的计算内核。当物理可编程逻辑器件所含的可编程逻辑资源充足时,该物理可编程逻辑器件上可以同时形成多个计算内核,以分别用于实现各自对应的预定义计算功能,这些预定义计算功能可以存在至少一部分相同或者完全不同。
在一实施例中,可以创建物理可编程逻辑器件对应的虚拟可编程逻辑器件,并将虚拟可编程逻辑器件注册至数据处理系统。例如,虚拟可编程逻辑器件可以通过OpenCL注册至数据处理系统。虚拟可编程逻辑器件的注册信息可以表明其所实现的计算功能,以便据此将下文所述的算子分配至恰当的虚拟可编程逻辑器件。当然,虚拟可编程逻辑器件仅存在于逻辑层面,并不能够真正实现计算功能,而是通过虚拟可编程逻辑器件对应的计算内核对相应算子的待处理数据进行计算,以实现相应的计算功能。可见,虚拟可编程逻辑器件与物理可编程逻辑器件上形成的计算内核之间存在一定的关联关系,使得数据处理系统可以通过对虚拟可编程逻辑器件进行管理,以实现对计算内核的调用。
在一种情况下,注册至数据处理系统的虚拟可编程逻辑器件与物理可编程逻辑器件上配置的计算内核一一对应。例如,可以在每次针对物理可编程逻辑器件进行配置、形成相应的计算内核后,触发对虚拟可编程逻辑器件的注册操作,确保注册至数据处理系统的虚拟可编程逻辑器件与当前形成的计算内核之间一一对应,可以通过虚拟可编程逻辑器件对相应的计算内核实现准确调用。
在另一种情况下,存在一计算内核库,该计算内核库包含数据处理系统可能涉及到的所有备选计算内核。那么,注册至数据处理系统的虚拟可编程逻辑器件可以覆盖所有的备选计算内核,而这些备选计算内核的至少一部分被配置为物理可编程逻辑器件上的计算内核。通常,只有部分备选计算内核被配置为物理可编程逻辑器件上的计算内核,使得注册至数据处理系统的虚拟可编程逻辑器件不仅包括对应于计算内核的部分,还包括其他备选计算内核对应的虚拟可编程逻辑器件。因此,即便是物理可编程逻辑器件对数据处理系统进行数据处理的过程中,用户也可以随时针对物理可编程逻辑器件进行重新配置,比如添加新的计算内核或者将原有的计算内核更改为实现其他计算功能的计算内核等,而由于注册至数据处理系统的虚拟可编程逻辑器件可以覆盖所有的备选计算内核,可以确保重新配置后的计算内核必然存在对应的虚拟可编程逻辑器件,因而必然可以通过虚拟可编程逻辑器件对重新配置后的计算内核进行调用,而无需终止物理可编程逻辑器件的运行、无需对虚拟可编程逻辑器件进行重新注册。实际上,在此种情况下,除非计算内核库发生更新,否则任何针对物理可编程逻辑器件的重新配置,都不会触发对虚拟可编程逻辑器件的重新注册。
步骤204,确定所述数据处理系统中定义的算子。
在一实施例中,可以根据所述数据处理系统定义的计算图形式的计算模型,确定所述计算图中形成的算子。当然,本说明书中的算子还可以采用其他方式形成,而与计算模型无关。其中,在与计算模型相关的情况下,该计算模型并不一定采用计算图形式予以表征,仍然可以形成相应的算子;以及,以及在与计算图相关的情况下,该计算图并不一定表征为计算模型,但同样可以形成相应的算子,本说明书并不对此进行限制。
在一实施例中,可以通过诸如TensorFlow形成计算图(Computational Graph)(或称之为数据流图,即Data Flow Graphs)形式的计算模型。计算图或数据流图中包含可视化的若干算子(或称之为节点,即Nodes),每个算子表示一定的数学操作。例如,当数据处理系统为采用神经网络算法的机器学习系统时,神经网络的每一层在计算图上形成对应的一个算子。
步骤206,将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
在一实施例中,通过形成对应于计算内核的虚拟可编程逻辑器件,并将虚拟可编程逻辑器件注册至数据处理系统,使得数据处理系统对虚拟可编程逻辑器件的管理和调用,与针对物理设备的管理和调用类似,并且能够通过调用虚拟可编程逻辑器件,使得相应的计算内核能够用于对算子的计算处理,因而无需针对计算模型实施针对性的改动,也不需要额外的用户操作,具有极大的便捷性与灵活度。同时,数据处理系统可以根据需求实施运行优化,比如对数据传输过程的掩盖(overlap)、针对下文中的放置算法进行调整等,均不会影响对虚拟可编程逻辑器件的管理和调用。
在一实施例中,当物理可编程逻辑器件上包含多个计算内核时,多个计算内核之间可以根据实际需求进行串行或并行计算,比如当多个计算内核之间存在数据依赖关系时可能需要串行计算,而当多个计算内核之间不存在数据依赖关系时则采用并行计算,以充分利用物理可编程逻辑器件的强大算力、提升处理效率。
在一实施例中,可以调用算子对应的算子内核,该算子内核对应于一个或多个虚拟可编程逻辑器件。当算子内核仅存在唯一对应的虚拟可编程逻辑器件时,可以将算子分配至该唯一对应的虚拟可编程逻辑器件;或者,当算子内核对应于多个虚拟可编程逻辑器件时,可以根据预定义的放置策略从这些虚拟可编程逻辑器件中选取符合放置策略的特定虚拟可编程逻辑器件,从而将算子分配至该特定虚拟可编程逻辑器件,即实现了对算子的路由功能。其中,预定义的放置策略可以包括以下至少之一:输入的参数规模、采用的放置算法等,本说明书并不对此进行限制。
在一实施例中,算子仅存在唯一对应的算子内核。一种情况下,每个算子均存在一个对应的算子内核,譬如可以预先获知计算模型将会产生的算子,并针对每一算子注册一个对应的算子内核,或者存在一算子库,该算子库中存在所有可能出现的算子,因而可以预先针对算子库中的每一算子注册对应的算子内核。虽然每个算子仅对应于一个算子内核,但是如果多个算子的类型相同,比如均用于实现“相加”运算,那么这些算子可以对应于同一算子内核,即一个算子内核可能同时对应于多个算子。
在一实施例中,当涉及到算子多态时,即某一算子存在多种输入输出的数据类型,那么该算子的每一数据类型均对应一算子内核,即该算子的数据类型与算子内核之间一一对应,使得该算子同时对应于多个算子内核,并且应当根据当前所采用的数据类型选取对应的算子内核。
当然,算子多态问题并不一定通过多算子内核的方式解决。例如,存在多态的算子可以对应于唯一的算子内核,只要该算子内核能够获知相应算子的输入输出的数据类型,并相应地将该算子分配至对应的虚拟可编程逻辑器件,使得该算子获得恰当的计算处理即可。
图3是一示例性实施例提供的一种基于FPGA虚拟化的机器学习系统扩展方法的流程图。本说明书的技术方案可以将FPGA扩展至应用于机器学习系统,利用FPGA的可编程特性,结合对FPGA的虚拟化,可以灵活地适应机器学习模型多变的场景。如图3所示,基于FPGA虚拟化的机器学习系统扩展方法可以包括以下步骤:
步骤302,扩展上层的机器学习系统。
在一实施例中,由于相关技术中的机器学习系统(即上层系统)在针对硬件设备(即下层设备)进行管理时,主要是针对诸如CPU和GPU等通用器件进行管理,使其无法满足对FPGA的管理需求。因此,需要对机器学习系统进行扩展,以使其能够适用于对FPGA进行管理。例如,本说明书中在不改变原有系统架构的基础上,通过对机器学习系统的硬件管理部分添加中间层,从而既可以实现对FPGA的管理功能,又能够兼容原有系统的设计模式。
例如,图4是一示例性实施例提供的一种扩展后的机器学习系统的架构图。如图4所示,新增的中间层主要包括基于OpenCL实现的CL执行器(CL-executor)和CL上下文(CL-context)。CL执行器用于封装OpenCL API接口,实现对FPGA的管理,如设备驱动、设备注册、内存管理、数据传输、虚拟化管理等,还可以维护FPGA虚拟化的全局信息(如vFPGA的数量等)。CL上下文用于维护vFPGA的信息,包括维护一个vFPGA队列、为每个vFPGA维护一识别码(ID)等。
CL执行器对OpenCL API进行封装时,可以基于OpenCL提供的管理FPGA的基础API,按照上层系统提供的统一硬件调用接口进行封装,从而为上层系统的调用提供统一接口。譬如图5所示,CL执行器可以针对内管管理、数据传输、虚拟化管理等功能进行封装,以使得上层系统可以据此对FPGA进行内存管理、数据传输、虚拟化管理等。
以内存管理为例。CL执行器所封装的功能包括内存分配(allocate)功能与内存回收(deallocate)功能。内存分配功能可以进一步包括创建CL上下文(GetClContext())、创建缓冲区(clCreateBuffer())、插入缓冲区映射表(Buffer_map.insert)等操作。内存回收功能可以进一步包括创建CL上下文(GetClContext())、释放内存对象(clReleaseMemObject())、擦除缓冲区映射表(Buffer_map.erase)等操作。
以数据传输为例。CL执行器所封装的功能包括主机(Host)至FPGA的传输功能与FPGA至主机的传输功能。主机至FPGA的传输功能可以进一步包括封装地址转换(clpointertrans)、创建CL队列(GetClCmdQueue())、入队同步操作(clEnqueueWriteBuffer())、等待传输完成(clWaitForEvent())等操作。FPGA至主机的传输功能可以进一步包括封装地址转换(clpointertrans)、创建CL队列(GetClCmdQueue())、入队同步操作(clEnqueueReadBuffer())、等待传输完成(clWaitForEvent())等操作。
以虚拟化管理为例。CL执行器所封装的功能包括设置vFPGA数量功能与调用CL上下文功能。设置vFPGA数量功能可以进一步包括询问CL内核(即计算内核)数量(queryNumClKernel)、检查vFPGA路由(checkvFPGArouting)、返回vFPGA数量(Return num_vFPGA)等操作。调用CL上下文功能可以进一步包括初始化vFPGA(que_vFPGA.init()for iin num_vFPGA)、调用CL队列(clCreateCmdQue())等操作。
步骤304,向上层系统注册FPGA。
在一实施例中,可以通过OpenCL将FPGA注册至上层系统。由于CL执行器已经完成了前述若干功能的封装,因而在注册阶段可以通过实例化CL执行器,使得上层系统可以调用CL执行器来实现已封装的前述功能,从而完成对FPGA的注册操作。
步骤306,开发FPGA的计算内核。
在一实施例中,可以基于OpenCL在FPGA上开发形成一个或多个计算内核。基于OpenCL对FPGA进行开发时,可以依托于设备商提供的针对OpenCL的开发套件(SDK)。例如,可以通过设备商提供的BSP来管理FPGA的片上资源,完成FPGA的驱动,并实现FPGA与主机之间的数据传输等。因此,用户首先可以通过高级语言编写计算内核对应的内核函数,然后将该内核函数在上述SDK所提供的OpenCL编译环境中编译为硬件描述语言,再通过BSP将其进一步映射为二进制流,该二进制流被烧录至FPGA后即可形成相应的计算内核。
每一计算内核分别用于实现相应的计算功能。因此,可以根据上层系统所需执行的机器学习模型,以及该机器学习模型所需实现的计算功能,在FPGA上配置相应的计算内核。例如,当机器学习模型涉及到卷积计算和池化计算时,可以在FPGA上相应配置用于实现卷积计算功能和池化计算功能的计算内核。较为具体地,当机器学习模型采用神经网络算法时,可以将神经网络的每一层作为一个单元(即算子),并针对每个单元在FPGA上配置相应的计算内核。
在同一场景下,通常涉及到的算子都可预期、不会经常发生变化,可以在FPGA上固化这些算子,使得FPGA在应用于该场景时,无需经常重配。例如,在机器学习场景下,常用的算子可以包括卷积(conv2d)、最大池化(maxpool)、LSTM单元(如contrib.rnn.BasicLSTMCell)等。
基于FPGA的可编辑特性,使得上层系统所采用的机器学习模型发生调整后,可以随时针对FPGA进行重新配置,使得配置得到的计算内核适用于调整后的机器学习模型。通常,应当在FPGA运行(即通过计算内核对机器学习模型进行处理)之前对该FPGA上所含的计算内核进行配置;而在一些场景下,甚至可以在FPGA运行的过程中,针对计算内核进行增加或修改,下文将针对这两种情况进行描述。
步骤308,向上层系统注册vFPGA。
如前所述,相关技术中的上层系统对下层设备的抽象和管理是以CPU、GPU等通用器件为基础的,与FPGA的可重配置的动态化特性相悖。为了解决这一矛盾,可以对FPGA进行虚拟化,比如创建如图4所示的vFPGA0、vFPGA1、vFPGA2等虚拟FPGA,并在这些虚拟FPGA与FPGA上形成的计算内核之间建立关联,使得上层系统可以将这些虚拟FPGA作为上述的通用器件进行抽象和管理,并且基于虚拟FPGA与计算内核之间的关联关系,从而在实际上实现对计算内核的调用,使得计算内核能够被应用于对机器学习模型进行处理。
通常可以将vFPGA与FPGA上配置的计算内核设置为一一对应。例如,当FPGA上配置有分别用于实现“相乘”、“相加”和“卷积”功能的3个计算内核K0、K1和K2时,可以确定vFPGA的数量为3,并在CL执行器中设置vFPGA的数量为num_vFPGA=3,而CL上下文可以自动初始化相应数目的vFPGA对象,这些对象用于存储相应vFPGA的CL命令队列和ID,譬如vFPGA0、vFPGA1和vFPGA2;然后,可以通过CL执行器设置各个vFPGA的设备信息,而CL上下文可以自动将这些设备信息与相应的vFPGA建立关联,从而完成对vFPGA的注册。在注册过程中,可以通过显式或隐式的方式明确每个vFPGA的功能,从而在vFPGA与计算内核之间建立起关联,最终形成vFPGA与计算内核之间一一对应的映射关系。相应地,每当FPGA发生重配置时,由于计算内核的数量和/或功能发生变化,因而应当对虚拟FPGA进行重新注册,以保持两者一一对应的映射关系。
在一些场景下,为了实现在FPGA运行过程中对计算内核进行重配置,vFPGA与计算内核之间并非一一对应的关系。该场景下需要维护一算子库,该算子库中记录有上层系统可能产生的所有类型的算子,或者该场景下可以维护一计算内核库,该计算内核库中记录有FPGA上可能配置的所有类型的计算内核,并且算子库中的算子与计算内核库中的计算内核一一对应。以维护计算内核库为例,可以向上层系统注册该计算内核库中所有计算内核对应的所有vFPGA。那么,虽然FPGA上仅会配置部分类型的计算内核,但该计算内核必然属于上述的计算内核库,因而不论FPGA上的计算内核如何配置和变化,必然存在对应的vFPGA,使得即便在FPGA运行过程中实施重配,上层系统也必然能够找到对应的vFPGA,并通过该vFPGA对相应的计算内核进行调用。
步骤310,向上层系统注册算子内核。
在一实施例中,算子内核用于同时承接上层系统产生的算子、对接下层FPGA对应的vFPGA,可以将算子恰当地路由至相匹配的vFPGA,进而由相应的计算内核进行处理。因此,算子内核用于实现对算子的路由功能。
在一实施例中,算子内核的数量通常与上层系统产生的算子数量相关。例如,算子内核与算子之间可以一一对应。或者,当算子存在多态时,也可能对应于多个算子内核。下文将对不同情况进行详述。
步骤312,数据处理及优化。
在一实施例中,假定上层系统希望定义的机器学习模型涉及到“相乘”、“相加”和“卷积”这三种计算功能,需要确定:FPGA上配置有相应的计算内核,且存在相应已注册的vFPGA。假定如图6所示,FPGA上配置的计算内核U0用于实现“相乘”、计算内核U1用于实现“相加”、计算内核U2用于实现“卷积”,且上层系统处注册了分别对应于计算内核U0、U1和U2的虚拟FPGA,分别为vFPGA0、vFPGA1和vFPGA2。当然,如果不存在相应的计算内核和vFPGA,则需要对FPGA进行重配,并向上层系统注册相应的vFPGA。
针对上述的机器学习模型,可以实现相应的机器学习任务。在运行机器学习任务时,上层系统可以利用诸如TensorFlow系统定义机器学习模型,使得该机器学习模型可以形成为计算图形式。譬如在图6所示的实施例中,上层系统形成的计算图可以包括算子61、算子62、算子63和算子64等。然后,由算子内核将各个算子路由至对应的vFPGA。
假定算子61用于实现“相乘”、算子62用于实现“相加”、算子63和算子64用于实现“卷积”,算子61属于一类、算子62属于一类、算子63和算子64属于一类,在不考虑算子多态的情况下,可以针对每一类算子分别配置一个相应的算子内核,因而图6中针对算子61配置了算子内核K0、针对算子62配置了算子内核K1、针对算子63和算子64配置了算子内核K2。其中,每个算子内核关联至一个或多个vFPGA;当关联至多个vFPGA时,需要基于预定义的放置策略,将相应的算子分配至恰当的vFPGA。
放置策略可以包括输入的参数规模、输入的参数类型、采用的放置算法等,本说明书并不对此进行限制。例如,对于“卷积”计算的算子63而言,预先可以分别配置对应于不同规格filter(卷积核)的计算内核以及对应的vFPGA,而算子内核K2可以根据算子63参数中的filter大小(即输入的参数规模)选择恰当的vFPGA,实现对算子63的合理分配。
如前所述,假定vFPGA0对应于计算内核U0,该计算内核U0用于实现“相乘”的计算功能,vFPGA1对应于计算内核U1,该计算内核U1用于实现“相加”的计算功能,vFPGA2对应于计算内核U2,该计算内核U2用于实现“卷积”的计算功能。因此,算子内核K0可以将算子61路由至vFPGA0,算子内核K1可以将算子62路由至vFPGA1,算子内核K2可以将算子63-64路由至vFPGA2,使得计算内核U0对算子61的相关数据进行相乘计算、计算内核U1对算子62的相关数据进行相加计算、计算内核U2对算子63-64的相关数据分别进行卷积计算。例如,上层系统可以配置一vFPGA监测器,通过监测每个vFPGA被分配的算子,将算子的相关数据传递至相应的计算内核。
如前所述,可能存在算子多态的问题,即同一算子的输入输出可能存在多种数据类型,那么可能采用的处理方式包括:一种情况下,仍然为每个算子配置一个算子内核,而该算子内核可以获知算子当前采用的数据类型,并据此分配至对应的vFPGA,使得一个算子内核可以针对各种数据类型而实现对算子的合理分配。另一种情况下,针对同一算子可能存在的每一种数据类型,分别配置对应的算子内核,比如当算子61存在两种数据类型时,可以针对该算子61配置两个算子内核,这两个算子内核分别对应于算子61的两种数据类型,以分别对该算子61进行分配。
基于上文所述的框架下,由于上层系统直接管理的对象为vFPGA,其管理模式与相关技术中对于CPU等通用器件相同或相似,而并非直接对FPGA进行管理,因而能够支持上层系统在运行过程中的优化方案,比如对数据传输过程的掩盖、对前述的放置算法的调整等,都不会影响到对于vFPGA的管理。
综上所述,本说明书公开的技术方案,通过对可编程逻辑器件进行虚拟化管理,能够在应用层调度上下文,并向利用可编程逻辑器件的资源,而不需要实施系统层面的修改,并且不限定于特定的系统,具有极高的通用性。
图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括主机和可编程逻辑器件712;其中,主机进一步包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他应用所需要的硬件。处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行,在逻辑层面上形成基于硬件虚拟化的数据处理装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,在软件实施方式中,该基于硬件虚拟化的数据处理装置可以包括:
实例化单元81,针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于可编程逻辑器件712上配置的计算内核,所述计算内核用于实现预定义的计算功能;
确定单元82,确定所述数据处理系统中定义的算子;
分配单元83,将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
可选的,注册至所述数据处理系统的虚拟可编程逻辑器件与所述可编程逻辑器件712上配置的计算内核一一对应。
可选的,注册至所述数据处理系统的虚拟可编程逻辑器件覆盖所有的备选计算内核;其中,所述备选计算内核的至少一部分被配置为所述可编程逻辑器件712上的计算内核。
可选的,所述可编程逻辑器件712通过OpenCL关联至所述数据处理系统,所述虚拟可编程逻辑器件通过OpenCL注册至所述数据处理系统。
可选的,采用高级语言编写的内核函数在OpenCL编译环境中被编译为硬件描述语言后,通过板级支持包映射为相应的二进制流,所述二进制流被烧录至所述可编程逻辑器件712以形成相应的计算内核。
可选的,确定单元82具体用于:
根据所述数据处理系统定义的计算图形式的计算模型,确定所述计算图中形成的算子。
可选的,分配单元83具体用于:
调用所述算子对应的算子内核,所述算子内核对应于一个或多个虚拟可编程逻辑器件;
将所述算子分配至所述算子内核唯一对应的虚拟可编程逻辑器件;或者,根据预定义的放置策略,将所述算子分配至所述算子内核对应的特定虚拟可编程逻辑器件。
可选的,分配单元83通过下述方式调用所述算子对应的算子内核:
调用所述算子唯一对应的算子内核;
或者,当所述算子存在多种输入输出的数据类型以及一一对应的多个算子内核时,根据数据类型选取对应的算子内核。
可选的,所述预定义的放置策略包括以下至少之一:输入的参数规模、采用的放置算法。
可选的,所述数据处理系统包括:机器学习系统。
可选的,所述机器学习系统采用神经网络算法;其中,神经网络的每一层形成对应的一个算子。
可选的,所述可编程逻辑器件包括:现场可编程门阵列FPGA。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (15)
1.一种基于硬件虚拟化的数据处理方法,其特征在于,包括:
针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于物理可编程逻辑器件上配置的计算内核,所述计算内核用于实现预定义的计算功能;
确定所述数据处理系统中定义的算子;
将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
2.根据权利要求1所述的方法,其特征在于,注册至所述数据处理系统的虚拟可编程逻辑器件与所述物理可编程逻辑器件上配置的计算内核一一对应。
3.根据权利要求1所述的方法,其特征在于,注册至所述数据处理系统的虚拟可编程逻辑器件覆盖所有的备选计算内核;其中,所述备选计算内核的至少一部分被配置为所述物理可编程逻辑器件上的计算内核。
4.根据权利要求1所述的方法,其特征在于,所述物理可编程逻辑器件通过OpenCL关联至所述数据处理系统,所述虚拟可编程逻辑器件通过OpenCL注册至所述数据处理系统。
5.根据权利要求4所述的方法,其特征在于,采用高级语言编写的内核函数在OpenCL编译环境中被编译为硬件描述语言后,通过板级支持包映射为相应的二进制流,所述二进制流被烧录至所述物理可编程逻辑器件以形成相应的计算内核。
6.根据权利要求1所述的方法,其特征在于,所述确定所述数据处理系统定义的算子,包括:
根据所述数据处理系统定义的计算图形式的计算模型,确定所述计算图中形成的算子。
7.根据权利要求1所述的方法,其特征在于,将所述算子分配至相匹配的虚拟可编程逻辑器件,包括:
调用所述算子对应的算子内核,所述算子内核对应于一个或多个虚拟可编程逻辑器件;
将所述算子分配至所述算子内核唯一对应的虚拟可编程逻辑器件;或者,根据预定义的放置策略,将所述算子分配至所述算子内核对应的特定虚拟可编程逻辑器件。
8.根据权利要求7所述的方法,其特征在于,调用所述算子对应的算子内核,包括:
调用所述算子唯一对应的算子内核;
或者,当所述算子存在多种输入输出的数据类型以及一一对应的多个算子内核时,根据数据类型选取对应的算子内核。
9.根据权利要求7所述的方法,其特征在于,所述预定义的放置策略包括以下至少之一:输入的参数规模、采用的放置算法。
10.根据权利要求1所述的方法,其特征在于,所述数据处理系统包括:机器学习系统。
11.根据权利要求10所述的方法,其特征在于,所述机器学习系统采用神经网络算法;其中,神经网络的每一层形成对应的一个算子。
12.根据权利要求1所述的方法,其特征在于,所述可编程逻辑器件包括:现场可编程门阵列FPGA。
13.一种基于硬件虚拟化的数据处理装置,其特征在于,包括:
实例化单元,针对已注册至数据处理系统的虚拟可编程逻辑器件进行实例化,所述虚拟可编程逻辑器件对应于物理可编程逻辑器件上配置的计算内核,所述计算内核用于实现预定义的计算功能;
确定单元,确定所述数据处理系统中定义的算子;
分配单元,将所述算子分配至相匹配的虚拟可编程逻辑器件,使所述算子的待处理数据传输至被分配的虚拟可编程逻辑器件对应的计算内核进行处理。
14.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-12中任一项所述的方法。
15.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-12中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911184586.0A CN112860420B (zh) | 2019-11-27 | 2019-11-27 | 基于硬件虚拟化的数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911184586.0A CN112860420B (zh) | 2019-11-27 | 2019-11-27 | 基于硬件虚拟化的数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112860420A true CN112860420A (zh) | 2021-05-28 |
CN112860420B CN112860420B (zh) | 2024-06-11 |
Family
ID=75985816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911184586.0A Active CN112860420B (zh) | 2019-11-27 | 2019-11-27 | 基于硬件虚拟化的数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112860420B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113902112A (zh) * | 2021-12-10 | 2022-01-07 | 深圳鲲云信息科技有限公司 | 硬件计算模拟方法、系统及计算机可读存储介质 |
CN114201154A (zh) * | 2021-12-10 | 2022-03-18 | 北京百度网讯科技有限公司 | 算子生成方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6073154A (en) * | 1998-06-26 | 2000-06-06 | Xilinx, Inc. | Computing multidimensional DFTs in FPGA |
CN104133889A (zh) * | 2014-07-30 | 2014-11-05 | 国云科技股份有限公司 | 一种数据库虚拟化微内核数据源注册与封装方法 |
US20180088992A1 (en) * | 2016-09-28 | 2018-03-29 | Amazon Technologies, Inc. | Intermediate host integrated circuit between virtual machine instance and customer programmable logic |
CN110383246A (zh) * | 2016-09-30 | 2019-10-25 | 亚马逊技术有限公司 | 虚拟机控制可编程硬件的单独子集 |
-
2019
- 2019-11-27 CN CN201911184586.0A patent/CN112860420B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6073154A (en) * | 1998-06-26 | 2000-06-06 | Xilinx, Inc. | Computing multidimensional DFTs in FPGA |
CN104133889A (zh) * | 2014-07-30 | 2014-11-05 | 国云科技股份有限公司 | 一种数据库虚拟化微内核数据源注册与封装方法 |
WO2016015439A1 (zh) * | 2014-07-30 | 2016-02-04 | 国云科技股份有限公司 | 数据库虚拟化微内核数据源的注册与封装方法 |
US20180088992A1 (en) * | 2016-09-28 | 2018-03-29 | Amazon Technologies, Inc. | Intermediate host integrated circuit between virtual machine instance and customer programmable logic |
CN109791500A (zh) * | 2016-09-28 | 2019-05-21 | 亚马逊科技公司 | 虚拟机实例和客户可编程逻辑之间的中间主机集成电路 |
CN110383246A (zh) * | 2016-09-30 | 2019-10-25 | 亚马逊技术有限公司 | 虚拟机控制可编程硬件的单独子集 |
Non-Patent Citations (2)
Title |
---|
王盛长;林浒;陶耀东;: "基于SOPC技术的嵌入式PLC虚拟机设计", 计算机工程与设计, no. 20, 28 October 2010 (2010-10-28) * |
范宏伟;胡宇翔;兰巨龙;: "基于FPGA的虚拟网络功能数据包处理加速架构", 计算机工程, no. 08, 15 August 2018 (2018-08-15) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113902112A (zh) * | 2021-12-10 | 2022-01-07 | 深圳鲲云信息科技有限公司 | 硬件计算模拟方法、系统及计算机可读存储介质 |
CN114201154A (zh) * | 2021-12-10 | 2022-03-18 | 北京百度网讯科技有限公司 | 算子生成方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112860420B (zh) | 2024-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110764901B (zh) | 基于gpu资源的数据处理方法、电子设备及系统 | |
NL2011315C2 (en) | A computing platform, a reconfigurable hardware device and a method for simultaneously executing processes on dynamically reconfigurable hardware device, such as an fpga, as well as instruction set processors, such as a cpu, and a related computer readable medium. | |
TWI806550B (zh) | 處理器操作方法、相關電腦系統、及非暫時性電腦可存取儲存媒體 | |
CN109299587A (zh) | 基于go语言的算法保护方法、装置、设备及存储介质 | |
CN105843683A (zh) | 用于动态优化平台资源分配的方法、系统和设备 | |
EP3779673B1 (en) | Methods and apparatus to configure heterogenous components in an accelerator | |
US10353717B2 (en) | Build-time memory management for multi-core embedded system | |
US9317296B2 (en) | High level software execution mask override | |
WO2023124968A1 (zh) | 软件操作系统调用Android动态库HAL接口的方法、设备及介质 | |
CN112860420B (zh) | 基于硬件虚拟化的数据处理方法及装置 | |
CN116467061A (zh) | 一种任务执行的方法、装置、存储介质及电子设备 | |
CN111247512B (zh) | 用于统一内存访问的计算机系统 | |
CN109408226A (zh) | 数据处理方法、装置及终端设备 | |
CN105074667B (zh) | 用于声明类型的方法以及实例化对象图的方法 | |
CN111459573A (zh) | 一种智能合约执行环境的启动方法以及装置 | |
US20230016927A1 (en) | Scheduling processing in a ray tracing system | |
US20210182041A1 (en) | Method and apparatus for enabling autonomous acceleration of dataflow ai applications | |
CN110941433B (zh) | 一种边缘辅助部署第三方应用到微控制器方法及系统 | |
US20220019531A1 (en) | Allocating Variables to Computer Memory | |
US12079595B2 (en) | Runtime support for role types that extend underlying types | |
US11934887B1 (en) | Distributed model compilation | |
US20240248694A1 (en) | Methods and apparatus to manage a cloud deployment | |
US20240272971A1 (en) | Monolothic application transformation | |
US20240118916A1 (en) | Methods and apparatus for container deployment in a network-constrained environment | |
US20220222204A1 (en) | Methods and apparatus to process web-scale 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 |