首页 / 专利库 / 电脑零配件 / 接口 / 虚拟FPGA管理和优化系统

虚拟FPGA管理和优化系统

阅读:703发布:2020-05-08

专利汇可以提供虚拟FPGA管理和优化系统专利检索,专利查询,专利分析的服务。并且一种宏调度器包括:资源 跟踪 模 块 ,所述资源跟踪模块被配置为更新列举一组现场可编程 门 阵列(FPGA)装置的多个宏部件的 数据库 ;通信 接口 ,所述 通信接口 被配置为从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个 指定 的宏部件;资源分配逻辑,所述资源分配逻辑被配置为通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及配置逻辑,所述配置逻辑被配置为通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。,下面是虚拟FPGA管理和优化系统专利的具体信息内容。

1.一种宏调度器,所述宏调度器包括:
资源跟踪,所述资源跟踪模块被配置为更新列举一组现场可编程阵列(FPGA)装置的多个宏部件的数据库
通信接口,所述通信接口被配置为从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个指定的宏部件;
资源分配逻辑,所述资源分配逻辑被配置为通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及
配置逻辑,所述配置逻辑被配置为通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。
2.如权利要求1所述的宏调度器,其中所述第一设计定义包括宏图,所述宏图定义所述一个或多个指定的宏部件之间的连接并且指示所述一个或多个指定的宏部件中的每一者的类型。
3.如权利要求2所述的宏调度器,其中:
所述一个或多个指定的宏部件包括一个或多个指定的瓦片、一个或多个指定的固定功能单元以及一个或多个指定的寄存器;
所述第一设计定义还指示所述一个或多个指定的瓦片中的每一者的位文件;以及针对所述一个或多个指定的瓦片中的每个指定的瓦片,所述配置逻辑被配置为基于所述指定的瓦片的所述位文件来对所述第一组宏部件中的所分配的瓦片进行编程。
4.如权利要求1所述的宏调度器,其中所述资源跟踪模块还被配置为将所述第一组宏部件中的每一者与所述第一客户端装置的网络地址相关联且与所述第一客户端装置请求的第一任务相关联。
5.如权利要求1所述的宏调度器,其中所述资源跟踪模块还被配置为针对所述多个宏部件中的每个宏部件,在所述数据库中记录所述宏部件在所述一组FPGA装置中的位置以及所述宏部件的可用性。
6.如权利要求1所述的宏调度器,所述宏调度器还包括合成逻辑,所述合成逻辑被配置为进行以下操作:
在以所述一组FPGA装置的初始配置执行任务期间,其中所述初始配置由所述第一设计定义指示,为所述设计生成优化的配置,其中所述配置逻辑还被配置为在以所述一组FPGA装置的所述优化的配置重新开始执行所述任务之前对所述一组FPGA装置进行重新编程以用所述优化的配置来替换所述初始配置;以及
生成重映射通知,所述重映射通知使所述初始配置中的初始端口位置与所述优化的配置中的优化的端口位置相关。
7.如权利要求1所述的宏调度器,其中所述第一设计定义包括加速器的定义,并且其中所述资源分配逻辑还被配置为:
调度在第一时间段期间在所述加速器中执行来自所述第一客户端装置的第一任务,以及
调度在第二时间段期间在所述加速器中执行来自第二客户端装置的第二任务。
8.如权利要求1所述的宏调度器,其中所述资源分配逻辑还被配置成为由从第二客户端装置接收的第二设计定义所定义的第二设计分配第二组所述多个宏部件,其中所述第一组宏部件中的第一宏部件子组与所述第二组宏部件中的第二宏部件子组位于所述一组FPGA装置中的相同的FPGA装置中。
9.如权利要求1所述的宏调度器,其中所述第一组宏部件包括所述多个FPGA装置中的至少两个不同的FPGA装置的宏部件。
10.一种方法,所述方法包括:
更新列举一组现场可编程门阵列(FPGA)装置的多个宏部件的数据库;
从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个指定的宏部件;
通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及
通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。
11.如权利要求10所述的方法,其中:
所述一个或多个指定的宏部件包括一个或多个指定的瓦片;
所述第一设计定义还指示所述一个或多个指定的瓦片中的每一者的位文件;并且所述方法还包括:
针对所述一个或多个指定的瓦片中的每个指定的瓦片,基于所述指定的瓦片的所述位文件来对所述第一组宏部件中的所分配的瓦片进行编程。
12.如权利要求10所述的方法,所述方法还包括:
将所述第一组宏部件中的每一者与所述第一客户端装置的网络地址相关联且与所述第一客户端装置请求的第一任务相关联。
13.如权利要求10所述的方法,所述方法还包括:
针对所述多个宏部件中的每个宏部件,在所述数据库中记录所述宏部件在所述一组FPGA装置中的位置以及所述宏部件的可用性。
14.如权利要求10所述的方法,所述方法还包括:
在以所述一组FPGA装置的初始配置执行任务期间,其中所述初始配置由所述第一设计定义指示,为所述设计生成优化的配置;
在以所述一组FPGA装置的所述优化的配置重新开始执行所述任务之前对所述一组FPGA装置进行重新编程以用所述优化的配置来替换所述初始配置;以及生成重映射通知,所述重映射通知使所述初始配置中的初始端口位置与所述优化的配置中的优化的端口位置相关。
15.如权利要求10所述的方法,其中所述第一设计定义包括加速器的定义,并且其中所述方法还包括:
调度在第一时间段期间在所述加速器中执行来自所述第一客户端装置的第一任务,以及
调度在第二时间段期间在所述加速器中执行来自第二客户端装置的第二任务。
16.如权利要求10所述的方法,所述方法还包括:
为由从第二客户端装置接收的第二设计定义所定义的第二设计分配第二组所述多个宏部件,其中所述第一组宏部件中的第一宏部件子组与所述第二组宏部件中的第二宏部件子组位于所述一组FPGA装置中的相同的FPGA装置中。
17.一种系统,所述系统包括:
一组现场可编程门阵列(FPGA)装置,所述一组FPGA装置包括多个宏部件;
数据库,所述数据库被配置为列举所述多个宏部件;以及
独立的宏调度器,所述独立的宏调度器包括:
资源跟踪模块,所述资源跟踪模块被配置为更新所述数据库;
通信接口,所述通信接口被配置为从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个指定的宏部件;
资源分配逻辑,所述资源分配逻辑被配置为通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及
配置逻辑,所述配置逻辑被配置为通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。
18.如权利要求17所述的系统,所述系统还包括第一客户端装置,其中所述独立的宏调度器还包括:
应用编程接口(API),所述API被配置为响应于来自所述第一客户端装置的命令而起始所述资源分配逻辑进行的所述分配以及所述配置逻辑进行的所述配置。
19.如权利要求17所述的系统,其中所述一组FPGA装置中的一个或多个FPGA装置中的每一者包括局部宏调度器,所述局部宏调度器被配置为确定所述所分配的宏部件中的至少一者在所述一个或多个FPGA装置中的布局。
20.如权利要求17所述的系统,所述系统还包括多个网络通道,所述多个网络通道将所述一组FPGA装置连接到所述独立的宏调度器。

说明书全文

虚拟FPGA管理和优化系统

[0001] 政府权利
[0002] 本发明是在政府支持下根据DOE授予的劳伦斯利弗莫尔国家实验室的推进计划(主合同No.DE-AC52-07NA27344,分包合同No.B620717)进行的。政府对本发明具有某些权利。

背景技术

[0003] 现场可编程阵列(FPGA)是被设计为在制造之后由终端用户进行配置的集成电路装置。一般来说,FPGA包括不受约束的电路元件(称作逻辑)的阵列,所述逻辑块通过互连资源连接在一起,从而构成可编程互连结构。互连资源可以包括例如可以不同配置互连线的逻辑门。FPGA中的逻辑块可以被配置为执行复杂的组合函数,或逻辑函数,诸如与或异或。FPGA中的逻辑块还可以包括存储器元件,所述存储器元件可以实现为简单的触发器或存储器的更完整的块。
[0004] 在FPGA中,逻辑块可以包括通过将值插入到小的静态随机存取存储器(SRAM)或寄存器中而进行编程的要素,诸如查找表(LUT)和其他固定功能。编程必须在逻辑块可以使用之前执行。在编程之后,对LUT的函数输入的每个组合得到预定义输出,从而允许实现任何逻辑函数。典型的FPGA依赖于外部存储器装置和单个相对慢的串行编程端口来进行配置。FPGA通常具有“配置模式”和单独的“用户模式”,在所述模式中整个芯片处于闲置状态等待编程,或编程的芯片在运行。
附图说明
[0005] 本公开在附图的图式中以示例方式而绝不以限制方式示出。
[0006] 图1示出了支持一组现场可编程门阵列(FPGA)装置中的硬件资源的虚拟化的计算系统的实施方案。
[0007] 图2示出了根据一个实施方案的FPGA装置中的宏部件。
[0008] 图3示出了根据一个实施方案的FPGA中的可编程瓦片。
[0009] 图4示出了宏调度器的实施方案。
[0010] 图5是示出根据一个实施方案的用于对FPGA装置进行配置并用于执行宏调度功能的过程的流程图

具体实施方式

[0011] 以下描述阐述了许多具体细节,诸如具体系统、部件和方法等的示例,以便提供对实施方案的较好理解。然而,本领域技术人员应明白,至少一些实施方案可以在没有这些具体细节的情况下实践。在其他实例中,没有详细描述或以简单框图格式呈现了众所周知的部件或方法,以免不必要地模糊实施方案。因此,所阐述的具体细节仅仅是示例性的。特定实现方式可以与这些示例性细节不同并且仍预期在实施方案的范围内。
[0012] 现代数据中心可以为其客户端提供多种计算资源,包括可以用作固定资源或用作用于执行客户端工作负载的用户可配置资源的现场可编程门阵列(FPGA)装置。一些FPGA装置可以被专门设计以在这些数据中心使用。然而,使用FPGA装置的现有数据中心仍可能低效地分配FPGA硬件资源,尤其是当多个独立的客户端在请求使用资源时。因此,这些数据中心可以受益于实现FPGA虚拟化的接口,使得当通过资源共享、时间多路复用和其他优化来服务多个客户端时可以更高效地分配FPGA硬件资源。
[0013] 在一个实施方案中,数据中心通过将FPGA硬件资源组织为称作宏部件的逻辑单元来支持数据中心的FPGA装置的虚拟化,使得加速器设计可以被指定为限定宏部件之间的连接的宏图。将用于调度宏部件的使用的一个或多个FPGA宏调度器集成在FPGA装置本身中和/或作为通过网络或系统互连件连接到FPGA装置的独立的单元操作。
[0014] 在一个实施方案中,FPGA装置包括许多不同类型的宏部件,所述宏部件表示硬件资源,诸如输入/输出(I/O)端口、可配置逻辑块(CLB)区域、硬化块或电路部件的其他组合,所述宏部件可以用于FPGA硬件资源的粗粒度分配、布局与布线以用于实现专用硬件加速器功能。因此宏部件充当用于数据中心的共享的FPGA装置的逻辑布局单元。对宏部件的调度比按需要对FPGA执行全合成、布局与布线过程简单得多(例如,可以为请求分配第一空闲的宏部件)。可以针对包括更复杂的预编译电路的宏块离线地执行合成、布局与布线。
[0015] 在一个实施方案中,FPGA装置各自包括局部FPGA宏调度器,所述宏调度器执行其中集成了所述宏调度器的FPGA装置的虚拟化资源分配、调度和硬件优化。另外,数据中心还包括与系统或存储器互连件上的其他部件网络连接的独立的FPGA宏调度器单元。独立的FPGA宏调度器提供更强大的计算资源,所述计算资源可以专用于网络中的没有局部宏调度器的FPGA的宏调度和管理任务。独立的FPGA宏调度器还可以执行已经具有局部宏调度器的FPGA装置的额外优化和管理任务,这是因为局部宏调度器可能在计算能方面受限制或者可能对较广泛的客户端请求的任务的认识更有限。
[0016] 在一个实施方案中,局部和/或独立的宏调度器提供根据将在FPGA装置中的一者或多者中实现的加速器的设计定义来分配和调度宏部件的应用编程接口(API)。设计定义包括指定宏图的代码,在宏图中在宏部件之间的连接和宏部件的配置方面定义加速器。通过使用API,用户因此可以产生将在硬件加速器中实现的功能,并且还可以为功能指派输入数据并以虚拟化方式读取所得输出。
[0017] 图1示出了根据一个实施方案的包括宏调度器130-133的计算系统100,所述宏调度器用于调度任务和分配多个FPGA装置121-123的资源。计算系统100中的宏调度器130-133实现在FPGA装置121-123中实现的FPGA加速器的虚拟化。在一个实施方案中,计算系统
100表示向多个客户端装置(诸如客户端110和111)提供计算资源的数据中心的一部分。计算系统100的部件可以经由各种通道(诸如系统或存储器互连件或局域网或广域网)与彼此进行通信,并且可以除了所示拓扑之外的拓扑连接。
[0018] 在计算系统100中,FPGA装置121-123中的每一者分别具有局部宏调度器131-133,以便布局(即,物理地映射)和优化将在FPGA中实现的同时存在的加速器。例如,宏调度器131将确定将使用FPGA121上的哪些物理硬件资源来在FPGA 121中同时实现加速器的集合。
计算系统100还包括能够执行全局(即,跨FPGA的)分配和调度的独立的宏调度器130。独立的宏调度器130可以访问来自多个客户端(例如,110和111)的请求并跟踪多个FPGA装置(例如,121-123)的资源,并且因此可以识别较大数量的最佳布局和调度。另外,独立的宏调度器130在与FPGA装置121-123分开的位置操作并且因此可以操作而不受FPGA 121-123的热约束的限制。因此,宏调度器130可以是能够合成共同调度的寄存器传送级(RTL)设计以实现更快和更紧凑的实现方式的强大得多的计算机。
[0019] 在一个实施方案中,客户端110和111是经由网络连接而连接到计算系统100的其他部件的远程客户端。客户端110和111可以请求FPGA装置121-123的配置以实现指定的硬件加速器并且还可以定义将要在硬件加速器中执行的任务。客户端110和111向独立的宏调度器130或局部宏调度器131-133中的API提供设计定义、任务定义和其他信息(例如,配置位文件)。宏调度器130-133响应于客户端的请求而分配FPGA 121-123的硬件资源并调度任务执行。在一个实施方案中,访问密钥、加密通信和/或其他安全措施用以防止恶意客户端或过程影响其他任务。
[0020] FPGA 121-123包括不受约束的电路元件,称作可配置逻辑块(CLB),所述可配置逻辑块可以通过可编程互连元件来连接。每个FPGA中的CLB包括查找表和可以通过将值插入到FPGA中的特定静态随机存取存储器(SRAM)位置或寄存器中而进行配置的其他固定功能。CLB因此可以被配置为执行如由客户端装置指定的任意逻辑函数。
[0021] 计算系统100中的宏调度器130-133执行以下功能:分配FPGA121-123的硬件资源以用于实现请求的加速器配置,以及调度用于在加速器中执行的所请求的任务。宏调度器130-133还执行上下文切换以允许任务与配置之间的切换(即,位流交换)。例如,上下文切换可能需要为配置的区域(例如,包括一组配置的宏部件)保存寄存器和存储器状态,将先前保存的状态还原到相同区域,以及对该区域进行重新配置以执行不同的任务。然后可以在稍后时间还原先前保存的状态以恢复执行原始任务。在一个实施方案中,具有充足的计算资源的宏调度器执行第二轮优化,在第二轮优化中执行合成和/或布局与布线过程以生成已经执行的设计的更佳的配置,然后暂停执行以用新的最佳配置来替换原始配置。
[0022] 计算系统100包括局部宏调度器131-133和独立的宏调度器130两者。替代实施方案可以包括更少或更多的局部宏调度器和/或独立的宏调度器。局部宏调度器131-133执行上文关于所述宏调度器所驻留的FPGA装置描述的功能;例如,宏调度器131-133确定所分配的宏部件在其自己的相应的FPGA装置121-123中的布局。独立的宏调度器130经由网络通道(例如,系统或存储器互连件)连接到多个FPGA装置121-123并且可以针对连接的FPGA装置121-123中的任一者执行分配、调度和优化功能。在一个实施方案中,独立的宏调度器130可以针对没有其自己的局部宏调度器的FPGA装置执行这些功能。独立的宏调度器130从客户端110和111接收功能调用,并且基于所述功能调用,分配用于执行所请求的任务的宏部件,为从客户端110和111接收的设计执行合成和布局与布线。宏调度器130还管理许可并向客户端发出通知。
[0023] 图2示出了包括呈多个宏部件210-219的形式的硬件资源的FPGA装置121。宏部件包括出于分配和调度的目的而被视为单个单元的较小硬件部件的集合。一些宏部件是高度可配置的,而其他宏部件执行单个固定功能。FPGA 121中的宏部件210-219包括可编程瓦片210、输入寄存器211、输出寄存器212、固定功能块213-216,和物理输入/输出(I/O)块217-
219。
[0024] 瓦片210中的每一者是包括CLB、开关、固定功能块和可以独立于其他瓦片进行编程的互连件的编程区域。瓦片可以与位文件相关联,位文件是含有瓦片的合成、布局与布线的设计的文件。取决于功能的大小或复杂性,宏调度器130或131可以分配多个物理瓦片来实现该功能。
[0025] FPGA 121还包括一组输入寄存器211和输出寄存器212。输入寄存器211向在FPGA 121中实现的功能提供输入数据,而输出寄存器提供来自功能的所得输出数据。在一个实施方案中,输入寄存器211和输出寄存器212为了获得较高性能而实现为队列(例如,先进先出(FIFO)缓冲器)。FPGA 121可以被配置为使得输入寄存器211和输出寄存器212经由物理输入/输出(I/O)块(例如,PHY块217-219)连接到FPGA的外部接脚(例如,接脚227-229)并且因此可由外部装置和过程访问。PHY块217-219提供对诸如收发器的I/O资源的访问,并且连接到FPGA的接脚227-229。
[0026] FPGA 121还包括不同类型的固定功能(FF)块213-216。FF块213是乘法器块,FF块214是除法器块,FF块215是存储器块,并且FF块216是中央处理单元块。FPGA 121可以包括每种类型的固定功能块的多个实例。FPGA 121的替代实施方案可以包括执行不同功能的其他类型的FF块。
[0027] 图3示出了根据一个实施方案的FPGA 121中的瓦片210的内部部件。瓦片210是包括可配置逻辑块(即,块301-312)的阵列以及用以选择性地连接逻辑块301-312的互连资源320-322的编程区域。
[0028] 在FPGA 121中,瓦片210的边界由虚线指示。瓦片331包括逻辑块301-304,瓦片332包括逻辑块305-308,瓦片333包括逻辑块309和310,并且瓦片334包括逻辑块311和312。瓦片331-334将FPGA 121中包含的可编程逻辑划分为单独的配置域,所述配置域可以彼此独立地操作和编程,或组合以作为较大的可编程区域操作。当一个瓦片用以执行一个或多个指令时,不同瓦片中的硬件的重新配置可能发生。
[0029] 如图3所示,瓦片331和332各自包括四个可配置逻辑块,而瓦片333和334各自包括两个可配置逻辑块。因此,给定瓦片无需与同一可编程装置中的另一瓦片具有相同数量的可配置逻辑块。在替代实施方案中,瓦片可以包括少于或多于所示数量的可配置逻辑块。
[0030] 可配置逻辑块301-312中的每一者包括查找表(LUT)和固定功能块。在编程之后,对LUT的函数输入的每个组合得到预定义输出,从而允许实现任意逻辑函数。可配置逻辑块中的每一者可以被编程为通过将适当的值写入到LUT中和控制逻辑块中的部件(例如,LUT、固定功能块等)之间的连接的配置存储器区域或寄存器中来执行各种功能。
[0031] 可配置逻辑块301-312各自连接到可编程互连结构320,可编程互连结构包括允许块301-312选择性地彼此连接的导电迹线和开关。在图3中,将导电迹线示出为将可配置逻辑301连接到可编程互连结构320。其他块302-312也经由导电迹线连接到互连结构320;然而,为了清楚起见,在图示中省略了将这些块302-312连接到互连结构320的导电迹线。
[0032] 可编程互连结构320在替代实施方案中可能不如在图3中所示的均一。例如,互连结构可以包括具有不同长度的导电迹线或在FPGA121的不同区域中可以具有不同数量的平行导电迹线。互连结构320的导电迹线通过开关彼此连接,在开关处导电迹线相交。例如,多根迹线相交的区域321(由虚线示出)在两根导电迹线之间的每个相交点之间包括开关。或者,开关可以仅存在于区域321中的相交点中的一些处。
[0033] 可编程互连结构还包括边界开关,诸如开关322,边界开关可以用于选择性地将一个瓦片中的部件与其他瓦片隔离。边界开关位于FPGA121中的瓦片331-334的边界处。例如,边界开关322位于可编程互连结构320的导电迹线越过瓦片331的边界之处。
[0034] 因此,边界开关322可以用于将瓦片331的可配置逻辑块301-304和其他部件与其他瓦片332-334断开。另外,边界开关可以选择性地闭合或断开以便组合瓦片。例如,在瓦片331与332之间的边界开关322可以闭合以将瓦片331与332彼此组合,而其他边界开关保持断开以将组合的瓦片331和332与其他瓦片333和334隔离。
[0035] 图4示出了根据一个实施方案的独立的宏调度器130的功能框图。宏调度器130中包括的功能块表示可以在宏调度器130中执行的操作,并且使用诸如电路模块的硬件或使用硬件与软件的组合来实现。宏调度器130经由网络通道(诸如系统和/或存储器互连件)连接到计算系统100中的其他部件(诸如FPGA装置121-123和客户端装置110和111)。
[0036] 宏调度器130经由通信接口410连接到网络通道。应用编程接口(API)模块411经由通信接口410从客户端110和111接收设计定义、功能调用和其他命令,并且通过激活所请求的宏调度器130的功能(诸如通过资源分配逻辑413分配宏部件,通过配置逻辑414对瓦片进行配置等)来对这些输入做出响应。
[0037] 客户端装置110-111请求的特定任务的硬件设计通常不会消耗任何单个FPGA上的所有硬件资源;因此,可以将FPGA的备用硬件资源分配给同一过程、来自同一客户端的其他过程或来自其他客户端的过程请求的其他加速功能。为了允许在共享的FPGA装置上为多个同时存在的设计迅速调度(即,“布局”)多个设计,设计定义以比寄存器传送级(RTL)更高的抽象级描述硬件配置。
[0038] 在一个实施方案中,由API模块411接收的设计定义指示用于某一设计的宏图中的用于该设计的一个或多个指定的宏部件。宏图指示所使用的宏部件的类型以及指定的宏部件配置和连接的方式。宏图可以包括宏部件(诸如输入和输出寄存器)、CLB(例如,瓦片)的集合、查找表、布线资源和固定功能块(例如,乘法器、除法器、存储器、CPU等)。
[0039] 宏图还将位文件的文件名称与宏图中指定的瓦片中的每一者相关联。在一个实施方案中,位文件是由对客户端装置110-111中的一者的设计执行的合成过程生成。位文件包括可以存储在配置寄存器中以对瓦片进行配置来实现设计的至少一部分(例如,一个或多个硬件加速器)的配置数据。
[0040] 以下伪码是根据一个实施方案的包括宏图的设计定义的示例:
[0041] myAccelerator=new MGCreateGraph();
[0042] inA=new MGInReg();
[0043] inB=new MGInReg();
[0044] outC=new MGOutReg();
[0045] myLogic=new MGTile(“tile_file.bit”);
[0046] myLogic.setInputs(inA,inB);
[0047] myLogic.setOutputs(outC);
[0048] myAccelerator.addComponent(myLogic);
[0049] 在以上代码中,‘myAccelerator’是宏图,所述宏图包括四个宏部件:输入寄存器‘inA’和‘inB’、输出寄存器‘outC’以及瓦片‘myLogic’。瓦片‘myLogic’利用构造器‘MGTile()’实例化,所述构造器指示包括用于对瓦片进行编程的配置数据的位文件‘tile_file.bit’。‘myLogic.setInputs()’函数将瓦片‘myLogic’连接到输入寄存器‘inA’和‘inB’。‘myLogic.setOutputs()’函数将‘myLogic’连接到输出寄存器‘outC’。最后,‘myAccelerator.addComponent()’函数用以将瓦片‘myLogic’连接到加速器的宏图‘myAccelerator’。
[0050] 设计定义可以由从客户端装置110-111中的一者接收的任务定义参考。任务定义由API模块411接收,并且定义将使用设计定义中指定的宏图执行的任务。下文提供示例性任务定义:
[0051] myFPGA=getFreeFPGAaccelerator();
[0052] myFPGA.program(myAccelerator);
[0053] inA.writeDataSequence(1,2,3,4,5);
[0054] inB.writeDataSequence(6,7,8,9,10);
[0055] myFPGA.execute();
[0056] myResults=outC.read();
[0057] ‘getFreeFPGAacceler()’函数将未使用的FPGA返回给‘myFPGA’变量。随后的函数调用‘myFPGA.program(myAccelerator)’则基于如先前在示例性设计定义中所定义的‘myAccelerator’宏图来激活返回的FPGA的编程。随后的函数‘inA.writeDataSequence(1,2,3,4,5)’和‘inB.writeDataSequence(6,7,8,9,10)’指定输入缓冲器‘inA’和‘inB’的输入数据。在替代实施方案中,可以将(例如,在FPGA上的)存储器的指示器而不是值阵列存储在输入缓冲器中。函数调用‘myFPGA.execute()’开始在配置的加速器中执行任务,并且‘myResults=outC.read()’从输出寄存器‘outC’读取执行结果。任务定义因此指定将用于任务的宏图,指定输入数据,请求执行,并且请求读取所得输出数据。
[0058] 宏调度器130包括数据库420,所述数据库由资源跟踪模块412更新并列举FPGA装置121-123中的宏部件。在一个实施方案中,数据库420包括针对宏部件中的每一者的一行,所述行将宏部件的唯一识别符存储在‘宏’字段421中并且将宏部件的位置存储在‘位置’字段422中。在一个实施方案中,‘位置’字段存储宏部件所驻留的FPGA的识别符,和/或宏部件的配置存储器的地址。当客户端装置110或111中的一者请求实现使用特定宏部件的设计时,资源跟踪模块412更新数据库420以通过将客户端的网络地址存储在‘客户端因特网协议(IP)’字段423中并将过程识别符(PID)存储在‘PID’字段424中来将客户端网络地址(例如,IP地址)和操作系统(OS)PID与宏部件相关联。还可以通过将任务的识别符写入在‘任务’字段425中来将使用宏执行的任务与宏相关联。在一个实施方案中,数据库420包括用于记录调度信息的‘调度’字段426;例如,‘调度’字段426可以指示将宏部件分别分配给字段423-425中的客户端、PID和任务的时间段。数据库420还包括用以存储优先级指示的‘优先级’字段427。在一个实施方案中,优先级指示是用户可选择的并且提供使用户根据任务优先级来影响调度的方式。例如,用户可以为某一任务选择较高优先级,从而允许所述任务打断具有较低优先级的已经在进程中的其他任务。
[0059] 在一个实施方案中,多个宏部件可以与同一客户端和/或同一任务相关联。在替代实施方案中,数据库420包括用于记录使用成本、上下文识别符或与宏部件的分配、调度或编程相关的其他值的额外字段。这些额外字段也可以由资源跟踪模块412更新。
[0060] 宏调度器130包括响应于在API 411处接收到的客户端请求而分配宏部件的资源分配模块413。响应于设计定义,资源分配模块413通过以下操作来为设计分配一组宏部件:针对设计定义中指定的每个宏部件,在数据库420中查询相同类型的可用宏部件,以及分配可用宏部件以在设计中使用。继续先前的示例,设计定义指定输入寄存器‘inA’和‘inB’、输出寄存器‘outC’以及瓦片‘myLogic’;因此,资源分配逻辑413查询数据库420以找到两个输入寄存器、输出寄存器和瓦片,并分配这些宏部件以用于实现‘myAccelerator’。
[0061] 在一个实施方案中,当根据任务定义执行‘myFPGA.program(myAccelerator)’时,将宏部件分配给设计。在一个实施方案中,用数据库420中的‘调度’字段426来指示宏部件随时间过去的可用性。如果没有足够宏部件可用以实现所请求的设计,则可以在稍后时间如基于‘调度’字段426确定的当有足够宏部件可用时调度任务。
[0062] 宏调度器130因此响应于经由API 411从客户端装置接收的设计定义和任务定义而执行FPGA资源的按需高速分配。在一个实施方案中,宏调度器130中的资源分配模块413还通过控制对所分配的宏部件进行配置和在配置的宏部件中执行所请求的任务的时序来执行调度功能。在一个实施方案中,资源分配模块413还执行上下文切换和管理功能。因此,资源分配模块413可以暂停任务并保存由所述任务使用的任何加速器的寄存器和存储器状态以及其配置数据(例如,位文件或位流),使得可以在稍后时间恢复任务执行。该上下文切换允许硬件资源的时间多路复用(例如,允许执行中的任务暂时被较高优先级任务打断)。
[0063] 因为宏调度器130可以访问关于来自多个客户端110-111的任务和多个FPGA装置121-123的宏部件的信息,所以宏调度器130能够识别优化机会,对于彼此不通信或合作的客户端装置本来将不会识别所述优化机会。在一个实施方案中,宏调度器130优化同时执行的任务的资源使用。
[0064] 在一个实施方案中,宏调度器130允许在由同一客户端装置或从不同客户端装置发起的两个不同任务之间共享单个配置的加速器。例如,第一客户端装置110可以提交用于执行第一任务的第一设计定义,其中设计定义包括将要从FPGA装置121-123中的宏部件实现的加速器的定义。如果用于执行来自客户端111的第二任务的第二设计定义请求使用相同的加速器设计,则资源分配逻辑413可以将单个加速器配置为由第一任务和第二任务两者使用。资源分配逻辑413通过调度在第一时间段期间在加速器中执行第一任务,并且调度在与第一时间段不重叠的第二时间段期间执行第二任务来随时间过去对加速器的使用进行多路复用。
[0065] 在一个实施方案中,宏调度器130允许在来自同一或不同客户端装置的两个不同设计之间共享单个FPGA装置的硬件资源(例如,宏调度器)。具体地说,资源分配逻辑413为第一客户端(例如,客户端110)请求的第一设计分配FPGA装置的宏部件,然后为第二客户端(例如,客户端111)请求的第二设计分配来自同一FPGA装置的宏部件。因此可以在多个设计之间共享单个FPGA装置的不同宏部件。在一个实施方案中,资源分配逻辑413还可以在不同设计之间分配单个宏部件的部分。例如,两个不同的设计可以各自使用少于存储器宏部件的一半;因此,资源分配逻辑413可以分配将在两个设计之间共享的单个存储器宏部件,其中第一设计利用存储器的上部部分并且第二设计利用存储器的下部部分。
[0066] 在一个实施方案中,宏调度器130可以分配来自多个FPGA装置的宏部件以在单个加速器中使用。换句话说,为加速器分配的一组宏部件可以包括来自两个或更多个FPGA装置的宏部件。因此,加速器可以在多个FPGA中实现,即使是在单个FPGA没有足够可用的宏部件来容纳加速器设计的一些情形中。
[0067] 在已通过资源分配模块413分配宏部件后,配置逻辑414通过根据设计定义对一组所分配的宏部件进行配置来在FPGA装置中实现设计。对于设计定义中指定的瓦片中的每一者,配置逻辑414使用设计定义中为指定瓦片所指定的位文件来对对应的所分配的瓦片进行编程。在一个实施方案中,配置逻辑414经由配置端口415对FPGA装置进行编程。或者,可以经由通信接口410来激活FPGA装置的编程。在一个实施方案中,可以经由通信接口410将配置数据(例如,位文件或位流)传输到将要编程的FPGA装置121-123的局部宏调度器(例如,131-133),并且通过每个FPGA装置的相应的局部宏调度器来执行宏部件的编程。
[0068] 宏调度器130包括合成逻辑416,所述合成逻辑用于对从客户端装置(诸如客户端110和111)接收的设计合成,执行布局与布线或其他过程。在一个实施方案中,可以在宏调度器130的合成逻辑416中而不是客户端装置中对RTL设计执行合成。
[0069] 当设计已在FPGA装置121-123中的一者或多者中被配置并操作时,合成逻辑416还允许宏调度器130为设计执行第二轮优化。在这种情形中,设计的初始配置在设计定义中进行指示(例如,指示为一个或多个位文件),并且用于对FPGA装置121-123中的所分配的宏部件进行配置。在以初始配置执行指定任务期间,合成逻辑416通过为设计执行合成和布局与布线计算来自动为设计生成优化的配置。暂停以初始配置执行任务,保存架构状态(例如,寄存器、存储器等),并且配置逻辑414对FPGA装置进行重新编程以用优化的配置来替换初始配置。然后还原状态并以优化的配置重新开始执行任务。
[0070] 如果第二轮优化导致设计的输入和/或输出端口位置(例如,控制、数据和结果端口)发生变化,则合成逻辑416还生成重映射通知,所述重映射通知使初始配置中的初始端口位置与优化的配置中的优化的端口位置相关,使得依赖于这些端口的任何过程仍可以找到这些端口。在替代实施方案中,通过FPGA来执行端口的硬件重映射。
[0071] 在包括独立的宏调度器130和局部宏调度器131-133两者的一个实施方案中,计算密集的工作(例如,合成和布局与布线)在独立的宏调度器130上执行,而计算较不密集的工作在局部宏调度器131-133上执行。具体地说,局部宏调度器131-133可以执行诸如以下功能:分配宏部件或在其自己的相应FPGA装置121-123内执行加速器的布局。
[0072] 尽管在以上实施方案中将宏调度器130的功能描述为由不同的电路模块执行,但是宏调度器130中的模块在替代实施方案中可以使用微代码或软件模块来实现。在一些实施方案中,宏调度器130的功能可以部分地用软件且部分地用硬件实现。在一些实施方案中,宏调度器130功能可以许多不同方式在一个或多个独立的宏调度器(例如,130)、一个或多个局部宏调度器(例如,131-133)或客户端装置(例如,110-111)之间分割。例如,瓦片级合成和/或布局与布线过程可以由请求的客户端、局部宏调度器或独立的宏调度器装置执行。
[0073] 在一个实施方案中,宏调度器130还替代于客户端装置执行计算要求高的任务,诸如初始合成和布局与布线过程,使得客户端装置可以是不太强大的计算机(例如,移动装置)。或者,如果客户端装置足够强大并且具有备用计算循环,则客户端装置可以辅助宏调度功能。在一个实施方案中,客户端装置还可以包括用于执行这些功能的硬件加速器。
[0074] 图5是示出用于基于来自客户端的设计定义来对一个或多个FPGA装置进行配置,以及用于执行宏调度器的其他功能(诸如第二轮优化和上下文切换)的过程500的流程图。针对在FPGA装置121-123中执行的多个任务中的每一者执行过程500,并且这些过程500在时间上可以重叠。在一个实施方案中,过程500中的操作由宏调度器130执行。或者,过程500中的操作可以在局部宏调度器131-133和/或客户端装置110-111中或在独立的宏调度器
130、局部宏调度器131-133与客户端装置110-111的组合中执行。
[0075] 在框501处,数据库420存储指示FPGA装置121-123的宏部件的位置和可用性的信息。数据库420通过包括‘宏’字段421来列举FPGA装置121-123中的宏部件,所述‘宏’字段存储每个宏部件的唯一识别符。将宏部件的位置存储在数据库420的‘位置’字段422中。在一个实施方案中,‘客户端IP’字段423、‘PID’字段424、‘任务’字段425和/或‘调度’字段426指示宏部件的可用性(即,宏部件是否未所分配)。过程500从框501继续到框503。
[0076] 在框503处,宏调度器130的API模块411从第一客户端装置110接收设计定义。接收到的设计定义指示将在设计中使用的一个或多个宏部件。设计定义还指示宏部件将在宏图(例如,在之前的示例中的‘myAccelerator’)中连接的方式。过程500从框503继续到框505。
[0077] 在框505处,API模块411从客户端110接收任务定义。任务定义在将使用先前接收到的设计定义中的宏图执行的动作方面定义任务。例如,任务定义可以指定由宏图定义的加速器的输入值以及请求执行和读出所得输出值。过程500从框505继续到框507。
[0078] 在框507处,资源分配逻辑413通过为设计定义中指定的宏部件中的每一者分配数据库420中列举的宏部件中的被指示为可用的一者来为设计分配宏部件。所分配给设计的宏部件可以来自同一FPGA装置,或来自不同的FPGA装置。可以将来自同一FPGA的宏部件分配给不同设计。例如,API模块411可以从同一客户端装置或从不同的客户端装置接收由第一设计定义所定义的第一设计和由第二设计定义所定义的第二设计。资源分配逻辑413为第一设计分配第一组宏部件并且为第二设计分配第二组宏部件,其中来自第一组的宏部件与第二组中的宏部件位于同一FPGA装置中。
[0079] 在一个实施方案中,在指定时间段(即,调度的)内分配宏部件;例如,可以将宏部件在一个时间段期间分配给第一设计并且在不同的时间段期间分配给第二设计。对于由具有多个宏部件的宏图定义的加速器设计,资源分配逻辑413可以识别设计中指定的所有宏部件可用并且可以被调度的时间段。在一个实施方案中,资源分配逻辑413优化来自同一客户端或多个不同客户端的多个设计的调度以随时间过去最大化宏部件的使用。
[0080] 资源分配逻辑413还通过识别任务定义所定义的任务可以在被配置为实现加速器设计的所分配的宏部件中执行的一个或多个时间段来调度所述任务的执行。在一个实施方案中,可以定义使用相同的加速器设计的多个任务;资源分配逻辑413调度这些任务在不同的时间段期间使用加速器。资源分配逻辑413进行的调度过程507包括额外优化步骤509A和509B。
[0081] 在框509A处,资源分配逻辑413从设计中识别可以与来自其他设计的加速器进行时间多路复用的加速器。例如,如果两个不同的设计(来自同一客户端或不同的客户端)两者都使用相同的加速器(例如,以相同方式连接的相同类型的宏部件),则该加速器可以配置一次并且用于两个设计。资源分配逻辑413调度在第一时间段期间在加速器中执行第一任务,并且调度在与第一时间段不重叠的第二时间段期间在相同的加速器中执行第二任务。
[0082] 在框509B处,资源分配逻辑413识别可以在多个设计之间共享的宏部件。例如,第一设计和第二设计可以各自请求8位存储器;因此,资源分配逻辑413可以分配单个16位存储器宏部件以在两个设计之间共享。因此,可以将宏部件中的未使用的位分配给另一设计。可以类似地在设计之间共享用于输入和输出端口的宏部件。
[0083] 在框511处,资源跟踪模块412更新数据库420以通过将客户端110的IP地址存储在与数据库420中的宏部件相关联的行中来将所分配的宏部件中的每一者与设计所源自的客户端110的网络地址(例如,IP地址)相关联。资源跟踪模块412还通过将任务的识别符存储在与数据库420中的所分配的宏部件中的每一者相关联的行中来将所分配的宏部件中的每一者与任务相关联。过程500从框511继续到框513。
[0084] 在已为接收到的设计分配宏部件后,过程500在框513处根据先前在框507处确定的任务的调度来确定将在设计中执行的任务(如任务定义中指定的)是否已到执行期限。如果任务没有到执行期限,则过程500在框515处继续。过程500通过在框515与513之间循环来等待任务变到期,直到任务到期为止。在这个等待时段期间,合成逻辑416可以通过为设计执行合成和布局与布线程序来执行第二轮优化。在一个实施方案中,第二轮优化是使用从客户端接收的RTL级设计执行,并且是基于实际所分配用于执行设计的宏部件和/或基于共享相同的所分配的宏部件中的一些或全部或在同时被调度的其他设计。
[0085] 在框513处,如果任务已到执行期限,则过程500在框517处继续。在框517处,资源跟踪逻辑412更新数据库420以将所分配的宏部件与任务相关联。资源跟踪逻辑412将任务的识别符写入到‘任务’字段425中,所述‘任务’字段对应于将在其中执行任务的加速器的所分配的宏部件中的每一者。过程500从框517继续到框519。
[0086] 在框519处,配置逻辑414通过根据设计定义中指定的初始配置或由第二轮优化过程515生成的优化的配置对一组所分配的宏部件进行配置来在一组FPGA装置中实现设计。在一个实施方案中,设计定义指定一个或多个瓦片作为宏图的一部分,并且还指示用于对指定的瓦片中的每一者进行配置的位文件。因此,对于指定的瓦片中的每一者,配置逻辑
414使用针对指定的瓦片指示的位文件来对来自一组所分配的宏部件的对应的所分配的瓦片进行配置。在一个实施方案中,通过将位文件的内容写入到瓦片的配置寄存器来对所分配的瓦片进行配置。如果已为设计执行第二轮优化(例如,在框515处等待执行时),则使用从第二轮优化生成的优化的配置来代替最初在设计定义中指定的初始配置。过程500从框
519继续到框521。
[0087] 在框521处,配置逻辑414指示配置完成并且在配置的宏部件中对任务的执行开始。在框523处,如果没有在框515处执行第二轮优化,则在以初始配置执行任务时执行第二轮优化。合成逻辑416因此在等待任务开始执行时(即,在框515处)或在执行任务时(即,在框523处)为设计生产优化的配置。在一个实施方案中,可以在框515处部分地执行并且在框523处完成第二轮优化。第二轮优化生成配置数据(例如,位文件、位流)和输入或输出端口的重映射信息,所述输入或输出端口在优化的配置中相对于初始配置移动了。过程500从框
523继续到框525。
[0088] 在框525处,暂停执行任务。在一个实施方案中,通过停止供应到正在其中执行任务的宏部件的时钟信号来暂停任务。当任务暂停时,保存任务的存储器和寄存器状态。过程500从框525继续到框527。
[0089] 在框527处,配置逻辑414对FPGA装置中的宏部件进行重新编程以用在框523处生的优化的配置来替换初始配置。还从重映射信息生成重映射通知,所述重映射通知使初始配置中的初始端口位置与优化的配置中的优化的端口位置相关。重映射通知允许其他过程找到新的输入和输出端口位置。或者,可以在FPGA硬件中重映射端口位置。将先前保存的任务的寄存器和存储器状态还原到重新配置的宏部件,如果寄存器和存储器位置在优化的配置中已经发生变化,则还原可以包括重映射这些位置。当切换到优化的设计时,先前保存的寄存器和存储器状态中的一些也可能变得冗余。在一个实施方案中,优化过程确定识别到在优化的配置中不再使用状态位,然后在使用优化的配置重新开始执行任务之前修改保存的任务的上下文以符合新的优化的配置(例如,通过删除被识别为不再使用的信号的所有状态位)。过程500从框527继续到框529。
[0090] 在框529处,以FPGA装置中的宏部件的优化的配置重新开始执行任务。在一个实施方案中,通过重新开始供应到宏部件的时钟信号来恢复执行。
[0091] 框531-539包括用于执行上下文切换的操作,使得可以在已被使用的宏部件中执行较高优先级任务。在框531处,如果原始任务没有被这种较高优先级任务取代,则过程在框541处继续。在框541处,如果原始任务尚未完成,则过程500继续返回到框529,在框529处继续执行原始任务。因此,重复框529、531和541直到原始任务被取代或完成为止。在框531处,如果原始任务被请求使用正在其中执行原始任务的宏部件的较高优先级任务取代,则过程500在框533处继续。在一个实施方案中,在框531处原始任务的取代对应于在针对较高优先级任务执行的过程500的另一实例中较高优先级任务在513处到期。
[0092] 在框533处,资源分配逻辑413执行上下文切换以允许执行较高优先级任务。保存原始任务的寄存器和存储器状态并且将宏部件重新配置为用于执行较高优先级任务的另一设计。在框535处开始并且继续执行较高优先级任务,直到在框537处任务完成为止。针对原始任务执行的框535和537对应于在针对较高优先级任务执行的过程500的其他实例中的框517-543。当较高优先级任务完成时,过程500从框500继续到框539。在框539处,资源分配逻辑413执行上下文切换以恢复执行原始任务。还原保存的寄存器和存储器状态并且对宏部件进行重新配置以实现用于执行原始任务的设计。
[0093] 继续执行原始任务直到任务完成为止。在框541处,如果任务完成,则过程500在框543处继续。在框543处,结束任务,取消分配任务所使用的宏部件并在所述宏部件没有用于其它设计的情况下使宏部件可用于新设计。通过资源跟踪逻辑412在数据库420中更新取消分配的宏部件的数据库行,所述资源跟踪逻辑清除‘任务’425字段和‘客户端IP’423字段。
开始下一个调度的任务(即,从其自己的框513开始),所述任务可以使用最近取消分配的宏部件。
[0094] 根据过程500的操作,局部宏调度器131-133和/或独立的宏调度器130提供用于根据设计定义中的宏图来分配和调度宏部件的机构。宏图定义将要在FPGA装置121-123中实现的加速器。通过使用API411,用户可以产生将实现为FPGA装置121-123中的硬件加速器的功能,并且还可以为功能指派输入数据并以虚拟化方式读取所得输出。通过资源共享、时间多路复用和其他优化方法,FPGA资源的虚拟化允许在服务多个客户端时更高效地分配和调度FPGA硬件资源。
[0095] 一种宏调度器包括:资源跟踪模块,所述资源跟踪模块被配置为更新列举一组现场可编程门阵列(FPGA)装置的多个宏部件的数据库;通信接口,所述通信接口被配置为从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个指定的宏部件;资源分配逻辑,所述资源分配逻辑被配置为通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及配置逻辑,所述配置逻辑被配置为通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。
[0096] 在所述宏调度器中,所述第一设计定义包括宏图,所述宏图定义所述一个或多个指定的宏部件之间的连接并且指示所述一个或多个指定的宏部件中的每一者的类型。
[0097] 在所述宏调度器中,所述一个或多个指定的宏部件包括一个或多个指定的瓦片、一个或多个指定的固定功能单元以及一个或多个指定的寄存器;所述第一设计定义还指示所述一个或多个指定的瓦片中的每一者的位文件。针对所述一个或多个指定的瓦片中的每个指定的瓦片,所述配置逻辑被配置为基于所述指定的瓦片的所述位文件来对所述第一组宏部件中的所分配的瓦片进行编程。
[0098] 在所述宏调度器中,所述资源跟踪模块还被配置为将所述第一组宏部件中的每一者与所述第一客户端装置的网络地址相关联且与所述第一客户端装置请求的第一任务相关联。
[0099] 在所述宏调度器中,所述资源跟踪模块还被配置为针对所述多个宏部件中的每个宏部件,在所述数据库中记录所述宏部件在所述一组FPGA装置中的位置以及所述宏部件的可用性。
[0100] 所述宏调度器还包括合成逻辑,所述合成逻辑被配置为进行以下操作:在以所述一组FPGA装置的初始配置执行任务期间,为所述设计生成优化的配置;以及生成重映射通知,所述重映射通知使所述初始配置中的初始端口位置与所述优化的配置中的优化的端口位置相关。所述初始配置由所述第一设计定义指示,并且所述配置逻辑还被配置为在以所述一组FPGA装置的所述优化的配置重新开始执行所述任务之前对所述一组FPGA装置进行重新编程以用所述优化的配置来替换所述初始配置。
[0101] 在所述宏调度器中,所述第一设计定义包括加速器的定义。所述资源分配逻辑还被配置为:调度在第一时间段期间在所述加速器中执行来自所述第一客户端装置的第一任务,以及调度在第二时间段期间在所述加速器中执行来自第二客户端装置的第二任务。
[0102] 在所述宏调度器中,所述资源分配逻辑还被配置成为由从第二客户端装置接收的第二设计定义所定义的第二设计分配第二组所述多个宏部件。所述第一组宏部件中的第一宏部件子组与所述第二组宏部件中的第二宏部件子组位于所述一组FPGA装置中的相同的FPGA装置中。
[0103] 在所述宏调度器中,所述第一组宏部件包括所述多个FPGA装置中的至少两个不同的FPGA装置的宏部件。
[0104] 一种操作宏调度器的方法包括:更新列举一组现场可编程门阵列(FPGA)装置的多个宏部件的数据库;从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个指定的宏部件;通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。
[0105] 在所述方法中,所述一个或多个指定的宏部件包括一个或多个指定的瓦片,并且所述第一设计定义还指示所述一个或多个指定的瓦片中的每一者的位文件。所述方法还包括针对所述一个或多个指定的瓦片中的每个指定的瓦片,基于所述指定的瓦片的所述位文件来对所述第一组宏部件中的所分配的瓦片进行编程。
[0106] 所述方法还包括将所述第一组宏部件中的每一者与所述第一客户端装置的网络地址相关联且与所述第一客户端装置请求的第一任务相关联。
[0107] 所述方法还包括针对所述多个宏部件中的每个宏部件,在所述数据库中记录所述宏部件在所述一组FPGA装置中的位置以及所述宏部件的可用性。
[0108] 所述方法还包括:在以所述一组FPGA装置的初始配置执行任务期间,为所述设计生成优化的配置;在以所述一组FPGA装置的所述优化的配置重新开始执行所述任务之前对所述一组FPGA装置进行重新编程以用所述优化的配置来替换所述初始配置;以及生成重映射通知,所述重映射通知使所述初始配置中的初始端口位置与所述优化的配置中的优化的端口位置相关。所述初始配置由所述第一设计定义指示。
[0109] 在所述方法中,所述第一设计定义包括加速器的定义。所述方法还包括:调度在第一时间段期间在所述加速器中执行来自所述第一客户端装置的第一任务,以及调度在第二时间段期间在所述加速器中执行来自第二客户端装置的第二任务。
[0110] 所述方法还包括为由从第二客户端装置接收的第二设计定义所定义的第二设计分配第二组所述多个宏部件。所述第一组宏部件中的第一宏部件子组与所述第二组宏部件中的第二宏部件子组位于所述一组FPGA装置中的相同的FPGA装置中。
[0111] 一种计算系统包括:一组现场可编程门阵列(FPGA)装置,所述一组FPGA装置包括多个宏部件;数据库,所述数据库被配置为列举所述多个宏部件;以及独立的宏调度器。所述独立的宏调度器包括:资源跟踪模块,所述资源跟踪模块被配置为更新数据库;通信接口,所述通信接口被配置为从第一客户端装置接收第一设计定义,所述第一设计定义指示用于设计的一个或多个指定的宏部件;资源分配逻辑,所述资源分配逻辑被配置为通过为在所述第一设计定义中指示的所述一个或多个指定的宏部件中的每一者分配所述多个宏部件中的一者来为所述设计分配第一组宏部件;以及配置逻辑,所述配置逻辑被配置为通过根据所述第一设计定义对所述第一组所分配的宏部件进行配置来在所述一组FPGA装置中实现所述设计。
[0112] 所述系统还包括第一客户端装置。所述独立的宏调度器还包括应用编程接口(API),所述API被配置为响应于来自所述第一客户端装置的命令而起始所述资源分配逻辑进行的所述分配以及所述配置逻辑进行的所述配置。
[0113] 在所述系统中,所述一组FPGA装置中的一个或多个FPGA装置中的每一者包括局部宏调度器,所述局部宏调度器被配置为确定所述所分配的宏部件中的至少一者在所述一个或多个FPGA装置中的布局。
[0114] 所述系统还包括多个网络通道,所述多个网络通道将所述一组FPGA装置连接到所述独立的宏调度器。
[0115] 如本文中所使用,术语“联接到”可以意味着通过一个或多个中间部件直接或间接联接。经由本文中描述的各种总线提供的信号中的任一者可以与其他信号进行时间多路复用并经由一根或多根普通总线提供。另外,电路部件或块之间的互连可以示出为总线或单一信号线。总线中的每一者可以替代地是一根或多根信号线并且单一信号线中的每一者可以替代地是总线。
[0116] 某些实施方案可以实现为可以包括存储在非暂时性计算机可读介质上的指令的计算机程序产品。这些指令可以用于对通用或专用处理器进行编程以执行所描述的操作。计算机可读介质包括用于以机器(例如,计算机)可读的形式(例如,软件、处理应用程序)存储或传输信息的任何机构。非暂时性计算机可读存储介质可以包括但不限于:磁性存储介质(例如,软盘);光学存储介质(例如,CD-ROM);磁光存储介质;只读存储器(ROM);随机存取存储器(RAM);可擦除可编程存储器(例如,EPROM和EEPROM);快闪存储器,或适合用于存储电子指令的另一类型的介质。
[0117] 另外,一些实施方案可以在分布式计算环境中实践,其中计算机可读介质存储在一个以上计算机系统上和/或由一个以上计算机系统执行。另外,可以跨越连接计算机系统的传输介质拉取或推送在计算机系统之间传送的信息。
[0118] 一般来说,在计算机可读存储介质上执行的表示计算系统100和/或计算系统的一部分的数据结构可以是数据库或其他数据结构,所述数据库或其他数据结构可以由程序读取并直接或间接地用以制造包括计算系统100的硬件。例如,数据结构可以是用高级设计语言(HDL)(诸如Verilog或VHDL)进行的对硬件功能的行为级描述或寄存器传送级(RTL)描述。描述可以由合成工具读取,所述合成工具可以合成所述描述以从合成库产生包括一系列门的网表。所述网表包括一组门,所述门还表示包括计算系统100的硬件的功能。所述网表然后可以被布局和布线以产生描述要应用于掩模的几何形状的数据集。所述掩模然后可以用于各种半导体制造步骤中以产生与计算系统100相对应的半导体电路。或者,计算机可读存储介质上的数据库根据需要可以是网表(有或没有合成库)或数据集,或图形数据系统(GDS)II数据。
[0119] 尽管已按特定次序示出和描述了本文中的方法的操作,但每一方法的操作次序可以更改,使得某些操作可以相反次序执行或使得某些操作可以至少部分地与其他操作同时执行。在另一实施方案中,不同操作的指令或子操作可以呈间歇和/或交替的方式。
[0120] 在以上说明书中,已经参考说明书的特定示例性实施方案描述了实施方案。然而,将显而易见的是,在不脱离如所附权利要求中阐述的实施方案的较宽范围的情况下,可以对实施方案进行各种修改和改变。因此,应以说明性意义而不是限制性意义来看待本说明书和附图。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈