掌桥专利:专业的专利平台
掌桥专利
首页

集成电路中的计算单元的编程和控制

文献发布时间:2023-06-19 11:39:06


集成电路中的计算单元的编程和控制

技术领域

本公开涉及集成电路(IC),并且更具体地涉及IC内的用于硬件加速的计算单元的编程和控制。

背景技术

异构计算平台(HCP)是指一种数据处理系统,其包括主机处理器和一个或多个其他不同处理设备。主机处理器通常被实现为中央处理单元(CPU)。主机处理器通过接口电路系统耦合到其他处理设备。其他处理设备在架构上与主机处理器不同。而且,处理设备能够执行从主机处理器卸载的操作,例如执行应用,并且使操作的结果可用于主机处理器。

在某些情况下,处理设备适于执行程序代码。这样的处理设备通常具有与主机处理器不同的指令集架构。这些其他处理设备的示例包括但不限于图形处理单元(GPU)、数字信号处理器(DSP)等。

在其他情况下,执行从主机处理器卸载的操作的处理设备包括适于硬件加速程序代码的设备。这些处理设备包括将所卸载的操作实现为硬件的电路系统。该电路系统以在功能上等同于程序代码的执行(例如,所卸载的操作)的方式进行操作。能够进行硬件加速的处理设备的示例包括可编程集成电路(IC),诸如现场可编程门阵列(FPGA)、部分可编程IC、专用IC(ASIC)等。适当地,HCP可以包括处理设备的组合,其中一个或多个处理设备适于执行程序代码,而一个或多个其他处理设备适于硬件加速程序代码。

以硬件来实现程序代码可能会带来各种好处,诸如更快的操作、降低的功耗、冗余性等。尽管将应用实现为硬件会带来可能包括或可能不包括更快的操作在内的好处,但是以硬件来实现程序代码和/或应用通常称为“硬件加速”。

在任何情况下,主机处理器负责对处理设备的卸载操作并且从处理设备中检索结果。主机处理器高效地将必要数据移入和移出处理设备的能力会显著影响HCP的整体效率和性能。

发明内容

一个或多个实施例涉及一种集成电路(IC)。该IC包括:具有多个时隙的命令队列,多个时隙被配置为存储来自主机处理器的命令以供IC的多个计算单元执行;以及具有与命令队列中的多个时隙相对应的多个位置的命令请求寄存器。命令请求寄存器被配置为生成指示存储在命令队列中的新命令的中断。该IC包括:被配置为响应于来自命令请求寄存器的中断,从多个计算单元中确定空闲的所选择的计算单元以执行新命令的控制器;以及被配置为将新命令提供给所选择的计算单元的计算单元直接存储器访问电路。

在一些实施例中,新命令可以包括第一列表,第一列表指定能够执行新命令的多个计算单元中的一个或多个计算单元。

在一些实施例中,控制器可以被配置为维护第二列表,第二列表指定多个计算单元中的哪个计算单元是空闲的,并且控制器被配置为通过将第一列表与第二列表进行比较来确定用于执行新命令的所选择的计算单元。

在一些实施例中,控制器可以被配置为更新命令队列中的新命令,以指定用于所选择的计算单元的基地址。

在一些实施例中,控制器可以被配置为用所选择的计算单元的基地址来覆盖第一列表。

在一些实施例中,控制器可以被配置为向计算单元直接存储器访问电路提供对存储新命令的命令队列中的多个时隙中的所选择的时隙的引用。

在一些实施例中,计算单元直接存储器访问电路可以被配置为使用来自新命令的基地址将所选择的时隙中的新命令提供给所选择的计算单元。

在一些实施例中,命令请求寄存器可以是读时清除寄存器。

在一些实施例中,计算单元直接存储器访问电路还可以被配置为响应于提供新命令而开始所选择的计算单元的操作。

一个或多个实施例涉及一种IC。该IC包括:被配置为响应于从多个计算单元中的所选择的计算单元接收到指示所选择的计算单元已经完成处理的中断而用信号通知所选择的计算单元已经完成处理的计算单元中断电路;以及被配置为响应于来自计算单元中断电路的信号而生成中断的计算单元完成寄存器。该IC包括:被配置为响应于来自计算单元完成寄存器的中断,确定从主机处理器卸载的多个命令中的所选择的命令由所选择的计算单元执行,并且输出所选择的命令的控制器;以及被配置为生成到主机处理器的指示多个命令中的所选择的命令已经完成处理的中断的命令完成寄存器。

在一些实施例中,计算单元完成寄存器可以包括与多个计算单元相对应的多个位置。计算单元中断电路可以通过向与所选择的计算单元相对应的多个位置中的所选择的位置写入来向计算单元完成寄存器通知所选择的计算单元已经完成处理。

在一些实施例中,控制器可以被配置为维护多个命令和执行多个命令的多个计算单元中的对应计算单元的列表。

在一些实施例中,计算单元完成寄存器可以是读时清除寄存器。

在一些实施例中,命令完成寄存器可以是读时清除寄存器。

在一些实施例中,计算单元中断电路可以被配置为重新设置所选择的计算单元以执行来自主机处理器的另外的命令。

一个或多个实施例涉及一种方法。该方法包括:响应于来自主机处理器的指示命令队列内的新命令的可用性的通知,生成到控制器的中断;控制器响应于中断而从多个计算单元中确定空闲的所选择的计算单元以执行新命令;以及控制器向计算单元直接存储器访问电路通知所选择的计算单元和命令队列中的新命令。该方法还包括使用计算单元直接存储器访问电路将新命令提供给所选择的计算单元。

在一些实施例中,该方法还可以包括:响应于从所选择的计算单元接收到指示执行完成的中断而向控制器生成指示所选择的计算单元已经完成执行的中断。该方法还可以包括:使用控制器确定新命令已经被分配给所选择的计算单元,并且生成到主机处理器的指示新命令已经完成执行的中断。

在一些实施例中,向计算单元直接存储器访问电路通知所选择的计算单元和命令队列中的新命令可以包括:将所选择的计算单元的基地址写入命令队列中存储新命令的多个时隙中的所选择的时隙,并且将对多个时隙中所选择的时隙的引用提供给计算单元直接存储器访问电路。

在一些实施例中,从多个计算单元中确定所选择的计算单元可以包括:读取第一列表,该第一列表从新命令中指定能够执行新命令的多个计算单元中的一个或多个计算单元,并且将第一列表与第二列表进行比较,该第二列表指定多个计算单元中的空闲的计算单元以将公共计算单元确定为所选择的计算单元。

在一些实施例中,向计算单元直接存储器访问电路通知所选择的计算单元和命令队列中的新命令可以包括:用所选择的计算单元的基地址覆盖新命令的第一列表,其中新命令存储在命令队列中的多个时隙中的所选择的时隙中,并且向计算单元直接存储器访问电路提供对所选择的时隙的引用。

提供本“发明内容”部分仅是为了引入某些概念,而不是标识所要求保护的主题的任何关键或必要特征。根据附图和以下详细描述,本发明布置的其他特征将变得很清楚。

附图说明

在附图中通过示例的方式示出了本发明的布置。然而,附图不应当被解释为将本发明的布置限制为仅示出的特定实现。在阅读以下详细描述并且参考附图时,各个方面和优点将变得很清楚。

图1示出了根据本公开内描述的一个或多个实施例的异构计算平台的示例。

图2示出了根据本公开内描述的一个或多个实施例的由调度系统执行的示例操作。

图3A和3B(共同考虑)示出了根据本公开内描述的一个或多个实施例的用于HCP的示例操作方法。

图4示出了用于集成电路(IC)的示例架构。

具体实施方式

尽管本公开以限定新颖特征的权利要求结尾,但是可以认为,结合附图考虑本说明书,将能够更好地理解本公开中描述的各种特征。为了说明的目的,提供了本文中描述的过程、机器、制造及其任何变型。本公开中描述的特定结构和功能细节不应当被解释为限制性的,而仅仅是作为权利要求的基础,并且作为教导本领域技术人员以实质上任何适当的详细结构来不同地采用所描述的特征的代表性基础。此外,在本公开内容中使用的术语和短语并非意图是限制性的,而是旨在提供所描述的特征的可理解的描述。

本公开涉及集成电路(IC),并且更具体地涉及IC内的用于硬件加速的计算单元(CU)的编程和控制。根据本公开中描述的发明布置,描述了一种调度系统,该调度系统能够监测、跟踪和控制IC内的CU的操作。CU是IC内负责执行从异构计算平台(HCP)的主机处理器卸载的操作的硬件块或电路。调度系统在包括CU的同一IC内实现,并且协助以命令形式提供的操作从主机处理器到CU的卸载。

在常规的HCP中,调度被实现为由主机处理器执行的软件过程。主机处理器的任务是连续轮询IC的个体CU,以确定CU可用于执行操作的时间。CU的轮询会消耗大量的主机处理器时间。此外,由于调度过程是由主机处理器执行的,因此主机处理器必须等待直到CU可用才能向IC发送命令。主机处理器仅响应于确定CU可用于执行命令而发送命令。这样,在CU变得可用的时间与CU能够开始执行命令的时间之间引起了延迟。该延迟包括将命令(包括CU所需要的数据)从主机处理器传输到包括CU的IC所需要的时间。

根据本文中描述的发明布置,调度系统在包括CU的同一IC中实现。调度系统能够跟踪IC内CU的可用性。调度系统还能够接收从主机处理器发送的命令(例如,操作)。调度系统能够将命令存储在命令队列中,直到CU变得可用于执行命令时为止。这样,主机处理器能够发送命令并且继续执行其他任务,而不必在向IC发送命令之前连续轮询可用CU和/或等待CU变得可用。

一旦命令在调度系统内被排队并且CU可用,命令到CU的传输就不需要主机处理器参与。调度系统将命令传输到CU。由于调度系统和CU位于同一IC中,因此将命令传输到CU的时间相对较短。这样,减小了CU变得可用的时间与CU开始执行命令的时间之间的延迟,从而增加了HCP的速度并且减小了等待时间。

调度系统还能够确定命令何时完成执行。响应于确定命令已经完成执行,调度系统能够通知主机处理器。例如,调度系统能够响应于确定命令已经完成执行而写入被包括在调度系统内的命令完成寄存器。命令完成寄存器可以由主机处理器读取,以确定命令的状态和已经完成执行的特定命令。与个体地管理IC的每个CU相比,使用命令完成寄存器可以使主机处理器在“命令”级别进行操作。

下面参考附图更详细地描述本发布置的其他方面。为了图示的简单和清楚起见,附图中所示的元素未必按比例绘制。例如,为了清楚起见,一些元素的尺寸可能相对于其他元素被放大。此外,在认为适当的情况下,在附图中重复附图标记以指示对应的类似的或相似的特征。

图1示出了根据本公开内描述的一个或多个实施例的HCP 100的示例。在图1的示例中,HCP 100包括主机系统102和用作硬件加速设备的IC 150。

主机系统102可以被实现为诸如计算机或服务器等数据处理系统。主机系统102包括通过接口电路系统115耦合到存储器110和一个或多个输入/输出(I/O)设备的主机处理器105。主机系统102能够在存储器110内存储计算机可读指令(程序代码)。存储器110是计算机可读存储介质的示例。主机处理器105能够执行经由接口电路系统115从存储器110访问的程序代码。

存储器110可以包括一个或多个物理存储器设备,诸如例如本地存储器和大容量存储设备。本地存储器是指在程序代码的实际执行期间通常使用的非永久性存储器设备。本地存储器的示例包括随机存取存储器(RAM)和/或在程序代码的执行期间适合于由处理器使用的各种类型的RAM中的任何一种(例如,动态RAM或“DRAM”或静态RAM或“SRAM”)。大容量存储设备是指永久性数据存储设备。大容量存储设备的示例包括但不限于硬盘驱动器(HDD)、固态驱动器(SSD)、闪存、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)或其他合适的存储器。主机系统102还可以包括一个或多个高速缓冲存储器(未示出),该高速缓冲存储器提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储设备检索的程序代码的次数。

接口电路系统115的示例包括但不限于系统总线和输入/输出(I/O)总线。接口电路系统115可以使用多种总线架构中的任何一种来实现。总线架构的示例可以包括但不限于增强型工业标准架构(EISA)总线、加速图形端口(AGP)、视频电子标准协会(VESA)本地总线、通用串行总线(USB)和外围组件互连高速(PCIe)总线。

I/O设备120可以直接或通过中间I/O控制器耦合到主机系统102,例如,接口电路系统115。I/O设备120的示例包括但不限于键盘、显示设备、指示设备、一个或多个通信端口和网络适配器。网络适配器是指使得主机系统102能够通过中间的专用或公共网络耦合到其他系统、计算机系统、远程打印机和/或远程存储设备的电路系统。调制解调器、电缆调制解调器、以太网卡和无线收发器是可以与主机系统102一起使用的不同类型的网络适配器的示例。

在一个或多个实施例中,存储器110存储可以由主机处理器105执行的操作系统(未示出)和一个或多个应用(未示出)。IC 150的运行时库和驱动器也可以由主机处理器105执行。在一个或多个实施例中,运行时库可以与由主机处理器105执行的(多个)应用链接或以其他方式合并。运行时库包括用于使用驱动器与IC 150通信的功能。

取决于所实现的设备和/或系统的特定类型,主机系统102可以包括比所示的更少的组件或图1中未示出的其他组件。另外,所包括的特定操作系统、(多个)应用和/或I/O设备可以基于系统类型而有所不同。此外,一个或多个说明性组件可以被结合到另一组件中,或者以其他方式形成另一组件的一部分。例如,处理器可以包括至少一些存储器。主机系统102可以用于实现单个计算机或多个联网或互连的计算机,每个计算机使用图1的架构或与其类似的架构来实现。

IC 150经由通信链路125通信地链接到主机系统102。例如,IC 150可以耦合到可以被包括在主机系统102内的电路板。在一个或多个实施例中,通信链路125是PCIe链路。然而,应当理解,通信链路125可以使用多种不同的连接和/或通信协议中的任何一种来实现,并且所提供的示例不旨在作为限制。

IC 150包括接口155、调度系统160、多个CU 180和可选的存储器控制器185。CU180是用于硬件加速的电路块。CU 180可以用于执行从主机处理器105卸载的操作,例如命令。在图1的示例中,CU 180由调度系统160控制。

接口155能够通过通信链路125与主机系统102通信。在特定实施例中,接口155是包括直接存储器访问(DMA)电路的PCIe接口。接口155的DMA部分能够经由存储器控制器185读取和/或写入一个或多个寄存器和/或存储器,诸如命令队列162、命令请求寄存器164、命令完成寄存器166和/或存储器190。

调度系统160包括命令队列162、命令请求寄存器164、命令完成寄存器166、控制器168、CU DMA电路170、CU中断电路172和CU完成寄存器174。虽然单独示出,但是在一个或多个其他实施例中,接口155可以被认为是调度系统160的一部分。

命令队列162能够接收从主机系统102卸载的命令。命令队列162可以被实现为具有支持电路系统的存储器。例如,命令队列162可以被实现为具有支持逻辑的随机存取存储器(RAM)。在一个或多个实施例中,命令队列162被实现为IC 150内的一个或多个块RAM(BRAM)。命令队列162可以由主机处理器105写入(例如,在执行运行时库和/或驱动器时)并且由控制器168读取和写入。命令队列162可以被划分为多个固定大小的区域,称为“时隙”。每个时隙能够存储来自主机处理器105的命令(例如,一个命令)。

在特定实施例中,每个时隙具有相同大小。在一方面,时隙的大小可以在包括调度系统160的电路设计的编译时配置,因为在那时调度系统160要处理的最大命令的大小是已知的。时隙的大小可以被设置为存储由调度系统160处理的最大命令。在一个或多个其他实施例中,时隙的大小可以由主机处理器105执行的运行时库来配置。在任何情况下,主机处理器105都能够将新命令写入命令队列162的可用时隙中。

命令请求寄存器164能够向控制器168通知新命令何时在命令队列162的时隙内可用。命令请求寄存器164可以被实现为具有支持电路系统的存储器,该支持电路系统可以由主机系统102随后写入,例如,响应于将命令写入命令队列162或紧接在其之后。

命令请求寄存器164包括可以由主机系统102写入的多个位置。命令请求寄存器164内的每个位置(例如,比特位置)对应于命令队列162内的时隙(例如,一对一地)。主机系统102写入命令请求寄存器164的动作引起命令请求寄存器164生成到控制器168的中断,该中断指示新命令在命令队列162的时隙内可用。响应于该中断,控制器168读取命令请求寄存器164以确定命令队列162中的哪个或哪些时隙包含新命令。命令请求寄存器164的包括使控制器168不必连续轮询命令队列162以确定其中是否有新命令可用。命令请求寄存器164可以被实现为读时清除寄存器。因此,一旦被控制器168读取,命令请求寄存器164的内容就被清除。

一旦命令请求寄存器164生成到控制器168的中断并且另外的命令被存储在命令队列162中,主机处理器105就继续写入命令请求寄存器164中与用命令队列162中的另外的新命令写入的不同时隙相对应的位置。由命令请求寄存器164生成的中断可以保持置位,而不是至少直到控制器168为中断服务时才生成新中断。响应于从命令请求寄存器164接收到中断,控制器168能够读取命令请求寄存器164以确定存储新命令的命令队列162的时隙。一旦控制器168读取命令请求寄存器164,命令请求寄存器164的内容就被清除。

命令完成寄存器166能够向主机处理器105通知一个或多个特定命令何时已经在CU 180上完成执行。命令完成寄存器166可以被实现为具有支持电路系统的存储器。可以设置命令完成寄存器166的大小以包括多个位置,例如,比特位置,其大于或等于命令队列162中包含的时隙的数目。在特定实施例中,命令完成寄存器166中的每个位置对应于命令队列162的时隙,例如,一对一地。存储在命令完成寄存器166中的位置中的值指示存储在命令队列162的对应时隙中的命令是否已经完成执行。例如,写入命令完成寄存器166中的位位置“X”的“1”指示存储在命令队列162的时隙“X”中的命令已经完成执行。

在一个或多个实施例中,控制器168能够写入命令完成寄存器166中的特定位置以指示对应命令已经在CU 180中完成执行。命令完成寄存器166能够生成到主机处理器105的指示命令已经完成执行的中断。通过运行时库和/或驱动器的执行,主机处理器105能够读取命令完成寄存器166中的位,以确定来自命令队列162的任何命令和/或哪些命令是否已经完成执行。

在特定实施例中,命令完成寄存器可以包括多个子寄存器,其中每个子寄存器可以由主机处理器105独立于其他子寄存器来读取。此外,每个子寄存器能够生成到主机处理器105的独立中断,该独立中断指示该子寄存器内的一个或多个位置已经被写入以指示(多个)命令的完成。

作为说明性且非限制性示例,考虑命令队列162中有128个时隙的情况。命令完成寄存器166还可以包括与命令队列162的128个时隙相对应(例如,一对一地)的128比特位置。在该示例中,命令完成寄存器166包括4个子寄存器,其中每个子寄存器是32位寄存器。

例如,如果来自命令队列162的时隙10(例如,时隙0-127中的时隙)的命令完成执行,则命令完成寄存器166中与时隙10相对应的比特位置10(例如,比特0-31的比特位置)被更新。比特位置10位于多个子寄存器的第一子寄存器中。多个子寄存器中的第一子寄存器生成(例如,设置)到主机处理器105的中断。该中断可以保持置位直到主机处理器105读取第一子寄存器的时间。这样,如果时隙0-31中的其他命令完成执行,则第一子寄存器中的命令完成寄存器166中的对应比特位置被更新,并且中断保持置位,直到主机处理器105读取第一子寄存器。因为每个子寄存器能够生成其自己的中断,所以主机处理器105仅需要读取第一子寄存器(例如,32位),而不需要读取与4个子寄存器中的每个相对应的所有128位。

继续该示例,如果来自命令队列162的时隙35的命令完成执行,则命令完成寄存器166中与时隙35相对应的比特位置35被更新。比特位置35位于多个子寄存器的第二子寄存器中。多个子寄存器中的第二子寄存器生成到主机处理器105的中断。该中断可以保持置位,直到主机处理器105读取第二子寄存器。这样,如果时隙32-63中的其他命令完成执行,则第二子寄存器中的命令完成寄存器166中的对应比特位置被更新,并且中断保持置位,直到主机处理器105读取第二子寄存器。因为每个子寄存器都能够生成其自己的中断,所以主机处理器105仅需要读取第二子寄存器(例如,32位),而不需要读取与4个子寄存器中的每个相对应的所有128位。

从上面的示例中,一旦针对命令完成寄存器166的特定子寄存器的中断被生成,并且执行在相同子寄存器中具有对应位置的命令的另外的CU完成执行,则该中断仅保持置位。当为中断服务时,主机处理器105读取特定子寄存器并且确定子寄存器中已经完成执行的每个命令。

在一个或多个实施例中,控制器168被实现为嵌入在IC 150中并且能够执行程序代码的处理器。在特定实施例中,处理器是硬连线的。在其他实施例中,处理器是使用IC150的可编程电路系统实现的“软件处理器”。控制器168可以执行固件,该固件引起控制器168执行本文中描述的各种操作。

控制器168能够跟踪命令队列162内的时隙(和存储在其中的命令)的状态。控制器168也能够跟踪CU 180的状态。例如,控制器168能够维护指定每个CU是空闲(例如,可用)还是已启动(例如,繁忙)的CU 180的列表。通过跟踪CU 180的状态,控制器168能够选择(多个)空闲CU 180以执行存储在命令队列162的(多个)时隙中的(多个)新命令。

在图1的示例中,控制器168没有直接访问CU 180以确定CU 180的状态。控制器168能够基于由相应CU 180响应于命令的完成而生成的中断来确定CU 180的状态。如本文中以下更详细描述的,中断被定向到CU中断电路172。

CU DMA电路170能够配置和启动CU 180。例如,在选择CU 180以执行给定命令之后,控制器168向CU DMA电路170通知要执行的特定时隙(例如,和命令)。如上所述,时隙被更新以指定被选择以执行命令的特定CU 180。CU DMA电路170能够将来自时隙的命令提供给所选择的CU 180以供执行。

CU中断电路172能够接收和服务于由CU 180生成的中断。CU中断电路172能够处理由CU 180生成的中断,从而使控制器168免于必须服务于中断。CU中断电路172还能够重新设置(例如,重置)完成命令执行的CU 180使得CU 180可以由CU DMA电路170重新编程为执行另外的命令。

在一个或多个实施例中,将CU中断电路172耦合到CU 180的接口可以是以比用于控制器168的时钟的频率更低的时钟频率操作的控制接口。通过将CU 180的重新设置卸载到CU中断电路172,控制器168可以自由地执行其他功能,并且不需要等待通过较慢接口完成重新设置操作。

在一个或多个实施例中,CU中断被顺序地布线,例如被索引,使得当CU中断被触发时,CU中断电路172能够基于中断线的索引来标识发起中断的特定CU 180。CU中断电路172可以包括地址表,该地址表将中断索引映射到特定CU地址。在特定实施例中,地址表由查找表RAM(例如,LUTRAM)构成,并且包含具有到CU的对应中断索引的1:1映射的CU地址的顺序列表。CU中断电路172能够使用地址表中的地址重新设置生成中断的特定CU。CU中断电路172能够基于接收到的中断的索引来写入CU完成寄存器174中的正确位置。

CU完成寄存器174由CU中断电路172写入并且由控制器168读取。CU完成寄存器174包括多个位置,例如比特位置,其中每个位置对应于特定CU 180(例如,一对一地)。响应于CU中断电路172从已经完成命令的执行的所选择的CU 180接收到中断,CU中断电路172写入CU完成寄存器174中与所选择的CU 180相对应的位置。

与写入CU完成寄存器174中的位置相协调,CU中断电路172还生成到控制器168的中断。在特定实施例中,在控制器168读取CU完成寄存器174之前,CU中断电路172可以处理来自CU 180的多个中断。这样,CU中断电路172有效地将多个CU中断线合并为到控制器168的单个中断线。

一旦CU中断电路172生成到控制器168的中断并且从不同CU 180接收到另外的中断,CU中断电路172就继续写入CU完成寄存器174中与生成的中断的不同CU相对应的位置。由CU中断电路172生成的中断保持置位。响应于从CU中断电路172接收到中断,控制器168能够读取CU完成寄存器174,以基于CU完成寄存器174中被写入的特定位置来确定已经完成执行的(多个)特定CU 180。CU完成寄存器174可以被实现为读时清除寄存器。这样,CU完成寄存器174的内容可以响应于控制器168读取CU完成寄存器174而被清除。

控制器168能够在CU 180与命令(例如,命令队列162的时隙)之间转换。控制器168可以将CU完成寄存器174的每个设置位与先前在生成中断的CU上启动的命令(例如,时隙)相关联。例如,控制器168能够维护基于命令队列162的时隙来将CU和由CU执行的命令相关联的数据结构。当命令由特定CU 180执行时,控制器168能够将CU与存储命令的命令队列162的特定时隙相关联。

控制器168还能够更新命令完成寄存器166中的位置,以指示已经完成执行的特定命令。例如,考虑CU 180-1完成存储在时隙5中的命令的执行的情况。CU中断电路172从CU180-1接收中断并且更新与CU 180-1相对应的CU完成寄存器174中的位置。控制器168从CU中断电路172接收中断,并且通过读取CU完成寄存器174来确定CU 180-1已经完成命令的执行。控制器168能够确定CU 180-1已经执行来自时隙5的命令。因此,控制器168能够写入命令完成寄存器166中与时隙5相对应的位置。如上所述,写入命令完成寄存器166引起到主机处理器105的中断的生成。

在图1的示例中,控制器168耦合到命令队列162、命令请求寄存器164、命令完成寄存器166、CU DMA电路170、CU中断电路172和CU完成寄存器174。在一个或多个实施例中,控制器168可以使用直接连接耦合到这样的电路块。在其他实施例中,控制器168可以通过互连电路系统耦合到这样的电路块。接口155可以经由直接连接或互连电路系统耦合到命令队列162、命令请求寄存器164和命令完成寄存器166。类似地,CU 180可以经由直接连接或互连电路系统耦合到CU DMA电路170和/或CU中断电路172。

互连电路系统的一个示例是高级微控制器总线架构(AMBA)可扩展接口(AXI)总线。AMBA AXI总线是用于在电路块和/或系统之间建立片上连接的嵌入式微控制器总线接口。AXI被提供作为互连电路系统的说明性示例,并且无意作为对本公开内描述的实施例的限制。可以使用的互连的其他示例包括但不限于其他类型的总线、片上网络(NoC)、交叉开关或其他类型的交换机。

在一个或多个实施例中,存储器控制器185在IC 150内实现。在一个示例中,存储器控制器185被实现为硬接线电路块。在另一示例中,存储器控制器185使用IC 150的可编程电路系统来实现。在一个或多个其他实施例中,存储器控制器185可以在IC 150外部实现,例如在耦合到IC 150的另一IC中实现。

存储器190可以被包括作为片外存储器,该片外存储器可以由CU 180经由存储器控制器185访问(例如,读取和/或写入)。在一个或多个实施例中,主机处理器105也可以经由接口155、主机DMA电路192和存储器控制器185访问(例如,读取和/或写入)存储器190。存储器190可以耦合到IC 150耦合在其上的电路板。因此,在特定实施例中,CU 180可以从存储器190中检索用于命令执行的输入自变量,并且将所执行的命令的结果存储在存储器190中。主机处理器105然后可以从存储器190中检索结果。

为了描述和易于说明的目的,在本申请全文中使用“开放式计算语言”或“OpenCL

图2示出了根据本公开内描述的一个或多个实施例的由图1的调度系统160执行的示例操作。在图2的示例中,为了清楚和易于描述的目的,省略了调度系统160的某些电路块。

如图所示,控制器168包括多个数据结构,例如表或列表。例如,控制器168包括:时隙列表202,其列出了命令队列162中包括的时隙以及时隙是否包括命令;时隙CU列表204,其列出了CU和分配给CU以供执行的时隙(例如,命令);以及CU列表206,其列出了CU和每个CU的空闲或启动状态。CU列表206还可以为每个CU指定基地址。

在图2的示例中,主机处理器105已经在命令队列162的时隙210中存储了新命令208,并且将其写入与时隙210相对应的命令请求寄存器164中的位置。响应于命令请求寄存器164中的位置被写入,命令请求寄存器164生成到控制器168的中断。响应于该中断,控制器168读取命令请求寄存器164以确定其中哪些位置已经被写入,以指示在命令队列162的对应时隙中新命令的可用性。如上所述,一旦由控制器168读取,命令请求寄存器164就被清除。

控制器168能够读取时隙210内的新命令208。例如,通过读取命令请求寄存器164,控制器168确定时隙210中已经存储有新命令。在特定实施例中,控制器168能够仅读取新命令208的所选择的部分(例如,少于全部),以减少处理新命令208所需要的时间量。在图2的示例中,新命令208包括区域212。区域212指定了能够执行新命令208的CU的列表。写入命令队列162的时隙中的每个命令可以包括诸如区域212等区域,该区域列出了能够并且因此被允许执行命令的CU。某些CU可能只能执行某些命令。

在图2的示例中,控制器168能够直接读取区域212而不读取新命令208的其余部分。在特定实施例中,区域212包括指定能够执行新命令208的特定CU的CU索引的列表。例如,区域212可以指定索引1、2、4和5。控制器168将在区域212中指定的CU的列表(例如,CU180-1、180-2、180-4和180-5)与CU列表206进行比较,以确定被允许执行新命令208的任何CU(例如,索引1、2、4和5)是否可用。

控制器168能够从CU列表206中选择空闲(例如,可用)的并且还能够执行新命令208的CU。例如,控制器168能够将来自区域212的CU索引与来自CU列表206的可用CU进行比较以确定匹配。为了说明的目的,CU 180-1可以是空闲的,而CU 180-2、180-4和180-5被启动。控制器168能够选择CU 180-1并且将CU 180-1的基地址写入区域212,例如,用CU 180-1的基地址覆盖区域212和其中包含的允许CU的列表。覆盖区域212节省了存储器,因为区域212中包含的信息意图用于控制器168并且一旦CU被选择以执行新命令208就不需要执行新命令208。在一个或多个其他实施例中,控制器168可以在不覆盖新命令208的任何部分的情况下存储时隙210内的所选择的CU的基地址。

将所选择的CU的基地址(例如,CU 180-1)写入区域212中有效地将所选择的CU分配给时隙210和新命令208。控制器168还能够更新时隙CU列表204以指定所选择的CU(例如,CU 180-1)与时隙210之间的关联。此外,控制器168更新CU列表206以指示所选择的CU 180-1被启动。

在选择CU以执行命令208之后,控制器168能够将时隙210的索引传递给CU DMA电路170。为了说明的目的,时隙210的时隙索引可以是32。控制器168能够将时隙索引32写入CU DMA电路170中的寄存器。响应于从控制器168接收到时隙索引,CU DMA电路170访问与时隙210相对应的时隙索引32并且读取所选择的CU 180-1的基地址。

使用CU 180-1的基地址,CU DMA电路170能够将命令208(例如,命令208中包含的数据)传输给CU 180-1以供执行。CU DMA电路170能够将数据直接传输给所选择的CU使得控制器168不参与到CU的实际数据传输。一旦数据被传输给CU 180-1,CU DMA电路170就用信号通知CU 180-1启动或开始执行命令。

传输到所选择CU的新命令208可以包括各种信息,包括但不限于指向存储器(例如,存储器190)中的位置的地址或指针,该位置包含用于所选择的CU对其进行操作的输入自变量和/或所选择的CU要向其写入结果的存储器地址。

图3A和3B(共同考虑)示出了根据本公开内描述的一个或多个实施例的用于HCP的示例操作方法300。方法300示出了由诸如结合图1描述的HCP等HCP执行以将命令卸载到包括CU的IC的示例操作。方法300可以在HCP 100正在操作的状态下开始。主机处理器105能够通过至少部分执行运行时库来执行参考图3A和3B描述的操作,该运行时库提供用于与IC150和其中包含的调度系统160进行通信的功能。如上所述,主机处理器105还可以执行用于与IC 150通信的驱动器。

为了说明的目的,参考接收单个命令和执行该命令的单个CU的操作来描述方法300。应当理解,本公开内描述的原理可以应用于从主机系统接收多个命令并且由多个不同CU执行多个命令的情况。

在框302中,主机处理器将命令写入命令队列中的可用时隙。例如,在执行应用时,主机处理器确定要将命令卸载到IC以进行硬件加速。在这样做时,主机处理器(例如,运行时库)能够跟踪命令队列内的时隙的可用性并且将命令写入命令队列内的这样的可用时隙。

在框304中,主机处理器写入命令请求寄存器中与在框302中写入的命令队列的时隙相对应的位置,例如,时隙索引。例如,主机处理器能够响应于在框302中写入时隙或紧接在其之后写入命令请求寄存器中的位置。

在框306中,响应于主机处理器在框304中写入位置,命令请求寄存器生成到控制器的中断。在框308中,响应于来自命令请求寄存器的中断,控制器确定命令队列的哪个时隙包括或存储来自主机处理器的新命令。例如,响应于来自命令请求寄存器的中断,控制器读取命令请求寄存器以确定其中的哪些位置已经被写入。每个位置可以对应于命令队列的特定时隙。一旦控制器读取命令请求寄存器,命令请求寄存器的内容就被清除。如上所述,虽然方法300示出了对单个命令的处理,但是可能已经将多个命令写入命令队列,因为中断是由命令请求寄存器生成的。这样,控制器能够通过读取命令请求寄存器来确定包括新命令的命令队列的多个时隙中的每个时隙。

在框310中,控制器确定哪个(些)CU能够执行新命令。例如,控制器能够从命令队列中的时隙中读取新命令的至少一部分。在特定实施例中,控制器仅能够读取新命令的特定区域,该特定区域指定了能够执行新命令的CU的索引列表。控制器无需读取全部新命令即可确定能够执行新命令的CU,从而减少了在CU中启动新命令的执行的等待时间。

在框312中,控制器选择能够执行新命令的空闲CU。例如,控制器能够将从新命令本身中读取的能够执行新命令的(多个)CU与空闲(例如,可用)的(多个)CU的列表进行比较。控制器选择两个列表上都包括的CU(例如,既能够执行新命令又处于空闲状态的CU)来执行新命令。例如,控制器能够使被指定为能够执行新命令的CU与空闲CU相匹配。

在框314中,控制器将所选择的CU分配给新命令。例如,控制器能够将用于所选择的CU的基地址写入包括新命令的时隙。在一个或多个实施例中,控制器将基地址附加到命令。在一个或多个其他实施例中,控制器用所选择的CU的基地址覆盖在新命令本身内能够执行新命令的CU的列表。

在特定实施例中,控制器还能够更新用于跟踪CU的状态的任何内部数据结构,以指示所选择的CU现在已经启动(例如,不可用于执行其他命令),和/或存储所选择的CU与新命令之间的关联。应当理解,虽然控制器已经将所选择的CU标记为启动,但是实际上并未用信号通知所选择的CU开始操作。

在框316中,控制器将包含新命令的时隙的索引写入CU DMA电路。在框318中,响应于接收到时隙的索引,CU DMA电路从包含新命令的时隙中读取所选择的CU的基地址。例如,CU DMA电路能够使用索引来访问该时隙,并且进一步将该命令索引到控制器已经在此存储所选择的CU的基地址的预定位置。

在框320中,CU DMA电路将包含新命令的时隙的内容复制到所选择的CU。CU DMA电路使用所选择的CU的基地址将新命令提供给所选择的CU。时隙的内容(例如,新命令)包括指定将要输入到所选择的CU的自变量存储在何处的存储器地址、以及所选择的CU要存储通过执行新命令而生成的任何结果的存储器地址。CU的基地址无需复制。在框322中,CU DMA电路开始所选择的CU的操作。

在框324中,在新命令的执行完成时,所选择的CU生成到CU中断电路的中断。如上所述,可以对来自CU的中断线进行索引,从而允许CU中断电路确定已经完成执行的特定CU。

在框326中,响应于从所选择的CU接收到中断,CU中断电路写入CU完成寄存器中与所选择的CU相对应的位置并且生成到控制器的中断。

在框328中,CU中断电路能够重新设置所选择的CU。例如,当CU完成命令的执行时,CU中断电路必须在用于执行另一命令之前重新设置所选择的CU。CU中断电路通过在接口上发起到所选择CU的若干事务来重新设置所选择CU。CU中断电路能够响应于从CU接收到中断而执行这些操作。如上所述,CU中断电路通过其与CU通信的接口以比控制器慢的时钟频率操作。通过使用CU中断电路执行CU的重新设置,控制器无需执行此操作并且能够执行其他操作,从而提高了调度系统的整体性能,这与通过较慢接口发起和等待多个事务完成相反。

在框330中,响应于从CU中断电路接收到中断,控制器确定已经完成命令的执行的CU,例如,在该示例中为所选择的CU。例如,响应于来自CU中断电路的中断,控制器能够读取CU完成寄存器。控制器基于已经写入CU完成寄存器中的哪些位置来确定已经完成执行的特定CU。由于CU完成寄存器可以被实现为读时清除寄存器,因此响应于从另外的CU接收到另外的中断,CU中断电路可以继续写入CU完成寄存器中的位置。但是,CU中断电路无需继续生成另外的中断。CU中断电路可以保留先前生成的中断集,直到控制器通过读取CU完成寄存器来响应,该CU完成寄存器然后被清除。

在框332中,控制器将在框330中确定的CU映射到由CU执行的命令。例如,控制器能够从由控制器维护的内部数据结构中确定在框330中由CU执行的特定命令,例如在该示例中的新命令,该内部数据结构指定了命令队列中的时隙到CU的映射。

在框334中,控制器写入与已经完成由所选择的CU进行的执行的新命令相对应的命令完成寄存器中的位置。在框336中,响应于由控制器写入,命令完成寄存器向主机处理器生成中断。在特定实施例中,中断被提供给在主机系统中执行的IC的驱动器。

由于命令完成寄存器可以被实现为读时清除寄存器,因此控制器可以响应于接收到指示另外的CU已经完成执行的另外的中断而继续写入命令完成寄存器中的位置。但是,命令完成寄存器不需要继续为主机处理器生成另外的中断。命令完成寄存器可以保留先前生成的中断集,直到主机处理器通过读取命令完成寄存器来进行响应,该命令完成寄存器然后被清除。

在命令完成寄存器包括多个子寄存器的实施例中,每个子寄存器可以独立地操作。也就是说,每个子寄存器都能够独立于其他子寄存器而向主机处理器生成中断,并且将该中断维护为置位状态,直到主机系统读取该特定子寄存器。每个子寄存器可以被实现为独立于其他子寄存器而被清除的读时清除寄存器。

在框338中,响应于来自命令完成寄存器的中断,主机处理器读取命令完成寄存器以确定已经完成执行的特定命令。如上所述,然后,命令完成寄存器被清除。在特定实施例中,例如,在执行内核驱动程序时,主机处理器维护与命令队列中的时隙数目相对应的时隙索引的列表。主机控制器能够跟踪命令队列中时隙的可用性,就像控制器能够跟踪CU可用性一样。

在框340中,主机处理器从新命令的执行中检索结果。如上所述,由所选择的CU生成的任何结果数据被存储在存储器中在新命令本身内的主机处理器最初指定的位置处。作为生成和向IC提供命令的一部分,主机处理器管理存储有用于CU的自变量的存储器地址和CU将结果数据写入其中的存储器地址。主机处理器能够将自变量存储在存储器地址中以供CU使用并且从存储器地址中检索结果。

本文中描述的示例实施例示出了调度系统如何控制CU的操作。主机系统知道正在执行的命令以及这样的命令何时完成执行。主机系统不知道用于执行任何给定命令的特定CU。

根据本公开内描述的发明布置,控制器能够基于可用命令和可用CU来执行无序硬件调度。控制器能够进行多用户和多任务操作。本文中描述的调度系统能够减少或隐藏在主机系统与IC之间的接口上发生的等待时间。此外,本文中描述的调度系统减少了调度系统中包括的主机处理器和控制器上的工作量,从而提高了整个HCP的性能。

图4示出了用于IC的示例架构400。在一方面,架构400可以在可编程IC内实现。例如,架构400可以用于实现FPGA。架构400也可以代表片上系统(SoC)类型的IC。SoC是包括执行程序代码的处理器和一个或多个其他电路的IC。其他电路可以被实现为硬连线电路系统、可编程电路系统和/或其组合。电路可以彼此和/或与处理器协作操作。

如图所示,架构400包括几种不同类型的可编程电路,例如逻辑、块。例如,架构400可以包括大量不同可编程图块,包括多千兆位收发器(MGT)401、可配置逻辑块(CLB)402、随机存取存储器块(BRAM)403、输入/输出块(IOB)404、配置和时钟逻辑(CONFIG/CLOCKS)405、数字信号处理模块(DSP)406、专用I/O块407(例如,配置端口和时钟端口)、以及其他可编程逻辑408(诸如数字时钟管理器、模数转换器、系统监测逻辑等)。

在一些IC中,每个可编程图块包括可编程互连元件(INT)411,该INT 411具有去往和来自每个相邻图块中的对应INT 411的标准化连接。因此,INT 411一起实现了用于所示IC的可编程互连结构。每个INT 411还包括去往和来自同一图块内的可编程逻辑元件的连接,如图4顶部的示例所示。

例如,CLB 402可以包括可配置逻辑元件(CLE)412,该CLE 412可以被编程为实现用户逻辑加上单个INT 411。除了一个或多个INT 411,BRAM 403还可以包括BRAM逻辑元件(BRL)413。通常,图块中包括的INT 411的数目取决于图块的高度。如图所示,BRAM图块具有与五个CLB相同的高度,但是也可以使用其他数目(例如,四个)。除了适当数目的INT 411,DSP图块406还可以包括DSP逻辑元素(DSPL)414。除了INT 411的一个实例,IOB 404还可以包括I/O逻辑元素(IOL)415的两个实例。连接到IOL 415的实际I/O焊盘可以不限于IOL 415的区域。

在图4所示的示例中,例如由区域405、407和408形成的管芯中心附近的柱状区域可以用于配置、时钟和其他控制逻辑。从该列延伸的水平区域409可以用于在可编程IC的宽度上分配时钟和配置信号。

一些利用图4所示的架构的IC包括附加逻辑块,这些逻辑块破坏了构成IC的很大一部分的规则柱状结构。附加逻辑块可以是可编程块和/或专用电路系统。例如,被描绘为PROC 410的处理器块跨越CLB和BRAM的几列。

在一方面,PROC 410可以被实现为专用电路系统,例如,被实现为硬连线处理器,被制造为实现IC的可编程电路系统的管芯的一部分。PROC 410可以表示各种不同处理器类型和/或系统中的任何一种,其复杂程度的范围从个体处理器(例如,能够执行程序代码的单个内核)到具有一个或多个内核、模块、协处理器、接口等的整个处理器系统。

在另一方面,PROC 410可以从架构400中省略并且替换为所描述的可编程块的一个或多个其他种类。此外,这样的块可以用于形成“软处理器”,因为可编程电路系统的各个块可以用于形成可以像PROC 410一样执行程序代码的处理器。

短语“可编程电路系统”是指IC内的可编程电路元件,例如,本文中描述的各种可编程或可配置电路块或图块,以及根据加载到IC中的配置数据来选择性地耦合各种电路块、图块和/或元件的互连电路系统。例如,图4所示的在PROC 410外部的电路块(诸如CLB402和BRAM 403)被认为是IC的可编程电路系统。

通常,在将配置数据加载到IC中之前,不会建立可编程电路系统的功能。一组配置比特可以用于对IC(诸如FPGA)的可编程电路系统进行编程。配置比特通常被称为“配置比特流”。通常,如果不先将配置比特流加载到IC中,则可编程电路系统将无法工作或操作。配置比特流有效地实现了可编程电路系统中的特定电路设计。电路设计规定了例如可编程电路块的功能方面以及各种可编程电路块之间的物理连接性。

被“硬接线”或“硬化”(即,不可编程的)电路系统被制造为IC的一部分。与可编程电路系统不同,不能在制造IC之后通过加载配置比特流来实现硬连线电路系统或电路块。硬连线电路系统通常被认为具有例如专用电路块和互连,这些电路块和互连在未首先将配置比特流加载到IC(例如,PROC 410)的情况下即可工作。

在某些情况下,硬连线电路系统可以具有一个或多个操作模式,该操作模式可以根据IC内的一个或多个存储器元件中存储的寄存器设置或值来设置或选择。操作模式可以例如通过将配置比特流加载到IC中来设置。尽管具有这种能力,但是硬接线电路系统不被认为是可编程电路系统,因为当硬接线电路系统被制造为IC的一部分时,它是可操作的并且具有特定功能。

在SoC的情况下,配置比特流可以指定要在可编程电路系统内实现的电路系统以及要由PROC 410或软处理器执行的程序代码。在一些情况下,架构400包括将配置比特流加载到适当配置存储器和/或处理器存储器的专用配置处理器。专用配置处理器不执行用户指定程序代码。在其他情况下,架构400可以利用PROC 410来接收配置比特流,将配置比特流加载到适当配置存储器中,和/或提取程序代码以供执行。

调度系统160可以使用具有结合图4描述的架构的IC来实现。例如,可编程电路系统内的BRAM和/或寄存器可以用于通过由附加可编程电路系统创建的另外的支持电路系统来实现本文中描述的一个或多个寄存器。PROC 410可以用于实现控制器168。可编程电路系统可以用于实现接口155和CU 180。在特定实施例中,存储器控制器185是硬连线的。在其他实施例中,存储器控制器185还使用可编程电路来实现。

图4旨在说明可以用于实现包括可编程电路系统(例如,可编程结构)的IC的示例架构。例如,图4的顶部包括的一列中逻辑块的数目、列的相对宽度、列的数目和顺序、列中包括的逻辑块的类型、逻辑块的相对大小、以及互连/逻辑实现仅是说明性的。例如,在实际IC中,无论CLB出现在何处,通常都包括一个以上的相邻列的CLB,以促进用户电路设计的高效实现。但是,相邻CLB列的数目可以随IC的整体尺寸而变化。此外,IC内诸如PROC 410等块的尺寸和/或位置仅出于说明的目的,而非旨在作为限制。

为了说明的目的,阐述了特定术语以提供对本文中公开的各种发明概念的透彻理解。然而,本文中使用的术语仅出于描述本发明布置的特定方面的目的,而非旨在进行限制。

如本文中定义的,单数形式“一个(a)”、“一个(an)”和“该(the)”也意图包括复数形式,除非上下文另外明确指出。

如本文中定义的,除非另外明确说明,否则术语“至少一个”、“一个或多个”和“和/或”是开放式的,其在操作上是结合的和分离的。例如,每个表达“A、B和C中的至少一个”、“A、B或C中的至少一个”、“A、B和C中的一个或多个”、“A、B或C中的一个或多个”、以及“A、B和/或C”表示单独的A、单独的B、单独的C、A和B一起、A和C一起、B和C一起、或A、B和C一起。

如本文中定义的,术语“自动地”是指没有用户干预。如本文中定义的,术语“用户”是指人类。

如本文中定义的,术语“计算机可读存储介质”是指包含或存储供指令执行系统、装置或设备使用或与其结合使用的程序代码的存储介质。如本文中定义的,“计算机可读存储介质”本身不是暂态传播信号。计算机可读存储介质可以是但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或前述各项的任何合适的组合。如本文所述,各种形式的存储器是计算机可读存储介质的示例。计算机可读存储介质的更具体示例的非详尽列表可以包括:便携式计算机磁盘、硬盘、RAM、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、电子可擦除可编程只读存储器(EEPROM)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字多功能磁盘(DVD)、存储棒、软盘等。

如本文中定义的,取决于上下文,术语“如果(if)”是指“当……时(when)”或“在……时(upon)”或“响应于(in response to)”或“响应于(responsive to)”。因此,短语“如果确定”或“如果检测到[所陈述的条件或事件]”可以被解释为表示“在确定……时”或“响应于确定……”或“在检测到[所陈述的条件或事件]时”或“响应于(in response to)检测到[所陈述的条件或事件]”或“响应于(responsive to)检测到[所陈述的条件或事件]”,具体取决于上下文。

如本文中定义的,术语“响应于(responsive to)”和如上所述的类似语言(例如,“如果(if)”、“当……时(when)”或“在……时(upon)”)是指容易对动作或事件做出响应或做出反应。响应或反应是自动执行的。因此,如果“响应于(responsive to)”第一动作而执行第二动作,则在第一动作的发生与第二动作的发生之间存在因果关系。术语“响应于(responsive to)”表示因果关系。

如本文中定义的,术语“一个实施例”、“实施例”、“一个或多个实施例”、“特定实施例”或类似语言表示结合该实施例描述的特定特征、结构或特性被包括在本公开内描述的至少一个实施例中。因此,贯穿本公开内容的短语“在一个实施例中”、“在实施例中”、“在一个或多个实施例中”、“在特定实施例中”和类似语言的出现可以但不一定全部指相同的实施例。在本公开中,术语“实施例”和“布置”可互换使用。

如本文中定义的,术语“处理器”是指至少一个硬件电路。硬件电路可以被配置为执行程序代码中包含的指令。硬件电路可以是集成电路。处理器的示例包括但不限于中央处理器(CPU)、阵列处理器、矢量处理器、数字信号处理器(DSP)、FPGA、可编程逻辑阵列(PLA)、ASIC、可编程逻辑电路和控制器。

如本文中定义的,术语“输出”是指在例如设备等物理存储器元件中存储,写入显示器或其他外围输出设备,向另一系统发送或传输,导出,等等。

如本文中定义的,术语“实时”是指用户或系统感测到对于要进行的特定过程或确定而言足够即时的处理响应度,或者使得处理器能够跟上某个外部过程的处理响应度。

如本文中定义的,术语“基本上”是指不需要精确地实现所列举的特性、参数或值,而是可以发生不排除该特性旨在提供的效果的量的偏差或变化,包括例如公差、测量误差、测量精度限制、以及本领域技术人员已知的其他因素。

本文中可以使用术语第一、第二等来描述各种元素。这些元素不应当受这些术语的限制,因为除非另有说明或上下文另外明确指出,否则这些术语仅用于将一个元素与另一元素区分开。

计算机程序产品可以包括其上具有计算机可读程序指令的计算机可读存储介质,该计算机可读程序指令用于引起处理器执行本文中描述的发明布置的各方面。在本公开内,术语“程序代码”与术语“计算机可读程序指令”可互换使用。本文中描述的计算机可读程序指令可以从计算机可读存储介质下载到相应计算/处理设备,或者经由网络(例如,互联网、LAN、WAN和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或包括边缘服务器的边缘设备。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并且转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。

用于执行本文中描述的发明布置的操作的计算机可读程序指令可以是汇编程序指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、或者以一种或多种编程语言(包括面向对象的编程语言和/或过程编程语言)的任何组合编写的源代码或目标代码。计算机可读程序指令可以包括状态设置数据。计算机可读程序指令可以完全在用户的计算机上,部分在用户的计算机上,作为独立软件包,部分在用户的计算机上并且部分在远程计算机上,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括LAN或WAN)连接到用户的计算机,或者可以与外部计算机建立连接(例如,使用互联网服务提供商通过互联网进行连接)。在某些情况下,包括例如可编程逻辑电路系统、FPGA或PLA在内的电子电路系统可以通过利用计算机可读程序指令的状态信息来个性化电子电路系统来执行计算机可读程序指令,从而执行本文中描述的发明布置的各方面。

本文中参考方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明布置的某些方面。将理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由例如程序代码等计算机可读程序指令来实现。

这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的该指令能够创建用于实现流程图和/或框图框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,该计算机可读存储介质可以指导计算机、可编程数据处理装置和/或其他设备以特定方式起作用,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现在流程图和/或框图中指定的操作的各方面的指令。

计算机可读程序指令也可以被加载到计算机、其他可编程数据处理装置或其他设备上,以引起一系列操作在计算机、其他可编程装置或其他设备上被执行以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中指定的功能/动作。

附图中的流程图和框图示出了根据本发明布置的各个方面的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、片段或部分,其包括用于实现指定操作的一个或多个可执行指令。

在一些替代实现中,框中指出的操作可以不按图中指出的顺序发生。例如,取决于所涉及的功能,连续示出的两个框可以基本上同时执行,或者框有时可以以相反的顺序执行。在其他示例中,框通常可以以增加的数字顺序来执行,而在其他示例中,一个或多个框可以以变化的顺序来执行,其中结果在随后的或不立即跟随的其他框中被存储和利用。还应当注意,框图和/或流程图的每个框以及框图和/或流程图中的框的组合可以由执行指定功能或动作或者执行特殊用途的硬件和计算机指令的组合的特殊用途的基于硬件的系统来实现。

可以在下面的权利要求书中找到的所有装置或步骤加上功能元素的对应结构、材料、动作和等同物旨在包括与具体要求保护的其他要求保护的元素组合地执行功能的任何结构、材料或动作。

一个或多个实施例涉及一种集成电路(IC)。该IC包括:具有多个时隙的命令队列,多个时隙被配置为存储来自主机处理器的命令以供IC的多个计算单元执行;以及具有与命令队列中的多个时隙相对应的多个位置的命令请求寄存器。命令请求寄存器被配置为生成指示存储在命令队列中的新命令的中断。该IC包括:被配置为响应于来自命令请求寄存器的中断,从多个计算单元中确定空闲的所选择的计算单元以执行新命令的控制器;以及被配置为将新命令提供给所选择的计算单元的计算单元直接存储器访问电路。

在一方面,新命令包括第一列表,第一列表指定能够执行新命令的多个计算单元中的一个或多个计算单元。

在另一方面,控制器被配置为维护第二列表,第二列表指定多个计算单元中的哪个计算单元是空闲的,并且控制器被配置为通过将第一列表与第二列表进行比较来确定用于执行新命令的所选择的计算单元。

在另一方面,控制器被配置为更新命令队列中的新命令以指定用于所选择的计算单元的基地址。

在另一方面,控制器被配置为用所选择的计算单元的基地址来覆盖第一列表。

在另一方面,控制器被配置为向计算单元直接存储器访问电路提供对存储新命令的命令队列中的多个时隙中的所选择的时隙的引用。

在另一方面,计算单元直接存储器访问电路被配置为使用来自新命令的基地址将所选择的时隙中的新命令提供给所选择的计算单元。

在另一方面,命令请求寄存器是读时清除寄存器。

在另一方面,计算单元直接存储器访问电路还被配置为响应于提供新命令而开始所选择的计算单元的操作。

一个或多个实施例涉及一种IC。该IC包括:被配置为响应于从多个计算单元中的所选择的计算单元接收到指示所选择的计算单元已经完成处理的中断而用信号通知所选择的计算单元已经完成处理的计算单元中断电路;以及被配置为响应于来自计算单元中断电路的信号而生成中断的计算单元完成寄存器。该IC包括:被配置为响应于来自计算单元完成寄存器的中断而确定从主机处理器卸载的多个命令中的所选择的命令由所选择的计算单元执行并且输出所选择的命令的控制器;以及被配置为生成到主机处理器的指示多个命令中的所选择的命令已经完成处理的中断的命令完成寄存器。

在一方面,计算单元完成寄存器包括与多个计算单元相对应的多个位置,其中计算单元中断电路通过向与所选择的计算单元相对应的多个位置中的所选择的位置写入来向计算单元完成寄存器通知所选择的计算单元已经完成处理。

在另一方面,控制器被配置为维护多个命令和执行多个命令的多个计算单元中的对应计算单元的列表。

在另一方面,计算单元完成寄存器是读时清除寄存器。

在另一方面,命令完成寄存器是读时清除寄存器。

在另一方面,计算单元中断电路被配置为重新设置所选择的计算单元以执行来自主机处理器的另外的命令。

一个或多个实施例涉及一种方法。该方法包括:响应于来自主机处理器的指示命令队列内的新命令的可用性的通知,生成到控制器的中断;控制器响应于中断而从多个计算单元中确定空闲的所选择的计算单元以执行新命令;以及控制器向计算单元直接存储器访问电路通知所选择的计算单元和命令队列中的新命令。该方法还包括使用计算单元直接存储器访问电路将新命令提供给所选择的计算单元。

在一方面,该方法包括:响应于从所选择的计算单元接收到指示执行完成的中断而生成到控制器的指示所选择的计算单元已经完成执行的中断;使用控制器确定新命令已经被分配给所选择的计算单元;以及生成到主机处理器的指示新命令已经完成执行的中断。

在另一方面,向计算单元直接存储器访问电路通知所选择的计算单元和命令队列中的新命令包括:将所选择的计算单元的基地址写入命令队列中存储新命令的多个时隙中的所选择的时隙,并且将对多个时隙中所选择的时隙的引用提供给计算单元直接存储器访问电路。

在另一方面,从多个计算单元中确定所选择的计算单元包括:读取第一列表,该第一列表从新命令中指定能够执行新命令的多个计算单元中的一个或多个计算单元,并且将第一列表与第二列表进行比较,该第二列表指定多个计算单元中的空闲的计算单元以将公共计算单元确定为所选择的计算单元。

在另一方面,向计算单元直接存储器访问电路通知所选择的计算单元和命令队列中的新命令包括:用所选择的计算单元的基地址覆盖新命令的第一列表,其中新命令存储在命令队列中的多个时隙中的所选择的时隙中,并且向计算单元直接存储器访问电路提供对所选择的时隙的引用。

本文中提供的发明布置的描述是出于说明的目的,而不是穷举性的或限于所公开的形式和示例。选择本文中使用的术语是为了解释发明性装置的原理、对市场上发现的技术的实际应用或技术上的改进,和/或使得本领域其他普通技术人员能够理解本文中公开的发明布置。在不脱离所描述的发明布置的范围和精神的情况下,修改和变化对本领域普通技术人员而言是很清楚的。因此,应当参考以下权利要求(而不是前面的公开内容)来指示这样的特征和实现的范围。

相关技术
  • 集成电路中的计算单元的编程和控制
  • 异构多核可编程系统及其内存配置和计算单元的编程方法
技术分类

06120113002727