用于在非均匀计算装置中重排序的方法和设备与流程

文档序号:16595909发布日期:2019-01-14 19:38阅读:173来源:国知局
用于在非均匀计算装置中重排序的方法和设备与流程



背景技术:

诸如片上系统(soc)之类的数据处理系统可以包含多个处理器主机、多个数据缓存和共享数据资源。多个主机通常具有相同或至少相似的处理能力,因此这种系统可以被称为均匀计算装置(uniformcomputedevice)。从共享数据资源中取回要处理的数据,并将其向上移动到最高级别的缓存(级别1或l1)以进行处理。处理结果被向下移动到最低级别的缓存,并且然后存储在共享数据资源中。这种方法的结果是,当所需数据不可用并且必须从共享数据资源或较低级别的缓存取回时,处理被延迟。

替代的方法是添加“存储器中处理”(processing-in-memory)元件,也被称为“近存储器计算”(compute-near-memory)元件等。在该方法中,逻辑元件和存储器元件(诸如动态随机存取存储器(dram))被集成在公共集成电路中。逻辑元素执行在执行之前创建的单独的pim指令。在每个主机旁添加了用于管理这些指令的特殊处理单元,并且在最后一级缓存旁添加了pim监测器。在这种方法中,pim指令的数据路径与正常指令分开。进而,这需要主机、监测器和特殊处理单元之间的重要通信。这种方法的显著缺点是它没有充分利用主机处理器提供的资源。例如,如果访问的数据具有较差的数据局部性(datalocality),则即使主机空闲并且存储器中的处理单元被完全占用,调度器也仍将发送pim指令以在存储器中(靠近)执行。此外,pim指令被自动执行,而无需推测。

附图说明

附图提供了视觉表示,这些视觉表示将用于更全面地描述各种代表性实施例,并且本领域技术人员可以使用这些视觉表示来更好地理解所公开的代表性实施例及其固有优点。在这些附图中,相同的附图标记标识对应的元素。

图1是根据各种代表性实施例的数据处理系统的框图。

图2是根据各种代表性实施例的数据处理系统的另一框图。

图3是根据各种代表性实施例的在数据处理系统中发布指令的方法的流程图。

图4是根据各种代表性实施例的在数据处理系统中发布指令的方法的流程图。

图5是根据各种代表性实施例的数据处理系统中的异常处理的方法的流程图。

图6是根据各种代表性实施例的数据处理系统中的推测指令执行的方法的流程图。

图7是根据各种代表性实施例的用于在数据处理系统中维持数据一致性的方法的流程图。

图8是根据各种代表性实施例的代码块的图形表示。

图9a和图9b是根据各种代表性实施例的修改的重排序缓冲器(rob)的图解表示。

图10是根据各种代表性实施例的非均匀计算机设备(nucd)的操作方法的流程图。

图11是根据各种代表性实施例的非均匀计算机设备(nucd)的另一操作方法的流程图。

图12是根据各种代表性实施例的用于在非均匀计算装置(nucd)中维持存储器顺序的方法的流程图。

具体实施方式

虽然本发明可以以许多不同的形式实现实施例,但是在附图中已示出并且将在本文中详细描述具体实施例,应理解本公开被认为是本发明的原理的示例而不是旨在将本发明限制于所示和所述的具体实施例。在下面的描述中,相同的附图标记用于描述附图的若干视图中的相同、相似或对应的部分。

在该文档中,诸如第一和第二、顶部和底部等的关系术语可以仅用于将一个实体或动作与另一个实体或动作区分开,而不必要求或暗示这些实体或动作之间的任何实际的这种关系或顺序。术语“包括”、“包含”或其任何其他变型旨在涵盖非排他性的包含,使得包括元素列表的过程、方法、物品或装置不仅包括那些元素,而是可以包括未明确列出的或者这种过程、方法、物品或装置固有的其他元素。在没有更多约束的情况下,前面带有“包括......”的元素不排除在包括该元素的过程、方法、物品或装置中存在另外的相同元素。

在整个文档中对“一个实施例”、“某些实施例”、“实施例”或类似术语的引用意味着结合该实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。因此,在整个说明书中出现这些短语或在各个地方不一定全部指代同一实施例。此外,特定特征、结构或特性可以在一个或多个实施例中以任何合适的方式组合而没有限制。

如本文所用的术语“或”应被解释为包含性的或意指任何一种或任何组合。因此,“a、b或c”表示“以下任何一项:a;b;c;a和b;a和c;b和c;a、b和c”。仅当元素、函数、步骤或动作的组合以某种方式固有地相互排斥时,才会出现该定义的例外情况。

为了说明的简单和清楚,可以在附图中重复附图标记以指示对应或类似的元素。阐述了许多细节以提供对本文所述实施例的理解。可以在没有这些细节的情况下实践实施例。在其他实例中,没有详细描述公知的方法、程序和组件,以避免使所述实施例难以理解。该描述不应被认为是限于本文所述的实施例的范围。

本公开涉及一种将近存储器处理单元集成到常规处理架构中的数据处理架构。近存储器处理单元作为一个或多个主机或主机处理器的远程功能单元进行操作。在与主机处理器同步之前,近存储器处理单元还可以与多个其他近存储器处理单元交互。与主机处理器和/或其他主机处理器的交互可以通过任何类型的通信链路(例如,共享存储器、总线、tcp、rdma)发生。与在各主机中计算能力均匀分布的多主机装置相比,所得到的装置在本文中被称为非均匀计算装置(nucd)。

根据各种实施例,数据处理架构包括多级存储器系统、一个或多个主机处理器,所述一个或多个主机处理器均具有第一处理单元以及一个或多个第二处理单元。一个或多个主机处理器在第一级(诸如存储器系统的l1缓存)处耦合到多级存储器系统。第二处理单元在第二级(诸如缓存或存储器)处耦合到存储器系统。主机处理器中的至少一个包括指令调度器,该指令调度器根据处理单元的可用性以及在执行指令时要使用的数据的位置选择地将指令路由到第一处理单元和第二处理单元中的至少一个。

根据各种实施例,提供了用于非均匀计算装置(nucd)的处理数据的方法,该非均匀计算装置包括多级存储器系统、具有耦合到存储器系统的第一级的第一处理单元的主机处理器以及在第二级处耦合到存储器系统的一个或多个第二处理单元(nucd模块)。nucd被配置为执行指令程序,该指令程序包括待执行的nucd块(包括nucd指令)以及描述执行nucd指令的要求的nucd标记。指令被顺序提取并解码。当解码的指令指示nucd块时,相关联的nucd标记被提取并解码。当没有一个能够满足要求的第二处理单元可用时,nucd标记被移除并且nucd指令块被发布到第一处理单元。当一个或多个能够满足要求的第二处理单元可用时,生成了指示nucd指令和输入数据的nucd执行分组,在指令队列中分配条目。当第二处理单元可用并且能够满足要求时,nucd执行分组被发布到第二处理单元,并且当第二处理单元不能满足要求时。

nucd块可以包括指示nucd块的开始的“开始段”指令、“nucd开始”指令或等效物。在一些实施例中,nucd块可以包括对nucd能力特定的指令。

缓存可以包括具有多个缓存的多级缓存,其中每个缓存具有第二处理单元。在该实施例中,nucd执行分组可以被同时发布到耦合到多级缓存的所有第二处理单元。

可以通过将nucd执行分组添加到第二处理单元的一个或多个指令队列来发布nucd执行分组。

nucd标记可以包括以下中的一个或多个:nucd指令中使用的编译输入寄存器、nucd指令中尚未展开的执行循环的指示符、计算要求的指示符和nucd块的大小。

当条目被添加到指令队列时,可以在重排序缓冲器中分配对应的条目以使得能够维持数据顺序。

nucd执行分组可以包括指向存储在指令缓存中的nucd指令或指令本身的指针。

根据各种实施例,提供了一种用于执行指令程序的数据处理设备。该数据处理设备包括:多级存储器系统,其具有第一级和一个或多个第二级;一个或多个主机处理器,其均具有第一处理单元和一个或多个第二处理单元。存储器系统的第一级可以包括可由第一处理单元访问的缓存(诸如l1缓存)。一个或多个第二处理单元中的每一个紧密耦合到存储器系统的对应第二级。存储器的第二级可以包括一个或多个缓存、一个或多个存储器或它们的组合。存储器控制器可以用于在存储器与一个或多个缓存之间移动数据。

一个或多个主机处理器中的主机处理器可以包括指令调度器,该指令调度器可操作以根据处理单元的可用性以及在执行指令时要使用的数据的位置选择性地将指令程序的指令路由到第一处理单元和第二处理单元中的至少一个。

存储器系统的第一级可以包括一个或多个一级(l1)缓存,每个一级缓存可由一个或多个主机处理器中的主机处理器访问。存储器系统的第二级可以包括最低级缓存,其中存储器控制器可操作以在最低级缓存与存储器或存储设备之间移动数据。

总线结构可以被包括在设备中以耦合在指令调度器与第一处理单元和第二处理单元之间。

数据处理设备还可以包括:指令存储器,该指令存储器能够存储用于第一处理单元和第二处理单元的指令程序的指令;指令提取电路,该指令提取电路可操作以从指令存储器提指令提取令;以及指令解码电路,该指令解码电路可操作以解码所提取的指令。指令调度器响应于解码的提指令提取令。

解码电路被配置为确定所提取的指令是否适合于由第一处理单元和第二处理单元中的一个或多个执行。

数据处理设备还可以包括可由第一处理单元和第二处理单元访问的缓冲器,诸如寄存器文件,以用于临时存储来自第一处理器和第二处理器的结果。

例如,第二级的存储器可以包括动态存储器、非易失性存储器或它们的组合。

可以提供分组生成器,该分组生成器产生包括用于发布到第一处理单元和第二处理单元中的一个或多个处理单元的nucd指令和关联输入值的分组。nucd指令可以在第一处理单元或第二处理单元上执行。其他指令可以仅在第一处理单元上执行。

数据处理设备可以包括至少一个发布队列,所述至少一个发布队列存储用于发布到第一处理单元和第二处理单元中的一个或多个处理单元的nucd指令。

描述该设备的硬件描述语言的指令可以存储并分布在非暂时性计算机可读介质上。

当并行操作多个处理单元时,提供了一种机制来维持数据一致性。根据各种实施例,提供了一种用于维持nucd中的数据一致性的方法。该方法包括将存储在第一数据位置处以便在缓存或存储器中进行操作的第一数据备份到第二数据位置并阻止对第一数据位置的访问。当第一数据被存储在缓存中并且处于修改状态时,将第一数据写入到存储器中。如果不是,则将第一数据的状态改变为修改状态。然后,可以由第一处理单元和第二处理单元中的一个或多个来操作第一数据位置以产生输出数据。

可以通过分配高速暂存存储器并将第一数据写入高速暂存存储器来备份第一数据。在一些实施例中,当由第一处理单元或第二处理单元操作第一数据位置时,在缓存中分配高速暂存存储器。具体而言,当第一数据被存储在多级缓存的第一级并且高速暂存存储器被分配在处于不高于第一级的级的多层缓存中时,对应于在其他缓存级的高速暂存存储器的任何行都可能是无效的。

高速暂存存储器可以分配在存储器中或不同的存储器中。

当输出数据有效时,存储输出数据,取消阻止对第一数据位置的访问,并启用对高速暂存存储器的访问。此外,当输出数据有效时,存储输出数据并且取消阻止对第一数据位置的访问。

响应于来自主机处理器的指示错误预测的程序分支的信号或者响应于产生第二数据的第一处理单元和第二处理单元中的处理单元呈现的异常,可以确定输出数据无效。可以用信号通知主机处理器以指示异常。

当确定输出数据无效时,可以将备份的第一数据从第二数据位置复制到第一数据位置。如果第一数据位置在缓存中,则存储在第一数据位置处的数据可以是无效的。

当第一数据位置在缓存中时,可以由缓存控制器阻止对第一数据位置的访问。对于多级包容型缓存,缓存控制器阻止访问保存第一数据副本的多级缓存的所有级。

在各种实施例中,提供了一种用于执行指令程序的数据处理设备。该数据处理设备包括多级存储器系统、一个或多个主机处理器,所述一个或多个主机处理器均具有第一处理单元和一个或多个第二处理单元。存储器系统的第一级可由一个或多个主机处理器中的主机处理器访问。一个或多个第二处理单元紧密耦合到可以包括缓存存储器、非缓存存储器或它们的组合的存储器系统的第二级。该设备还包括:存储器控制器,该存储器控制器可操作以在存储器系统的非缓存存储器与一个或多个缓存之间移动数据;重排序缓冲器,该重排序缓冲器可操作以在执行指令程序期间维持数据顺序;指令调度器,该指令调度器可操作以通过重排序缓冲器将指令程序的指令选择性地路由到第一处理单元和第二处理单元中的一个或多个;以及控制逻辑,该控制逻辑用于阻止除所选处理单元之外的处理单元对第一处理单元和第二处理单元中的所选处理单元正在使用的一个或多个缓存和存储器的数据位置的访问,其中访问被阻止,直到从重排序缓冲器释放与行相关联的数据。

控制逻辑可以是例如缓存控制器,该缓存控制器阻止对第一处理单元和第二处理单元中的一个正在使用的缓存的行的访问,直到从重排序缓冲器释放与行相关联的数据。缓存控制器可以响应来自重排序缓冲器的信号。

可以提供高速暂存存储器,以用于存储由第一处理单元和第二处理单元的处理单元正在使用的一个或多个缓存和存储器的数据位置处存储的数据的备份副本。

根据各种另外的实施例,提供了一种用于在包括多级存储器系统的nucd中维持数据一致性的方法。由具有第一处理单元的主机处理器可访问存储器系统的第一级的缓存。存储器系统的第二级可以包括一个或多个缓存、存储器或它们的组合。一个或多个第二处理单元紧密耦合到第二存储器系统。该方法包括:通过第一控制器的提取电路从指令存储器提指令提取令块;确定在执行指令块期间要访问的存储器地址的范围;向存储器控制器发布存储器地址的范围;存储器控制器阻止对存储器地址的范围的访问,并且将指令块发布到第一处理单元和第二处理单元中的处理单元的指令队列。当与存储器地址的范围中的一个或多个存储器地址相关联的数据被存储在缓存中时,当数据处于修改状态并且存储在缓存中的数据状态被设置为异或时,存储在缓存中的数据被驱逐到存储器。执行指令块,并且在将指令块的结果提交到存储器之后,存储器控制器释放对存储器地址的范围的访问。

在执行指令块期间要访问的存储器地址的范围可以取决于一个或多个寄存器值。在这种情况下,确定在执行指令块期间要访问的存储器地址的范围包括确定一个或多个寄存器值是否准备好。

可以通过使用重排序缓冲器来维持数据顺序,该重排序缓冲器依次存储单个指令的条目和指令块的条目。指令块的条目可以包括:指令块的起始地址;指令块的结束地址;向指令块提供输入值的多个寄存器的寄存器的指示符;以及用于保持由执行指令块产生的输出值的多个寄存器的寄存器的指示符。指令不会被释放到处理单元,直到由重排序缓冲器指示的所有输入都准备就绪。例如,指令块的结束地址可以是指令块的起始地址的地址或偏移量。

重排序缓冲器可以被配置为两个重排序缓冲器。第一重排序缓冲器存储单个指令的条目,并且第二重排序缓冲器存储指令块的条目。第一重排序缓冲器还存储指向第二重排序缓冲器中的条目的指针,以便即使在无序执行指令时也可以保持数据顺序。

当指令被路由到第一处理器时,调度器将单个指令的条目写为第一重排序缓冲器的第一条目,并且当指令块被路由到与第二重排序缓冲器相关联的处理单元时,将指令块的条目写入第二重排序缓冲器。另外,当指令块被路由到与第二重排序缓冲器相关联的处理单元时,调度器将指向第二重排序缓冲器中的条目的指针写为第一重排序缓冲器的第二条目。

重命名单元用于在将对应条目写入第一重排序缓冲器或将条目写入第一重排序缓冲器和第二重排序缓冲器两者之前用一个或多个寄存器位置替换指令程序的指令中的一个或多个寄存器名称。

向指令块提供输入值的寄存器的指示符可以包括第一位图,并且用于保持由执行指令块产生的输出值的寄存器的指示符可以包括第二位图。

当第一重排序缓冲器和第二重排序缓冲器所指示的所有输入都准备就绪时,指令被释放到指令队列。

可以通过存储在非暂时性计算机可读介质上的硬件描述语言的指令来描述数据处理设备。指令可以用于在制造期间配置对应的硬件,或者可以与可重新配置的硬件(诸如现场可编程门阵列(fpga))一起使用。

根据各种实施例,提供了一种用于维持非均匀计算装置(nucd)中的顺序的方法,该非均匀计算装置包括多级存储器系统、主机处理器,该主机处理器具有第一处理单元和一个或多个第二处理单元。主机处理器耦合到存储器系统的第一级处的缓存,而一个或多个第二处理单元紧密耦合到在第二级处的存储器系统。存储器系统的第二级可以包括一个或多个缓存、存储器或它们的组合。通过以下方式维持顺序:选择第一处理单元和第二处理单元中的处理单元来执行包括指令程序的一个或多个指令的指令块;当指令块包括被选择由第一处理单元执行的指令时,将单个指令的条目写入重排序缓冲器;以及当指令块被选择用于由第二处理单元中的处理单元执行时,将指令块的条目写入重排序缓冲器。如上所述,指令块的条目可以包括指令块的起始地址、指令块的结束地址、向指令块提供输入值的主机处理器的寄存器的指示符、以及被指定用于保持由执行指令块产生的输出值的主机处理器的寄存器的指示符。

重排序缓冲器可以包括第一重排序缓冲器和第二重排序缓冲器,在这种情况下,通过将单个指令的条目写入重排序缓冲器来维持数据顺序包括将条目写入第一重排序缓冲器。而将指令块的条目写入重排序缓冲器包括将条目写入第二重排序缓冲器并将第二重排序缓冲器中的条目指针写为第一重排序缓冲器的条目。另外,可以在重排序缓冲器中设置指示符位的值,以指示对应的条目是否包括用于单个指令的条目或用于指令块的条目。

仅当来自指令块的所有输出值都准备就绪时,才可以提交输出值。然后可以移除对应于指令块的重排序缓冲器中的条目。如果呈现异常或错误预测了指令分支,则不会提交输出值。

可以从指令程序的“nucd开始”指令确定指令块的起始地址,并且可以从“nucd结束”或“段结束”指令确定指令块的结束地址。可以从指令程序中的一个或多个标记指令确定向指令块提供输入值的主机处理的寄存器的指示符和被指定用于保持由执行指令块产生的输出值的主机处理器的寄存器的指示符。

下面参考附图更详细地描述本公开。

图1是根据各种代表性实施例的数据处理系统100的框图。图1示出了提供用于存储数据和指令的存储器阵列的片上系统(soc)102和多个存储器104。在所示的示例中,存储器104经由总线106耦合到soc102。存储器可以是非缓存动态存储器,诸如动态随机存取存储器(dram)、非易失性存储器或其他类型的存储器。非易失性存储器的示例包括在固态闪存存储器、存储级存储器(scm)和硬盘驱动器(hdd)上存储持久数据的固态驱动器(ssd)。可以通过混合存储器立方体(hmc)接口、高带宽存储器(hbm)接口或其他接口来访问存储器。

soc102包括一个或多个主机处理器108,每个主机处理器耦合到一级(l1)缓存110。l1缓存110可以包含用于主机处理器108的数据和指令。在该示例中,l1缓存由共享二级(l2)或二级缓存112提供服务。存储器控制114将共享l2缓存耦合到存储器104,并允许从存储器的存储器阵列加载数据和指令并将其存储到存储器的存储器阵列。存储器控制器114可操作以在存储器与一个或多个缓存之间移动数据。缓存可以是包容性或排他性的。

其他实施例可以利用具有更少或更多缓存级别的不同缓存和处理器架构。

缓存110、112和存储器104一起形成多级存储器系统。在不脱离本公开的情况下,可以包括附加装置和缓存级。在所示实施例中,多级存储器系统的第一级包括l1缓存110,而第二级包括l2缓存112和存储器104。在一些实施例中,存储器系统的第一级和第二级可以重叠,使得一个或多个l1缓存例如都在第一级和第二级中。

主机处理器108包括第一处理单元,该第一处理单元包括用于对数据执行逻辑和算术运算的电路。

根据本公开的第一方面,缓存110和112中的一些或全部以及存储器中的一些或全部包括第二处理单元。这些处理单元具有其与多级存储器系统的第二级中的关联存储器的高速连接,并且被设计为对存储在这些存储器中的数据进行操作。第二处理单元的能力可以与第一处理单元的能力不同,因此,第二处理单元及其关联的存储器被称为nucd模块,因为处理不是均匀地分布在数据处理系统中的。在主机处理器108、一个或多个缓存110和112和存储器控制器114之间提供通信路径116。在图1中所示的实施例中,通信路径包括高速总线,例如arm有限公司的高级微控制器总线架构(ambatm)规范中所描述的。

根据本公开的另一方面,与将在主机处理器上执行的标准指令一起提供适合于在nucd模块上执行的指令。nucd指令可以与主机处理器指令集架构(isa)兼容,或者与为特定nucd模块设计的单独指令兼容。在一个实施例中,特定指令在指令程序内提供标记,以识别可以在nucd模块上执行的指令块以及执行指令块需要什么功能资源。提供调度器电路以在操作期间确定应该使用哪个nucd模块来执行指令块。相比于先前的公开内容,当没有nucd模块可用时,可以在主机处理器上执行nucd指令块。

由于由不同处理元件并行执行指令,可以不按顺序执行处理,因此提供了一种机制以确保以正确的顺序使用结果。

nucd块的并发执行简化了将无序处理添加到另外的有序或顺序处理器,并允许处理装置位于靠近存储数据的位置。nucd计算可以由本地主机处理器的调度器或非本地主机启动。可以通过公共总线或其他通信手段来实现启动。nucd方法减少了能量和与数据移动相关联的延迟——可能会降低计算所需的能量,同时提高性能。

还提供了用于处理位于soc本身(近缓存)和片外(近存储器,诸如dram存储器等)上的nucd模块的块级异常的一种机制。

还提供了用于向nucd发送信号并提供指令的机制,以用于实现指令的并行执行,从而维持数据一致性并且在nucd执行/回写之间同步。

对于本领域普通技术人员来说显而易见的是,其他处理单元(诸如图形处理单元(gpu)、数字信号处理器(dsp)、现场可编程门阵列(fpga)或专用集成电路(asic)器件)可以被包括在系统100中。注意,为了清楚起见,在图1和本文的其他图中省略了soc的许多共同的元件,诸如定时器、地址生成器和加载/存储装置。

图2是根据各种代表性实施例的数据处理系统100的另一框图。图2示出了系统的示例的更详细的图示,其示出了主机单处理器108、单个l1缓存110和单个存储器112。同样,为了清楚起见,在图2中省略了一些元件。

参考图2,由主机处理器108的提取电路204按顺序取回存储在指令存储器202或其他指令存储中的指令。例如,提取电路204可以将指令引入指令寄存器(保存指令以便可以对其解码的电路)。例如,指令存储器202可以是l1缓存的一部分或单独的指令缓存。每个指令由解码电路206解码并传递给nucd调度器208。解码电路206确定在指令中编码哪个操作码/功能,并确定哪些存储器地址包含操作数。

如果可以在nucd模块(例如,110、112、104)上执行解码指令块,则调度器208经由通信路径116与nucd模块通信以确定它们执行指令的能力。在所示的示例中,经由存储器控制器114启用与存储器104的通信,该存储器控制器114经由总线106寻址存储器104中的映射寄存器的存储器。此外,在该示例中,缓存nucd模块110包括与l1缓存行212相关联的第二处理单元210,缓存nucd模块112包括与l2缓存线216相关联的另一第二处理单元214,并且存储器nucd模块104包括与存储器阵列220相关联的又一第二处理单元218。具体而言,调度器可以确定(a)处理单元是否繁忙以及(b)所需数据是否可能存在于相关联的缓存中。

nucd调度器208被放置在解码电路206之后,并且动态地决定执行潜在nucd指令的位置。潜在的nucd指令块表现为标记的正常指令的序列,如下面参考图8所述的。nucd调度器208可以例如采用监测队列占用或者使用机器学习或统计驱动的方法(诸如强化学习)的基于简单工作负载的调度器的形式。然而,可以使用能够产生调度nucd块的决定的任何机制。

nucd调度器208基于所选择的标准决定将nucd块发布到缓存nucd模块(例如210、214)或片外nucd模块(例如218),或者将块作为“正常”指令块发出以由主机处理器的处理单元226执行。

重命名单元232用寄存器文件228中的物理寄存器位置替换解码指令中的架构寄存器名称。可以使用输出寄存器位置,以便在无序执行指令时保持数据顺序。对于nucc指令块,仅重命名输入和输出寄存器名称(例如,在nude标记中标识)。

当没有nucd模块可用时(例如,当所有nucd模块都繁忙时),可以使用交换机222和路径224将具有重命名的寄存器的nucd指令块路由到主机处理器108的处理单元226以供执行。例如,由处理单元226执行的加载和存储操作可以在l1缓存行212与寄存器文件228之间移动数据,或者可以对存储在寄存器文件228中的数据执行算术和逻辑操作。

指令被放置在一个发布队列236中,以便在操作数变得可用时分派到处理器226。在一个实施例中,一个发布队列用于处理器226,另一个用于片上nucd模块(例如210和214),而又一个用于片外nucd模块(例如218)。操作结果可以直接存储回寄存器文件228或重排序缓冲器234。

当nucd可用时,交换机222将nucd指令块路由到分组生成器230,用于路由到一个或多个nucd。分组生成器230利用nucd指令将来自寄存器文件228的所需输入打包。当向缓存的处理单元发布nucd指令时,有两种操作模式。第一操作模式是将包含要执行的指令的分组发布到处理单元。第二操作模式是利用缓存中存在的指令,并仅发送指向这些指令的指针(诸如程序计数器值和长度值)。如果实施方式是利用已经存在于缓存中的指令,则调度器必须知道在向nucd模块发布指令之前这是否是实际情况。否则,指令将作为分组从调度器发布。

解码的指令可以使用寄存器文件228中的寄存器来存储作为未来操作的操作数的中间结果。使用重排序缓冲器234来维持结果的顺序次序。对应的操作被存储在一个或多个发布队列236中。在一个实施例中,当重命名的操作数变为已知(从nucd处理单元或主机处理单元返回)时,在寄存器文件中更新对应的寄存器,并更新指令队列中的对应操作数。在操作中,仅将那些操作数已知的指令发布到nucd模块。发布到nucd模块的操作的结果可以经由路径116返回。

下面参考图9更详细地讨论重排序缓冲器234。缓冲器记录使用结果的顺序,以便例如以所需顺序将值写入寄存器文件或存储器。这样可以实现结果的无序和并行计算,并且还可以实现推测性执行和异常处理。

上述nucd架构将nucd指令执行无缝地集成到常规系统中。存储器中的处理单元(例如210、214和218)被认为是主机或主机处理器的远程功能单元,并且可能潜在地与其他处理器共享(在l2/l3和片外nuc装置的情况下)。nucd指令调度器208动态地决定执行潜在指令的位置(基于下面描述的标记)。如果绕过nucd执行,则块被简单地发布为标记被剥离的常规本地指令流,否则该块由分组生成器230打包并置于重排序缓冲器234的分区或专用nucd队列结构中(用于排序、投机处理)。在所公开的架构中,nucd指令共享用于指令的主机数据路径硬件资源。这利用了常规的主机设计来支持推测性执行,并支持块级异常。nucd块的推测执行(如下所述)增加了系统的有效指令级并行性(ilp)和存储器级并行性(mlp)。

标准重排序缓冲器和加载/存储过程(诸如,将nucd模块访问的存储器位置的标记插入到加载/存储队列中)负责同步,就好像另一个处理器保持所需的缓存行一样。

可以结合单独的结构来处理不是在标准重排序缓冲器中找到的nucd块所需的附加数据。在一个实施例中,重排序缓冲器被修改以容纳附加信息。在另一个实施例中,包括单独的nucd/分区重排序缓冲器以增强标准重排序缓冲器。下面参考图9更详细地讨论这一点。

如果在nucd块之外的后续指令需要nucd模块正在操作的数据,则为重排序缓冲器234中的nucd块分配条目。处理器必须围绕此负载进行排序,就像任何其他停止的负载一样。对于nucd块之外的后续指令直接需要一个或多个nucd块输出的情况,重排序缓冲器的分区或单独的nucd队列维持从nucd块返回的值,直到已经发布需要它们的指令为止(假设这些返回值对于某些实施方式不被存储器支持),并且更新nucd块的回写/释放状态,同样是为了保持顺序一致性。

根据实施方式,nucd块内的代码可以在存储器访问中受限制,也可以不受限制。对于有界nucd区域,其中包含的循环要么静态展开,要么动态展开(即,在分派nucd块之前完全解析循环界限)。发布用于缓存nucd模块的块可能需要边界,因为目标是使计算更接近数据,而不是为存储器系统创建更多的存储器消耗来维护。提前知道数据位置允许将nucd块的执行置于数据实际驻留的那些缓存中,而无需评估块以找出地址。对于片外nucd处理单元,诸如处理单元218,有几种选择。首先,输入/输出存储器管理单元(iommu)可以用于查找非连续存储器驻留页面的物理地址。其次,可以从主机处理单元(cpu)上(临时页面锁定)的虚拟地址预先计算物理地址,然后对它们进行操作。再次,片外nucd可以限于单页操作(将在主机cpu上解析)。最后,一些系统可能根本不需要地址转换。

图3是根据各种代表性实施例的数据处理系统的操作方法的流程图300。具体而言,图3涉及在数据处理系统中发布指令的方法。在开始框302之后,从指令存储器提指令提取令并在框304处解码。在判定框306,确定这是否是nucd指令。在一个实施例中,nucd指令块包括在主机处理器指令中并由nucd标记指示。nucd标记在下面更详细地讨论。如果指令不是nucd指令块的部分,如判定框306的否定分支所示的,则由主机处理器的处理单元在标准路径中的块308处执行指令。如果指令指示nucd块的开始,如判定框308的肯定分支所示的,则流程继续到判定框310。然后,调度器确定适当的nucd模块是否可用。例如,可以查询nucd模块以确定它们是否繁忙。如果没有nucd模块可用,如判定框310的否定分支所示的,则由主机处理器的处理单元在标准路径中的框308处执行指令。否则,流程继续到框312,其中将条目分配到重排序缓冲器和/或nucd队列中。如判定框314的否定分支所示,指令块保留在队列中,直到所有所需输入值都准备好。在输入值准备好时,在块316处确定是否应该将nucd指令块(在块318)引导到与片外存储器相关联的处理单元或(在块320)引导到片上缓存的处理单元。例如,该决定可取决于处理单元的可用性以及所需数据是否存储在缓存行中。当被发布到片上缓存的处理单元时,可以在框320处将指令块同时发布到每个缓存级并且将其置于缓存指令队列中。在框322处,从缓存指令队列中弹出一条指令,如果缓存级的处理单元是可用的,如判定框324的肯定分支所示的,则在判定框326进行检查以确定所需数据是否在缓存中(称为“缓存命中”)。如果不是,或者如果处理单元不可用,则可以在框328将指令返回到调度器。如果处理单元可用并且缓存中存在命中,如判定框326的肯定分支所示的,则流程继续到判定框330。在框332处,当缓存是包容性缓存时,将当前缓存级n不可用的行重新发布到下一级缓存,缓存级n+1(如果存在的话)。否则,在框334处,当缓存是排他性缓存时,如判定框330的否定分支所示,在当前缓存中执行指令。

在这种方法中,不使用指令集架构(isa)的扩展,而是使用标准isa,其中适合在nucd模块上执行的二进制指令流的段由用户(手动)、编译器(静态)或硬件(动态)标记。在另一实施例中,特定架构扩展用于指定预定义的nucd操作。例如,可以提供用于矩阵乘法或点积的自定义指令(custominstruction)。

例如,在nucd代码由标记或标签指定的实施例中,nucd“开始段”指令对代码块的长度进行编码(从此点开始称为nucd块)并编码必要的能力(即,浮点,仅整数等)。代码段中的标准isa命令将在发布到主机(本地)功能单元时按原样执行。nucd指令块伴随有nucd标记或头文件,如下面参考图8更详细地讨论的。当没有nucd模块可用时,调度器将剥离标记,以便能够正常执行块。在nucd模块上进行调度时,代码将在nucd模块上执行。

可以推测性地执行没有任何存储操作的nucd块,并且一旦可用,一个或多个结果将返回到主机处理器。具有存储操作的nucd指令还可以推测性地加载操作数并回滚任何操作而不触及工作存储器,如下所述。顺序一致性由重排序缓冲器或专用nucd队列维护,因为存储器仅在从重排序缓冲器释放时提交。对于发布到缓存的操作,通过将缓存行放弃到处理器或通过将点值直接写回重排序缓冲器来释放结果。对于发布到片外nucd模块的操作,一旦从重排序缓冲器(rob)提交nucd块,结果可以存储在暂存器中,该暂存器被刷新到存储器。这类似于正常的存储指令路径。通过这种方式,可以从分支预测错误或异常中安全地恢复系统。当错误地预测分支时,重排序缓冲器可以在块中修改的数据被错误地存储到主存储器中之前向nucd模块发送在错误的路径上压缩指令的信号。作为调度过程的部分,可以确定正在操作的数据范围。当缓存本身被直接用作暂存器时,它们无法通过设计超过其暂存器空间。可能会超出片外nucd模块暂存器。然而,通过了解先验操作的数据范围,可以通过不发布将要执行此操作的nucd块来避免过度运行暂存器。这种限制可以通过包含存储器管理单元或者能够分配存储器以动态地扩展暂存器的片外存储器装置来克服。

任何nucd模块中的异常都可以在nucd块级简洁地处理,可能利用指针返回到发起异常的精确指令。

图4是根据各种代表性实施例的数据处理系统的片外nucd模块中的指令发布和异常处理的方法的流程图400。它还包括重排序和暂存器逻辑。作为片外问题路径的一部分,如果任何存储器驻留在缓存中,则这些行在nucd操作开始之前是无效的。在开始框402之后,如果片外nucd模块具有存储器管理单元(mmu),如判定框404的肯定分支所示的,则在框406处将指令块发送到片外nucd模块。如果片外nucd模块没有存储器管理单元(mmu),但是所需数据已经在存储器中,如判定框408的肯定分支所示的,则在框406将指令块发送到片外nucd模块。如果数据不在存储器中,则在框410处由操作系统或硬件尝试所需的页面加载。如果页面未被正确加载,如判定框412的否定分支所示的,则在框414处用发送页面错误的信号。否则,在框416处计算页面地址边界并与指令块打包在一起。然后在框406将完整包发送到片外nucd模块。在框418处执行指令块。如果呈现异常,如判定框420的肯定分支所示的,则在框422处将异常用信号发送给主机处理器并刷新暂存存储器。如果没有呈现异常,如判定框420的否定分支所示的,则nucd模块在框424处向重排序缓冲器(rob)发送操作完成的信号。同样在框424处,如果存储器可用,则nucd模块分配新的暂存器准备好接受新的指令块。在判定框426处,nucd模块等待直到重排序缓冲器发送nucd块处于正确顺序的信号。然后,如判定框426的肯定分支所示,在框428处,将暂存器的内容释放到主存储器。然后完成nucd块的处理。

图5是根据各种代表性实施例的数据处理系统的缓存nucd模块中的指令发布和异常处理的方法的流程图500。缓存nucd模块具有能够将缓存本身用作暂存器的优点,而在异常或无效的推测分支的情况下,片外nucd模块必须具有为暂存器预留的数据段或特殊存储器。

在图5中的开始框502之后,在框504处将nucd块发布到缓存nucd模块。如果缓存nucd模块不可用,或者如果所需数据不存在于缓存中,如判定框506的否定分支所示,在框508处,指令块被发送到片外nucd模块或返回到调度器。否则,如判决框506的肯定分支所示的,将指令块发布到缓存nucd模块。第一动作是确保所有操作的缓存行都处于备份状态(在存储器或更高级的缓存中,即,如果l2正在被操作,则可以将值写入l3而无需昂贵的写入存储器)。一旦创建此“备份”副本后,将阻止对这些行的访问。如果缓存行中的所需数据当前处于修改状态,如判定框510的肯定分支所示的,则在框512处将它们写回到存储器。在块514处将要操作的缓存行设置为“已修改”状态,以便使可以保存在其他缓存中的数据的副本无效。这可以使用缓存控制器按照与处理器写入新值的方式相同的方式来完成。如果nucd块已经与其他片上或片外nucd模块并行发布,如判定框516的肯定分支所示,则在框518处,将信号发送到对应的mmu,以阻止尝试在对应地址处的存储器的访问。然后可以操作缓存行中的数据,并且在框520处开始计算。一旦操作完成,在判定框522进行检查以确定是否已呈现异常(或被错误预测的分支)。如果没有呈现异常,如判定框522的否定分支所示,则在框524处,结果被返回到重排序缓冲器或nucd队列。缓存行的备份副本(即,缓存中的其他副本,而不是nucd操作的副本)可以用新值覆盖。如果呈现异常,如判定框522的肯定分支所示的,则nucd修改的行是无效的,此外,取决于备份副本存在的位置,可能发生两件事:nucd操作的行可以从缓存的不同级内的其他清除的行重新加载,或者如果缓存中不存在清除的副本,则查询存储器控制器以取回当前值,如框526所示。一旦恢复了缓存行,就在框528处向发起nucd块的主机发送异常的信号。另一个选项是如果包容/排他属性允许此定时,则使行无效并且通过请求未命中将备份副本带回缓存。这具有创建存储器事务的效果,该存储器事务是存储器中的检查点,并在发生错误(无效)时回滚。

如判定框522所示,以与异常类似的方式处理推测性执行(诸如分支预测)。当已经采用无效分支时,nucd操作的当前状态被无效并且恢复清除的预执行状态。

当nucd块被发送到片外存储器装置时,如框508所示,可以创建暂存存储器,使得呈现异常的nucd块的结果不被提交给存储器。异常路径仍处于块级别,并且异常将返回到块所源自的主机。尽管处于块级别,但是可以返回与nucd块的开始的偏移以指示精确的异常点。如上所述,异常路径取决于与主机的通信。不正确的分支预测取决于从重排序缓冲器发送信号。对于片外nucd模块,在提交到工作存储器之前使指令回滚所需的暂存器的深度也取决于从重排序缓冲器发送信号。

图6是根据各种代表性实施例的在数据处理系统中维持缓存和存储器一致性的方法的流程图600。该方法适用于片上(缓存)和片外(存储器)nucd模块。在开始框602之后,在框604处将nucd指令块发布到缓存nucd模块。如果所需数据不存在于缓存行中,如判定框606的否定分支所示的,则在框608处从主存储器请求数据,并且操作在框610处开始。从主存储器提取所需行的替代操作是仅仅将nucd块发布到存储器的nucd模块或将块返回到主机以进行处理。在框612处将数据备份在暂存器中,并且在确保备份副本可用之后,缓存控制器在框614处阻止行被操作(如果缓存是包容性的,则在所有级的缓存内)。可以实现这种阻止,就像处理器本身正在执行对该位置的写入一样。在缓存nucd模块中,缓存本身可以用于提供暂存存储器。当另一个处理器试图访问存储器时,它表现出处于修改状态,并且缓存控制器停止访问,直到nucd操作完成。

一旦操作完成,如判定框616的肯定分支所示,在判定框618进行检查以确定是否已呈现异常(或被错误预测的分支)。如果没有呈现异常,如判定框618的否定分支所示的,则在框620处,对重排序缓冲器或nucd队列发送信号。备份副本行(即,缓存中的其他副本,而不是nucd操作的副本)可以用新值覆盖。在框622处改变被操作的缓存行的状态以解锁行,并且可以将值写入存储器。如果呈现异常,如判定框618的肯定分支所示的,则在框624处理异常。

以这种方式,nucd存储器访问的一致性在很大程度上由当前缓存一致性机制维持。唯一的增加是阻止当前由nucd模块使用但尚未由rob/nucd队列释放的行所必需的控制逻辑。尝试访问nucd块使用的存储器是一种简单的写后读(raw)依赖性。一种解决方案是将请求发送到缓存,就像它已准备就绪一样(简化了重排序缓冲器结构的布局,并减少了nucd模块与处理器本身之间的流量),并阻挡在包含值的缓存,直到nucd模块释放该行(利用来自处理器的信号)。为了解决来自非本地处理器的依赖性,该过程类似。nucd模块使用的行处于“修改”(m)状态。缓存控制器阻止存储器访问,直到nucd模块完成计算,并且重排序缓冲器已发送存储器的释放的信号,以便维持结果的顺序一致性。在释放时,使用新值更新保持相同行的其他本地缓存级别,并且从那里标准缓存状态机应用于从m状态的转换。

为了使异常和推测执行成为可能,每个nucd执行应该是可逆的。在片外nucd模块(未示出)中,暂存器只是物理存储器的保留段。为了通过尽可能多地重用现有硬件来实现这一点,缓存行本身可以用作缓存nucd模块的缓存存储器,如图7所示的。

图7是根据各种代表性实施例的用于将缓存行本身用作暂存存储器的方法的流程图700。在所示的实施例中,总是恰好有两条有效线:由nucd模块操作的有效线以及驻留在存储器中的有效线。这是通过将nucd模块使用的行锁定在所有其他本地缓存中,并且使非本地缓存中的行无效来实现的。在片外nucd模块(未示出)中,暂存器只是物理存储器的保留段。在开始框702之后,第一nucd模块(nucd1)在框704处接受指令块。如果用于操作的一行或多行处于修改状态,如判定框706的肯定分支所示的,则在操作开始之前在框708处将其写回到存储器。如果该行未处于修改状态,如判定框706的否定分支所示的,则当使用包容性缓存模型时,清除的副本已经存在于存储器中并且还存在于更高级的缓存中。然后在框710处将对应的缓存行锁定在其他nucd缓存模块(诸如nucd2)中,并且在框712处执行操作。因此,一旦一行上的事务开始,清除的副本仍然存在于更高级的缓存或存储器中。

片外(存储器中)nucd模块还利用暂存器暂时保存nucd模块的存储操作(“重做日志”)。这可以采取将全局物理地址空间分配为动态分配的暂存器(假设iommu)或静态分区的暂存器的形式。这也可以采用与全局存储器不同的一组其他快速存储器的更有限形式。

图8是根据各种代表性实施例的代码块800的图形表示。代码块800包括标准代码802,之后是nucd_start指令804,该指令指定可以在nucd模块上执行的代码段的开始。nucd_start指令804之后是nucd标记或头文件806、实际nucd指令808以及可选地nucd_end语句810。例如,当标记806指定块808中的指令数时,可以省略nucd_end语句。nucd块之后是附加标准代码812。

nucd_start和nucd_end指令标记代码块,分别指示开始和结束。假设标记的段与nucd模块的执行条件兼容。以上列举了nucd块的组件。当块的长度被指示时,可以省略结束指令。

nucd标记806可以包括例如:

编译输入寄存器814。寄存器814向nucd块提供输入值。在解码之后,这些可以被重命名,以动态地或静态地匹配来自其他寄存器的任何移动。当寄存器值可用时,它们被打包到nucd执行分组中以进行分派。

循环指示符816。如果可能,编译器可以静态地展开循环。然而,动态有界循环(即,在nucd块分派之前解析的循环界限)也可以在nucd模块上执行。可以在头文件806本身内标记展开的循环和没有循环间依赖性(可以由标准编译器技术确定)的动态展开循环。

输出寄存器注释818。可选地,由nucd模块计算的输出值可以从nucd块直接写回到主机处理器的寄存器(没有存储器支持)。将存储到当前不在缓存中的存储器位置的值可以保存在暂存器中,并且一旦异常/分支被清除就作为非暂时存储进行处理。值也可以被写回到非寄存器位置。例如,可以将值写入硬件先进先出(fifo)缓冲器或将值传输到主机的其他硬件/软件装置。

nucd块长度(指令数量)820。nucd块中的指令数可以被限制为一个或多个缓存行或其他长度。这使调度器能够发出完整的指令块,即使尚未从指令存储器中提取完整的块。该特征对片外nucd模块特别有用。

要求的能力822。执行nucd块所需的处理能力的指示符。例如,是否需要浮点运算、定点运算或整数运算。能力822还可以指专用硬件,诸如加速器、专用处理器、可重新配置逻辑或网络接口控制器。

当更高级代码被编译成二进制指令时,编译器可以插入nucd标记。将代码分解为nucd块的条件主要与编译器相关,并且可能依赖于实施方式。条件可以包括(但不限于):对给定数量的多个缓存行或页面的访问范围受限的单入口、单出口寄存器。

由前一节中提到的nucd开始和结束标记识别的每个块基本上是一个功能。执行该功能的第一条件是在发布nucd块之前明确所需的寄存器。在一个实施例中,包含所需输入寄存器的头文件经历重命名过程以使处理器能够消除对nucd块的输入的歧义。除了明确标记的输入和输出寄存器之外,这具有将nucd块中的寄存器与其他代码中的寄存器分开的效果。该重命名过程提供对依赖性的更严格控制,以便可以并行处理块。

执行指令的第二条件是访问的存储器位置明显受限。这使得缺少存储器管理单元(mmu)的片外nucd模块可以使用预先计算的页边界来运行。这种所需值的打包对于位于主机外部的任何nucd模块都很重要。

可以使用类似堆栈的分组来发送对nucd模块的所需输入参数。从当前活动寄存器到分组的打包值使这些寄存器无效,以便在nucd模块执行时可以重新使用它们,而无需进一步缓冲。

图9a是根据本公开的实施例的修改的重排序缓冲器(rob)234的图形表示。重排序缓冲器234包括第一rob902和与nucd处理单元相关联的一个或多个nucd重排序缓冲器904。第一rob902中的每一行包括指示符位906,该指示符位指示对应的条目908是标准rob条目,还是指向nucd重排序缓冲器904中的条目的指针。例如,在rob902的第一行中,未设置指示符位906,因此条目908是标准rob条目。在rob902的第三行中,指示符位906被设置,因此条目908包括指向nucd重排序缓冲器904中的条目的指针。

nucd重排序缓冲器904的每一行对应于nucd指令块。字段910指示nucd指令块的起始地址,并且字段912指示nucd指令块的结束地址(或替代性地,指令的数量)。字段914是指示哪些物理寄存器向nucd指令块提供输入的位图,并且字段916是指示哪些物理寄存器(如果有的话)将提供来自nucd指令块的输出的位图。例如,如果使用64个寄存器,则每个字段914、916包括64位数。

当未设置指示符位906时,重排序缓冲器中的条目908包含与单个指令有关的信息。用于单指令重排序缓冲器的各种配置对于本领域普通技术人员来说是已知的或者是显而易见的。例如,条目908可以包含指令标签、状态值、寄存器标识符和数据值中的一个或多个。

图9b是根据本公开的其他实施例的修改的重排序缓冲器(rob)234'的图形表示。rob234'中的每一行包括指示符位920,该指示符位指示对应的条目922是用于单个指令的标准rob条目,还是用于nucd指令块的条目。例如,在rob234'的第一行中,未设置指示符位920,因此该条目是标准rob条目908。在rob234’的第三行中,指示符位920被设置,因此该条目包括nucd指令块的条目。每个nucd条目包括指示nucd指令块的起始地址的字段910以及指示nucd指令块的结束地址的字段912(或者,指令的数量)。字段914是指示哪些物理寄存器向nucd指令块提供输入的位图,并且字段916是指示哪些物理寄存器(如果有的话)将提供来自nucd指令块的输出的位图。

图10是根据本公开的非均匀计算机设备(nucd)的操作方法的流程图1000。在开始框1002之后,提取电路在框1004处从存储器取回指令。如果指令不是nucd开始指令,如判定框1006的否定分支所示的,在框1008,将架构寄存器的寄存器注释重命名为物理寄存器名称,在框1010将指令添加到主机处理单元的指令队列,并且在框1012处将对应的条目添加到重排序缓冲器中。对应的指示符位被设置为零,并且流程返回到框1004。

如果指令是nucd开始指令,如判定框1006的肯定分支所示的,则读取1014nucd标记或头文件以确定nucd要求。如果没有合适的nucd处理单元可用,如判定框1016的否定分支所示的,则在判定框1018处进行检查以确定是否需要nucd处理单元。例如,某些定制指令可能不适合主机处理单元的计算。如果不需要nucd处理单元,如判定框1018的否定分支所示的,则流程返回到框1004,并且块中的指令将作为标准(非nucd)指令进行处理。然而,如果合适的nucd处理单元可用,如判定框1016的肯定分支所示的,或者如果需要nucd处理单元,如判定框1018的肯定分支所示的,则在框1020处使条目进入修改的重排序缓冲器(图9中的234)。例如,指示符位被设置为1,并且输入指向nucd重排序缓冲器的行的指针。在框1022处,将开始和结束指令地址连同对应于所使用的输入和输出寄存器的位图一起输入nucd重排序缓冲器。在框1024,取回块中的下一指令。如果指令是nucd块结束指令,如判定框1026的肯定分支所示的,则流程返回到框1004,否则,如判定框1026的否定分支所示的,在框1028处重命名输入和输出寄存器,并在框1030处将指令添加到选定的指令队列。其他架构寄存器名称在nucd处理单元中被替换。替代性地,在框1028处,可以重命名所有寄存器。

以这种方式,标准主机指令和nucd指令可以组合成单个指令流。另外,当没有nucd可用时,主机处理单元可以处理至少一些ncud指令。

图11是根据本公开的非均匀计算机设备(nucd)的操作方法的流程图1100。流程图示出了如何发布指令和提交结果。在开始框1102之后,在框1104处检查nucd重排序缓冲器的条目。例如,可以针对寄存器状态位检查图9中所示的字段914。在判定框1106处,该过程等待直到所有输入寄存器都准备好。当所有输入寄存器都准备就绪时,如判定框1106的肯定分支所示的,在框1108处,将对应的指令块分派给nucd处理单元。如果发生异常或分支误导,如判定框1110的肯定分支所示的,则在框1112处处理异常或误导。否则,流程继续到判定框1114。如果已经填充了所有输出寄存器,如判定框114的肯定分支所示,则在块1116处提交结果,并且从重排序缓冲器中移除对应的条目。流程然后返回到框1104。

在常规处理器中,通过存储器顺序缓冲器或加载/存储队列来管理存储器顺序。在非均匀计算装置中,多个处理单元可以执行加载或存储操作。

图12是根据本公开的实施例的用于维持非均匀计算装置(nucd)中的存储器顺序的方法的流程图1200。在开始框1202之后,在框1204处取回nucd指令块。如果计算由指令块访问的存储器位置的地址所需的寄存器值不可用,如判定框1206的否定分支所示的,则操作在框1208处等待。当所需寄存器值可用时,如判定框1206的肯定分支所示的,在框1210处计算地址。然后在框1212处将这些地址发布到存储器控制器。然后,存储器控制器可以保留与所访问的存储器位置相对应的存储器的“伪行”。如判定框1214的否定分支和框1216所示,数据一致性保持在主机和缓存控制器的控制之下,直到nucd指令块被发布到nucd发布队列。当nucd指令块被发布到nucd处理单元时,如判定框1214的肯定分支所示的,在框1218处,将访问的存储器的相干状态变为“异或”。在框1220处,将处于“修改”状态的任何缓存数据逐出到存储器,并且在框1222处,将指令发送到所选择的nucd处理单元以供执行。如判定框1224和等待框1226的否定分支所指示的,该过程等待直到重排序缓冲器(rob)提交nucd块。当重排序缓冲器(rob)提交nucd块时,如判定框1224的肯定分支所示的,由存储器控制器在框1228释放存储器位置的伪行。该方法允许维护存储器访问顺序。

在替代方法中,当nucd中仅存在单个主机时,可以按发布顺序将nucd占位符插入到加载和存储队列(lsq)中以充当存储器栅栏或块。对存储器的加载和存储无法通过插入的占位符继续进行,使得保持顺序一致性。

本领域技术人员将认识到,可以使用编程处理器、可重构硬件组件、专用硬件组件或其组合来实现本发明。类似地,通用计算机、基于微处理器的计算机、微控制器、光学计算机、模拟计算机、专用处理器和/或专用硬连线逻辑可以用于构造本发明的替代等同实施例。

此外,可以通过硬件描述语言的指令来描述上述数据处理系统的组件。这些指令可以存储在非暂时性计算机可读介质上,诸如电可擦除可编程只读存储器(eeprom);非易失性存储器(nvm);大容量存储器,诸如硬盘驱动器、软盘驱动器、光盘驱动器;光存储元件、磁存储元件、磁光存储元件、闪存、主机存储器和/或其他等效存储技术,而不脱离本发明。这样的替代存储装置应被视为等同物。

已经通过示例而非限制的方式呈现了已经在本文详细描述的各种代表性实施例。本领域技术人员将理解,可以对所述实施例的形式和细节进行各种改变,从而得到保持在所附权利要求范围内的等同实施例。

根据第一技术,提供了一种用于执行指令程序的数据处理设备。所述数据处理设备包括:包括第一级和第二级的多级存储器系统,其中所述第一级包括一个或多个缓存;一个或多个主机处理器,每个主机处理器具有耦合到所述一个或多个缓存的缓存的第一处理单元和用于保持数据值的多个寄存器;一个或多个第二处理单元,每个第二处理单元在所述第二级紧密耦合到所述存储器系统;第一重排序缓冲器,所述第一重排序缓冲器可操作以在所述第一和第二处理单元执行指令期间维持数据顺序;第二重排序缓冲器,所述第二重排序缓冲器与所述一个或多个第二处理单元的处理单元相关联,并且可操作以在所述相关处理单元执行所述指令期间维持数据顺序;以及指令调度器,所述指令调度器可操作以将所述指令选择性地路由到所述第一和第二处理单元中的一个或多个;其中所述第一重排序缓冲器被配置为存储多个行,每个行包括指示符位和条目,其中,根据所述指示符位的值,所述条目包括用于单个指令的条目或指向用于指令块的所述第二重排序缓冲器中的条目的指针,其中所述第二重排序缓冲器被配置为存储指令块的一个或多个条目,所述指令块的条目包括:所述指令块的起始地址、所述指令块的结束地址、向所述指令块提供输入值的多个寄存器的寄存器的指示符以及用于保持由执行所述指令块产生的输出值的多个寄存器的寄存器的指示符,并且其中,当由所述第一和第二重排序缓冲器指示的所有输入都可用时,将指令释放到所述第一和第二处理单元的处理单元。

在实施例中,所述存储器系统的第二级包括缓存存储器。

在实施例中,所述存储器系统的第二级包括非缓存存储器。

在实施例中,所述调度器进一步可操作以:当指令被路由到所述第一处理器时,将单个指令的条目写为所述第一重排序缓冲器的第一条目;当所述指令块被路由到与所述第二重排序缓冲器相关联的处理单元时,将指令块的条目写为所述第二重排序缓冲器;并且当指令块被路由到与所述第二重排序缓冲器相关联的处理单元时,将指向所述第二重排序缓冲器中的条目的指针写为所述第一重排序缓冲器的第二条目。

在实施例中,所述数据处理设备还包括:重命名单元,所述重命名单元可操作以在将对应条目写入所述第一重排序缓冲器或者将条目写入所述第一和第二重排序缓冲器两者之前用所述多个寄存器中的一个或多个寄存器位置替换指令中的一个或多个寄存器名称。

在实施例中,向所述指令块提供输入值的多个寄存器的寄存器的指示符包括第一位图,并且其中用于保持由执行所述指令块产生的输出值的多个寄存器的寄存器的指示符包括第二位图。

在实施例中,所述数据处理设备还包括:指令队列,其中当由所述第一和第二重排序缓冲器指示的所有输入值都可用时,指令被释放到所述指令队列。

在实施例中,所述第一和第二重排序缓冲器包括先进先出(fifo)缓冲器。

根据第二技术,提供了一种用于执行指令程序的数据处理设备。所述数据处理设备包括:包括第一级和第二级的多级存储器系统,其中所述第一级包括一个或多个缓存;一个或多个主机处理器,每个主机处理器具有耦合到所述一个或多个缓存的缓存的第一处理单元和用于保持数据值的多个寄存器;一个或多个第二处理单元,每个第二处理单元在第二级紧密耦合到所述存储器系统;重排序缓冲器,所述重排序缓冲器可操作以在所述第一和第二处理单元执行所述指令期间维持数据顺序;指令调度器,所述指令调度器可操作以将所述指令的指令选择性地路由到所述第一和第二处理单元中的一个或多个;其中所述重排序缓冲器被配置为存储多个行,每个行包括指示符位和条目,其中,根据所述指示符位的值,所述条目包括用于单个指令的条目或用于指令块的条目,其中,指令块的条目包括:指令块的起始地址;指令块的结束地址;向指令块提供输入值的多个寄存器的寄存器的指示符;以及用于保持由执行指令块产生的输出值的多个寄存器的寄存器的指示符,并且其中,当由所述重排序缓冲器指示的所有输入都可用时,将指令释放到所述第一和第二处理单元的处理单元。

在实施例中,所述指令块的结束地址包括与所述指令块的起始地址的偏移。

在实施例中,所述调度器进一步可操作以:当指令被路由到第一处理单元时,将单个指令的条目写入所述重排序缓冲器;并且当指令块被路由到所述第二和第三处理单元的处理单元时,将指令块的条目写入所述重排序缓冲器,其中所述指示符位根据所述条目被设置。

在实施例中,所述数据处理设备还包括:重命名单元,所述重命名单元可操作以在将对应条目写入所述重排序缓冲器之前用所述多个寄存器中的一个或多个寄存器位置替换指令中的一个或多个寄存器名称。

在实施例中,向所述指令块提供输入值的多个寄存器的寄存器的指示符包括第一位图,并且其中用于保持由执行所述指令块产生的输出值的多个寄存器的寄存器的指示符包括第二位图。

在实施例中,所述数据处理设备还包括:指令队列,其中当由所述重排序缓冲器指示的所有输入值都可用时,指令被释放到所述指令队列。

在实施例中,所述重排序缓冲器包括第一重排序缓冲器和第二重排序缓冲器,并且其中:所述第一重排序缓冲器被配置为存储单个指令的一个或多个条目,所述第二重排序缓冲器被配置为存储指令块的一个或多个条目,并且所述第一重排序缓冲器进一步被配置为存储指向所述第二重排序缓冲器中的条目的指针。

根据第三技术,提供了一种存储描述上述数据处理设备的硬件描述语言的指令的非暂时性计算机可读介质。

根据第四技术,提供了一种用于在设备中维持数据顺序的方法,所述设备包括具有第一级和第二级的多级存储器系统、具有耦合到所述存储器系统的第一级的缓存的第一处理单元的主机处理器以及一个或多个第二处理单元,每个第二处理单元在第二级紧密耦合到所述存储器系统,所述方法包括:选择所述第一和第二处理单元的处理单元,用于执行包括一个或多个指令的指令块;当所述指令块包括被被选择由所述第一处理单元执行的指令时,将单个指令的条目写入重排序缓冲器;当所述指令块被选择由所述第二处理单元的处理单元执行时,将所述指令块的条目写入所述重排序缓冲器,并且其中所述指令块的条目包括:所述指令块的起始地址;所述指令块的结束地址;向所述指令块提供输入值的主机处理的寄存器的指示符;以及被指定用于保持由执行所述指令块产生的输出值的主机处理器的寄存器的指示符。

在实施例中,所述重排序缓冲器包括第一重排序缓冲器和第二重排序缓冲器;将单个指令的条目写入所述重排序缓冲器包括将条目写入所述第一重排序缓冲器;并且将所述指令块的条目写入所述重排序缓冲器包括将条目写入所述第二重排序缓冲器;所述方法还包括:当所述指令块被选择由所述第二处理单元的处理单元执行时,将指针作为所述第一重排序缓冲器的条目写入所述第二重排序缓冲器的条目。

在实施例中,所述方法还包括:设置所述重排序缓冲器中的指示符位的值以指示相应的条目是否包括用于单个指令的条目或用于指令块的条目。

在实施例中,所述方法还包括:根据向所述指令块提供输入值的主机处理器的寄存器的指示符来确定提供输入值的寄存器是否就绪;当提供输入值的所述寄存器就绪时,将所述指令块存储在所选择的处理器的指令队列中;根据被指定用于保持由执行所述指令块产生的输出值的主机的寄存器的指示符来确定被指定用于保持输出值的寄存器中的所有输出值是否就绪;在所述所有输出值准备就绪时提交所述输出值;并且移除所述重排序缓冲器中对应于所述指令块的条目。

在实施例中,所述方法还包括:当没有抛出异常并且正确地预测指令分支时,提交所述输出值。

在实施例中,所述指令包括在所述第一处理单元上可执行的一个或多个第一指令块以及在所述第一和第二处理单元上可执行的一个或多个第二处理块,所述方法还包括:从“段开始”指令确定第二指令块的起始地址;从“段结束”指令确定第二指令块的结束地址;并且从一个或多个标记指令确定向所述指令块提供输入值的主机处理的寄存器的指示符以及被指定用于保持由执行所述指令块产生的输出值的主机处理器的寄存器的指示符。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1