一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

虚拟化设备和方法与流程

2022-07-10 01:56:27 来源:中国专利 TAG:

虚拟化设备和方法
相关申请的交叉引用
1.本公开要求基于2019年12月2日提交的申请号为16/700,879的美国专利申请的优先权,其全部内容通过引用并入本文。


背景技术:

2.计算(例如,云计算)中的虚拟化是可以允许用户从单个的物理硬件系统创建多个模拟环境或专用资源的技术。现有的虚拟化技术主要关注一般的机器虚拟化,如中央处理器(cpu)、i/o和网络资源的虚拟化。异构加速处理单元(hapu)(例如,图形处理单元(gpu)和现场可编程门阵列(fpga))是实施定制硬件以显著加速计算并提高能量效率的新兴技术。hapu的虚拟化涉及在异构平台中的不同硬件单元上调度任务,因而潜在地产生更多挑战。


技术实现要素:

3.在一些实施例中,一种示例性的调度命令的方法可以包括:挑选命令;确定该命令是同步命令还是条件命令;响应于该命令被确定为同步命令,为该命令启用等待队列;以及将所述命令分配到处理引擎。
4.在一些实施例中,示例性的异构加速处理单元(hapu)可以包括:用于存储命令的一个或多个物理队列;用于存储命令的一个或多个等待队列;被配置为用于执行命令的一个或多个处理引擎;与所述一个或多个物理队列、所述一个或多个等待队列以及所述一个或多个处理引擎进行可通信地配合设置的调度器,所述调度器被配置为:从所述一个或多个物理队列中的一个物理队列中挑选命令;确定所述命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令从所述一个或多个等待队列中启用一个等待队列;以及将所述命令分配给所述一个或多个处理引擎中的一个处理引擎。
5.在一些实施例中,示例性的终端可以包括:主机单元;以及与该主机单元进行可通信地配合设置的异构加速处理单元(hapu),所述hapu可包括:用于存储命令的一个或多个物理队列;用于存储命令的一个或多个等待队列;被配置为执行命令的一个或多个处理引擎;与所述一个或多个物理队列、所述一个或多个等待队列以及所述一个或多个处理引擎进行可通信地配合设置的调度器,所述调度器可被配置为:从所述一个或多个物理队列中的一个物理队列中挑选命令;确定该命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令从所述一个或多个等待队列中启用一个等待队列;以及将所述命令分配给所述一个或多个处理引擎中的一个处理引擎。
6.在一些实施例中,示例性的一种非瞬态计算机可读存储介质可以存储一组指令,该组指令可由一个或多个处理设备执行以致使异构计算单元(hcu)执行一种方法,该方法包括:挑选命令;确定所述命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令启用等待队列;以及将所述命令分配到处理引擎。
7.本公开的其他的对象和优势将部分地在以下详细说明中阐述,并且部分地将从该说明中变得显而易见,或可以通过本公开的实施来了解。本公开的对象和优势将通过所附
权利要求中特别指出的元素和组合来实现和获得。
8.应当理解的是,上述一般描述和以下详细描述仅是示例性和说明性的,并非对所公开的实施例的限制。
附图说明
9.作为本说明书的一部分的附图示出了若干实施例,并且与说明书一起用于解释所公开的实施例的原理和特征。在附图中:
10.图1是根据本公开的一些实施例的示例性虚拟化环境的示意图。
11.图2a是根据本公开的一些实施例的示例性神经网络处理架构的示意图。
12.图2b是根据本公开的一些实施例的结合了神经网络处理架构的示例性云系统的示意图。
13.图3是根据本公开的一些实施例的示例性异构加速处理单元(hapu)的示意图。
14.图4是根据本公开的一些实施例的示例性命令格式的示意图。
15.图5是根据本公开的一些实施例的示例性运行命令状态表的示意图。
16.图6是根据本公开的一些实施例的示例性命令队列的示意图。
17.图7是根据本公开的一些实施例的示例性命令调度机制的示意图。
18.图8是根据本公开的一些实施例的用于调度命令的示例性方法的流程图。
具体实施方式
19.现在将参考附图中所示出的具体实例,对示例性实施例进行详细说明。以下描述参考附图,其中不同附图中的相同标号表示相同或相似的元件,除非另有说明。在示例性实施例的以下描述中阐述的实现方式不代表与本发明一致的所有实现方式。相反,它们仅仅是与所附权利要求书中所陈述的与本发明相关的方面一致的设备、系统和方法的示例。
20.在虚拟化环境中,许多用户可以共享相同的资源。因此,虚拟化可能涉及在多个硬件单元上调度来自不同用户的多个任务(例如,命令)。用于调度任务的常规方法和架构具有许多问题。例如,在调度命令期间,在命令队列中可能存在错误依赖或头部阻塞,从而减慢调度过程。本公开的实施例可对常规技术进行改进。例如,本公开的一些实施例可克服或至少减轻命令调度中的错误依赖或头部阻塞,从而改善虚拟化性能。
21.图1是根据本公开的一些实施例作出的示例性虚拟化环境100的示意图。在一些实施例中,虚拟化环境100可以在服务器、客户端设备(或用户)等上实现。模块、程序、虚拟机或命令可由虚拟化环境100存储或执行。
22.如图1所示,虚拟化环境100可以包括硬件层110,所述硬件层可以包括一个或多个互连160和一个或多个物理资源。物理资源可包括一个或多个物理异构加速处理单元(hapu)104(例如,物理hapu104a-104b)、一个或多个物理处理器108等。每个物理资源通过互连160的端口(例如,插槽)连接至互连160。在一些实施例中,操作系统(或内核)118或物理处理器108保持互连160的端口和物理资源(包括物理hapu104)之间的映射。在一些实施例中,物理hapu104可以是图形处理单元(gpu)、现场可编程门阵列(ppga)、神经网络处理单元(npu)、张量处理单元(tpu)、专用集成电路(asic)、或可加速计算机应用的计算的任何其他处理单元。在一些实施例中,物理处理器108可以是cpu。
23.在一些实施例中,物理资源可以包括其他物理设备,如一个或多个存储器(未示出)。该一个或多个存储器可以包括可以存储数据、程序、固件或可执行指令的任何类型的存储器。存储在所述一个或多个存储器中的程序、固件或可执行指令可以由虚拟化环境100的一个或多个物理处理器108执行。
24.虚拟化环境100可以进一步包括操作系统(os)118,其可以存储在一个或多个存储器中并且由一个或多个物理处理器108执行。操作系统118还可以被称为内核。此外,虚拟化环境100可以包括虚拟机监视器102。虚拟机监视器102可以是由虚拟化环境100中的物理处理器108执行的程序,以管理任何数量的虚拟机,诸如虚拟机132a和132b。如图1所示,虚拟机监视器102可以在提供虚拟化服务(诸如,i/o设备支持和存储器管理)的操作系统118上运行。可替代地,虚拟机监视器102(例如“裸金属”嵌入式虚拟机监视器)可以直接在硬件层110中的硬件资源上运行。在一些实施例中,操作系统118可以是linux内核,并且虚拟机监视器102可以是基于内核的虚拟机(kvm)。
25.操作系统118和虚拟机监视器102可以通过互连160控制和管理来自硬件层110中的物理资源的数据流和去往硬件层110中的物理资源的数据流。硬件层110中的每个物理资源连接到互连160,并且每个物理资源可以通过它们与互连160的连接相互发送和接收数据。每个物理资源之间的数据传输可以由操作系统118或虚拟机监视器102通过配置互连160来管理。例如,操作系统118和虚拟机监视器102可以配置互连160以限制物理处理器108和物理加速器104之间的数据传输参数(例如,数据传输速率、带宽等)。在一些实施例中,互连160可以是快速外围组件互连(pcie)总线或网状网络(例如,nvlink)。
26.虚拟机132(例如,132a或132b)可以是基于软件的物理机仿真。虚拟机132可进一步包括基于软件的该物理机上对软件程序执行的仿真。在一些实施例中,虚拟机132可以具有虚拟操作系统(例如,虚拟操作系统(os)130a或130b)。虚拟操作系统130(130a或130b)可运行应用程序(例如,应用程序140a或140b)。虚拟机132可具有虚拟处理器(例如,虚拟处理器128a或128b)。虚拟机132可以通过虚拟机监视器102访问硬件层110中的硬件资源。例如,通过虚拟机监视器102,虚拟机132可以访问一个或多个物理hapl104、一个或多个物理处理器108、以及一个或多个存储器(未示出)。在一些实施例中,虚拟机132可以被客户端设备(或用户)访问。
27.虚拟机132可以管理物理hapu的功耗并通过物理hapu的驱动程序和穿透功能来获得物理hapu的功耗信息。例如,虚拟机132a和132b安装有hapu驱动程序150a和150b。hapu驱动程序150a和150b可具有穿透功能127a和127b。穿透功能127a和127b允许虚拟机132a和132b分别管理物理hapu104a和104b的功耗和性能。例如,如图2所示,虚拟机132a可使用hapu驱动程序150a的穿透功能127a来管理物理hapu104a,并且虚拟机132b可使用hapu驱动程序150b的穿透功能127b来管理物理hapu104b。通过穿透功能127a和127b,虚拟机132a和132b可控制物理hapu104a和104b消耗的功耗量,封顶物理hapu104a和104b的功耗,并监视物理hapu104a和104b的功耗。
28.尽管虚拟机132a和132b可通过驱动程序和穿透功能对物理hapu 104a和104b执行功率管理,但操作系统118并不安装hapu驱动程序,并且因此操作系统118不能访问物理hapu的功率管理。如下图2所示,操作系统118不能对物理hapu104a和104b执行功率管理,因为操作系统118不安装hapu驱动程序(例如,hapu驱动程序150a-b)。因此,操作系统118不能
访问物理hapu104a和104b有关功耗的信息。然而,操作系统118可以获得有关数据中心包含所有硬件资源的总功耗信息,
29.图2a展示了根据本公开的一些实施例的示例性神经网络处理架构200。如图2a所示,架构200可以包括芯片通信系统202、主机存储器204、存储器控制器206、直接存储器访问(dma)单元208、联合测试行动组织(jtag)测试访问端口(tap)控制器210、外围接口212、总线214、全局存储器216等。应当认识到,芯片通信系统202可以基于所传递的数据执行算法操作(例如,机器学习操作)。
30.芯片通信系统202可以包括全局管理器2022和多个处理引擎(pe)2024,这些处理引擎还可以被称为核core或片tile。全局管理器2022可以包括用于与一个或多个处理引擎2024协调的至少一个调度器(例如,向一个或多个处理引擎调度命令或指令)。每个调度器可以与处理引擎2024的阵列相关联,这些处理引擎2024提供用于并行计算的突触/神经元电路(例如,神经网络)。例如,图2a中顶层的处理引擎可提供代表神经网络输入层的电路,而第二层的处理引擎可提供代表神经网络隐藏层的电路。在一些实施例中,芯片通信系统202可由gpu、fpga、npu、tpu、asic或另一个hapu来实现。如图2a所示,全局管理器2022可以包括与与两个处理引擎阵列协调的两个调度器。
31.处理引擎2024,例如,可以包括一个或多个处理元件,所述一个或多个处理元件单元各自包括单指令多数据(simd)架构,所述simd架构包括被配置为基于从全局管理器2022接收的命令或指令来执行一个或多个操作(例如,乘法、加法、乘积累加等)的一个或多个处理单元。为了对所通信的数据包执行操作,处理引擎2024可以包括用于处理数据包中信息的一个或多个处理元件。每个处理元件可以包括任意数量的处理单元。在一些实施例中,处理引擎2024可以被认为是一个片tile等。
32.主存储器204可以是片外存储器,如主机单元的存储器。例如,主机存储器204可以是ddr存储器(例如ddr sdram)等。相比于集成在一个或多个处理器内的片上存储器,主存储器204可被配置为以较慢的访问速度存储大量数据,充当较高级高速缓存。
33.存储器控制器206可以管理数据的读取和写入,这些数据来自和发往具有将片上存储块(例如,4块8千兆字节(gb)第二代高带宽存储器(hbm2))用作主存储器的全局存储器216内的特定存储块。例如,存储器控制器206可管理来自芯片通信系统202外部(例如,来自dma单元208或与另一hapu相对应的dma单元)或来自芯片通信系统202内部(例如,来自处理引擎2024中的本地存储器,该处理引擎2024经由二维网格被全局管理器2022的调度器控制)的读/写数据。此外,虽然图2a中示出了一个存储器控制器,可以理解为在架构200中可以提供一个以上的存储器控制器。例如,全局存储器216内的每个存储块(例如,hbm2)可以有一个存储器控制器。
34.存储器控制器206可以生成存储器地址并发起存储器读或写周期。存储器控制器206可包含可由一个或多个处理器写入和读取的若干硬件寄存器。寄存器可包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器和其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从输入/输出(i/o)设备读取或向i/o设备写入)、传输单元的大小、在一个突发中传输的字节数量和/或存储器控制器的其他典型特征的某种组合。
35.dma单元208可以协助在主机存储器204与全局存储器216之间传输数据。此外,dma单元208可辅助在多个hapu(例如,hapu202)之间传输数据。dma单元208可允许片外设备访
问片上和片外存储器而不引起cpu中断。由此,dma单元208还可生成存储器地址并发起存储器读或写周期。dma单元208还可包含可由一个或多个处理器写入和读取的若干硬件寄存器,包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器和其他类型的寄存器。这些寄存器可以指定源、目的地、传送方向(从输入/输出(i/o)设备读取或向i/o设备写入)、传送单元的大小和/或在一个突发中传送的字节数的某种组合。可以理解,架构200可包括第二dma单元,该第二dma单元可用于在其他神经网络处理架构之间传输数据,以允许多个神经网络处理架构在不涉及主机单元的情况下直接通信。
36.jtag/tap控制器210可指定一个专用调试端口,该端口用于在不需要对系统地址和数据总线进行直接外部访问的情况下对hapu的低开销接入实现串行通信接口(例如,jtag接口)。jtag/tap控制器210还可具有片上测试接入接口(例如,tap接口),其用来实现接入呈现各部分的芯片逻辑电平和设备能力的一组测试寄存器的协议。
37.外围接口212(如快速外围组件互连(pcie)接口),如果存在的话,充当(并且通常是)芯片间总线,提供架构200与其他设备之间的通信。
38.总线214包括芯片内总线和芯片间总线两者。芯片内总线将所有内部组件彼此连接,如系统架构所要求的。虽然不是所有组件都连接到所有其他组件,但是所有组件确实具有与它们需要通信的其他组件的一些连接。芯片间总线将hapu与其他装置进行连接,如芯片外存储器或外围设备。通常,如果存在外围接口212(例如,芯片间总线),则总线214仅与芯片内总线连接,但在一些实现中,其仍可涉及专用总线间通信。
39.芯片通信系统202可以被配置为基于神经网络执行操作。例如,芯片通信系统202可以被配置为使用如在此所描述的机制来执行神经网络。
40.架构200还可以包括主机单元220。主机单元220可以是一个或多个处理单元(例如,x86中央处理单元)。在一些实施例中,具有主机单元220和主机存储器204的主机系统可以包括编译器(未示出)。编译器是将以一种编程语言编写的计算机代码转换为hapu命令或指令以创建可执行程序的程序或计算机软件。在机器学习应用中,编译器可执行各种操作,例如,预处理、词汇分析、解析、语义分析、输入程序到中间表示的转换、代码优化和代码生成或其组合。
41.在一些实施例中,生成hapu命令的编译器可以在主机系统上,该主机系统将命令推送至芯片通信系统202。基于这些命令,每个调度器可以向一个或多个处理引擎(例如,处理引擎2024)分配任何数量的任务。一些命令可指示dma单元208将命令(由编译器生成)和数据从主机存储器204加载到全局存储器216中。所加载的命令随后可被分发到被指派有对应任务的每个处理引擎,并且该一个或多个处理引擎可处理这些命令。
42.图2b示出了根据本公开的实施例的结合神经网络处理架构200的示例性云系统230的示意图。
43.如图2b所示,云系统230可以提供具有人工智能(ai)能力的云服务,并且可以包括多个计算服务器(例如232和234),在一些实施例中,计算服务器232可以合并例如图2a的神经网络处理架构200。为了简单和清晰起见,在图2b中以简化的方式示出了神经网络处理架构200。
44.部署hapu以用于云中广泛使用的工作负荷可以显著地降低云提供者的全部购买成本(tco)。在神经网络处理架构200的帮助下,云系统230可以提供图像识别、面部识别、翻
译、3d建模等的扩展ai能力。
45.应当认识到,神经网络处理架构200可以其他形式部署至计算设备。例如,神经网络处理架构200还可被集成在计算设备中,诸如智能电话、平板、和可穿戴设备。
46.此外,虽然在图2a-2b中示出了神经网络处理架构,应当认识到,任何具有可执行并行计算能力的hapu可被使用。
47.应当认识到,在此公开的实施例可以用于不同应用环境中,如人工智能(ai)训练和推断、数据库和大数据分析加速、视频压缩和解压缩等。ai相关应用可涉及基于神经网络的机器学习(ml)或深度学习(dl)。因此,本公开的实施例可用于各种神经网络架构,诸如深度神经网络(dnn)、卷积神经网络(cnn)、递归神经网络(rnn)等,并且可被配置用于各种处理架构,诸如cpu、gpu、fpga、npu、tpu、asic等。
48.图3是根据本公开的一些实施例的示例性异构加速处理单元(hapu)300的示意图。在一些实施例中,hapu300可被实现为图1中的物理hapu104a-104b、图2a-b中的hapu 202。在一些实施例中,hapu300可以是用于计算机应用程序的加速计算的gpu、fpga、npu、tpu、asic或任何其他处理单元。例如,hapu300可以是硬件asic hapu,其可以加速数据中心的工作负荷,诸如机器学习或数据库查询加速。
49.如图3所示,hapu300可包括接口301、物理命令缓冲器302等。接口301可以连接到主机单元(例如,cpu)320。虚拟机监视器321或软件堆栈322可以在主机单元320上运行。在一些实施例中,接口301可以是pcie(例如,图2a中pcie接口212)。hapu300可通过接口301从主机单元320上的虚拟机监视器321或软件堆栈322接收数据或将数据输出至虚拟机监视器321或软件堆栈322。hapu300还可通过接口301从主机单元320上的虚拟机监视器321或软件堆栈322接收或加载命令(或指令)。命令可包含粗粒度指令且可由hapu执行。可由主机单元从多个用户(例如,客户端装置、程序员等)接收命令以执行类似或不同的任务。例如,用户可操作运行在主机单元320上的虚拟机(例如,虚拟机132a或132b)上的软件程序或应用(例如,应用140a或140b)。主机单元320(例如,虚拟机监视器321或软件堆栈322)可以从用户接收命令并且通过接口301将它们发送到hapu300。
50.应当认识到,在此公开的命令可以包括不同类型的命令。例如,命令可包括可独立于先前命令的独立命令(在下文中,称为“同步命令”或简称为“同步命令”)和依赖于先前独立命令的依赖命令(在下文中,称为“条件命令”)。在一些实施例中,同步命令可以开始一个包含依赖于该同步命令的一个或多个条件命令的依赖链。
51.图4示出了根据本发明的一些实施例的示例性命令格式400的示意图。命令格式400可应用于来自用户和主机单元(例如,图2a-2b中的主机单元220,或图3中的主机单元320)至hapu(例如,图2a-2b的hapu 202或图3的hapu 300)的命令。
52.如图4所示,命令格式400可包括多个字段,诸如操作(op)字段401、标志(flg)字段402、虚拟队列标识(vid)字段403等。操作字段401可指示命令的操作名称。标志字段402可指示命令的类型。例如,可将旗标字段设定为同步旗标(s旗标,例如,0或1)以指示所述命令为可开始依赖链的同步命令,或设定为条件旗标(c旗标,例如,1或0)以指示所述命令为可取决于先前同步命令的条件命令。vid字段403可指示包含该命令的虚拟队列的id。在一些实施例中,每个虚拟队列可以对应于特定用户,并且vid可以是用户特定id。例如,在hapu(例如,图2a-2b的hapu202或图3的hapu300)允许1024个用户共享该hapu的情况下,10比特
vid可附接至hapu的每个命令。
53.返回参考图3,hapu300的物理命令缓冲器302可存储来自主机单元320的命令。物理命令缓冲器302中的命令可通过指向命令的地址的指针来定位。
54.hapu 300还可以包括一个或多个物理队列(pq)303和一个或多个等待队列(wq)304。尽管图3中示出了四个物理队列303和四个等待队列304,但应当认识到,hapu300可包括更多或更少的物理队列303和等待队列304。在一些实施例中,多个物理队列303可以与多个等待队列304相同或不同。
55.物理队列303可以是与物理命令缓冲器302或物理命令缓冲器302的一部分分开的独立单元。在一些实施例中,物理队列303可以存储用于执行的一个或多个命令的序列。或者,物理队列303可维持指向存储在物理命令缓冲器302中的一或多个命令的地址的指针(例如,类似首尾链列表的结构)。
56.等待队列304可存储取决于运行中的同步命令的一个或多个条件命令并且等待该运行中的同步命令结束。在一些实施例中,等待队列304可以是与物理命令缓冲器302分离的独立单元。在一些其他实施例中,等待队列304可以被合并到物理命令缓冲器302中并且是物理命令缓冲器302的一部分。等待队列304可存储用于执行的一个或多个条件命令的序列。或者,等待队列304可维持指向存储在物理命令缓冲器302中的一个或多个条件命令的地址的指针(例如,类似首尾链列表的结构)。在一些实施例中,等待队列304可存储来自相同物理队列303和相同用户(例如,具有相同vid)的条件命令。在一些实施例中,等待队列304相对于对应的物理队列303可被分配至更高优先级。对应于同一物理队列303的多个等待队列304可同时处于活动状态,并且可被轮询调度。如图3中所示,hapu 300还可包括调度器305(该调度器可类似于图2a的调度器)和一个或多个处理引擎(pe)306(例如,pe306a、pe 306b、pe 306c和pe 306d,它们可以类似于图2a中的pe 2024)。调度器305可以与物理队列303、等待队列304和处理引擎306可通信地配合设置。调度器305可以调度来自物理队列303和等待队列304的命令并将它们调度到一个或多个处理引擎306。例如,调度器305可以从物理队列303或等待队列304中挑选命令(例如,命令地址),并且确定该命令是同步命令还是条件命令(例如,经由命令的标志字段)。如果该命令被确定为同步命令,则调度器305可为该命令启用一个等待队列并将该命令分配到处理引擎306。如果命令被确定为条件命令,则调度器305可确定是否存在与该命令具有相同vid的正在运行中的同步命令,并将其标记为最新的运行中同步命令。如果是,则调度器305可以将条件命令推送至与同步命令相对应的等待队列。如果否,则调度器305可以将条件命令分配到处理引擎。在一些实施例中,调度器305可以跟踪分配的运行命令的状态。
57.在一些实施例中,调度器305可以包括命令解码器3051、控制器3052和存储器3053。命令解码器3051可解码来自物理队列303和等待队列304的命令。控制器3052可控制命令的调度过程。存储器3053可为调度器305的命令、数据和其他信息提供存储。例如,存储器3053可包含可由控制器3052写入和读取的一个或多个上硬件寄存器。在一些实施例中,存储器3053可包括运行命令状态表,以跟踪所分配的命令的状态。
58.图5是根据本公开的一些实施例的示例性运行命令状态表500的示意图。运行命令状态表500可以在hapu(例如,图2a-2b的hapu202或图3的hapu300)的调度器(例如,图2a中的调度器或图3中的调度器305)中实现。
59.运行命令状态表500可以用于跟踪被分配给处理引擎的命令的状态。如图5所示,运行命令状态表500可包括多个条目,诸如条目0-3。在一些实施例中,运行命令状态表500可包含用于hapu(例如,图3中的hapu300上的pe 306a至306d)上的每个处理引擎的条目。运行命令状态表500中的条目数目可等于hapu的处理引擎的数目。
60.如图5所示,运行命令状态表500的每个条目(例如,条目0、条目1、条目2或条目3)可包括多个字段,诸如物理队列id(pq_id)字段、等待队列id(wq_id)字段、vid字段等。物理队列id字段可以指示分配到特定处理引擎的命令最初来自的物理队列。如果命令来自等待队列,则等待队列id字段可以指示该命令来自的等待队列。vid字段可记录命令的虚拟队列id。
61.在一些实施例中,运行命令状态表500的每个条目(例如,条目0、条目1、条目2或条目3)可以包括用于指示同步命令是否是最新的最新同步(或最新同步)字段。例如,在存在来自同一用户(例如,具有相同vid)的多个同步命令的情况下,最新同步字段可标记最新的同步命令。
62.在一些实施例中,运行命令状态表500的每个条目(例如,条目0、条目1、条目2或条目3)还可以包括用于指示命令成功还是失败的命令(cmd)状态字段。
63.应当认识到的是,运行命令状态表500可以包括比图5中所示的那些字段更多或更少的字段。
64.返回参考图3,存储器3053还可以存储其他数据或信息。在一些实施例中,存储器3053可以包括物理队列表,用于跟踪包含来自物理队列的一个或多个命令的等待队列的物理队列id(pq_id)。在一些实施例中,存储器3053可以为等待队列包括同步命令表,用于跟踪该等待队列中的命令所依赖的同步命令、或者跟踪该等待队列中的命令所依赖的同步命令正在运行于哪个处理引擎。在一些实施例中,存储器3053可以包括虚拟队列命令状态表,用于跟踪虚拟队列的执行。如果虚拟队列的虚拟队列命令状态表出错,则虚拟队列的执行失败。例如,对于虚拟队列,虚拟队列命令状态表可以跟踪虚拟队列中的同步命令是否成功。虚拟队列命令状态表可以保留状态信息,即使在同步命令从运行命令状态表退出之后。或者,虚拟队列命令状态表可以跟踪虚拟队列中最新的同步命令是否成功。例如,虚拟队列命令状态表可以包含用于虚拟队列的一比特字段,以跟踪其最新同步命令的状态。虚拟队列命令状态表的条目数目可等于虚拟队列数目或共享hapu300的用户数目。
65.调度器305(例如,控制器3052)可以更新存储器3053中的一个或多个表(例如,运行命令状态表、物理队列表、同步命令表和虚拟队列命令状态表)。在一些实施例中,处理引擎306可以更新或维持运行命令状态表(例如,物理队列id字段、等待队列id字段、vid字段或cmd状态字段)或虚拟队列命令状态表。在一些实施例中,等待队列304可以更新或维持物理队列表、同步命令表、或虚拟队列命令状态表。
66.处理引擎306(例如,pe 306a、pe 306b、pe 306c或pe 306d)可以包括一个或多个处理元件,其被配置为基于从调度器305接收的命令而执行一个或多个操作(例如,乘法、加法、乘法累加等)。为了对所通信的数据包执行操作,处理引擎306可以包括用于处理数据包中的信息的一个或多个处理元件。每个处理元件可以包括任意数量的处理单元。尽管图3中示出了四个处理引擎,但应当理解为,hapu300可包括更多或更少的处理引擎。在一些实施例中,处理引擎306的数量可以等于物理队列303的数量或等待队列304的数量。每个物理队
列303或每个等待队列可对应于一个处理引擎306。
67.图6是示例性命令队列600的示意图,根据本公开的一些实施例,命令队列600可实施为图3中hapu300上的物理队列303。
68.如果在现有方法中调度命令队列600中的命令,则在来自不同用户的命令之间可能存在错误依赖和头部阻塞。如图6所示,例如,命令队列600包括来自两个用户(用户1和用户2)的命令序列,按照以下顺序:用户1:u1_1s、u1_2c、u1_3c用户2:u2_1s、u2_2s、u2_3c、u2_4c其中,u1和u2分别表示用户1和用户2,s表示同步命令,c表示条件命令,并且s或c之前的数字表示命令的序列号。
69.然而,在命令队列600中,命令按照特定顺序:从顶部到底部,u1_3c、u2_4c、u2_3c、u2_2s、u1_2c、u2_1s、u1_1s。如果命令队列600按此顺序从底部到顶部调度和执行,那么在u1_3c与u2_2s之间(如由箭头601a指示)和u1_2c与u2_1s之间(如箭头601b所示)存在两个假依赖性601。此外,另一个问题是头部阻塞602。例如,u2_3c在命令队列600的头部中并且等待u2_2s完成。它将阻挡u1_3c分配,即使u1_3c对u2_2s没有依赖性并且存在可供使用的处理引擎,如箭头602a所示。类似的情况可以发生在u2_2s与u1_2c之间,如箭头602b所示。
70.在本公开的一些实施例中,命令可以包括虚拟队列id(vid)字段以区分不同用户并且形成特定用户的命令链或序列(例如,虚拟队列)。调度器(例如,图3中调度器305)可将依赖链维持在同一虚拟队列内并且根据依赖链调度命令。例如,u1_3c不必等待u2_2s完成,由此可以克服它们之间的错误依赖。
71.在本公开的一些实施例中,可以包括可允许无序分配的等待队列。等待同步命令的条件命令可以从物理队列中弹出并推送到等待队列中。因此,可移除头部阻塞。
72.图7是根据本公开的一些实施例的示例性命令调度机制700的示意图。在一些实施例中,命令调度机制700可由图1中的物理hapu104a到104b、图2a到图2b中hapu202或图3中hapu300来实现。
73.如图7所示,命令调度机制700可以包括物理队列703(例如,pq0、pq1、pq2或pq3)、等待队列704、调度器705和一个或多个处理引擎706(例如,pe 706a、pe 706b、pe 706c和pe 706d)。与物理队列303、等待队列304、调度器305和处理引擎306的描述类似的描述也可以分别应用于物理队列703、等待队列704、调度器705和处理引擎706。
74.调度器705可以包括命令解码器7051、控制器7052以及存储器7053。另外,调度器705还可包括多个多路复用器,诸如与物理队列703可通信地配合设置的多路复用器7054a、与等待队列704可通信地配合设置的多路复用器7054b、以及与多路复用器7054a和多路复用器7054b的输出以及与处理引擎706(例如,pe 706a、pe 706b、pe 706c和pe 706d)可通信地配合设置的多路复用器7054c。
75.在操作中,物理队列703可以包含用于执行的一个或多个命令。调度器705可以从物理队列703挑选命令并且确定该命令是同步命令还是条件命令。例如,控制器7052能够控制多路复用器7054a从pq0至pq3中的一个中选择一个命令。然后,命令解码器7051可对该命令进行解码,并且控制器7052可读取命令的标志字段以确定命令是同步命令还是条件命令。
76.如果当前命令被确定为同步命令,则调度器705可为该命令启用等待队列并将该命令分配到处理引擎706。例如,如果命令被确定为同步命令,则控制器7052可以确定是否存在可用的任何等待队列704。控制器7052可以检查存储器7053中的物理队列表以找到任何可用的等待队列704,该等待队列704不具有相应的物理队列。如果存在可用等待队列,则控制器7052可为当前命令启用该可用等待队列,并且通过多路复用器7054c将当前命令分配到处理引擎706(例如,pe 706a、pe 706b、pe 706c或pe 706d)。此外,控制器7052还能够将物理队列表中用于启用的等待队列的物理id字段设置为当前命令的物理队列id。如果没有可用的等待队列,则控制器7052可以等待。在一些实施例中,控制器7052可以更新同步命令表以反映所启用的等待队列对应于当前命令。
77.在一些实施例中,调度器705还可以更新运行命令状态表。例如,控制器7052能够将存储器7053中的运行命令状态表中与处理引擎706对应的条目的物理队列id字段和vid字段分别更新为当前命令的物理队列id和vid。
78.在一些实施例中,调度器705还可以将当前命令的vid与运行命令状态表进行比较,并且确定是否存在来自同一用户的另外的同步命令。如果存在来自同一用户的另一同步命令,则调度器705可以在运行命令状态表中清除针对该同步命令的最新同步字段,并将当前同步命令标记为最新同步命令。如果否,则调度器705可以将当前同步命令标记为最新的同步命令。例如,控制器7052可读取命令的vid字段,并将命令的vid与运行命令状态表进行比较。如果存在具有相同vid的另一同步命令,则控制器7052可在运行命令状态表中清除用于该同步命令的最新同步字段,并为当前同步命令设置最新同步字段。如果否,则控制器7052可在运行命令状态表中为当前同步命令设置最新的同步字段。
79.如果当前命令被确定为条件命令,则调度器705可确定是否存在具有与当前命令相同vid的运行中的同步命令,并标记为最新的。如果是,则调度器705可以将条件命令推送至与同步命令相对应的等待队列。如果否,则调度器705可以将条件命令分配至处理引擎。例如,如果当前命令的标志字段指示当前命令是条件命令,则控制器7052可将当前命令的vid与运行命令状态表进行比较以找到具有与当前命令相同的vid并且被标记为最新的(例如,设置了最新的同步字段)任何运行中同步命令。如果发现正在运行的同步命令,则控制器7052可将条件命令推送至同步命令的等待队列,如行709所指示。如果不是,则控制器7052可以通过多路复用器7054c将该条件命令分配至处理引擎706(例如,pe 706a、pe 706b、pe 706c或pe 706d)。
80.在一些实施例中,调度器705可以确定在包含当前命令的虚拟队列的执行中是否存在错误。如果存在错误,则调度器705可以将当前命令分配为无操作(no-op)操作并将当前命令标记为失败。如果没有错误,则调度器705可以将当前命令的信息更新至运行命令状态表并且将当前命令分配到处理引擎706(例如,pe 706a、pe 706b、pe 706c或pe 706d)。例如,控制器7052可以检查虚拟队列命令状态表,以找到在包含当前命令(例如,具有相同的vid)的虚拟队列的状态字段(例如,一比特字段)中是否存在错误。如果存在错误,则控制器7052可将当前命令作为无操作分配,并且将运行命令状态表中的用于当前命令的cmd状态字段设置为失败。如果没有错误,则控制器7052可以用当前命令的信息更新运行命令状态表,并且通过复用器7054c将当前命令分配到处理引擎706(例如,pe706a、pe706b、pe706c或pe706d)。
81.在一些实施例中,如果同步命令被成功地执行,并且其具有对应的等待队列704,调度器705可以从对应的等待队列704中挑选命令、更新运行命令状态表、并且将该命令分配至处理引擎706。例如,如果在处理引擎706上成功地执行了同步命令,则控制器7052或这个处理引擎706可以相应地更新用于同步命令的cmd字段。控制器7052可检查存储器7053中的同步命令表以找到对应于该同步命令的任何等待队列704。如果存在对应的等待队列704,则控制器7052可通过多路复用器7054b从对应的等待队列704挑选命令,用命令的信息更新运行命令状态表,并且通过多路复用器7054c将命令分配到处理引擎706(例如,pe 706a、pe 706b、pe 706c或pe 706d)。
82.图8是根据本公开的一些实施例的用于调度命令的示例性方法800的流程图。在一些实施例中,方法800可通过图1的物理hapu 104a-104b、图2a-b的hapu 202、图3的hapu300或图7的架构来实施。在一些实施例中,方法800可以通过计算机程序产品来实现,该计算机程序产品体现在计算机可读介质中,包括由计算机执行的计算机可执行指令,如程序代码。
83.如图8所示,在步骤801,可以挑选命令。例如,调度器(例如,图2a的调度器、图3的调度器305或图7的调度器705)可以从物理队列(例如,图3的物理队列303或图7的物理队列703)挑选命令。在一些实施例中,调度器的控制器(例如,图3的控制器3052或图7的控制器7052)可控制多路复用器(例如,图7的多路复用器7054a)来从多个物理队列中的一个选择命令。
84.在步骤802,可以确定该命令是同步命令还是条件命令。例如,调度器可读取命令的标志字段并且确定命令是同步命令或条件命令。在一些实施例中,调度器的解码器(例如,图3中命令解码器3051或图7中命令解码器7051)可对命令进行解码,并且调度器的控制器可读取命令的标志字段并基于标志字段确定命令是同步命令还是条件命令。
85.如果命令被确定为同步命令(“sync”分支),则方法800进行到步骤803以确定是否存在可用的任何等待队列。例如,调度器可确定是否有可用于命令的等待队列。在一些实施例中,调度器的控制器可以检查物理队列表(例如,在图3的存储器3053或图7的存储器7053中)以找出不具有对应物理队列的任何可用等待队列。
86.如果没有可用的等待队列(“否”分支),方法800进行至步骤804,其中方法800可以等待可用的等待队列。例如,如果调度器确定不存在可用的等待队列,则它可以等待可用的等待队列。在一些实施例中,调度器可以挑选另一命令去处理并且稍后返回到等待命令。
87.如果存在可用的等待队列(“是”分支),则方法800前进到步骤805,在该步骤中,可以将命令的vid与运行命令状态表进行比较。如上面参考图5所讨论的,运行命令状态表可包括多个条目。每个条目可以包含多个字段,例如物理队列id(pq_id)字段、等待队列id(wq_id)字段、vid字段、最新同步字段,cmd状态字段等。在一些实施例中,调度器可以将命令的信息与运行命令状态表中的一个或多个字段进行比较。例如,所述调度器(例如,所述调度器的控制器)可读取所述命令的vid字段,且将所述命令的vid与所述运行命令状态表进行比较以确定是否存在来自同一用户的另一同步命令。如果存在另一个vid相同的同步命令,调度器可以在运行命令状态表中清除该同步命令的最新同步字段,并为当前命令设置最新同步字段,将当前命令标记为最新。如果没有另一个具有相同vid的同步命令,调度器可以在运行命令状态表中为当前命令设置最新的同步字段。
88.在步骤806,启用等待队列。启用的等待队列可以对应于当前命令。例如,调度器可
以向当前命令分配可用的等待队列。在一些实施例中,调度器可以将物理队列表(例如,图3的存储器3053或图7的存储器7053中)中的启用的等待队列的物理id字段设置为当前命令的物理队列id。在一些实施例中,调度器可更新同步命令表(例如,在图3的存储器3053或图7的存储器7053中),以反映启用的等待队列对应于当前命令。
89.在步骤807,可以更新运行命令状态表。例如,调度器可将对应于运行命令状态表(例如,图3的存储器3053或图7的存储器7053中)中的当前命令的条目的物理队列id字段和vid字段分别更新为当前命令的物理队列id和vid。
90.在步骤808,该命令可以被分配到处理引擎。例如,调度器可以将当前命令分配到处理引擎(例如,图3的pe306a、pe 306b、pe 306c或pe 306d,或图7的pe 706a、pe 706b、pe 706c或pe 706d)。
91.如果在步骤802,当前命令被确定为条件命令(“条件”分支),方法800进行至步骤809,在此可以将当前命令的vid与运行命令状态表进行比较。在一些实施例中,调度器可将命令的vid字段中的信息与运行命令状态表中的vid字段进行比较。
92.在步骤810,可以确定在运行命令状态表中是否存在匹配的同步命令。匹配的同步命令可以来自与当前命令相同的用户,并且可以被标记为最新的。例如,所述调度器(例如,所述调度器的控制器)可读取当前命令的vid字段,且将所述vid与所述运行命令状态表进行比较以确定是否存在具有相同vid且标记为最新(例如,设置了最新同步字段)的匹配同步命令。
93.如果存在匹配的同步命令(“是”分支),则在步骤811,可以将当前命令推送至与匹配的同步命令相对应的等待队列。例如,调度器可以将条件命令推送到与具有相同vid的匹配同步命令对应的等待队列中并标记为最新的。
94.如果不存在匹配的同步命令(“否”分支),在步骤812,可以确定在包含当前命令的虚拟队列的执行中是否存在错误。例如,该调度器(例如,该调度器的控制器)可以检查虚拟队列命令状态表以找到在包含当前命令(例如,具有相同的vid)的虚拟队列的状态字段(例如,一比特字段)中是否存在错误。
95.如果存在错误(“是”分支),则在步骤813,可以将当前命令作为无操作分配。例如,调度器(例如,调度器的控制器)可以将当前命令分配为无操作操作,并且将当前命令标记为故障。
96.如果不存在错误(“否”分支),在步骤814,可以更新运行命令状态表。例如,该调度器(例如,该调度器的控制器)可以利用当前命令的信息(例如,物理队列id、vid等)来更新运行命令状态表。
97.在步骤815,当前命令可以被分配到处理引擎。例如,该调度器(例如,该调度器的控制器)可以将当前命令分配到处理引擎(例如,图3的pe 306a、pe 306b、pe 306c或pe 306d,或图7的pe 706a、pe 706b、pe 706c或pe 706d)。
98.在一些实施例中,方法800可以包括:如果具有对应的等待队列的同步命令被成功地执行了,则从该对应的等待队列中挑选命令,更新该运行命令状态表,并且将该命令分配至处理引擎。例如,在处理引擎上成功执行同步命令之后,该调度器(例如,该调度器的控制器)或这个处理引擎可以相应地更新用于同步命令的cmd字段。该调度器可以检查同步命令表,以找到该同步命令对应的任意等待队列。如果有对应的等待队列,调度器可以从对应的
等待队列中选取命令,用选取的命令的信息更新运行命令状态表,并将该命令分配给处理引擎。
99.在一些实施例中,该等待队列可以具有高于相应物理队列的更高优先级。同一物理队列对应的多个等待队列可以同时处于活跃状态,并且可以被轮循挑选和分配。
100.本公开的实施例可带来许多技术优势。例如,在一些实施例中,hapu可提供允许多个用户以细粒度级别共享hapu的命令调度机制。hapu的虚拟化可被提升。在一些实施例中,支持的用户数量可以非常大,同时仍然可以保证每个用户的服务质量(qos)。
101.本公开的一些实施例可以利用基于虚拟队列的概念并且调度粗粒度命令而不是细粒度指令以改进虚拟化的性能。
102.本公开的一些实施例可以解决或至少缓解作为虚拟化的主要挑战之一的多租户问题。例如,在一些实施例中,vid可附接至每个命令以在来自不同用户的命令被调度至处理引擎时移除来自不同用户的命令之间的错误依赖。在一些实施例中,可以引入等待队列以允许乱序命令分配来克服头部阻塞问题。在一些实施例中,可以在调度期间跟踪运行中命令的状态和等待队列的信息,并且可以维护命令的依赖链。
103.本公开的实施例可以应用于许多产品、环境和场景。例如,本公开的一些实施例可应用于ali-npu(例如,hanguang npu)、ali-cloud、ali pim-ai(用于ai的处理器内存储器)、ali-dpu(数据库加速单元)、ali-ai平台、gpu、tpu等。
104.实施例也可以使用以下条目来进一步描述:1.一种调度命令的方法,包括:挑选命令;确定所述命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令启用等待队列;以及将所述命令分配到处理引擎。2.如条目1所述的方法,其中,为所述命令启用等待队列包括:确定是否存在可用的等待队列;以及响应于存在可用的等待队列,为所述命令启用等待队列。3.如条目2所述的方法,进一步包括:响应于存在可用的等待队列,将所述命令的虚拟队列id(vid)与运行命令状态表进行比较,所述运行命令状态表包含每个所分配的命令的vid。4.如条目3所述的方法,其还包括:响应于存在可用的等待队列,确定在所述运行命令状态表中是否存在具有与所述命令相同的vid的另一同步命令;以及响应于所述运行命令状态表中存在具有相同vid的另一同步命令,清除所述运行命令状态表中所述另一同步命令的最新同步字段。5.如条目1至4中任一项所述的方法,其中,为所述命令启用等待队列包括:更新同步命令表,以反映所启用的等待队列对应于所述命令。6.如条目1至5中任一项所述的方法,还包括:响应于所述命令被确定为同步命令,更新运行命令状态表。7.如条目1至6中任一项所述的方法,还包括:在运行命令状态表中为所述命令设置最新的同步字段。8.如条目1-7中任一项所述的方法,其还包括:响应于所述命令被确定为所述条件命令,将所述命令的vid与运行命令状态表进行比较,所述运行命令状态表包含每个所分配的命令的vid。
9.如条目8所述的方法,进一步包括:响应于所述命令被确定为条件命令,确定在运行命令状态表中是否存在具有相同vid并且同步字段被最新设置过的匹配同步命令;响应于所述运行命令状态表中存在所述匹配的同步命令,将所述条件命令推送至与所述匹配的同步命令对应的等待队列。10.如条目8所述的方法,其还包括:响应于所述命令被确定为所述条件命令,确定在所述运行命令状态表中是否存在具有相同vid并且同步字段被最新设置过的匹配同步命令;响应于所述运行命令状态表中没有匹配的同步命令,确定虚拟队列命令状态表中的状态字段是否指示错误;以及响应于所述状态字段被确定未指示错误,将所述命令分配到处理引擎。11.如条目10所述的方法,其还包括:响应于确定所述状态字段指示错误,将所述命令调度为无操作(no-op)操作。12.如条目10所述的方法,还包括:响应于运行命令状态表中不存在匹配的同步命令,更新运行命令状态表。13.如条目1-12中任一项所述的方法,其中,为所述命令启用所述等待队列包括:将所述等待队列的物理队列id设置为所述命令被挑选的物理队列的物理队列id。14.如条目1至13中任一项所述的方法,进一步包括:响应于具有对应的等待队列的同步命令被成功执行,从所述对应的等待队列中选取第二命令;更新运行命令状态表;以及将所述第二命令分配到处理引擎。15.一种异构加速处理单元(hapu),包括:用于存储命令的一个或多个物理队列;用于存储命令的一个或多个等待队列;被配置为执行命令的一个或多个处理引擎;与所述一个或多个物理队列、所述一个或多个等待队列和所述一个或多个处理引擎可通信地配合设置的调度器,所述调度器被配置为:从所述一个或多个物理队列中的物理队列中挑选命令;确定所述命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令启用所述一个或多个等待队列中的等待队列;以及将所述命令分配给所述一个或多个处理引擎中的处理引擎。16.如条目15所述的hapu,其中,所述调度器被配置为:确定在所述一个或多个等待队列中是否存在可用的等待队列;以及响应于存在可用的等待队列,为所述命令启用所述可用的等待队列。17.如条目16所述的hapu,其中,调度器被配置为:响应于存在可用的等待队列,将所述命令的vid与运行命令状态表进行比较,所述运行命令状态表包含每个所分配的命令的vid。18.如条目17所述的hapu,其中,所述调度器被配置为:响应于存在可用的等待队列,确定所述运行命令状态表中是否存在具有与所述命令相同的vid的另一同步命令;以及响应于所述运行命令状态表中存在具有相同vid的另一同步命令,清除所述运行命令状态表中所述另一同步命令的最新同步字段。19.如条目15-18中任一项所述的hapu,其中,所述调度器被配置为:更新同步命令表以反映被启用的等待队列对应于所述命令。20.如条目15-19中任一项所述的hapu,其中,所述调度器被配置为:响应于所述命令被确定为所述同步命令,更新运行命令状态表。
21.如条目15-20中任一项所述的hapu,其中,所述调度器被配置为:在所述运行命令状态表中为所述命令设置最新同步字段。22.如条目15-21中任一项所述的hapu,其中,所述调度器被配置为:响应于所述命令被确定为所述条件命令,将所述命令的vid与运行命令状态表进行比较,所述运行命令状态表包含每个所分配的命令的vid。23.如条目22所述的hapu,其中,所述调度器被配置为:响应于所述命令被确定为所述条件命令,确定所述运行命令状态表中是否存在具有相同vid并且同步字段被设置为最新的匹配同步命令;响应于所述运行命令状态表中存在所述匹配的同步命令,将所述条件命令推送至与所述匹配的同步命令对应的等待队列。24.如条目23所述的hapu,其中,调度器被配置为:响应于运行命令状态表中不存在匹配的同步命令,确定虚拟队列命令状态表中的状态字段是否指示错误;以及响应于所述状态字段被确定未指示错误,将所述命令分配给所述一个或多个处理引擎中的处理引擎。25.如条目24所述的hapu,其中,所述调度器被配置为:响应于确定所述状态字段指示错误,将所述命令分配为无操作(no-op)操作。26.如条目23所述的hapu,其中,调度器被配置为:响应于运行命令状态表中不存在匹配的同步命令,更新运行命令状态表。27.如条目15-26中任一项所述的hapu,其中,所述调度器被配置为:将所述启用的等待队列的物理队列id设定为所述命令被挑选的所述物理队列的物理队列id。28.如条目15-27中任一项所述的hapu,其中,所述调度器被配置为:响应于具有对应的等待队列的同步命令被成功执行,从所述对应的等待队列中选取第二命令;更新运行命令状态表;以及将所述第二命令分配给所述一个或多个处理引擎中的处理引擎。29.如条目15-28中任一项所述的hapu,其中,所述调度器包括:命令解码器,所述命令解码器被配置用来解码命令;存储器,所述存储器用于存储数据和表;控制器,所述控制器与所述命令解码器和所述存储器可通信地配合设置并且被配置为调度来自所述一个或多个物理队列和一个或多个等待队列的命令。30.如条目15-29中任一项所述的hapu,其中,所述一个或多个处理引擎被配置为:为已分配的命令更新命令状态。31.一种终端,包括:主机单元;以及与所述主机单元可通信地配合设置的异构加速处理单元(hapu),包括:用于存储命令的一个或多个物理队列;用于存储命令的一个或多个等待队列;被配置为执行命令的一个或多个处理引擎;与所述一个或多个物理队列、所述一个或多个等待队列以及所述一个或多个处理引擎可通信地配合设置的调度器,所述调度器被配置为:从所述一个或多个物理队列中的物理队列中挑选命令;确定所述命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令启用所述一个或多个等待队列中的等待队列;以及将所述命令分配给所述一个或多个处理引擎中的处理引擎。32.一种存储指令集的非瞬态计算机可读存储介质,所述指令集可被一个或多个处理装置执行以使异构计算单元hcu执行一种方法,所述方法包括:挑选命令;确定所述命令是同步命令还是条件命令;响应于所述命令被确定为所述同步命令,为所述命令启用等
待队列;以及将所述命令分配到处理引擎。33.如条目32所述的非瞬态计算机可读存储介质,其中,为所述命令启用等待队列包括:确定是否存在可用的等待队列;以及响应于存在可用的等待队列,为所述命令启用所述等待队列。34.如条目33所述的非瞬态计算机可读存储介质,其中,所述方法进一步包括:响应于存在可用的等待队列,将所述命令的vid与运行命令状态表进行比较,所述运行命令状态表包含每个所分配的命令的vid。35.如条目34所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于存在可用的等待队列,确定在所述运行命令状态表中是否存在具有与所述命令相同的vid的另一同步命令;以及响应于所述运行命令状态表中存在具有相同vid的另一同步命令,清除所述运行命令状态表中所述另一同步命令的最新同步字段。36.如条目32-35中任一条款所述的非瞬态计算机可读存储介质,其中,为所述命令启用等待队列包括:更新同步命令表以反映被启用的等待队列对应于所述命令。37.如条目32-36中任一项所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于所述命令被确定为所述同步命令,更新运行命令状态表。38.如条目32-37中任一项所述的非瞬态计算机可读存储介质,其中,所述方法还包括:为所述运行命令状态表中的所述命令设置最新的同步字段。39.如条目32-38中任一条款所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于所述命令被确定为所述条件命令,将所述命令的vid与运行命令状态表相比较,所述运行命令状态表包含用于每个所分配的命令的vid。40.如条目39所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于所述命令被确定为所述条件命令,确定在所述运行命令状态表中是否存在具有相同vid并且同步字段被设置为最新的匹配同步命令;响应于所述运行命令状态表中存在所述匹配的同步命令,将所述条件命令推送至与所述匹配的同步命令对应的等待队列。41.如条目39所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于所述命令被确定为所述条件命令,确定在所述运行命令状态表中是否存在具有相同vid并且同步字段被设置为最新的匹配同步命令;响应于所述运行命令状态表中没有匹配的同步命令,确定虚拟队列命令状态表中的状态字段是否指示错误;以及响应于所述状态字段被确定未指示错误,将所述命令分配到处理引擎。42.如条目41所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于确定所述状态字段指示错误,将所述命令分配为无操作(no-op_操作。43.如条目41所述的非瞬态计算机可读存储介质,其中,所述方法还包括:响应于所述运行命令状态表中不存在匹配的同步命令,更新运行命令状态表。44.如条目32-43中任一项所述的非瞬态计算机可读存储介质,其中,为所述命令启用等待队列包括:将所述等待队列的物理队列id设置为所述命令被挑选的物理队列的物理队列id。45.如条目32-44中任一项所述的非瞬态计算机可读存储介质,其中,所述方法进一步包括:在具有对应的等待队列的同步命令被成功执行,从所述对应的等待队列中选取第二命令;更新运行命令状态表;以及将所述第二命令分配到处理引擎。
105.在此所描述的不同示例性实施例是以方法步骤或过程的一般上下文形式描述的,这些方法步骤或过程一方面可以由计算机程序产品来实施,这些计算机程序产品体现在计算机可读介质中,包括计算机可执行指令(如程序代码),这些可执行指令由在联网环境中的计算机执行。计算机可读介质可以包括可移除和不可移除存储设备,包括但不限于只读存储器(rom)、随机存取存储器(ram)、致密盘(cd)、数字通用盘(dvd)等。通常,程序模块可包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。计算机可执行指令、相关联的数据结构和程序模块表示用于执行本文公开方法的步骤的程序代码的示例。这样的可执行指令或关联数据结构的特定序列代表用于实现在这样的步骤或过程中描述的功能所对应动作的示例。
106.出于说明的目而提供了前述描述。它不是穷举的并且不限于所公开的特别形式或实施例。通过对本公开的实施例的说明书和实施的考虑,对所述实施例的修改和调整将是显而易见的。例如,所描述的实现方式包括硬件,但与本公开一致的系统和方法可用硬件和软件来实现。此外,虽然某些部件已经被描述为彼此耦接,但是这样的部件可以彼此集成或者以任何合适的方式分布。
107.此外,虽然在此已经描述了示例性实施例,但范围包括任一和所有的实施例,所述任一和所有的实施例具有基于本公开的等同元件、修改、省略、组合(例如,跨不同实施例的方面的)、适配或改变。权利要求中的元件应基于权利要求中采用的语言广义地解释,而不限于本说明书中或在本技术的执行期间描述的举例,这些举例应被解释为非排他性的。进一步的,所公开方法的步骤可以任何方式修改,包括重新排列步骤和/或插入或删除步骤。
108.本公开的特性和优点从详细说明中是显而易见的,因此,所附权利要求应覆盖落入本公开的真实精髓和范围内的所有系统和方法。如本文所使用的,不定冠词“a”和“an”是指“一个或多个”。进一步地,由于许多修改和变化将从研究本公开中容易地发生,因此并不期望将本公开限于所示出和描述的确切构造和操作,并且因此,可以诉诸所有合适的修改和等同物,均落入本公开的范围内。
109.如在此使用的,除非另外确切地陈述,否则术语“或”涵盖所有可能的组合,除非不可行。例如,如果陈述组件可以包括a或b,那么,除非另外特别陈述或不可行,该组件可以包括a、或b、或a和b。作为第二示例,如果陈述组件可包括a、b或c,那么除非特别另外陈述或不可行,否则组件可包括a、或b、或c、或a和b、或a和c、或b和c、或a和b和c。
110.通过参考在此公开的实施例的说明书和实施,其他实施例将是显而易见的。说明书和实施例旨在仅被认为是示例,本公开的实施例的真实范围和精神由所附权利要求指明。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献