首页> 中国专利> 用于硬件加速的硬件资源的嵌入式调度

用于硬件加速的硬件资源的嵌入式调度

摘要

集成电路IC[150]可以包括用于硬件加速的调度器[160]。调度器可以包括命令队列[165],所述命令队列具有多个槽并且被配置为存储从主处理器[105]卸载的命令,以由IC[150]的计算单元执行。调度器[160]可以包括状态寄存器[170],其具有与命令队列[165]的槽相对应的比特位置。调度器[160]还可包括被耦接到命令队列[165]和状态寄存器[170]的控制器[175]。控制器[175]可以被配置为调度IC[150]的计算单元以执行被存储在命令队列[165]的槽中的命令,并更新状态寄存器[170]的比特位置以指示来自命令队列[165]的哪些命令已结束操作。

著录项

  • 公开/公告号CN112204524A

    专利类型发明专利

  • 公开/公告日2021-01-08

    原文格式PDF

  • 申请/专利权人 赛灵思公司;

    申请/专利号CN201980034539.X

  • 申请日2019-05-09

  • 分类号G06F9/50(20060101);

  • 代理机构11517 北京市君合律师事务所;

  • 代理人毛健;程烁宇

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 09:29:07

说明书

技术领域

本公开内容涉及集成电路(IC),并且更具体地涉及硬件资源的嵌入式调度以促进硬件加速。

背景技术

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

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

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

主处理器负责对处理设备的卸载操作并从处理设备中检索结果。主处理器有效地将必要的数据移入和移出处理设备的能力会严重影响HCP的整体效率和性能。

发明内容

一个或多个实施例针对一种包括用于硬件加速的调度器的集成电路(IC)。调度器可以包括具有多个槽的命令队列,该命令队列被配置为存储从主处理器卸载的命令,以由IC的计算单元执行。调度器可以包括状态寄存器,该状态寄存器具有与命令队列的槽相对应的比特位置。调度器还可以包括耦接到命令队列和状态寄存器的控制器。控制器可以被配置为调度IC的计算单元以执行被存储在命令队列的槽中的命令,并更新状态寄存器的位位置以指示来自命令队列的哪些命令完成了执行。命令队列,所述命令队列具有多个槽,并被配置为存储从主处理器卸载的多个命令,所述多个命令由所述集成电路的多个计算单元执行;状态寄存器,所述状态寄存器具有与所述命令队列的多个槽相对应的多个比特位置;以及控制器,所述控制器耦接到所述命令队列和所述状态寄存器,其中所述控制器被配置为调度所述集成电路的多个计算单元以执行被存储在所述命令队列的槽中的命令,并更新所述状态寄存器的比特位置以指示来自命令队列的哪些命令已结束操作。

在一些实施例中,状态寄存器被配置为响应于被读取而清除存储在其中的内容。

在一些实施例中,调度器还可包括被配置为通过通信链路与主处理器进行通信并将命令存储在命令队列的可用槽内的接口。

在一些实施例中,被存储在命令队列中的命令可以包括计算单元用来执行相应命令的参数。

在一些实施例中,每个命令指定哪个所述计算单元能够执行所述命令。

在一些实施例中,所述控制器被配置为基于哪个所述计算单元能够执行每个相应的命令并且空闲,而将命令分配给所述计算单元。

在一些实施例中,控制器可以是被配置为执行程序代码的处理器。

在一些实施例中,处理器可以是使用集成电路的可编程电路实现的软处理器。

在一些实施例中,所述控制器被配置为确定其上能够运行所选择的命令的所选择的计算单元且是空闲的,将所选择的命令的参数传递给所选择的计算单元以供执行,以及启动所选择的计算单元。

在一些实施例中,控制器被配置为:响应于确定所选择的命令已完成执行,写入所述状态寄存器中的所述比特位置,其对应于包括所选择的命令的所述槽,以指示所述槽是空闲。

一个或多个实施例涉及一种使用IC调度用于硬件加速的命令的方法。该方法可以包括将从主处理器接收到的命令存储到集成电路内的命令队列的槽内,其中所述命令从所述主处理器卸载,以由所述集成电路的计算单元执行;使用控制器调度所述计算单元以执行被存储在所述命令队列的槽中的命令;以及响应于确定所述命令已完成执行,在所述集成电路内的状态寄存器中写比特位置,其中所述比特位置对应于存储所述命令的所述命令队列的槽。

在一些实施例中,该方法还可以包括在所述控制器内,保留存储在所述命令队列的槽中的所述命令的头部的本地缓存副本;以及通过更新所述头部的本地缓存副本中的值来更新所述槽的状态。

在一些实施例中,该方法还可以包括响应于所述状态寄存器已被读取,清除所述状态寄存器中存储的内容。

在一些实施例中,被存储在命令队列中的命令包括由每个命令确定哪个计算单元能够执行所述命令。

在一些实施例中,该方法还可以包括根据每个命令确定哪个计算单元可以执行该命令。

在一些实施例中,该方法还可以包括基于哪个所述计算单元能够执行每个相应的命令并且空闲,将命令分配给所述计算单元。

在一些实施例中,该方法还可以包括:确定可以在其上运行所选命令的所选计算单元是空闲的;将所选命令的参数传送到所选计算单元以执行并启动所选计算单元。

在一些实施例中,写入比特位置可以表明该槽是空闲的。

在一些实施例中,该方法还可以包括通过从所选计算单元接收中断来确定所选计算单元已完成执行所选命令。

在一些实施例中,该方法还可以包括通过轮询所选计算单元来确定所选计算单元完成了执行所选命令。

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

附图说明

在附图中示例性地示出了本发明的布置。然而,附图不应被解释为将本发明的布置限制为仅示出的特定实施方式。在阅读以下详细描述并参考附图后,各个方面和优点将变得显而易见。

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

图2示出了从主处理器卸载命令的示例方法。

图3示出了由调度器执行的、处理来自主处理器的命令的方法。

图4示出了由调度器执行的、处理来自主处理器的命令的另一示例方法。

图5示出了确定计算单元的状态的示例方法。

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

具体实施方式

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

本公开内容涉及集成电路(IC),并且更具体地涉及硬件资源的嵌入式调度以促进硬件加速。根据本公开内容中描述的发明性布置,硬件调度器被嵌入在用于硬件加速的IC内。硬件调度器有助于从异构计算平台(HCP)的主处理器将操作卸载到IC内的硬件资源。在本公开内容中,硬件资源被称为“计算单元”。硬件调度器能够管理和跟踪计算单元的操作。

在传统的HCP中,调度是由主处理器执行的软件过程来实现的。主处理器的任务是不断轮询IC的各个计算单元,以确定何时有可用的计算单元来执行操作。计算单元的轮询会消耗大量的主处理器时间。此外,由于调度器在主处理器中执行,因此主处理器必须等到计算单元可用后才能向IC发送命令。主处理器仅响应于确定计算单元可用于执行命令来发送命令。这样,在计算单元变得可用的时间与计算单元能够开始在命令上执行的时间之间会引起延迟。该延迟包括将命令(包括计算单元所需的数据)从主处理器传输到包括计算单元的IC所需的时间。

根据本文所述的发明性布置,硬件调度器在包括计算单元(例如,执行从主处理器卸载的实际操作的硬件资源)的同一IC中实现。硬件调度器能够跟踪IC中计算单元的可用性。硬件调度器还能够接收从主处理器发送的命令(例如,操作)。硬件调度器能够将命令存储在命令队列中,直到计算单元可用于执行命令为止。这样,主处理器能够发送命令并继续执行其他任务,而不必在向IC发送命令之前不断轮询可用的计算单元和/或等待计算单元变得可用。

一旦命令在硬件调度器中排队并且计算单元变为可用,将命令传输到计算单元就不需要主处理器介入。硬件调度器将命令传输到计算单元。由于硬件调度器和计算单元在同一IC中,因此将命令传输到计算单元的时间相对较短。这样,减少了在计算单元变为可用的时间与计算单元开始执行命令的时间之间的延迟。

硬件调度器还能够确定命令何时完成执行。响应于确定命令已经完成执行,硬件调度器能够通知主处理器。例如,响应于确定命令已完成执行,硬件调度器能够写入被包括在硬件调度器自身中的状态寄存器。主处理器可以读取状态寄存器,以确定命令的状态以及已完成执行的特定命令。与单独地管理IC的每个计算单元不同,状态寄存器的使用允许主处理器以“命令”(command)级别运行。

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

图1示出了异构计算平台(HCP)100的示例。如图1所示,HCP 100包括主机系统102和用作硬件加速设备的IC 150。

主机系统(host system)102可以被实现为诸如计算机或服务器的数据处理系统。主机系统102包括耦接到存储器110的主处理器105,以及通过接口电路(interfacecircuity)115的一个或多个输入/输出(I/O)设备。主机系统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执行的操作系统(未示出)和一个或多个应用程序(未示出)。运行时间库(runtime library)也可由主处理器102执行。在一些实施例中,运行时间库可以与由主处理器105执行的应用程序链接或以其他方式合并。运行时间库包括用于与IC 150通信的功能。

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

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

IC 150包括能够通过通信链路125与主机系统102进行通信的接口155。在特定实施例中,接口155是PCIe接口,其包括直接存储器访问(DMA)电路。接口155的DMA部分能够经由存储器控制器185读取和/或写入一个或多个存储器,例如命令队列165、状态寄存器170、和/或存储器130,从而允许主机系统102读取和/或写入到这样的存储器。

调度器160还可以包括命令队列165,状态寄存器170和控制器175。尽管被单独示出,但是在一个或多个其他实施例中,接口155可以被认为是调度器160的一部分。

命令队列165可以被实现为存储器。例如,命令队列165可以被实现为随机存取存储器(RAM)。在一个或多个实施例中,命令队列165被实现为IC 150内的一个或多个块RAM(BRAM)。命令队列165可由主处理器105写入(例如,在执行运行时间库时),并由控制器175读取。命令队列165可被划分成多个固定大小的区域,称为“槽(slot)”。每个槽能够存储来自主处理器105的命令(例如,一个命令)。

在特定实施例中,每个槽的尺寸相同。在一方面,由于将由调度器160处理的最大命令的大小是已知的,因此可在包括调度器160的电路设计的编译时配置槽的大小。槽的大小可以存储由调度器160处理的最大命令。在一个或多个其他实施例中,槽的大小可以由主处理器105执行的运行时间库来配置。在任何情况下,主处理器105都能够将新命令写入到命令队列165的可用槽中。

状态寄存器170可以被实现为存储器。状态寄存器170的大小可以被设置为包括大于或等于命令队列165中包含的槽数量的比特的数目。这样,状态寄存器170的每个比特位置可以对应于命令队列165的槽。状态寄存器中的比特位置指示被存储在相应槽中的命令是否已完成执行。例如,写入状态寄存器170的比特位置“X”的“1”表示命令队列165的槽“X”中存储的命令已完成执行。通过执行运行时间库,主处理器105能够读取命令队列165中的比特,以确定来自命令队列165的任何命令和/或哪些命令是否已经完成执行。

控制器175能够跟踪命令队列165内的槽(和存储在其中的命令)的状态,跟踪计算单元180的状态,并写入状态寄存器170以指示来自命令队列165的命令已完成执行。在一个或多个实施例中,控制器175被实现为嵌入在IC 150中并且能够执行程序代码的处理器。在特定实施例中,处理器是硬连线的。在其他实施例中,处理器是使用IC 150的可编程电路实现的“软处理器”。控制器175可以运行使得控制器175执行本文所述的各种操作的固件。

计算单元180用于硬件加速。计算单元180可以用于执行从主机系统102,更具体地,从主处理器105卸载的操作。在图1中,计算单元180耦接到控制器175。控制器175能够从命令队列165读取命令并将命令提供给计算单元180中的可用单元。在一个或多个实施例中,控制器175能够轮询计算单元180以确定每个相应的计算单元180是忙还是闲。在一个或多个其他实施例中,计算单元180能够向控制器175产生中断,以指示该计算单元已经完成了命令的执行。

在一个或多个实施例中,控制器175通过片上互连(未示出)耦接到计算单元180。接口155也可以通过片上互连(未示出)耦接到命令队列165和状态寄存器170。片上互连的一个示例是高级微控制器总线架构(AMBA)可扩展接口(AXI)总线。AMBA AXI总线是嵌入式微控制器总线接口,用于在电路块和/或系统之间建立片上连接。AXI作为接口的说明性示例被提供,并且无意作为对本公开内描述的实施例的限制。用于耦接控制器175和计算单元180的接口的其他示例可以包括但不限于,其他类型的总线、片上网络(NoC)、交叉开关、或其他类型的交换机。

存储器130可以被包括为片外存储器,可以由计算单元180和/或控制器175经由存储器控制器185进行访问(例如,读取和/或写入)。在一个或多个实施例中,主处理器105也可以经由存储器控制器185访问(例如,读取和/或写入)存储器130。存储器130可以耦接到IC 150耦接到其上的电路板。因此,在特定实施例中,计算单元180可以将执行的命令的结果存储在存储器130中。主处理器105然后可以从存储器130检索(retrieve)结果。

为便于描述和说明,在本申请中始终使用“开放计算语言”或“OpenCL

图2示出了由结合图1描述的由HCP 100的主处理器105执行的卸载命令的示例方法200。方法200可以在HCP 100正在操作的状态下开始。主处理器105能够执行参考图2描述的操作。图2通过至少部分地执行运行时间库来执行该运行时间库,该运行时库提供用于与被包含在其中的IC 150和调度器160进行通信的功能。在一个或多个实施例中,主处理器105在执行运行时间库时执行专用命令线程。主处理器105在执行命令线程时能够执行图1中描述的操作。

在方框205中,主处理器能够确定是否已经接收到内核事件(kernel event)。内核事件可以从由主处理器执行的应用程序接收,并请求将功能卸载到硬件加速器。如果内核事件被接收到则方法200继续至方框210。如果未接收到内核事件,则方法200继续循环至方框205,以等待内核事件的发生。

例如,对于与内核调用相关联的每个工作组,主处理器都能够将命令写入调度器的命令队列。单独的内核调用(例如内核事件)可以并行运行。主处理器能够检查每个内核事件,以确定是否有更多工作组要执行,或者是否已为该特定内核事件安排了所有工作组。

在方框210中,主处理器能够确定是否还有更多的工作组要为内核事件调度。例如,主处理器能够将要执行的功能(如内核事件所示)划分为一个或多个工作组。如果一个或多个工作组仍有待处理,则方法200继续至方框215。如果没有其他工作组仍有待处理,则方法200进行至方框240。

一般来说,当功能按照主处理器应用程序的执行而准备好要被执行时,主处理器便能够立即调度功能。如所讨论的,主处理器不需要执行任何轮询来检查计算单元是否准备就绪。类似地,主处理器不负责启动计算单元。

在方框215,主处理器能够读取调度器的状态寄存器以获取命令队列中的槽。如上所述,状态寄存器中的每个比特都对应于命令队列中的一个槽。因此,当读取时状态寄存器的任何值为“1”的比特位置都表明存储在与该比特位置相对应的命令队列的槽中的命令已经完成执行。这样,该槽是空闲的或可用于接收来自主处理器的新命令。

在方框220中,主处理器确定命令队列中的槽是否可用。例如,如果主处理器从状态寄存器中读取一个或多个“1”值,则命令队列中的槽数量等于从状态寄存器中读取的“1”值的数量。此外,主处理器根据读取的“1”值的比特位置知道命令队列的哪些槽可用。如果命令队列中的槽可用,则方法200继续至方框225。如果主处理器在读取状态寄存器之后确定命令队列中没有槽可用(例如,状态寄存器包含所有“0”值),方法200可以循环回到方框205,以继续进行处理。主处理器可能会继续循环并尝试获取命令队列中的槽以处理接收到的事件。在特定实施例中,命令队列可以包括比计算单元更多的槽。在这点上,计算单元的可用性不在于确定命令队列是否具有空间(例如,空闲槽)来存储其他命令。

在一个或多个实施例中,状态寄存器被实现为读取时清除。这样,调度器能够多次写入状态寄存器,而无需主处理器读取状态寄存器。响应于例如由主处理器读取状态寄存器,状态寄存器被配置为自动清除被存储在其中的内容。

在方框225中,主处理器能够计算命令队列中的空闲槽的地址。例如,在读取状态寄存器之后,主处理器会知道命令队列中的哪些槽可用。由于每个槽的大小都是固定的,因此主处理器能够计算命令队列中可用槽的地址用于存储命令。在一个或多个实施例中,主处理器能够选择命令队列中的第一可用槽以存储命令。在那种情况下,主处理器计算在命令队列中的第一个可用槽的地址。

在方框230,主处理器能够为下一个工作组创建命令。该命令可以包括头部和一个或多个参数(argument)。命令的头部可以包括指示命令的类型的操作码(opcode)和指定IC的计算单元中的哪些可以用于执行命令的比特掩码。命令的参数可以被包括在命令的被称为寄存器映射的部分中。命令的参数是计算单元在执行命令时处理的数据。不同类型的命令可能包括数量不同且大小不同的参数。

在一个或多个实施例中,主处理器在每个命令内包括一个工作组。在一个或多个其他实施例中,主处理器能够在命令中包括多个工作组。

作为说明性而非限制性示例,一种类型的命令是START_KERNEL命令。START_KERNEL命令具有指示命令类型的唯一操作码。响应于每个内核事件,主处理器能够为内核事件的每个工作组生成一个START_KERNEL命令。如所指出的,在其他实施例中,START_KERNEL命令可以包括多个工作组。START_KERNEL命令包括操作码;指示可以使用哪些计算单元执行命令的计算单元比特掩码;以及包括参数的寄存器映射部分。参数包括启动给定命令的计算单元所需的数据。

应当理解,除了START_KERNEL命令之外,还可以使用其他命令(例如,操作码)。这样的其他命令可以用于调度器支持的各种不同目的。例如,主处理器可以生成命令以供调度器执行,以便对计算单元执行进度进行调试的命令;取回关于IC内的硬件资源的信息;和/或执行功率监视。

在方框235中,主处理器能够将在方框230中生成的命令写入调度器的命令队列。例如,主处理器能够经由通信链路将命令写入命令队列中具有在方框225中计算出的地址的槽中。这样,命令被有效地推送到命令队列中。只要命令队列具有可用的槽,主处理器就可以继续将命令存储在槽内。

在方框240中,在没有其他工作组要处理的情况下,主处理器能够检查与内核事件相关联的工作组是否已经完成执行。调度器能够通过将值“1”写入状态寄存器中与存储完成执行的命令的命令队列的槽相对应的状态寄存器中的比特位置而通知主处理器命令已完成执行。

在一个或多个实施例中,主处理器能够轮询状态寄存器(例如,周期性地读取状态寄存器)。在一个或多个其他实施例中,调度器能够对主处理器生成中断,表示状态寄存器已被写入并且主处理器应读取状态寄存器。

在任何情况下,在方框240中,主处理器都能够读取状态寄存器,以确定内核事件的工作组的命令是否已完成执行。如果主处理器确定工作组尚未完成执行,则方法200可以循环回到方框205以继续进行处理。如果主处理器确定工作组已经完成执行,则方法200可以继续至方框245。在方框245中,主处理器能够将内核事件标记为已完成。

在一个或多个实施例中,每次主处理器读取状态寄存器时,主处理器都能够存储空闲的槽的状态和已完成的命令。在这方面,提供图2用于说明的目的。由于主处理器能够存储槽的状态,因此所描述操作的特定顺序可能会有所不同。在处理或执行了最后一个占用该槽的命令之前,该命令队列的槽不能再用于存储其他命令。

图3示出了如由结合图1描述的调度器160执行的,处理来自主处理器的命令的方法300。方法300是可以由调度器执行以处理来自主处理器的命令的操作的简化版本。例如,图3没有示出命令队列中的槽的每个不同状态,其可以如参考图2更详细地描述的那样使用。

方法300可以在主处理器已经向IC 150发送命令的状态下开始。在方框305,从主处理器接收命令并将其存储在命令队列的槽中。例如,IC内的接口能够通过通信链路从主处理器接收命令。接口将命令存储在主处理器指定的命令队列的地址处。如所讨论的,主处理器能够确定命令队列中的哪些槽是空闲的,并且能够开始将命令写入空闲槽的地址。

在方框310中,调度器的控制器能够检测新命令。在一个或多个实施例中,控制器能够检查命令队列中的每个槽并且检测来自主处理器的任何被写入的新命令。在特定实施例中,命令队列的槽可以以四个不同状态中的任何一个存在。例如,槽可以是空闲的、新的、排队的、或正在运行的。当控制器在槽中检测到新命令时,控制器能够从命令队列中读取命令的头部,并在控制器中本地缓存头部。当控制器改变槽的状态(例如,和/或被存储在槽中的命令)时,,控制器能够更新本地缓存的头部而非被存储在命令队列中的头部,以减少处理时间。

在方框315中,控制器能够跟踪IC内的计算单元的可用性。例如,控制器能够确定计算单元是忙还是闲。在方框320中,控制器能够调度可用的,例如空闲的计算单元以执行被存储在命令队列中的命令。在一个或多个实施例中,调度的计算单元是一个空闲的单元,也是被允许按照被包括在命令头部中的比特掩码执行命令的单元。在方框325中,控制器能够将命令提供给计算单元并启动计算单元。例如,在方框325中,控制器将命令的参数提供给计算单元并启动计算单元。

在方框330中,响应于控制器确定计算单元已经完成命令的执行,控制器能够将值“1”写入状态寄存器中对应于从中读取完成执行的命令的命令队列的槽的比特的位置。例如,如果完成执行的命令存储在命令队列的槽3中,则控制器将值“1”写入状态寄存器中与命令队列的槽3对应的比特位置。在方框335中,控制器能够将槽的状态更新为空闲。如上所述,控制器可以通过更新命令头部的本地缓存副本来更新槽的状态。

图4示出了如结合图3所描述的由调度器160执行的处理来自主处理器的命令的另一示例方法400。方法400显示可以由调度器执行以处理来自主处理器的命令的操作的更详细版本。方法400示出了其中控制器能够循环通过命令队列的槽的示例。方法400还示出控制器如何跟踪命令队列的槽并相应地更新槽的状态。

在方框405中,控制器能够确定是否还有其他槽要处理。响应于确定剩余一个或多个槽待处理,方法400继续进到方框410。否则,方法400可以结束。应当理解,方法400可以由控制器重新开始以周期性地或响应于特定事件来处理命令队列的槽。

在方框410中,控制器能够检查该槽(例如,当前选择的槽)的头部的状态。控制器例如能够读取被存储在用于该槽的高速缓存的头部中的值。控制器检查的值指示槽的状态为空闲、新的、已排队、或正在运行的。

响应于指示槽空闲的值,方法400继续到方框415。在方框415中,控制器能够直接从命令队列中读取槽的头部。如所讨论的,在读取头部时,控制器能够存储该槽的头部的新的本地缓存副本。在方框420中,控制器确定在槽中是否已经接收到新命令。在一个示例中,控制器能够将新缓存的头部与先前缓存的头部进行比较,以确定新命令是否已经存储在槽中。

响应于确定新命令存储在命令队列的槽中,方法400继续到方框425。响应于确定该槽不存储新命令,方法400循环回到方框405以继续处理其他槽。在方框425中,控制器能够在头部的本地缓存的副本中设置该值以指示该槽是新的。

在控制器确定槽的状态(在方框410中)是新的的情况下,方法400可以从方框425或从方框410继续到方框430。在方框430中,控制器确定IC的哪个计算单元可以被使用来执行命令。例如,在控制器内高速缓存的命令的头部可以包括一个或多个比特,其指示可以使用哪些计算单元来执行命令。控制器能够读取这些比特,以确定哪些计算单元(例如特定的计算单元和计算单元的数量)能够(例如被允许)执行命令。

在一个或多个实施例中,可以由命令使用的计算单元可以被编码在为命令的头部内的比特掩码。所述比特掩码可包括与控制器所维护的计算单元索引号相对应的位置中的比特(例如,其中每个计算单元可以由对应的计算单元索引号来标识)。在一个或多个实施例中,计算单元地址可以是非连续的并且由任意地址范围分隔开。这样,控制器可以配置为具有查找表,该查找表将计算单元索引号映射到该计算单元的地址。控制器能够通过使用查找表将计算单元索引号映射到由计算单元索引号标识的计算单元的地址,来确定由位掩码指定的计算单元的地址。

在一个或多个其他实施例中,计算单元地址可以是连续的并且可以由固定地址范围分隔开。在那种情况下,控制器能够基于从命令的头部读取的比特掩码来确定可用于执行命令的每个计算单元的地址。在特定实施例中,固定地址范围可以是4k。在那种情况下,控制器可以通过将索引向左移动12(4k)比特来确定计算单元地址。

在方框435中,控制器确定命令的参数的地址。在特定实施例中,每个计算单元具有可以将参数写入其中的寄存器映射(例如,寄存器映射接口)。计算单元的寄存器映射可以与存储在命令的有效载荷(payload)中的命令的寄存器映射部分具有一一对应关系。在方框435中,控制器能够通过偏移到命令队列中的寄存器映射在命令的有效载荷中的位置来确定命令的寄存器映射的地址。

在方框440中,控制器能够读取命令的参数的大小。在方框445中,控制器能够设置头部值以指示该槽已排队。如所讨论的,控制器能够在头部的本地高速缓存副本中更新头部值,并使得在实际命令队列的槽内的头部不受干扰。

在控制器确定(在方框410中)槽状态被排队的情况下,方法400可以从方框445或从方框410继续到方框450。槽的排队状态意味着该槽包括一个准备由计算单元执行的命令。因此,在方框450中,控制器能够确定每个位掩码可用于执行命令的计算单元的状态。响应于确定由比特掩码指定的计算单元忙碌,方法400循环回到方框405以在命令队列的另一个槽上进行处理,因为当前槽内的命令可能不会被卸载到计算单元。响应于确定一个或多个计算单元为空闲,方法400继续到方框455。

在方框455中,控制器将当前正在被处理的槽的命令的参数写入在方框450中确定的计算单元。在一个或多个实施例中,控制器选择在方框450中确定的那些的可用计算单元的第一可用计算单元。例如,控制器能够执行存储器复制以将参数从命令队列中的命令的寄存器映射(例如,有效载荷)传递到所选计算单元的寄存器映射。控制器例如可以通过写入计算单元的地址(例如,如参照方框430所描述的确定的计算单元的寄存器映射的基地址)来将命令的寄存器映射的内容复制到计算单元。

在方框460中,在将命令的参数写入计算单元之后,控制器能够启动计算单元。在方框465中,控制器能够在命令的头部的本地高速缓存的副本内设置数值以指示运行状态。所述运行状态表明该命令当前正在由一个或多个计算单元执行。在控制器确定(在方框410中)槽的状态正在运行的情况下,方法400可以从方框465或从方框410继续到方框470。图4示出了示例实现方式,其中控制器被配置为轮询计算单元以确定每个计算单元是处于繁忙状态还是处于空闲状态。因此,在方框470中,控制器确定计算单元的状态。控制器例如轮询计算单元以确定计算单元是繁忙还是空闲。作为响应,计算单元可以提供指示当前状态为繁忙或空闲的信号。

响应于确定计算单元正忙,方法400循环回到方框405以检查命令队列的下一个槽的状态。响应于确定计算单元空闲,控制器能够通过更新状态寄存器来通知主处理器。控制器例如可以将“1”的值写入与包括由计算单元执行的命令的槽相对应的状态寄存器的比特位置。在方框480中,控制器设置头部值以指示空闲状态。如所讨论的,控制器能够更新命令头部的本地缓存副本内的头部值,而不是实际命令队列中的头部。

图5示出了确定计算单元的状态的示例方法500。在一个或多个实施例中,计算单元可以被配置为生成中断以指示状态的改变。在这种情况下,控制器无需轮询计算单元来确定状态。图5示出了在其中计算单元被配置为生成此类中断的实施例中可由控制器执行的操作。图5的方法500,例如,可以被使用来代替在图4的示例中的方框470、475和480,其中计算单元被配置为生成中断并且控制器不轮询计算单元的状态。

在方框505中,控制器确定是否已经接收到来自计算单元的中断。由计算单元产生的中断例如可以指示计算单元已经完成操作并且已经进入空闲状态。响应于确定尚未从计算单元接收到中断,方法500可以循环回到方框505,以继续检查从计算单元接收到的中断。响应于确定已经接收到来自计算单元的中断,方法500可以继续到方框510。

在方框510中,控制器确定哪个计算单元触发了中断。在一个或多个实施例中,控制器能够执行中断处理程序例程(interrupt handler route),其接收具有为已完成操作的每个计算单元设置的比特的比特掩码。这样,该中断处理程序例程能够在一个调用中处理比特掩码中指定的每个计算单元。尽管方法500可以处理来自一个以上计算单元的中断,但是出于说明的目的,只描述了来自计算单元的单个中断的处理。

在方框515中,控制器能够禁用在方框505中检测到中断的特定槽上的中断。在方框520中,控制器能够清除在生成中断的计算单元中的状态寄存器以清除中断。在方框525中,控制器能够更新由计算单元执行的命令的头部的本地缓存副本内的头部值,以指示存储由计算单元所执行的命令的命令队列的槽现在是空闲的。

在方框530中,控制器能够更新状态寄存器中的适当比特以指示被存储在命令队列的相应槽中的命令已经完成执行。如所讨论的,写入到状态寄存器允许调度器通知主机系统命令已完成执行。在方框535中,控制器能够在对应于计算单元的槽上启用中断。

本公开内容描述了其中计算单元能够产生中断以通知调度器执行已经完成的实施例(中断模式)以及其中调度器能够轮询计算单元确定执行是否结束的实施例(轮询模式)。在某些情况下,调度器可以实现计算单元轮询。在其他情况下,计算单元可以被配置为生成所描述的中断。当使用中断模式时,由主处理器执行以轮询计算单元的线程可以配置为作为纯调度线程运行,该线程仅在命令队列有空间存储新命令时才运行。

在其他情况下,可以组合使用轮询和计算单元生成的中断。例如,当多个内核同时运行时,中断处理可以提供比轮询更高的性能。在轮询模式下,必须为每个正在运行的命令读取计算单元状态寄存器。在中断模式下,除非计算单元中断了调度器以宣布完成执行,否则不会读取计算单元状态寄存器。这样,在运行有限数量的计算单元的情况下,轮询模式可能比中断模式更快。随着正在运行的计算单元的数量超过阈值数量,实施例可以过渡到中断模式。实施例可以基于执行的计算单元的数量与计算单元的阈值数量相比较的结果,在轮询模式和中断模式之间转换。

根据本文所述的发明性安排,调度器能够将工作组调度到命令中指定的任何计算单元上。调度器可以在空闲的计算单元上调度尽可能多的工作组,并在调度其他工作组之前等待计算单元再次处于空闲状态。

在特定实施例中,在命令队列已满的情况下,主处理器可以等待命令队列具有容纳更多命令的空间的通知。该通知可以通过主处理器轮询调度器或通过调度器(例如,控制器)来实现,该中断向处理器生成指示命令队列内的可用空间的中断。

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

架构600包括几种不同类型的可编程电路,例如逻辑块。例如,架构600可以包括大量不同的可编程块,包括多千兆位收发器(MGT)601,可配置逻辑块(CLB)602,随机存取存储器块(BRAM)603,输入/输出块(IOB)604,配置和时钟逻辑(CONFIG/CLOCKS)605,数字信号处理模块(DSP)606,专用I/O模块607(例如,配置端口和时钟端口)以及其他可编程逻辑608(诸如数字时钟管理器,模拟-到数字转换器,系统监视逻辑等)。

在一些IC中,每个可编程区块包括可编程互连元件(INT)611,其具有与每个相邻区块中的对应INT 611的标准化连接。因此,INT 611一起实现了所示IC的可编程互连结构。每个INT 611还包括与同一区块内的可编程逻辑元件的连接,如图6顶部的示例所示。

例如,CLB 602可以包括可配置逻辑元件(CLE)612,其可以被编程为实现用户逻辑加单个INT611。BRAM 603除了一个或多个INT 611之外还可以包括BRAM逻辑元件(BRL)613。通常,区块中包含的INT 611的数量取决于区块的高度。如图所示,BRAM区块具有与五个CLB相同的高度,但是也可以使用其他数目(例如四个)。除适当数量的INT 611外,DSP区块606还可包括DSP逻辑元件(DSPL)614。IOB 604除了包括INT 611的一个实例外,还可包括I/O逻辑元件(IOL)615的两个实例。连接到IOL 615的实际I/O焊盘可能不限于IOL 615的区域。

在图6所示的示例中,例如由区域605、607和608形成的裸片中心附近的柱状区域可以用于配置,时钟和其他控制逻辑。从该柱状结构延伸的水平区域609可用于在可编程IC的宽度上分配时钟和配置信号。

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

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

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

短语“可编程电路”是指IC内的可编程电路元件,例如本文所述的各种可编程或可配置电路块或区块,以及根据被加载到IC的配置数据,有选择地耦合各种电路块,区块和/或元件的互连电路。例如,图6中所示的、在PROC 610外部的电路块,诸如CLB 602和BRAM603,被认为是IC的可编程电路。

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

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

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

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

调度器160可以通过使用具有结合图6所描述的架构的IC来实现。例如,BRAM可用于实现命令队列。PROC 610可用于实现控制器175。IC的可编程电路内的寄存器可用于实现状态寄存器170。可编程电路可用于实现接口155和计算单元180。在特定实施例中,存储器控制器185是硬连线的。在其他实施例中,存储器控制器185也可以通过使用可编程电路来实现。

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

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

如本文所定义,单数形式“一”,“一个”和“该”也意图包括复数形式,除非上下文另外明确指出。

如本文所定义,术语“至少一个”,“一个或多个”和“和/或”是开放式表达,除非另有明确说明,否则它们在操作上是结合的和分离的。例如,每个表达“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),存储棒,软盘等。

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

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

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

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

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

如本文中所定义,术语“实时”是指用户或系统对于要进行的特定处理或确定足够敏感地感知,或指使处理器能够跟上某些外部处理处理响应的程度。

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

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

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

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

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

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

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

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

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

可以在权利要求中找到的所有装置或步骤加上功能元件的相应结构,材料,动作和等同物,旨在包括用于与其他要求保护的元件结合起来执行功能的任何结构,材料或动作。

一个或多个实施例针对一种包括用于硬件加速的调度器的集成电路(IC)。调度器可以包括具有多个槽的命令队列,该命令队列被配置为存储从主处理器卸载的命令,以由IC的计算单元执行。调度器可以包括状态寄存器,该状态寄存器具有与命令队列的槽相对应的比特位置。调度器还可以包括耦接到命令队列和状态寄存器的控制器。控制器可以被配置为调度IC的计算单元以执行存储在命令队列的槽中的命令,并更新状态寄存器的比特位置以指示来自命令队列的哪些命令完成了执行。

在一方面,状态寄存器可以被配置为响应于被读取而清除被存储在其中的内容。

在另一方面,调度器可以包括被配置为通过通信链路与主处理器进行通信并且将命令存储在命令队列的可用槽内的接口。

在另一方面,存储在命令队列中的命令可以包括计算单元用来执行相应命令的参数。

在另一方面,每个命令可以指定允许哪个计算单元执行该命令。

在另一方面,控制器可以被配置为基于哪个计算单元空闲并且被允许执行每个相应的命令来将命令分配给计算单元。

在另一方面,控制器可以是被配置为执行程序代码的处理器。处理器可以是使用IC的可编程电路实现的软处理器。

在另一方面,控制器可以被配置为确定能够在其上运行所选命令的所选计算单元是空闲的,将所选命令的参数传递给所选计算单元以执行,并启动所选计算单元。

在另一方面,控制器可以被配置为响应于确定所选择的命令完成执行,向状态寄存器中的与包括所选择的命令的槽相对应的位位置写入指示该槽是空闲的。

一个或多个实施例涉及一种使用IC调度用于硬件加速的命令的方法。该方法可以包括将从主处理器接收的命令存储在IC内的命令队列的槽内,其中从主处理器卸载该命令以由IC的计算单元执行。该方法可以包括使用控制器调度计算单元以执行存储在命令队列的槽中的命令。该方法可以包括:响应于确定命令完成执行,在IC内的状态寄存器中写入比特位置,其中该比特位置对应于存储命令的命令队列的槽。

在一方面,该方法可以包括在控制器内维护存储在命令队列的槽中的命令的标头的本地缓存副本,以及通过更新标头的本地缓存副本中的值来更新槽的状态。

在另一方面,该方法可以包括响应于读取状态寄存器而清除被存储在状态寄存器中的内容。

在另一方面,被存储在命令队列中的命令可以包括计算单元用来执行命令的参数。

在另一方面,该方法可以包括从每个命令确定允许哪个计算单元执行该命令。

在另一方面,该方法可以包括基于哪个计算单元是空闲的并且被允许执行每个相应的命令,将命令分配给计算单元。

在另一方面,该方法可以包括:确定能够在其上运行所选命令的所选计算单元是空闲的;将所选命令的参数传递给所选计算单元以执行;以及启动所选计算单元。

在另一方面,比特位置的写入可以指示槽是空闲的。

在另一方面,该方法可以包括通过从所选计算单元接收中断来确定所选计算单元已完成执行所选命令。

在另一方面,该方法可以包括通过轮询所选计算单元来确定所选计算单元已完成执行所选命令。

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

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号