CN110088737A - 将并发程序转换为可部署在基于fpga的云基础设施上的硬件的综合路径 - Google Patents
将并发程序转换为可部署在基于fpga的云基础设施上的硬件的综合路径 Download PDFInfo
- Publication number
- CN110088737A CN110088737A CN201780078879.3A CN201780078879A CN110088737A CN 110088737 A CN110088737 A CN 110088737A CN 201780078879 A CN201780078879 A CN 201780078879A CN 110088737 A CN110088737 A CN 110088737A
- Authority
- CN
- China
- Prior art keywords
- fpga
- function
- accelerator
- principal function
- concurrent
- 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
- 230000010354 integration Effects 0.000 title description 4
- 238000000034 method Methods 0.000 claims abstract description 93
- 230000008569 process Effects 0.000 claims abstract description 57
- 230000001360 synchronised effect Effects 0.000 claims abstract description 27
- 238000013461 design Methods 0.000 claims abstract description 15
- 238000003491 array Methods 0.000 claims abstract description 5
- 230000006870 function Effects 0.000 claims description 143
- 238000012986 modification Methods 0.000 claims description 31
- 230000004048 modification Effects 0.000 claims description 31
- 238000012545 processing Methods 0.000 claims description 20
- 238000006243 chemical reaction Methods 0.000 abstract description 2
- 238000004891 communication Methods 0.000 description 33
- 240000002871 Tectona grandis Species 0.000 description 23
- 230000006399 behavior Effects 0.000 description 12
- 230000015572 biosynthetic process Effects 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 12
- 238000003786 synthesis reaction Methods 0.000 description 12
- 238000004458 analytical method Methods 0.000 description 11
- 230000018109 developmental process Effects 0.000 description 7
- 230000001133 acceleration Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000004913 activation Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 240000007182 Ochroma pyramidale Species 0.000 description 4
- 238000012800 visualization Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 229920001971 elastomer Polymers 0.000 description 3
- 239000000806 elastomer Substances 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000004087 circulation Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 241000283726 Bison Species 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000005553 drilling Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 230000033001 locomotion Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000003012 network analysis Methods 0.000 description 1
- 238000011017 operating method Methods 0.000 description 1
- 230000010181 polygamy Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000005641 tunneling Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
- G06F30/331—Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Geometry (AREA)
- Evolutionary Computation (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
利用FPGA来加速可以通过转换并发程序来执行。一种示例性操作模式可以通过以下方式从软件级的并发异步程序创建一个或多个同步硬件加速器:获得作为软件指令的输入,该软件指令通过在并发进程之间通过通道执行的消息交换的通信顺序进程(CSP)的模型来描述并发行为;在计算设备上,将每个并发进程映射到包括会合、分叉、合并、转向、变量和仲裁器中的至少一个的同步数据流基元;产生用于上载到一个或多个现场可编程门阵列(FPGA)设备的钟控数字逻辑描述;通过重定时,执行用于吞吐量、时钟频率和资源使用的输出设计的基元重映射;以及创建用于调试FPGA设备的并发代码的输入软件描述的注释图。
Description
优先权声明
本申请涉及2016年10月25日提交的、名称为“将并发程序转换为可部署在基于FPGA的云基础设施上的硬件的综合路径(SYNTHESIS PATH FOR TRANSFORMING PROGRAMSINTO HARDWARE DEPLOYABLE ON FPGA-BASED CLOUD INFRASTRUCTURES)”的第62/412376号美国临时专利申请,其全部内容通过引用并入本文。
技术领域
本申请涉及软件和硬件集成,特别是涉及适配用于FPGA开发的软件开发接口。
背景技术
传统上,并行编程和通信顺序进程(Communicating Sequential Processes,CSP)的形式模型的最新进展已经得到普及。CSP模型允许软件设计者实现可扩展的并发软件系统。然而,具有中间件和硬件平台的集成软件应用程序继续受到限制,并且因此使得开发者没有诸如FPGA之类的某些硬件开发平台一起工作所需的资源。
当前的FPGA工具基于面向硬件设计、仿真和执行的开发和测试周期特性的方法。试图利用这种技术的IT部门面临着包括低级语言和表示在内的障碍,并且未能利用现代高级语言能力的力量。稀有技术资源的高成本和昂贵的工具以及这种技术的高成本和进入试用的障碍也可能是一个限制。通信顺序进程(CSP)是一种基于C.A.R Hoare的并发设计模型。CSP模型历来被用于描述工业场合下的并发性。近年来,它的通信模式有了很大的发展,并在软件和硬件领域分别影响了包括“Go”和“Balsa”在内的几种语言。其描述可分为具有用于消息传递的通信通道的过程。还可以定义用于命令(动作)之间的交互的通道。CSP允许将部件过程定义为顺序过程和更原始过程的并行组合。使用各种过程代数运算符来描述不同过程之间的关系以及每个过程与其环境通信的方式。
弹性(Elasticity)已成为在计算机体系结构的不同领域中适应资源、通信或定时的灵活性的特性。数字电路中的弹性被称为对环境动力学的灵活性。该特征允许电路保持正确的功能,同时即使在“纳米”尺度和系统级延迟上也暴露于时序变化。我们利用弹性来实现单个/多个FPGA基础设施上的资源管理。
同步弹性协议(Synchronous Elastic Protocol,SELF)是在CSP通道上实现基于状态的控制流标准的有效通信协议。弹性是通过在电路中采用SELF来实现的。SELF由“闲置”、“重试”和“传送”三个通信状态构成。这些状态由分布在数字电路的通信和计算域中的弹性块(EB)来控制。EB类似于具有一些额外门以实现基于握手协议的控制机制的触发器。EB可被视为以相反时钟相位操作的一对锁存器。在正常模式下,锁存器作为触发器操作,其中一个保持磁泡(不包含数据的锁存器),另一个在任何时间都保存数据。通过防止传入数据令牌覆盖现有数据令牌来处理背压。
CSP模型与Kahn过程网络(KPN)模型不同,它具有足够的表达能力,并且允许非确定性行为的描述,例如基于令牌值的仲裁和条件语句。这使设计人员能够利用CSP对大量应用程序进行建模,在这些应用程序中可以对非确定性和条件行为进行建模。使用协同处理的硬件加速是使用计算机硬件来比在更通用的CPU上运行的软件中更有效地执行一些函数。硬件加速器可以包括GPU、FPGA、新颖的处理器设计和定制ASIC(专用集成电路)。API是定义的接口,系统和使用那些接口资源的应用程序通过该接口发生交互。API方法是向服务于不同类型消费者的不同应用提供一组可编程接口的体系结构方法。当在web开发的上下文中使用时,API通常被定义为一组超文本传输协议(HTTP)的请求消息,以及响应消息的结构的定义。
根据一个示例,“大数据”被定义为具有超出当前技术的能力的大小的数据集,以在可容许的流逝时间内捕获、管理和处理。大数据应用,如电子商务、机器学习、社交网络,消化大量数据,为忙碌中的终端用户提供有价值的信息。根据GOOGLE统计(2011),超过400万每分钟的搜索查询被他们的服务器接收,并且以每天大约20拍字节的信息被处理。这一数额在不久的将来将以数量级增长。因此,需要强大的加速基础设施(例如基于云的处理和存储服务)来满足这一巨大需求。
云计算提供了一种商品化的计算源(即动态计算),并降低了基础设施创建和管理的总成本,因为云服务提供商(如AMAZON EC2、GOOGLE CLOUD和IBM)提供了强大的工具和无限存储来管理终端用户的变动任务(即,弹性地)。今天,云服务提供商每天从主要企业客户接收数十亿个查询,这要求云应用(软件)在处理数据时足够快。传统的基于CPU的技术不能满足这种快速数据处理的要求。这就是主要云服务提供商将FPGA支持结合到其基础设施中的原因,例如。AWS F1,它允许云用户在FPGA卡上的云服务器中部署他们自己的定制处理单元,并获得加速的服务。这增强了计算灵活性并且在处理时间和能量方面提高了云应用的生产率。
为了使云应用开发者能够部署他们的定制处理单元,适当的FPGA工具是必要的。而且,允许没有任何硬件技能的软件开发者以诸如GO之类的语言综合其书面应用的机制可以产生可以存储和部署到基于FPGA的云计算基础设施上的一个或多个单独的和可加速的数据模块。
发明内容
本申请的一个示例实施例可以提供一种方法,该方法包括从软件级的并发异步程序创建同步硬件加速器,该方法可以包括以下中的至少一个:获得作为软件指令的输入,该软件指令通过在并发进程之间通过通道执行的消息交换的通信顺序进程(CSP)的模型来描述并发行为;在计算设备上,将每个并发进程映射到同步数据流基元,同步数据流基元包括会合、分叉、合并、转向、变量和仲裁器中的至少一个;产生用于上载到一个或多个现场可编程门阵列(FPGA)设备的钟控数字逻辑描述;通过重定时,执行用于吞吐量、时钟频率和资源使用的输出设计的基元重映射;以及创建用于调试FPGA设备的并发代码的输入软件描述的注释图。
另一示例实施例可以包括一种配置为从软件级的并发异步程序创建同步硬件加速器的装置,该装置可以包括处理器,该处理器配置为:获得作为软件指令的输入,该软件指令通过在并发进程之间通过通道执行的消息交换的通信顺序进程(CSP)的模型来描述并发行为;将每个并发进程映射到同步数据流基元,同步数据流基元包括会合、分叉、合并、转向、变量和仲裁器中的至少一个;产生用于上载到一个或多个现场可编程门阵列(FPGA)装置的钟控数字逻辑描述,通过重定时,执行用于吞吐量、时钟频率和资源使用的输出设计的基元重映射;以及创建用于调试FPGA设备的并发代码的输入软件描述的注释图。
又一示例实施例可包括非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质被配置为存储指令,当该指令在被执行时,使得处理器执行从软件级的并发异步程序创建同步硬件加速器,所述处理器还被配置为:获得作为软件指令的输入,该软件指令通过在并发进程之间通过通道执行的消息交换的通信顺序进程(CSP)的模型来描述并发行为;在计算设备上,将每个并发进程映射到同步数据流基元,同步数据流基元包括会合、分叉、合并、转向、变量和仲裁器中的至少一个;产生用于上载到一个或多个现场可编程门阵列(FPGA)装置的钟控数字逻辑描述;通过重定时,执行用于吞吐量、时钟频率和资源使用的输出设计的基元重映射;以及创建用于调试现场FPGA设备的并发代码的的输入软件描述的注释图。
附图说明
图1示出了根据示例实施例的软件和FPGA集成的示例逻辑流程图。
图2示出了根据示例实施例的软件和FPGA集成的三层适配模块。
图3示出了根据示例实施例的使用组合编译器方式集成的示例。
图4示出了根据示例实施例的来自主程序执行的与加速器模块集成的软件FPGA的逻辑电路图示例。
图5示出了根据示例实施例的执行FPGA编程的示例逻辑流程图。
图6示出了根据示例实施例的在FPGA上分离和存储加速器模块的示例配置。
图7示出了根据本申请的示例性实施例的示例性网络实体设备,该示例性网络实体设备被配置为存储指令、软件和用于执行所述的指令、软件的相应硬件。
具体实施方式
应当理解的是,如本文附图中总体描述和说明的,本申请的部件可以以多种不同的配置来布置和设计。因此,如附图所示的方法、装置和系统的实施例的以下详细描述并不旨在限制所要求保护的应用的范围,而是仅代表所选择的应用的实施例。
贯穿本说明书描述的应用的特征、结构或特性可以以任何合适的方式组合在一个或多个实施例中。例如,贯穿本说明书,短语“示例性实施例”、“一些实施例”或其他类似语言的使用指的是结合该实施例描述的特定特征、结构或特性可被包括在本申请的至少一个实施例中的事实。因此,贯穿本说明书,短语“示例性实施例”、“在一些实施例中”、“在其他实施例中”或其他类似语言的出现不一定都指同一组实施例,并且所描述的特征、结构或特性可以以任何合适的方式组合在一个或多个实施例中。
另外,虽然在本申请的实施例的描述中已经使用了术语“消息”,但是本申请可以应用于许多类型的网络数据,诸如包、帧、数据报文等。就本申请的目的而言,术语“消息”还包括包、帧、数据报文及其任何等同物。此外,虽然在本申请的示例性实施例中描述了特定类型的消息和信令,但是本申请不限于特定类型的消息,并且本申请不限于特定类型的信令。
示例实施例提供了一种从利用某些同步基元的软件描述产生同步数字设计的方法,包括软件指令的形式的输入,软件指令通过通信顺序进程(CSP)来描述并发行为,其中消息的基元在并发进程之间通过通道传递。输入可以被转换成适于但不限于被上载到一个或多个现场可编程门阵列(FPGA)设备的同步的(时钟控制的)数字逻辑描述。
可以基于时钟频率和/或资源使用来优化输出吞吐量。在操作中,工程师可以通过直接上载或通过源代码管理系统向远程托管服务提供描述,该远程托管服务然后可以转换、部署、调试和/或测试软件指令。这可以包括使用动画图形可视化来理解和调试FPGA设备和其他系统的并发代码。来自所部署多个系统的定时信息的测量和整理可以提供对行为和并发性的调试和分析。
代码划分是基于软件指令和系统分析将软件指令部署到不同架构、能力和/或拓扑的硬件,包括但不限于分析和可视化CSP代码的并发行为的工具。编译器工具可以允许工程师针对不同的硬件,诸如FPGA、GPU、来自相同代码库的多核系统,包括关于使用数据流还是状态机表示的分析决策。部署工具可以支持在多个连接的硬件系统上部署单个或多个代码库。
分析系统性能的工具可以指导操作员和软件开发者优化系统。示例实施例提供基于HTTP的API和软件系统作为服务的平台,用于编译、部署、管理、测量、分析和优化在多个连接的硬件系统上部署的系统。其他特征包括资源和资源连通性的协调、资源利用的动态管理、基于例如响应于需求的性能需求分析来控制所利用的资源。
示例实施例提供了使硬件和软件设计者能够应对计算基础设施的日益增加的复杂性的系统方法和系统。所提出的系统化方法克服了开发者在软件级对诸如技术、协议、数据编码和时钟细节之类的硬件级挑战缺乏熟悉的状况。这弥补了软件和硬件领域之间的差距,提高了开发人员的生产力和能力。
示例实施例提供了将高级CSP描述选择性地转换为FPGA可综合结构的异构环境。这使得软件开发者能够在不考虑系统级的定时问题的情况下加速代码。
图1示出了根据示例实施例FPGA综合逻辑流程的示例。参考图1,示例100包括被认为是诸如GOOGLE的GO语言之类的通用编程语言的软件描述112。本领域普通技术人员可以容易地认识到可以使用其他实施方式、平台、编译器和/或系统。从CSP到同步电路(SELF)的eTeak综合。可以通过诸如BALSA114之类的准备软件工具来解析和评估主应用文件或主程序。eTeak编译器可以包括前端122、数据流网络124和后端126,它们可以使用SELF协议来采用宏模块的Teak网络中的同步。
硬件/软件划分器116可以访问二进制数据170。eTeak的综合同步过程适于通过使用来自FPGA供应商的第三方综合工具(例如XILINX FPGA)与FPGA一起操作,以精化(elaborate)eTeak的所生成的VERILOG网表132,并执行资源共享/映射、精化142、重新定时和去弹性(De-elastization)144和综合146,以及产生可加载到FPGA 152上的比特流。该示例性系统的那些部分影响功率和性能约束160。
作为面向效率的优化技术的去弹性(流水线化)可以包括eTeak的同步弹性电路,其能够容忍由于其弹性性质而导致的时序变化。弹性可能对系统的整体性能施加过高的影响,因此,去弹性被应用为流水线方法,以从设计中选择性地去除弹性(即,SELF的握手分量)并将同步刚度局部地引入电路中。这在单个FPGA上提供快速同步电路,然而FPGA内通信保持弹性以容许任何合理的延迟。
硬件/软件高级代码划分可用于通过使用eTeak综合框架将软件级指令转换为高性能硬件实体来加速高级CSP代码。HW/SW划分是必要的,因为不是每个高级代码块都可以有效地转换为硬件。因此,提出了一种分析机制,该机制将高级代码划分为块,然后基于诸如存储器访问、控制和数据依赖性等行为因素来选择最佳转换过程。
这种技术可以扩展到覆盖不同的加速器类型,如GPU和多核。可以使用一段代码的不同数据访问模式和行为特征来设置该代码到不同类别的处理硬件的映射。在所连接的服务器硬件的给定配置中,可以利用加速器硬件或通用CPU上的代码的开发者输入来进行最优放置。
可视化对于系统的普遍适用性是重要的,因为工程师和设计者理解其设计的并发行为的能力是必不可少的。用于在更高抽象级别调试的CSP的可视化可以包括Teak的图形引擎,其被用于将CSP过程可视化并且向软件程序员提供调试机制以能够在多FPGA系统中跟踪他们的并发程序。这种方法有利于云程序员为未来的数据中心架构开发“正确的”并发程序。Restful http API和软件工具用于使开发人员能够开发利用FPGA的软件系统。Restful API允许开发者请求直接提供的或者在源码库中的代码,并与其他基础设施代码组合且用于产生FPGA比特流,并且加载该比特流到位于数据中心的FPGA中。该基础设施代码将包括覆盖通过诸如QPI、PCIe或NVLink之类的系统互连与直接附接的存储器、主系统存储器和/或CPU的通信的接口。可以使用相对于标准或定制互连的其他加速器和FPGA以及其他类型的硬件,例如存储器。
将针对附接到所述FPGA的主机处理器来编译所提供的其他代码,且这些代码将由控制系统设置为根据客户请求而运行。HTTP API还提供了停止和返回资源以供其他用户使用的方法。提供了解决资源使用的方法。此外,API提供了将跟踪点插入FPGA和/或主CPU执行中以跟踪、分析和可视化代码行为的方式。跟踪点是软件代码或硬件实体的一部分,其测量行为的各方面并且提供一个通知检测行为的监控系统方式。可提供在通过HTTP或其他因特网消息协议发送之前预处理跟踪数据的方法。
还提供HTTP API以允许报告和处理所部署组件中的错误。还可以提供用于处理具有重启和切换故障的基础设施。用于访问该API的软件工具作为正常应用程序开发流程的一部分,为开发人员提供对上述函数的访问。结合上述代码开发环境,另一HTTP API提供了利用这些元件之间的不同互连方法在多个单独的服务器、CPU、FPGA和其他潜在加速器上运行代码的能力。
来自源代码控制的部署可以使得部署容易,提供的API和命令行工具允许开发者请求驻留在云或私有源代码控制系统(诸如GitHub)中的代码部署。然后,服务器会复制代码,将其编译成FPGA位流、CPU可执行二进制文件或其他加速器的输出,并使用源代码中描述的规则,在硬件上部署配置。该硬件可以托管在云中,或者基于特定的站点。
另外的实施例可以包括通过使用LLVM作为将GO转换为有限状态机的中间形式来使用GO以及通过来自GO语言的FPGA有效载荷的FPGA综合。这将需要使用“llgo”或类似的工具来将GO编译为LLVM IR表示。然后,在单次或多次传递中,将表示转换为有限状态机。最后一步将把FSM表示转换成Verilog,以便用商用FPGA工具进行综合。FSM变换的优化可以利用对通信通道和综合的FSM变换注释的定向分析和反馈来完成。
列表调度可用于优化时钟使用,可能减小数据路径的位宽度。时钟树深度的最小化也可用于最大化并行性。
在图1中,对于根据示例实施例的系统存在三个主要部件。eTeak编译器是包括Teak前端122和处理数据流124以提供同步后端126的编译器。硬件/软件协同设计划分器116提供与eTeak编译器进行数据集成的入口。重定时和去弹性模块144可以为多个比特流提供性能增强、定时和综合。
图2示出了根据示例实施例的eTeak编译器执行处理的详细示例。参考图2,图1中的eTeak编译器更详细地描述为200。进行三个阶段以将高级GO描述综合为数字电路,从主程序文件210解析出轻量级GO函数,使用BALSA前端评估并映射到Teak中间表示(IR)上。从主文件解析出的函数212-216是放置在FPGA 244的存储器中的加速器的基础。接下来,在(b)中将TEAK IR综合到宏模块222-234中,宏模块222-234是TEAK数据流网络的主要组成部分。每个宏具有单独的运行/完成信号,其确定过程的激活和终止。然后,在部分(c)中,利用ETEAK同步综合后端来生成FPGA可综合电路。ETEAK使用SELF协议来实现数据流基元之间的精确同步通信。ETEAK综合电路继承了在功率方面有益的细粒度弹性,但是电路可能遭受基元之间不必要的握手开销。FPGA的控制可以从开发者工作站240执行。
作为优化技术,去弹性被认为是通过平衡流水线来向电路引入刚性,这消除了基元之间的细粒度通信的开销。如以上图中所示,向中间流水线引入额外EB允许工具从电路移除相关联的分叉/会合对。用于高级代码分区(图1-b)来自eTeak的反馈在决定哪些函数应该驻留在主机(PC)以及哪些函数应该被综合到硬件(即加速器)中时是关键的。高级代码的划分基于从所生成的可运行模式接收的功率、面积和性能反馈。
去弹性处理通过附加的缓冲器插入来重新定时eTeak的细粒度握手电路。这从电路中消除了不必要的弹性握手,并提高了时钟频率,从而提高了吞吐量。FPGA兼容SELF弹性控制器可用于每个数据通道上,并负责处理背压和实现顺序过程之间的弹性通信。控制器能够测量一对D型触发器。每个通道可以具有0到N个控制流块。
软件和硬件可以使用AXI互连来桥接。系统级视图中的实体是通过通道通信的顺序过程。高级GO通道被映射到硬件基础设施中的通信链路上。系统之间的通信通过存储器共享或直接链路(例如PCIe、NVLink等)来执行。eTeak的弹性通道使得系统中的计算实体之间能够进行延迟不敏感的通信。
多个加速器函数单元(AFU)可以通过映射在通信介质上的通道或者通过使用片外DRAM的共享存储器模型或者利用FPGA上可用的片上存储器(BRAM)来通信。CSP模型可用于架构可伸缩性。生成AFU的eTeak提供方便主机处理器和板上FPGA之间的通信,并且为了简单起见,该图中没有示出AXI封装器。多个用于AFU通信的技术被提出来,包括片上网络(NoC),其要求AFU能够处理/生成需要用于分组路由等的路由器的分组。使用CSP模型允许使用轻量级过程,其使用共享内存模型或分布式内存模型进行通信。由于eTeak生成的电路的松弛弹性性质,这些通信类型可通过重定时而彼此转换。通过考虑可用逻辑和预期吞吐量,eTeak可以自动应用这些转换。
GO语言中的高级语言(用户界面)函数由程序员实现。GO高级描述被划分为主机代码和加速器代码(.go)。主机代码是主函数,调用使用Go语言(go-lang)编译器编译的提醒函数,以生成可在主机处理器上运行的可执行文件(.exe)。加速器代码被综合为加速器。解析Go加速器代码,并基于树格式(.go.tree)构造抽象语法树(AST)。在操作中,Teak编译器接受Balsa AST并通过常规的求值(.go.eval)和完成(go.finish)方法将其优化。该步骤的输出是Teak中间表示(IR)格式(.teak)的过程网络。在Teak IR中,每个进程都是宏模块格式的,它有单独的“进行”和“完成”信号来确定进程的激活和终止。
作为同步后端,eTeak接收Teak IR文件并向其引入时钟。使用Teak IR中的语法定向翻译方法过程,可以在{会合、分叉、转向、合并、变量、弹性块、仲裁器、初始、重置、操作器}的同步(钟控)基元上执行映射。该步骤的输出以Verilog(.v)语言的门级网表。引入时钟具有两个主要优点:利用同步定时的概念,使用传统的综合工具和静态定时分析工具,调度步骤是可分析和优化的。
具有同步行为的数据操作单元(运算符)是可再综合的。所生成的同步网表可以综合到FPGA上。eTeak综合电路是细粒度的,这在功率方面是有益的,但是电路可能遭受基元之间不必要的通信开销。作为优化技术,去弹性通过重新定时流水线来向电路引入刚性,这消除了基元之间的细粒度通信的开销。
将eTeak生成的Verilog网表提供给综合工具以生成可加载到一个或多个FPGA系统中的单个或多个比特流。主机和加速器之间的通信使用一组共享存储位置来执行。每个加速器具有确定其开始和结束时间的运行/完成信号。这允许主机与FPGA上的加速器有效地交互。然后,图形机制允许高级开发者以同步数据流图(.eTeak)的形式来可视化它们的代码(.go),其中根据FPGA(.timing.report)提供的定时信息来动态地表示出数据流。这使得开发者能够在综合后级别调试系统,其中与IO和存储器相关联的定时信息是可用的。
继续相同的示例,映射到宏模块上可以包括基于具有单独的“进行”和“完成”激活/终止信号的宏模块风格来构建Teak IR。这些模块根据源级指令按顺序或并行链接。宏模块架构有助于分布式控制机制,其中数据路径和对应的控制被封装在宏模块内。相应地,通过握手在本地控制模块,因此,每当数据变得可用时,就可以开始计算。基于此,数据相关计算成为可能,这意味着在模块内可以存在独立的数据流,这可以显著地影响电路的性能。此外,它还允许工具在模块上执行函数分解并定义新的边界。
基于时钟来调度宏模块也被称为重定时,其确定宏模块之间的布置。为了调度,在每个链路/通道上采用缓冲器来按顺序安排宏模块之间的执行时间。使用这种技术,宏模块的无序执行成为可能。
一个示例实施例可以包括高级云接口,其允许云程序员将处理系统(例如:图像处理)的“Go”的实现提交给加速基础设施,并将提交的Go描述划分为主机代码和加速器代码(.go)。关于高级模式,GPU或多核架构可以与FPGA以混合方式构成。主机代码是主函数并调用提醒函数。使用来自Google的golang编译器编译主函数,以生成可在主机处理器(.bin)上运行的可执行文件。加速器代码被综合为加速器。过程可包括解析高级go描述并基于Balsa的抽象树格式(.go.tree)产生抽象语法树(AST)。Balsa AST由Teak采用,并通过常规评估(.go.eval)和完成(go.finish)方法进行优化。该步骤的输出是Teak中间表示(IR)格式(.teak)的过程网络。在Teak IR中,每个进程都是宏模块格式,它有单独的“进行”和“完成”信号来确定进程的激活和终止。将时钟引入异步数据流的过程,称为eTeak,包括获取Teak IR文件并通过采用SELF协议将时钟信号引入其数据保持元件。该过程获取Teak IR并将其映射到以下描述的{会合、分叉、转向、合并、变量、弹性块、仲裁器、初始、重置、操作器}的同步(钟控)基元上。该步骤的输出是Verilog(.v)中门级网表。
时钟可提供同步时序的概念,因此调度步骤可使用常规综合工具和静态时序分析工具来分析和优化。具有同步行为的数据操作单元(运算符)是可再综合的。所生成的同步网表可综合到FPGA上。去弹性是一种中级优化技术,其通过重新定时流水线来选择性地向电路引入刚性,这消除了基元之间的细粒度通信的开销。eTeak综合电路是细粒度的,这在功率方面是有益的并且是可靠的,但是电路可能遭受基元之间不必要的通信开销。弹性对于FPGA级布局和布线是有用的。去弹性在通信级保持进程之间的将弹性,并将其从计算域中移除。使用来自FPGA供应商(例如Xilinx的Vivado)的综合工具生成可加载到FPGA场的单个或多个比特流。
在主机系统和加速器之间需要有效的可扩展通信基础设施。使用板上的一组共享存储位置来执行通信。每个加速器具有确定其开始和结束时间的运行/完成信号。这允许主机有效地与驻留在FPGA上的加速器交互。
帮助高级开发人员以同步数据流图(.eTeak)的形式可视化其代码(.go)的图形过程,其中根据由FPGA(.timing.report)提供的定时信息(切换轨迹)来动态地表示出数据流。这使得开发者能够在综合后的级别上调试系统,其中与IO和存储器相关联的定时信息是可用的。
宏模块基元包括转向(Steer,S),其基于附加到数据的输入控制值来选择输出路径。基元可以根据可用性来选择通道。无论何时使用if/else或case语句,都会推断为转向。每个参数化的输出独立地匹配输入的条件,并且充当数据相关的信号分离器。fork(F)是可参数化组件,其可将任何数目的位从输入携带到输出,且其通过同时激活两个或两个以上的宏模块或将数据供应给所述宏模块而将并发性带到电路。
合并(Merge,M)是基于先到先服务策略将输入端口之一上的输入复用到输出,因此输入必须是互斥的。合并也是可参数化的,这意味着它可以用作数据或控制多路复用器。会合(Join,J)同步并连接数据输入。n比特和0比特的双向会合可以用作数据和控制的结合。变量(Variable,V)永久数据存储。eTeak数据流网络中的变量(V)具有单个写入端口和多个可参数化的读取端口,并且支持映射到FPGA的BRAM上的多个读取和写入变量。“读”和“写”被区分并置于不同的阶段。变量允许复杂的控制活动,而不引起总是与电路周围的控制一起移动数据的成本。“wg/wd”和“rg/rd”(进行(go)/完成(done))对使得所有写入数据被发起并且控制令牌被完成,所有读取控制令牌被发起并且数据递送被终止。该变量可以被认为是多位寄存器,其中的读取手段将寄存器的内容分配给输出线。类似地,对变量的写入可以被转换为将输入线的当前值分配到寄存器。包括浮点和其他类型的运算符(O)是可以操纵数据的组件。输入被形成为单个单词。所有数据转换操作都在此组件内执行,包括验证条件或其他操作。
初始(Initial,I)是保持初始值并且可以将值(例如,激活)插入到网络中的部件。当顶层模块被生成为在回路结构内反复启动时,“go”信号可能不存在。在这种情况下,“I”初始化每一轮的激活。弹性缓冲器(Elastic Buffer,EB)用于数据存储和通道解耦。缓冲器为有效的和空的令牌提供存储,它们是发起握手并积极参与握手的唯一组件,所有其他组件对握手都是“透明的”。如果缓冲器的后继缓冲器已经输入并存储了先前持有的令牌,则缓冲器可以从其前导输入并存储有效或空的新令牌。仲裁器(Arbiter,A)采用多个输入通道,并且给出单个输出通道,将来自输入通道的任何数据转发到输出通道,在并发访问之间公平地进行选择。此部件可用作存储器或总线仲裁器以控制若干主控器存取。如果主设备以相同的速度被计时,则仲裁器可以被实现为同步仲裁器(TeakM),否则它们应该被实现为异步仲裁器。
一个实际示例可以用于支持图像处理应用,作为示例,该图像处理应用被部署到云上并且每天用于数十亿个图像搜索查询。假定该应用以GO语言实现,执行该应用的一种方式是通过将其编译成机器代码(即,汇编代码)并在诸如ARM、IBM Power、X86等通用机器上执行它。所生成的汇编代码将主要包括32或64位移动(MOVE)、添加(ADD)、复用(MULT)、加载(LOAD)、存储(STORE)、类型指令。在流水线式处理器中,每一指令必须通过流水线级,流水线级包含,例如,五个循环:预取(Pre.Fetch)、提取(Fetch)、解码(Decode)、执行(Execute)、回写(WriteBack),这些可为每一指令的流水线的一部分。
根据示例实施例,所呈现的综合流接受诸如神经网络之类的应用的输入描述,并且生成控制数据流图,然后将其映射到FPGA友好的硬件逻辑。最后,使用生成的逻辑对云中的目标FPGA进行编程。这允许没有FPGA技能的开发者编程并使用FPGA技术来计算诸如图像处理之类的大规模大数据。与处理器和GPU不同,按位操作、数据加载/存储是可定制的,这提供了可以使用紧凑数据类型对全32位浮点来执行整个计算。
在基于云的图像处理技术中,大量图像被提交到云中的存储服务器(例如,AWSS3),接着,包含用于处理图像的较高阶函数的软件应用被部署到云应用服务器上,取决于应用的性质,适当的设置通常伴随着指定服务、HTTP端点和其他云服务的主源代码(即,主文件)。为了与详细描述一致,假设应用以GO语言实现。
图3示出了非加速器模型300,其中源代码被解析、链接和编译为机器代码(即,汇编代码),并最终在诸如ARM、IBM Power、X86等的一组通用处理器上执行。所生成的汇编代码包括32/64位移动、添加、复用、加载、存储指令,以及调用IO、中断和协同处理函数的系统调用。在流水线式处理器中,每条指令必须进入流水线级,例如预取、提取、解码、执行、回写等,因为流水线对于每条指令为“通用”。源代码310可以通过云接口312和调试接口314来访问。服务器可以包括GO编译器322和Go Trace函数318。云中的CPU场330可以具有其自己的用于处理主函数文件的存储器332和用于处理存储在云中的图像或其他数据340的相应软件模块。
图4示出了根据示例实施例的具有分离的加速器数据的示例FPGA处理平台。参考图4,系统400,在其他附图中相同的附图标记表示相同的部件。云接口312链接到两个单独的段,包括加速器段360和被设置为处理主文件的GO编译器段322。加速器段360包括GO/BALSA/TEAK段362、ETEAK后端364和FPGA段366。从主文件解析的加速器可以被转发到FPGA场350中的FPGA存储空间。在此图像处理实例中,应用程序的输入描述可被接收,例如,神经网络,且产生控制数据流图并且将其映射到FPGA可存取硬件逻辑中。使用所生成的逻辑对云中的目标FPGA进行编程,这允许没有FPGA技能的开发者通过控制设备352编程并使用FPGA技术来进行计算。可视化引擎370提供反馈控制特征以说明经处理的代码。
与处理器和GPU不同,按位操作和数据加载/存储是可定制的,这指示可以使用紧凑数据类型对全32位浮点数据类型来执行整个计算。这远远超出了CPU/GPU。在操作中,由开发者通过云接口312提交应用(GO源代码),应用可以包括“main()”函数和由主函数调用的一组解析函数(加速器)。还有要由主GO文件(.go)导入的包,这些包提供了几个内置函数,如runtime()。
该过程可以包括由GO编译器初始化一些数据结构,加载与应用相关的数据结构,该数据结构指定应用的存储器布局和用于加载到存储器的机器代码的布置。构建由节点组成的解析树。解析树由操作、类型(引用)和值的叶子构成,解析的内容是从源代码获得的。而且,诸如BISON的这样的工具是用于生成解析器的通用专有工具,并且通常被描述为将用于上下文无关语法的语法描述转换为用于解析该语法的程序的通用解析器生成器。接下来,可以执行将解析树节点(操作、类型和值)编译成汇编代码。然后,创建包含对诸如其他对象文件和GO运行时之类的外部引用的结构信息的对象文件(.o),并且在分解外部引用并由云服务生成可执行机器代码之后将对象文件加载到数据/指令存储器中。
在运行时,可以执行由无用单元收集程序管理可达节点和移除不可达节点,并且还可以执行初始化存储器分配器、高速缓存、TLS表和堆大小。继续相同的示例,可以在多核处理器上以单独的线程方式执行“Go”例程。如上所述,GO是一种并发语言,主函数生成GO例程以独立地执行任务。操作系统负责根据线程的数据可用性和对其他线程的依赖性来组织线程。理想的情况是每个线程都可以在处理器的单独核心上运行。每个线程从其存储器中加载数据,对其进行处理,并将数据写回存储器。
当“所有”生成的线程完成它们的任务时,在程序完成执行之后向用户报告最终结果也有助于查看结果。根据源代码规范,该报告可以是任何格式,例如,包含输出值的图形、表格或原始文件。此外,还可以根据请求向用户报告运行时间信息/调试/跟踪。运行时间结果是云供应商监视的信息,并且用于在通信和计算、存储器读/写速率等方面对应用进行剖析并识别其属性。这些项可以用于解锁可能在并发应用程序中发生的死锁。
图5示出了根据示例实施例的管理用于FPGA执行的数据的示例流程图。参考图5,方法500可以包括通过云接口提交应用(即,GO源代码),这可以包括主函数512。在处理514期间,可以从主函数解析出各种函数,这可以包括将代码划分成主函数和加速器函数来减小主函数的尺寸。例如,通过将主函数与加速器/函数分离,主函数是控制来自加速器函数的加速器的启动和终止顺序的主要调用者,加速器是在FPGA上以硬件方式执行特定任务的被调用者,结果是一个主文件和两个或更多加速器文件/模块。主函数将在尺寸上较小516,并且当从主文件执行引用时将从FPGA存储器调用所创建的加速器模块518或文件516。然后可以使用编译器和所提供的编译器的加速器来编译主函数。由于主函数是此时正在编译的唯一函数/文件522,因此主函数的编译器能够生成可执行文件,而加速器函数不作为该操作的一部分,这提供了更快的结果。稍后,主函数和加速器函数将共享用于在FPGA中通信的存储区块。
对加速器函数进行解析,并将其映射到中间层数据流图。另外,对加速器函数进行解析,并将其映射到抽象语法树,例如解析树。然后节点被映射到基元(即:会合、分叉、合并、转向、通道、变量)。通过迭代地遍历图(即,去弹性)来流水线化数据流。在该操作中,使用额外的存储器块来缓冲通道,以避免处理中的死锁、不必要的停顿以及使处理去同步。这种技术也被称为松弛匹配、流水线或重定时。
继续相同的示例,使用ETEAK编译器将加速器编译为VERILOG RTL逻辑。综合过程提供采用定时(即,钟控)过程引入TEAK的异步图,所述定时(即:钟控)过程使得TEAK的异步图可综合到FPGA上。通过与加速器文件分离的主函数来执行将异步过程转换为一个或多个同步逻辑单元。可以将所生成的逻辑包装在适当的外壳(shell)中,以实现与环境(例如,PCIe)、片外存储器(DDR3/4、闪存)、DMA等的交互。外壳可以是通过将加速器的输入/输出通道耦合到处理器和任何计算机系统可见的共享存储位置来促进加速器和环境之间的通信的Verilog RTL实现。通过云服务管理器并基于主文件524的内容来部署在CPU上可执行的对象文件和FPGA可编程比特流,其使用共享存储器模型来传送加速器的启动和终止。当将结果报告回开发者时,在程序完成执行526之后,报告可以是取决于源代码规范的任何格式,例如。包含输出值的图形、表或原始文件。在一个示例中,还可以通过API网关向云服务所提供的用户传送信息,以通过HTTP向用户的网页提供输出。
运行时间结果基于云提供商所监视的信息,并且用于在通信和计算、存储器读/写速率等方面对应用进行剖析并识别其行为。这样的信息可以用于解锁可能出现在并发应用中的死锁。为了跟踪加速器的行为,将调试核插入到FPGA中,这是由硬件开发环境提供的。可将“加速器”定义为源GO代码的可加速部分,其由用户明确指定且实施为由编译器隐含地标记为软件模式的单独函数,所述软件模式可从综合到FPGA上而显著受益,例如,SIMD或VLIW形式的循环、可展开且流水线化的for-Loop中的迭代数据操纵等。
可以提供在修改的结构(即,修改的主文件)之前的GO主文件的一个示例:
如可以从主函数观察到的,“过滤器”和“生成”函数被定义为包括在原始主文件内的特定计算函数,然后如上所述在主函数中调用。根据示例实施例,加速器文件可以将函数拉出并将它们存储在FPGA存储空间中,并且主函数可以使用存储器中的替换位作为开始处理的信号。存储器存储在主函数中已经发生的生成结果、初始化和终止。
图6示出了根据示例实施例的示例FPGA优化过程。参考图6,系统600包括主文件或程序610,主文件或程序610被处理以创建修改的主部分612和作为从主文件提取的函数的一组加速器614。FPGA 620可以包括核心FPGA部件和用于存储单独的加速器622-628的共享存储空间621。加速器可以通过加速器定义或主函数指定的通道链接到共享存储器。FPGA还可以具有用于执行指令的处理器623。在与搜索引擎查询相关联的大规模图像的图像处理的示例中,云中的存储服务630可以存储大量文件632,这些文件632可以与接收到的查询相关。例如,如果用户提交对狗或戴着帽子的狗的查询,则可以根据存储在加速器中的FPGA逻辑来检索和排序与搜索引擎相关联并存储在云中的所有这样的图像。为了提供实时结果,可以通过通道来组织加速器,并且加速器可以与原始获得的主文件有对应关系。执行各种加速器的结果可以产生与查询一致的方式组织的图像结果。
在一个示例实施例中,一种操作方法可以包括识别编译器模块处的主函数、从主文件解析出多个函数、创建没有该多个函数的修改的主函数、以及创建多个加速器模块以及将多个加速器模块存储在FPGA的现场可编程门阵列(FPGA)存储空间上。该方法还可以包括执行修改的主函数,基于执行的修改的主函数调用FPGA存储空间上的加速器模块,以及将修改的主函数执行的结果提供给计算设备。
主函数是调用通过云接口提交的多个函数/加速器或子函数的函数。主函数是调用加速器、启动加速器/子函数的函数/文件。在该示例中,一旦多个函数被移除,主函数仍然可以参考和识别这些函数。当主函数通过API或云服务提供者被提交到预处理阶段时,主函数可以包括若干函数调用,诸如GO关键字例程。编译主文件后,返回处理过的数据响应。Go函数可以读取该数据,并且基于主函数的原始内容来创建加速器。主函数可以启用数据实现,诸如图表或其他报告特征。编译器可以是解析源代码、导出代码并创建运行时间的“Go”编译器。解析函数以创建可执行文件或加速器。加速器是根据它们被主函数调用的顺序来排序的。主函数可以链接到图形函数,图形函数由主函数“.exe”编写和识别。加速器可以具有数据未决状态,特别是如果来自一个加速器(A1)的未决数据不可用或者通过另一加速器(A2)可用,则可以对加速器排序。在该示例中,A2可以首先完成处理,然后可以根据依赖性相应地调用A1。加速器之间的通道可以被写为通道关键字,例如,主函数可以创建通道作为存储器块/指针,例如FPGA中的存储地址。加速器“A1”可以创建通道作为存储位置,通道可以被映射为任何通信链路,例如,用于读取到特定存储位置的命令。主函数将保持在FPGA之外,并通过CPU进行处理,而加速器则存储在FPGA存储器中。通道可以是硬件中的PCI或PCIe链路、存储位置,但是可以被识别为通信介质,该通信介质作为指针被传递到加速器,并且在加速器之间被映射,并且可以被称为映射。通道也是可以与BRAM和ERAM一起工作的通信介质。当加速器被创建并放置在FPGA存储空间中时,通道被创建为FPGA内的映射。通道从加速器中识别并放置在加速器中并由主函数使用。
通过识别函数来执行解析。这些函数可以通过它们的代码参数类型(即,“函数”代码命名约定)来识别。在解析期间生成的语法树从树中的每个节点映射到机器代码或硬件描述语言。节点是基元,如数据流基元、会合、分叉等。解析树中的每个节点被映射到宏模块以识别依赖性,诸如需要其他节点的节点、其他节点所需的前导节点。树具有节点和边缘,并且边缘是节点之间的依赖性,节点/宏模块被实现为映射到TEAK基元。时钟可用于同步可部署/可读取到FPGA上的VERILOG网表。CPU执行运行时间、库链接,维护加速器引用、表、指针、地址以及到FPGA中的存储器地址。结果可以基于共享的CPU对FPGA(CPU vs.FPGA)存储空间,修改的主文件的完成可以通过主文件执行读取FPGA存储空间并利用加速器来执行。结果将包括由加速器处理的数据被传送到API接口或其他应用。最终结果的一些示例可以是查询的结果,或者可以返回其他结果,诸如要绘制的数据阵列、被转换成web浏览器界面的搜索引擎结果。
继续相同的示例性实施例,可以在执行修改的主函数期间通过编译器执行的通道来访问加速器模块。从主函数解析出多个函数还可以提供由函数语法识别函数的实例,诸如“func”,并且从修改的主函数移除与多个函数相关联的代码,并且留下通过名称对函数的调用。示例性方法可以提供创建多个加速器模块中与每个识别的函数相对应的不同加速器模块。该方法还可以提供从对应于FPGA存储空间中的存储位置的定义的通道调用来自加速器模块的多个加速器模块中的至少一个。然而,主函数通过FPGA外部的处理器(例如CPU)来处理。修改的主函数的创建还包括在修改的主函数中创建对每个解析后的函数的引用以及对与多个加速器模块相关联的存储空间位置的引用。
另一示例实施例可以提供一种从软件级的并发异步程序创建同步硬件加速器的方法,该方法可以包括:获得作为软件指令的输入,该软件指令通过在并发进程之间通过通道执行的消息交换的通信顺序进程(CSP)的模型来描述并发行为;在计算设备上将每个并发进程映射到同步数据流基元,同步数据流基元包括会合、分叉、合并、转向、变量和仲裁器中的至少一个;产生用于上载到一个或多个现场可编程门阵列(FPGA)设备的钟控数字逻辑描述;通过重定时,执行用于吞吐量、时钟频率和资源使用的输出设计的基元重映射;以及创建用于调试FPGA设备的并发代码的输入软件描述的注释图。
继续相同的示例,该方法还可以包括:识别主函数,从主函数解析出多个函数,创建没有多个函数的修改的主函数,基于多个函数创建同步硬件加速器,并且将同步硬件加速器存储在FPGA的现场可编程门阵列(FPGA)存储空间上,执行修改的主函数,基于修改的主函数调用在FPGA存储空间上的同步硬件加速器,以及将修改的主函数执行的结果提供给计算设备。
在执行修改的主函数期间,通过通道访问同步硬件加速器。从所述主函数解析出所述多个函数还包括由函数语法识别函数的实例,以及从所述修改的主函数移除与所述多个函数相关联的代码。所述方法还可包括创建与每个所识别的函数相对应的不同的同步硬件加速器,且从所述同步硬件加速器中的至少另一个同步硬件加速器调用所述同步硬件加速器中的至少一个同步硬件加速器,所述至少另一个同步硬件加速器来自所述通道中与所述FPGA存储空间中的特定存储位置相对应的至少一个通道。通过FPGA外部的处理器来处理主函数,并且创建修改的主函数还包括创建对每个解析函数的引用,以及对修改的主函数中的、与同步硬件加速器相关联的存储空间位置的至少一个引用。
结合本文中所揭示的实施例所描述的方法或算法的操作可直接体现于硬件中、体现于由处理器执行的计算机程序中或体现于两者的组合中。计算机程序可以包含在诸如存储介质的计算机可读介质上。例如,计算机程序可以驻留在随机存取存储器(“RAM”)、闪速存储器、只读存储器(“ROM”)、可擦除可编程只读存储器(“EPROM”)、电可擦除可编程只读存储器(“EEPROM”)、寄存器、硬盘、可移动盘、光盘只读存储器(“CD-ROM”)或现有技术中的任何其他形式的存储介质中。
示范性存储介质可耦合到所述处理器,使得所述处理器可从所述存储介质读取信息及将信息写入到所述存储介质。在备选方案中,存储介质可以与处理器集成。处理器和存储介质可以驻留在专用集成电路(“ASIC”)中。在替代方案中,处理器和存储介质可作为离散组件驻留。例如图7示出了示例性网络元件700,其可以表示其他附图的上述网络部件中的任何一个。
如图7所示,存储器710和处理器720可以是用于执行应用或一组操作的网络实体700的离散部件。应用可以由处理器720理解的计算机语言编码在软件中,并且存储在诸如存储器710的计算机可读介质中。计算机可读介质可以是除了存储在存储器中的软件之外还包括有形硬件组件的非易失性计算机可读介质。此外,软件模块730可以是作为网络实体700的一部分并且包含可由处理器720执行的软件指令的另一离散实体。除了网络实体700的上述部件之外,网络实体700还可以具有被配置为接收和发送通信信号(未图示)的发射机和接收机对。
尽管本发明的系统、方法和计算机可读介质的示例性实施例已经在附图中示出并在前面的详细描述中描述,但是应当理解,本发明不限于所公开的实施例,而是能够在不脱离由以下权利要求所阐述和限定的本发明的精神或范围的情况下进行大量的重新布置、修改和替换。举例来说,各种实施例的能力可由本文中所描述的模块或组件中的一个或多个或在分布式架构中执行,且可包含发射器、接收器或两者的结合。例如,由各个模块执行的全部或部分函数可以由这些模块中的一个或多个来执行。此外,这里描述的函数可以在各个时间执行,并且与模块或组件内部或外部的各种事件相关。而且,在各种模块之间发送的信息可以通过数据网络、因特网、语音网络、因特网协议网络、无线设备、有线设备和/或通过多个协议中的至少一个在模块之间发送。而且,由任何模块发送或接收的消息可以直接和/或通过一个或多个其他模块发送或接收。
所属领域的技术人员将了解,“系统”可体现为个人计算机、服务器、控制台、个人数字助理(PDA)、蜂窝式电话、平板计算装置、智能电话或任何其他合适的计算装置或装置的组合。将上述功能呈现为由“系统”执行并不旨在以任何方式限制本发明的范围,而是旨在提供本发明的许多实施例的一个示例。实际上,这里公开的方法、系统和设备可以以与计算技术一致的本地化和分布式形式来实现。
应当注意,在本说明书中描述的一些系统特征已经被呈现为模块,以便更具体地强调它们的实现独立性。举例来说,模块可实施为硬件电路,其包含定制的超大规模集成(VLSI)电路或门阵列、成品半导体,例如逻辑芯片、晶体管或其他离散组件。模块还可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件、图形处理单元等可编程硬件器件中实现。
模块还可以至少部分地以软件实现以供各种类型的处理器执行。可执行代码的识别单元可包含,例如,计算机指令的一个或多个物理或逻辑块,所述计算机指令的一个或多个物理或逻辑块可组织为,例如,对象、过程或函数。然而,所识别的模块的可执行代码不需要物理地定位在一起,而是可以包括存储在不同位置中的不同指令,当逻辑地连接在一起时,不同指令包括模块并且实现模块的所述目的。此外,模块可以存储在计算机可读介质上,该计算机可读介质可以是,例如,硬盘驱动器、闪存设备、随机存取存储器(RAM)、磁带或用于存储数据的任何其他这样的介质。
实际上,可执行代码的模块可为单个指令或多个指令,甚至可分布于若干不同代码段上、不同程序之间且跨越若干存储器装置。类似地,操作数据可以在模块内被识别和说明,并且可以以任何合适的形式实现并组织在任何合适类型的数据结构内。操作数据可以作为单个数据集来收集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号而存在。
容易理解的是,如本文附图中总体描述和说明的,本发明的部件可以以多种不同的配置来布置和设计。因此,实施例的详细描述并不旨在限制所要求保护的本发明的范围,而是仅代表本发明的所选实施例。
本领域普通技术人员将容易理解,可以用不同顺序的步骤和/或用与所公开的配置不同的配置中的硬件元件来实践如上所述的本发明。因此,尽管已经基于这些优选实施例描述了本发明,但是对于本领域技术人员显而易见的是,某些修改、变化和替代构造将是显而易见的,同时保持在本发明的精神和范围内。因此,为了确定本发明的范围,应当参考所附权利要求。
虽然已经描述了本申请的优选实施例,但是应当理解,所描述的实施例仅是说明性的,并且当以全部范围的等同物和修改(例如,协议、硬件设备、软件平台等)来考虑时,本申请的范围将仅由所附权利要求限定。
Claims (9)
1.一种配置为从并发异步程序创建同步硬件加速器的装置,所述装置包括:
处理器,配置为:
获得输入,所述输入通过在并发进程之间通过通道执行的消息交换的通信顺序进程(CSP)的模型来描述并发行为;
将每个并发进程映射到同步数据流基元,所述同步数据流基元包括会合、分叉、合并、转向、变量和仲裁器中的至少一个;
产生用于上载到一个或多个现场可编程门阵列(FPGA)设备的钟控数字逻辑描述;
通过重定时,执行用于吞吐量、时钟频率和资源使用的输出设计的基元重映射;以及
创建用于调试FPGA设备的并发代码的输入软件描述的注释图。
2.根据权利要求1所述的装置,其特征在于,所述处理器还配置为:
识别主函数;
从所述主函数中解析出多个函数;
创建没有所述多个函数的修改的主函数;
基于所述多个函数创建所述同步硬件加速器,并将所述同步硬件加速器存储在所述FPGA的FPGA存储空间上;
执行所述修改的主函数;
基于所执行的修改的主函数调用FPGA存储空间上的所述同步硬件加速器;以及
提供所述修改的主函数执行的结果。
3.根据权利要求2所述的装置,其特征在于,在所述修改的主函数的执行期间,通过通道访问所述同步硬件加速器。
4.根据权利要求2所述的装置,其特征在于,从所述主函数解析出所述多个函数还包括识别由函数语法识别的函数的实例,以及从所述修改的主函数移除与所述多个函数相关联的代码。
5.根据权利要求4所述的装置,其特征在于,所述处理器还被配置为创建与每个所识别的函数相对应的不同的同步硬件加速器。
6.根据权利要求5所述的装置,其特征在于,所述处理器还配置为从所述同步硬件加速器中的至少另一个同步硬件加速器调用所述同步硬件加速器中的至少一个同步硬件加速器,所述至少另一个同步硬件加速器来自所述通道中与所述FPGA存储空间中的特定存储位置相对应的至少一个通道。
7.根据权利要求2所述的装置,其特征在于,所述主函数通过所述FPGA外部的处理器来处理。
8.根据权利要求2所述的装置,其特征在于,创建所述修改的主函数还包括创建对每个解析出的函数的引用。
9.根据权利要求2所述的装置,其特征在于,创建所述修改的主函数还包括对所述修改的主函数中的、与所述同步硬件加速器相关联的存储空间位置的至少一个引用。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662412376P | 2016-10-25 | 2016-10-25 | |
PCT/IB2017/001485 WO2018078451A1 (en) | 2016-10-25 | 2017-11-01 | Synthesis path for transforming concurrent programs into hardware deployable on fpga-based cloud infrastructures |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110088737A true CN110088737A (zh) | 2019-08-02 |
Family
ID=60935904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780078879.3A Pending CN110088737A (zh) | 2016-10-25 | 2017-11-01 | 将并发程序转换为可部署在基于fpga的云基础设施上的硬件的综合路径 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10866842B2 (zh) |
EP (1) | EP3532937A1 (zh) |
CN (1) | CN110088737A (zh) |
WO (1) | WO2018078451A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111860784A (zh) * | 2020-07-24 | 2020-10-30 | 上海仪电(集团)有限公司中央研究院 | 基于arm和fpga的卷积神经识别系统及方法 |
CN111897220A (zh) * | 2020-09-01 | 2020-11-06 | 北京清立科技有限公司 | 一种基于神经网络运行模式的工程项目控制方法及控制系统 |
CN112581584A (zh) * | 2020-12-24 | 2021-03-30 | 西安翔腾微电子科技有限公司 | 一种基于SysML视图的GPU图元装配模块的TLM装置及操作方法 |
CN112631982A (zh) * | 2020-12-25 | 2021-04-09 | 清华大学 | 基于众核架构的数据交换方法及装置 |
WO2021147005A1 (zh) * | 2020-01-22 | 2021-07-29 | 华为技术有限公司 | 一种用于执行重定时的装置以及路径切换的方法 |
CN114706376A (zh) * | 2022-06-06 | 2022-07-05 | 南京宏泰半导体科技有限公司 | 一种基于软件解耦的硬件控制装置及方法 |
CN115345155A (zh) * | 2022-08-28 | 2022-11-15 | 成都华大九天科技有限公司 | Sv运行时的表达式求值方法 |
CN116434818A (zh) * | 2023-03-28 | 2023-07-14 | 深圳市芯存科技有限公司 | 基于fpga的ddr3多端口读写存储管理方法 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9904719B2 (en) * | 2015-12-31 | 2018-02-27 | Dropbox, Inc. | Propagating computable dependencies within synchronized content items between first and third-party applications |
WO2018078451A1 (en) * | 2016-10-25 | 2018-05-03 | Reconfigure.Io Limited | Synthesis path for transforming concurrent programs into hardware deployable on fpga-based cloud infrastructures |
US11755382B2 (en) * | 2017-11-03 | 2023-09-12 | Coherent Logix, Incorporated | Programming flow for multi-processor system |
EP3611613A1 (en) | 2018-08-14 | 2020-02-19 | INESC TEC - Instituto de Engenharia de Sistemas e Computadores, Tecnologia e Ciência | Method and apparatus for optimizing code for field programmable gate arrays |
US11656857B2 (en) | 2018-08-09 | 2023-05-23 | Inesc Tec—Instituto de Engenharia de Sistemas | Method and apparatus for optimizing code for field programmable gate arrays |
US20200117978A1 (en) * | 2018-10-12 | 2020-04-16 | Alibaba Group Holding Limited | Systems and methods for efficiently mapping neural networks to programmable logic devices |
US10768916B2 (en) * | 2018-11-28 | 2020-09-08 | Red Hat, Inc. | Dynamic generation of CPU instructions and use of the CPU instructions in generated code for a softcore processor |
US11816563B2 (en) | 2019-01-17 | 2023-11-14 | Samsung Electronics Co., Ltd. | Method of enabling sparse neural networks on memresistive accelerators |
US11366948B2 (en) * | 2019-10-18 | 2022-06-21 | Synopsys, Inc. | Machine-learning enhanced compiler |
CN111752972B (zh) * | 2020-07-01 | 2024-06-25 | 浪潮云信息技术股份公司 | 基于RocksDB的key-value存储模式下的数据关联查询方法及系统 |
US11977906B1 (en) * | 2020-11-06 | 2024-05-07 | EJ2 Communications, Inc. | Method for generating no-code automated cybersecurity tasks |
CN113360189B (zh) * | 2021-06-04 | 2022-09-30 | 上海天旦网络科技发展有限公司 | 适用于流处理的异步优化方法、系统、装置和可读介质 |
CN113255263B (zh) * | 2021-06-07 | 2021-10-01 | 上海国微思尔芯技术股份有限公司 | 颗粒带分割方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030117971A1 (en) * | 2001-12-21 | 2003-06-26 | Celoxica Ltd. | System, method, and article of manufacture for profiling an executable hardware model using calls to profiling functions |
CN101763265A (zh) * | 2010-01-19 | 2010-06-30 | 湖南大学 | 一种过程级软硬件协同设计自动化开发方法 |
WO2010140883A2 (en) * | 2009-06-02 | 2010-12-09 | Vector Fabrics B.V. | Improvements in embedded system development |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9405564B2 (en) * | 2006-05-10 | 2016-08-02 | The Mathworks, Inc. | System and method for targeting commands to concurrent computing units executing a concurrent computing process |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
US9230046B2 (en) | 2012-03-30 | 2016-01-05 | International Business Machines Corporation | Generating clock signals for a cycle accurate, cycle reproducible FPGA based hardware accelerator |
WO2018078451A1 (en) * | 2016-10-25 | 2018-05-03 | Reconfigure.Io Limited | Synthesis path for transforming concurrent programs into hardware deployable on fpga-based cloud infrastructures |
-
2017
- 2017-11-01 WO PCT/IB2017/001485 patent/WO2018078451A1/en unknown
- 2017-11-01 EP EP17825601.2A patent/EP3532937A1/en not_active Withdrawn
- 2017-11-01 US US16/344,797 patent/US10866842B2/en active Active
- 2017-11-01 CN CN201780078879.3A patent/CN110088737A/zh active Pending
-
2020
- 2020-11-24 US US17/103,862 patent/US20210081258A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030117971A1 (en) * | 2001-12-21 | 2003-06-26 | Celoxica Ltd. | System, method, and article of manufacture for profiling an executable hardware model using calls to profiling functions |
WO2010140883A2 (en) * | 2009-06-02 | 2010-12-09 | Vector Fabrics B.V. | Improvements in embedded system development |
CN101763265A (zh) * | 2010-01-19 | 2010-06-30 | 湖南大学 | 一种过程级软硬件协同设计自动化开发方法 |
Non-Patent Citations (3)
Title |
---|
M.D. EDWARDS等: "Software acceleration using programmable hardware devices" * |
MAHDI JELODARI MAMAGHANI 等: "Asynchronous Dataflow De-Elastisation for Efficient Heterogeneous Synthesis" * |
MATTIAS O’NILS等: "Interactive Hardware-Software Partitioning And Memory Allocation Based on Data Transfer Profiling" * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021147005A1 (zh) * | 2020-01-22 | 2021-07-29 | 华为技术有限公司 | 一种用于执行重定时的装置以及路径切换的方法 |
CN111860784A (zh) * | 2020-07-24 | 2020-10-30 | 上海仪电(集团)有限公司中央研究院 | 基于arm和fpga的卷积神经识别系统及方法 |
CN111897220A (zh) * | 2020-09-01 | 2020-11-06 | 北京清立科技有限公司 | 一种基于神经网络运行模式的工程项目控制方法及控制系统 |
CN112581584A (zh) * | 2020-12-24 | 2021-03-30 | 西安翔腾微电子科技有限公司 | 一种基于SysML视图的GPU图元装配模块的TLM装置及操作方法 |
CN112631982A (zh) * | 2020-12-25 | 2021-04-09 | 清华大学 | 基于众核架构的数据交换方法及装置 |
CN114706376A (zh) * | 2022-06-06 | 2022-07-05 | 南京宏泰半导体科技有限公司 | 一种基于软件解耦的硬件控制装置及方法 |
CN115345155A (zh) * | 2022-08-28 | 2022-11-15 | 成都华大九天科技有限公司 | Sv运行时的表达式求值方法 |
CN115345155B (zh) * | 2022-08-28 | 2024-07-09 | 成都华大九天科技有限公司 | Sv运行时的表达式求值方法 |
CN116434818A (zh) * | 2023-03-28 | 2023-07-14 | 深圳市芯存科技有限公司 | 基于fpga的ddr3多端口读写存储管理方法 |
CN116434818B (zh) * | 2023-03-28 | 2024-02-09 | 深圳市芯存科技有限公司 | 基于fpga的ddr3多端口读写存储管理方法 |
Also Published As
Publication number | Publication date |
---|---|
US20210081258A1 (en) | 2021-03-18 |
US10866842B2 (en) | 2020-12-15 |
US20200057681A1 (en) | 2020-02-20 |
WO2018078451A9 (en) | 2018-06-21 |
WO2018078451A1 (en) | 2018-05-03 |
EP3532937A1 (en) | 2019-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110088737A (zh) | 将并发程序转换为可部署在基于fpga的云基础设施上的硬件的综合路径 | |
CN111566616B (zh) | 多处理器系统的编程流程 | |
Solinas et al. | The TERAFLUX project: Exploiting the dataflow paradigm in next generation teradevices | |
Meloni et al. | System adaptivity and fault-tolerance in NoC-based MPSoCs: the MADNESS project approach | |
CN110532072A (zh) | 基于微内核操作系统的分布式流式数据处理方法及系统 | |
CN109582998A (zh) | 小巧PCIe端点的根复合体集成端点仿真 | |
Menard et al. | Mocasin—rapid prototyping of rapid prototyping tools: A framework for exploring new approaches in mapping software to heterogeneous multi-cores | |
Janßen et al. | Designing applications for heterogeneous many-core architectures with the FlexTiles Platform | |
de Carvalho Junior et al. | Contextual abstraction in a type system for component-based high performance computing platforms | |
Schor et al. | EURETILE design flow: Dynamic and fault tolerant mapping of multiple applications onto many-tile systems | |
Lantreibecq et al. | Model checking and co-simulation of a dynamic task dispatcher circuit using CADP | |
Cheong | Actor-oriented programming for wireless sensor networks | |
Luo et al. | Beeflow: Behavior tree-based serverless workflow modeling and scheduling for resource-constrained edge clusters | |
KHALILI MAYBODI | A Data-Flow Threads Co-processor for MPSoC FPGA Clusters | |
Volz et al. | IPEC: Open-Source Design Automation for Inter-Processing Element Communication | |
Virtanen et al. | The TACO protocol processor simulation environment | |
Menard et al. | Mocasin—Rapid Prototyping of Rapid Prototyping Tools | |
Derin | Self-adaptivity of applications on network on chip multiprocessors | |
Niazi et al. | A DSL for the SegBus Platform | |
Bucur | Improving scalability of symbolic execution for software with complex environment interfaces | |
Wenger | Design and implementation of a compiler for a fog and IoT programming language | |
Maassen | Method invocation based communication models for parallel programming in Java | |
Sharma | PGAS Communication for Heterogeneous Clusters with FPGAs | |
Isshiki et al. | Multiprocessor SoC design framework on Tightly-Coupled Thread model | |
Masing | Prototyping Methodologies and Design of Communication-centric Heterogeneous Many-core Architectures |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190802 |
|
WD01 | Invention patent application deemed withdrawn after publication |