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

使用固定功能操作的对所卸载指令的处理器引导的执行

文献发布时间:2024-01-17 01:26:37


使用固定功能操作的对所卸载指令的处理器引导的执行

背景技术

计算系统通常包括许多处理资源(例如,一个或多个处理器),这些处理资源可以检索并执行指令并且将所执行的指令的结果存储到合适的位置。处理资源(例如,中央处理单元(CPU))可例如包括许多功能单元诸如算术逻辑单元(ALU)电路、浮点单元(FPU)电路和/或组合逻辑块,这些功能单元可用于通过对数据(例如,一个或多个操作数)执行逻辑运算来执行指令。例如,功能单元电路可用于经由许多逻辑运算对操作数执行算术运算,诸如加法、减法、乘法和/或除法。通常,处理资源(例如,处理器和/或相关联的功能单元电路)可以在存储器阵列的外部,并且数据经由处理资源与存储器阵列之间的总线来访问以执行一组指令。为了减少用于获取或存储存储器阵列中的数据的访问量,计算系统可以采用临时存储最近访问或修改的数据以供处理资源或处理资源组使用的高速缓存层级结构。然而,可通过将某些操作卸载到存储器内嵌处理器(PIM)设备来进一步改善处理性能,其中处理资源可以在存储器内部和/或存储器附近实施,使得更靠近存储数据的存储器位置而不是使数据更靠近处理资源来执行数据处理。PIM设备可以通过减少和/或消除外部通信来节省时间,并且还可以节省功率。

某些应用程序具有低的或无临时数据重用的阶段,在此期间它们频繁地在高速缓存层级结构中错过并且从存储器获取数据。另外,这些阶段还可以表现出低计算强度(触发器/字节的比率)。在这些阶段期间,能量效率和性能下降,因为数据移动量很大并且该阶段是受存储器限制的。因此,这些阶段特别适于卸载到PIM设备或加速器。例如,程序员可以在应用程序源代码中提供应当卸载特定代码序列的指示,或编译器可以作出这样的确定。对所卸载指令的解译和编排仍必须由托管应用程序的处理资源执行。

附图说明

图1提出了根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的示例性系统的框图。

图2提出了根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性系统的框图。

图3提出了例示根据本公开的实施方案的使用固定功能操作的对所卸载指令的处理器引导的执行的示例性方法的流程图。

图4提出了例示根据本公开的实施方案的使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。

图5提出了例示根据本公开的实施方案的使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。

图6提出了例示根据本公开的实施方案的使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。

图7提出了例示根据本公开的实施方案的使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。

具体实施方式

存储器内嵌处理(PIM)架构支持卸载用于在存储器中或存储器附近执行的指令,使得节省处理器与存储器之间的数据链路上的带宽并且可以减少处理器的功率消耗。例如PIM设备对所卸载指令的执行不需要将数据加载到本地CPU寄存器中,以及将数据从本地CPU存储装置写回到存储器中。

PIM架构的一些示例考虑以有序CPU核、无序CPU核、可编程地址生成引擎、GPU、定制加速器等形式可用的可编程硬件,其中PIM硬件位于3D堆叠式存储器的逻辑层中或2D附接双倍数据速率(DDRx)存储器的双列直插式存储器模块(DIMM)内部。启动应用程序的到那些核的存储器绑定阶段需要改变线程模型、硬件支持,以将机器状态从主核传送到PIM硬件,反之亦然。这使得从主线程到PIM线程的转换复杂化并且延迟,反之亦然。

PIM架构的一些示例使用专用引擎来加速特定的代码习惯用法,诸如图形遍历(通过生成相关负载的地址)。这些引擎还需要是多线程的(以支持跨多个线程的图形遍历)并且是有序的。将内核卸载到这些引擎需要它们也支持标量指令执行,这增加了它们的复杂性。在这些示例中,此类PIM解决方案假定通过将整个数据结构从物理地址空间的可高速缓存部分复制到不可高速缓存部分来访问非一致性PIM数据。

在一个示例中,在PIM指令由CPU核分派的情况下,基于高速缓存局部性选择性地卸载PIM指令。更具体地,如果在高速缓存层级结构中发现由PIM指令访问的数据,则在CPU侧执行这些PIM指令(使用专用执行单元)。因此,该方法仅在数据局部性低的情况下将指令卸载到PIM设备。然而,这也假定专用硬件来与常规CPU流水线并行地执行CPU核内部的PIM指令。另外,该方法还需要用可以在PIM上以及在核中执行的整个新指令集(CPU核解码器修改)来扩展ISA(因为这些指令可能或可能不被卸载)。此外,这种方法需要经由例如驻留在PIM管理硬件结构中的PIM目录跨CPU核同步PIM指令。此外,在该方法中,所有PIM指令必须以原子方式执行。这些PIM指令之间的原子性强制实施引入延迟,因为其需要CPU核与PIM设备之间的往返通信。

根据本公开的实施方案在CPU核、高速缓存和功能逻辑块中提供硬件和指令集架构支持,使得能够将计算卸载到具有固定功能能力的PIM设备或加速器。硬件支持不需要改变原应用程序的线程模型,并且使得应用程序能够对可高速缓存数据执行固定功能计算,而不需要软件高速缓存管理。根据本公开的实施方案通过使指令能够被卸载到假定可高速缓存的、一致性数据并且不启动任何附加线程的目标设备来降低卸载指令的复杂性和开销。

根据本公开的实施方案涉及一种使用固定功能操作的对所卸载指令的处理器引导的执行的方法,该方法包括接收被指定用于由目标设备远程执行的指令集。指令集中的每一个指令包括目标设备中的作为操作数的目标寄存器。该方法还包括针对指令集中的每一个指令按其接收顺序传输卸载请求。该卸载请求包括被指定用于远程执行的指令。在一些示例中,卸载目标设备是存储器内嵌处理设备。在其他示例中,卸载目标设备是耦合到存储器设备的加速器。

在一些具体实施中,处理器实施将目标寄存器标识为虚拟寄存器的指令集架构扩展。在一些示例中,多个指令中的每一个指令包括来自由处理器实施的指令集架构扩展中的操作码组的操作码。在这些示例中,指令集架构扩展中的操作码组可以由远程加载操作码、远程计算操作码和远程存储操作码组成。

在一些具体实施中,针对指令集中的每一个指令按其接收顺序传输卸载请求包括生成被指定用于远程执行的指令的存储器地址以及将存储器地址与卸载请求耦合。

在一些具体实施中,针对指令集中的每一个指令按其接收顺序传输卸载请求包括获得被指定用于远程执行的指令的本地数据,以及将本地数据与卸载请求耦合。

在一些具体实施中,针对指令集中的每一个指令按其接收顺序传输卸载请求包括缓冲卸载请求,直到指令集中最老的指令已经退出。

在一些具体实施中,该方法还包括对包含与包括在卸载请求中的存储器地址相对应的条目的一个或多个高速缓存执行高速缓存操作。高速缓存操作可包括使包含干净数据的高速缓存条目无效或者清除包含脏数据的高速缓存条目。高速缓存操作可以对包含对应于卸载请求中所包括的存储器地址的条目的多个高速缓存执行。高速缓存可以跨多个核集群分布,每个核集群包括多个处理器核。

根据本公开的实施方案涉及多核处理器。处理器被配置为接收被指定用于由目标设备远程执行的指令集。指令集中的每一个指令包括目标设备中的作为操作数的目标寄存器。处理器还被配置为针对指令集中的每一个指令按其接收顺序传输卸载请求。该卸载请求包括被指定用于远程执行的指令。

在一些具体实施中,处理器实施将目标寄存器标识为虚拟寄存器的指令集架构扩展。在一些示例中,多个指令中的每一个指令包括来自由处理器实施的指令集架构扩展中的操作码组的操作码。在这些示例中,指令集架构扩展中的操作码组可以由远程加载操作码、远程计算操作码和远程存储操作码组成。

在一些具体实施中,处理器还被配置为缓冲卸载请求,直到指令集中最老的指令已经退出。

在一些具体实施中,处理器还被配置为对包含与卸载请求中所包括的存储器地址相对应的条目的一个或多个高速缓存执行高速缓存操作。高速缓存操作可包括使包含干净数据的高速缓存条目无效或者清除包含脏数据的高速缓存条目。高速缓存操作可以对包含对应于卸载请求中所包括的存储器地址的条目的多个高速缓存执行。高速缓存可以跨多个核集群分布,每个核集群包括多个处理器核。

根据本公开的实施方案涉及一种用于使用固定功能操作的对所卸载指令的处理器引导的执行的系统。该系统包括存储器内嵌处理(PIM)设备和多核处理器,该多核处理器被配置为接收被指定用于由PIM设备远程执行的指令集。指令集中的每一个指令包括PIM设备中的作为操作数的目标寄存器。处理器还被配置为针对指令集中的每一个指令按其接收顺序传输卸载请求。该卸载请求包括被指定用于远程执行的指令。

在一些具体实施中,处理器实施将目标寄存器标识为虚拟寄存器的指令集架构扩展。在一些示例中,多个指令中的每一个指令包括来自由处理器实施的指令集架构扩展中的操作码组的操作码。在这些示例中,指令集架构扩展中的操作码组可以由远程加载操作码、远程计算操作码和远程存储操作码组成。

在一些具体实施中,处理器还被配置为缓冲卸载请求,直到指令集中最老的指令已经退出。

在一些具体实施中,处理器还被配置为对包含与卸载请求中所包括的存储器地址相对应的条目的一个或多个高速缓存执行高速缓存操作。高速缓存操作可包括使包含干净数据的高速缓存条目无效或者清除包含脏数据的高速缓存条目。高速缓存操作可以对包含对应于卸载请求中所包括的存储器地址的条目的多个高速缓存执行。高速缓存可以跨多个核集群分布,每个核集群包括多个处理器核。

图1提出了例示根据本公开的各种实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的示例性系统100的框图。在图1的示例中,系统100包括多核处理器101,该多核处理器包括多个核复合体102、104,这些多个核复合体包括核集群(例如,共享最后一级高速缓存或接口的2个或更多个核)。例如,处理器101可以在片上系统(SoC)架构中实现。在图1中所描绘的示例中,每个核复合体102、104包括分别耦合到二级(L2)高速缓存114、116、118、120的多个处理器核106、108、110、112(例如,中央处理单元(CPU)核、图形处理单元(GPU)核,等等)。此外,处理器核106、108、110、112中的每一者包括相应的主(L1)高速缓存122、124、126、128。处理器核106、108、110、112中的每一者包括处理器流水线(未示出)的各种部件,诸如指令提取、解码和分派流水线、预取输入队列、调度器、加载/存储队列、后备缓冲区、重排序缓冲区和退出队列,以及各种算术逻辑单元(ALU)和寄存器文件。

图1中描绘的示例性系统100的配置是出于解释的目的而呈现的。读者应当理解,虽然图1中描绘了四个处理器核106、108、110、112,但处理器101可包括比所描绘的处理器核更多或更少的处理器核,以及更多或更少的核复合体,以及更多或更少的高速缓存。

在图1中所描绘的示例中,每个核复合体102、104包括充当互连高速缓存或最后一级高速缓存(LLC)的第三级(L3)高速缓存130、132,该L3高速缓存连接特定核复合体的所有L2高速缓存。在一些示例中,处理器101被配置为使用多个处理器核106、108、110、112执行多线程应用程序。在这些示例中,对一个核复合体102中的高速缓存中的数据的修改可影响高速缓存在另一个核复合体104中的数据的有效性。为了强制实施高速缓存一致性,处理器101可包括耦合到核复合体102、104的每个L3高速缓存130、132的一致性同步器136。在这些示例中,一致性同步器136例如通过传输高速缓存探测以使包含在存在于处理器101中的任何L1、L2或L3高速缓存的高速缓存条目中的数据无效或清除数据来发起高速缓存操作。

每个L1、L2和L3高速缓存包括高速缓存逻辑,该高速缓存逻辑响应于处理器请求而确定与所请求操作相关联的数据是否存在于高速缓存的高速缓存条目中。如果数据存在(“高速缓存命中”),则使用高速缓存条目中存在的数据来实现处理器请求。如果数据不存在(“高速缓存未命中”),则将请求转发到下一级高速缓存,直到在LLC中检测到高速缓存未命中为止。响应于LLC中的高速缓存未命中,高速缓存被转发到处理器101的存储器控制器134以使用存储在主存储器(例如,存储器设备138)中的数据来完成请求。在一个示例中,处理器请求是针对存储器设备138中的存储器位置的输入/输出(I/O)操作,诸如读取/写入请求。

处理器核106、108、110、112中的每一者执行由编译器系统(例如,GNU编译器套件(GCC))从在处理器101上执行的应用程序创建的机器语言代码。例如,该应用程序可以是单线程或多线程应用程序。处理器核实施由编译器系统用于生成机器语言代码的指令集架构(ISA)。在一个示例中,处理器101的ISA为支持高级向量扩展的x86-64指令集,诸如AVX-256。

根据本公开的各种实施方案,处理器101实施具有用于到卸载目标设备的卸载操作的三个操作码的扩展ISA,以及用于卸载目标设备的架构寄存器文件。例如,卸载目标设备可以是实施固定功能的远程部件,诸如存储器内嵌处理(PIM)设备或加速器,如以下更详细描述的。在扩展ISA中,remote_load指令操作码将存储器操作数的数据从主存储器加载到卸载目标设备的本地寄存器中,而remote_store指令操作码将数据从卸载目标设备的本地寄存器写入到主存储器中的存储器操作数。扩展ISA中的remote_op指令操作码可以表示由目标设备的固定功能架构支持的任何算术或逻辑操作。没有操作修改控制流,并且因此所卸载指令被顺序地执行。卸载remote_op指令源操作数可以是(a)存储器地址(以与基线ISA中的方式相同的方式指定),(b)架构寄存器(来自CPU核标准ISA),或(c)在卸载目标设备中实施的卸载目标寄存器。在一些具体实施中,卸载指令目的地操作数可以仅是卸载目标寄存器。卸载目标寄存器是扩展ISA内的架构寄存器,表示在卸载目标固定功能逻辑本地的寄存器,并且由编译器分配。卸载目标寄存器是虚拟的,因为它们在处理器核中没有物理存储装置,并且用于支持卸载指令之间的数据依赖性,并且当卸载请求被发送到固定功能模块146时跟踪存储器控制器134处的卸载目标寄存器使用。

在一些具体实施中,remote_load指令包括作为卸载目标寄存器的目的地操作数、作为存储器地址的源操作数,以及作为用于生成存储器地址的架构寄存器的另一个源操作数。remote_load指令指示卸载目标设备应当将数据从由存储器地址标识的存储器位置加载到卸载目标寄存器中。在卸载目标是PIM设备的情况下,remote_load指令指示PIM设备应当将数据从由存储器地址标识的PIM设备中的存储器位置加载到PIM寄存器中,如以下详细解释的。

在一些具体实施中,remote_store指令包括作为存储器地址的目的地操作数、作为卸载目标寄存器的源操作数,以及作为用于生成存储器地址的架构寄存器的另一个源操作数。remote_store指令指示卸载目标设备应当将卸载目标寄存器中的数据存储到由存储器地址标识的存储器位置。在卸载目标设备是PIM设备的情况下,remote_store指令指示PIM设备应当将来自目标寄存器的数据存储在由物理存储器地址标识的PIM设备中的存储器位置中,如以下详细解释的。

在一些具体实施中,remote_op指令包括作为卸载目标寄存器的目的地操作数和源操作数用于计算,其中源操作数可以是架构寄存器(携带来自先前的非卸载计算的值)、卸载目标寄存器或存储器地址(从也在remote_op指令中指定的架构寄存器生成)。remote_op指令指示卸载目标设备中的固定功能逻辑应当执行计算,并且将结果放置在由目的地操作数指示的卸载目标寄存器中。在卸载目标设备是PIM设备的情况下,remote_op指令指示PIM设备应当执行PIM设备的存储器逻辑内的功能,如以下详细解释的。

在一些具体实施中,卸载指令由编译器在应用程序编译时使用扩展ISA来生成。在一个示例中,编译器基于由程序员例如使用用于卸载的应用程序编程接口(API)提供的应用程序源代码中的指示来标识源代码中的卸载指令。在另一个示例中,编译器基于确定指令适于被卸载来标识用于卸载的指令。卸载指令可被标识为源代码中的感兴趣区域(ROI)。源代码中的ROI的每个动态实例可被标识为包括一个或多个卸载指令的卸载事务。例如,卸载事务可包括remote_load指令、一个或多个remote_op指令,以及remote_store指令。卸载事务可以是循环迭代或子例程或子例程主体的子集。卸载事务是连续的代码段,并且不包括任何控制流改变指令。在一些示例中,特殊指令可以标记每个卸载事务的开始和结束。

在一些具体实施中,卸载指令被(例如,由核的前端流水线)获取、解码和分派,如对于任何典型的非卸载指令将执行的那样。在分派卸载指令之后并且一旦卸载指令已经被调度器拾取,核资源就被用于生成用于在卸载指令中(例如,在具有存储器操作数的remote_load、remote_store和remote_op指令中)标识的任何存储器位置的虚拟地址和/或物理地址,以及由来自核寄存器的卸载指令消耗的任何值(例如,根据非卸载指令计算)。在已经生成虚拟和/或物理地址并且来自核寄存器的值可用之后,卸载指令准备退出。即使卸载指令被调度器拾取,这些指令也不执行核的ALU中的任何操作(矢量或标量、整数或浮点),它们也不在由核发出时修改机器状态,包括如核的标准ISA中定义的架构寄存器和标志。卸载指令一旦完成上述操作(由非卸载指令计算出的地址生成和/或读取值)就准备退出,而不违反存储器排序规则。在流水线清除的情况下(例如,由于分支错误预测、加载-存储转发数据依赖违反、中断、陷阱等),卸载指令可以像常规指令那样被清除,因为它们像非卸载指令那样占用指令窗口条目。此外,由于remote_op指令不在核的ALU上执行,所以不针对其检测算术错误陷阱。然而,由卸载指令生成的其他陷阱(例如,用于虚拟地址生成或物理地址生成、指令断点等)被检测到,并且在核流水线内部用用于非卸载指令的相同机制来提供服务。

一旦卸载指令退出,所生成的存储器地址和任何核寄存器操作数的值就被包括在针对卸载指令生成的卸载请求中。卸载请求包括卸载指令,该卸载指令包括卸载目标寄存器以及完成卸载指令并且将结果存储在卸载目标寄存器中所需的任何所生成的存储器地址或寄存器值。在一些具体实施中,用于卸载请求的卸载请求先进先出(FIFO)队列被用来在指令退出时保持指令的编程序列。在一个示例中,仅当在卸载请求FIFO中达到卸载事务的结束时,才可以使卸载指令退出。如果核支持多线程,则每个线程可以有一个卸载请求FIFO。每个卸载请求由核在退出时间按程序顺序向卸载目标设备发出,以在卸载目标设备中按相同的程序顺序远程执行。

在一些示例中,在卸载请求由处理器核106、108、110、112发出之后,卸载请求由一致性同步器136接收。一致性同步器136对核复合体102、104的各种高速缓存执行高速缓存操作,以确保用于在卸载请求中标识的虚拟地址和/或物理地址的任何高速缓存条目保持一致性。例如,当卸载请求包括虚拟地址和/或物理地址作为操作数时,一致性同步器136执行高速缓存探测以标识核复合体的L1、L2和L3高速缓存中的高速缓存条目,这些高速缓存条目包含用于在卸载请求中标识的虚拟地址和/或物理地址的高速缓存条目。如果所标识的高速缓存条目包含干净数据,则该高速缓存条目被无效。如果所标识的高速缓存条目包含脏数据,则将高速缓存条目中的数据清除到主存储器(即,存储器设备)。在一些示例中,可以在到达一致性同步器136之前使对应于在由核复合体中的特定核发出的卸载请求中标识的虚拟地址和/或物理地址的高速缓存条目无效/将其清除,使得一致性同步器136仅对系统100中的其他核复合体执行高速缓存探测。在其他示例中,一致性同步器136直接接收卸载请求并且对系统100中的所有核复合体执行高速缓存探测。可以采用存储器围栏来确保指令队列中的较新的非卸载指令不访问卸载请求中标识的虚拟地址和/或物理地址的任何高速缓存条目,直到这些高速缓存条目已经被无效或清除为止。以此方式,防止较新的非卸载指令访问旧的高速缓存数据,并且必须替代地从主存储器检索数据(主存储器可能已经被先前的卸载请求修改)。在适当的高速缓存操作已经完成之后,卸载请求被传输到存储器控制器134以用于卸载到卸载目标设备。以下将更详细地描述一致性同步器的操作。

在一些具体实施中,存储器控制器134接收卸载请求,该卸载请求可被配置为具有指示I/O请求是卸载请求的标志的I/O请求(例如,写入请求)。在这些具体实施中,存储器控制器134解码该请求以确定该请求是卸载请求,并且标识卸载指令以及用于完成该卸载请求的操作数。存储器控制器134经由指向位于来自卸载请求的卸载目标设备中的命令缓冲区的指针来标识所请求的操作。存储器控制器134将卸载请求分解成被传输到卸载目标设备的一个或多个命令。在目标设备是PIM设备的示例中,该请求可以是由存储器控制器134分成一个或多个PIM命令的PIM请求。

在图1所描绘的示例中,处理器101耦合到包括用于存储数据的一个或多个存储器阵列142的存储器设备138。在一些示例中,存储器设备138为堆叠式动态随机存取存储器(DRAM)设备,包括堆叠在与处理器101对接的存储器接口逻辑管芯上的多个存储器管芯。例如,存储器设备138可以为高带宽存储器(HBM)模块或混合存储器立方体(HMC)模块。在其他示例中,存储器设备138可以为内联存储器模块,诸如包括存储器接口逻辑的双列直插式存储器模块(DIMM)。存储器控制器134向存储器设备138的存储器逻辑140发出命令,诸如读取请求、写入请求,以及其他存储器操作。在一些具体实施中,可以将由存储器控制器134传输到存储器设备138的命令标记为卸载命令。

在一些实施方案中,存储器设备138包括存储器内嵌处理(PIM)设备,其中存储器逻辑140被设计成在存储器设备138内执行存储器操作和一组非存储器操作或功能(例如,算术和逻辑操作)。在一些具体实施中,存储器设备138包括单独的寄存器文件144,该单独的寄存器文件可用于提供操作数以由功能操作。

在卸载目标是存储器设备138并且存储器设备是PIM设备的实施方案中,存储器设备138从处理器101的存储器控制器134接收根据卸载请求生成的卸载命令。在图1所描绘的示例中,存储器逻辑140耦合到固定功能模块146以用于实施PIM请求中所标识的固定功能。固定功能模块146可包括命令缓冲区,该命令缓冲区填充有在包括卸载指令的线程被启动之后待由操作系统通过固定功能模块146执行的实际命令。在一些具体实施中,每个卸载指令的操作码包括针对也在卸载目标设备中执行的操作(加载、存储、相加、相减、相乘、递增等)的命令的嵌入式指针。当从卸载指令生成卸载请求时,该指针也被包括在卸载请求中。在这些具体实施中,当生成卸载命令时,存储器控制器使用卸载请求中的指针来标识卸载目标设备的命令缓冲区中包括用于该操作的实际命令的位置。

考虑其中存储器设备为PIM设备并且在编译时编译器系统分配寄存器文件144中的寄存器r1并且向固定功能模块146发出乘法指令的简单示例。在该简化示例中,考虑核106接收以下指令:

pimLd r1,[5000];

pimOp r1,r1,10;

pimSt[6000],r1;

其中pimLd是remote_load指令,pimOp是remote_op指令,并且pimSt是remote_store指令。如先前所讨论的,核生成被传输到存储器控制器的PIM请求。存储器控制器134接收PIM请求序列(按原始机器代码中指示的程序顺序相同的程序顺序接收)。在该示例中,存储器控制器134接收第一PIM请求,该第一PIM请求包括加载操作,该加载操作具有作为寄存器r1的目的地操作数和作为存储器阵列142中的物理存储器地址5000的源操作数。存储器控制器134将一个或多个命令传输到存储器逻辑140以用于读取地址5000并且将数据加载到寄存器文件144中的寄存器r1中。存储器控制器134然后接收包括远程执行指令的第二PIM请求,该远程执行指令具有作为寄存器r1的目的地操作数、作为寄存器r1的源操作数和作为从PIM请求获得的标量值(例如,10)的源操作数,以及指向固定功能模块146中的乘法指令的指针。存储器控制器134将一个或多个命令传输到存储器逻辑140以用于执行固定功能模块146中的乘法指令,其中存储器逻辑140的ALU用于将r1中的数据乘以10,并且将结果写入到寄存器r1。存储器控制器134然后接收第三PIM请求,该第三PIM请求是具有作为存储器阵列142中的物理存储器地址6000的目的地操作数和作为寄存器r1的源操作数的存储操作。存储器控制器134将一个或多个命令传输到存储器逻辑140以用于将寄存器r1中的数据存储在由物理存储器地址6000标识的存储器位置中。

在一些示例中,一致性同步器136和存储器控制器134可以在不同于实施核复合体102、104的管芯154、156的I/O管芯150上实施。I/O管芯150可通过一个或多个通道耦合到包括存储器逻辑140和固定功能模块146的存储器接口管芯(未示出)。各自包括存储器阵列142的一个或多个存储器部件可以堆叠在存储器接口管芯的顶部上,并且使用穿硅通孔耦合到存储器接口管芯。I/O管芯150可通过片上结构耦合到核复合管芯154、156。

图2提出了例示根据本公开的各种实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性系统200的框图。图2的示例类似于图1的示例性系统,因为系统200还包括多核处理器101。示例性系统200与图1的示例性系统100的不同之处在于,卸载目标设备是耦合到存储器设备250的加速器238。加速器238被处理器101用来远程执行所卸载指令。例如,所卸载指令可以为循环迭代、子例程、子例程主体的子集,或如上文所论述的其他连续代码段。在该实施方案中,如上所述,加速器238的行为类似于被配置为PIM设备的存储器设备138,因为由处理器101实施的扩展ISA可用于将指令卸载到加速器238。然而,加速器238可用于对不是PIM设备的存储器设备(例如,存储器设备250)中的数据执行所卸载指令。

加速器238包括加速器逻辑,该加速器逻辑包括被设计成在加速器238内执行存储器操作(加载/存储)和非存储器操作(例如,算术和逻辑操作)的处理资源。例如,加速器238可以从存储器设备250加载数据、对数据执行计算,并且将数据存储在存储器设备250中。在一些具体实施中,加速器238被设计成实施一组固定功能,该组固定功能可由加速器逻辑240执行。在这些具体实施中,加速器238包括用于提供执行固定功能所需的操作数的寄存器文件244。寄存器文件244中的寄存器可在卸载指令中作为使用上述扩展ISA的源或目的地操作数的目标。

加速器238从处理器101的存储器控制器134接收根据卸载请求生成的卸载命令。在图2所描绘的示例中,加速器逻辑240耦合到固定功能模块246以用于实施在PIM请求中标识的一组固定功能。固定功能模块246可包括存储将由固定功能模块246执行的实际命令的命令缓冲区。当启动包括卸载指令的应用程序线程时,由操作系统填充命令缓冲区。卸载命令的处理类似于上文所讨论的由存储器设备138执行的卸载命令的处理,不同之处在于存储器阵列不是加速器238本地的,因为它在存储器设备138中。

为了进一步解释,图3提出了例示根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的示例性方法的流程图。图3的示例性方法包括接收302被指定用于由目标设备远程执行的多个指令306,其中多个指令306中的每一个指令包括目标设备中的作为操作数的目标寄存器。在一些具体实施中,接收302被指定用于由目标设备远程执行的多个指令306,其中多个指令306中的每一个指令包括目标设备中的作为操作数的目标寄存器,由接收多个卸载指令的处理器核308执行,其中每个卸载指令包括标识卸载目标设备中的远程寄存器的操作数,如以上所讨论的。例如,卸载目标设备可以是PIM设备或耦合到存储器设备的加速器。处理器核308可以是例如图1中所描绘的处理器核106、108、110、112中的任一者。

在图3的示例中,多个指令306可以是包括在卸载事务中的卸载指令。一个或多个卸载事务可以交织在包括非卸载指令(即,常规指令)的机器语言代码内。在一些示例中,卸载事务的开始和结束在代码中指示,使得核308可至少识别卸载指令序列的结束。在一些情况下,编译器系统可以使用应用程序的源代码中的编程提示来识别应当被呈现为指定用于远程执行的卸载指令的源代码的部分。例如,程序员可以使用由编译器系统提供的API来提供源代码的特定部分应当被呈现为卸载指令的指示。在一些情况下,编译器系统可以将源代码的特定部分识别为可以由远程执行优化的代码,并且可在包括卸载指令的机器语言代码中呈现该源代码。

在图3的示例中,核308可以实施上文所讨论的扩展ISA,使得被指定用于远程执行的多个指令306中的每一个指令是由远程加载指令、远程处理指令和远程存储指令组成的一组操作中的一个操作。如上所述,扩展ISA定义这些指令,以及由远程执行的操作使用的在卸载目标设备本地的远程寄存器文件。多个指令306中的每一个指令包括在扩展ISA中指定的目标设备中的作为操作数的远程寄存器中的至少一个远程寄存器。卸载目标设备中的这些远程寄存器不占用核308内的存储空间。远程寄存器用于创建多个指令306之间的数据依赖性,并且用于跟踪在将执行指令的卸载目标处的寄存器使用。在一些具体实施中,任何卸载指令的目的地操作数或至少一个源操作数是卸载目标设备中的远程寄存器。

考虑多个指令306中的指令是remote_load或remote_store指令的示例。在该示例中,remote_load指令包括作为卸载目标设备中的远程寄存器的目的地操作数和作为指向虚拟地址空间或物理地址空间中的存储器位置的指针的源操作数;类似地,remote_store指令包括目的地和源操作数,目的地是指向虚拟地址空间或物理地址空间中的存储器位置的指针,并且源操作数是卸载目标设备中的远程寄存器。

考虑其中多个指令306中的指令为remote_op指令的另一个示例。在该示例中,remote_op指令包括作为卸载目标设备中的远程寄存器的目的地操作数,以及可以是卸载目标设备中的远程寄存器或处理器核本地的通用寄存器的两个以上的源操作数。在处理器核本地的通用寄存器可包括根据非卸载指令计算出的数据。任何remote_op计算的结果被存储在卸载目标设备的目的地远程寄存器中,并且可用于卸载指令序列中的另外的计算或者作为remote_store操作的一部分写入存储器。在一些示例中,remote_op指令(以及remote_load和remote_store指令)包括指向卸载目标设备中的命令缓冲区位置的指针,该命令缓冲区位置存储卸载目标设备内的实际操作码和远程寄存器操作数。指向命令缓冲区的指针可以由编译器系统提供,该编译器系统可作为用于remote_op指令的元数据而传递通过核。在其他示例中,可以推断与卸载指令相关联的操作(例如,由存储器逻辑140从指令306的序列推断)。在该示例中,核308不需要对由卸载目标设备实施的特定操作进行解码。

图3的方法还包括针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令。在一些具体实施中,针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求包括被指定用于远程执行的指令,该指令由处理器核308以请求分组的形式生成卸载请求310来执行,该请求分组包括卸载指令以及与卸载指令相关的标头和/或元数据。在一些示例中,请求分组包括指示请求是用于远程执行的卸载请求的标头或标志。在一些示例中,请求分组包括指示指令是remote_load、remote_op还是remote_store指令的指令字段。请求分组可包括两个或更多个操作数字段,其中操作数可以是目标设备中的远程寄存器、物理存储器地址,以及从处理器核308本地的通用寄存器获得的值。在remote_op指令的情况下,请求分组可包括包含指向卸载目标设备中的命令缓冲区条目的指针的字段。当应用程序是多线程应用程序时,卸载请求310还可包括核308的线程标识符。

在一些具体实施中,指令306是包括开始标记、指令306和结束标记的卸载事务的一部分。在这些示例中,在指令306退出之后,可以保持包括在卸载事务中的指令306,直到卸载事务中的所有指令306已经退出。即,当每个指令的所有操作数数据可用于包括在每个请求中时(例如,所生成的存储器地址、从其他非卸载指令计算出的寄存器值),使卸载指令退出。如果具有结束标记(以指示卸载事务的结束)的卸载指令已经退出,并且所有指令306已经退出,则可以从处理器核308发出卸载请求。因此,对应于多个指令(例如,在卸载事务中)的多个卸载请求在所有指令已经(例如,从重排序缓冲区)退出之后被传输。以此方式,可以保存卸载事务中的多个指令306的编程顺序以促进使用远程寄存器来保持数据依赖性。

在一些具体实施中,FIFO结构可用于在退出之后但在从处理器核308发出之前保持卸载事务中的卸载指令序列。

在一些具体实施中,在从核308分派卸载请求310之后,在一致性同步器(例如,一致性同步器136)处直接从处理器核308或者从包括处理器核308的核复合体的L3高速缓存接收卸载请求310,如以下更详细解释的。一致性同步器136可以执行高速缓存操作以使包括对应于包含在卸载请求310中的存储器地址的高速缓存条目的高速缓存(包括其他处理器核和核复合体的高速缓存)中的数据无效或清除数据。一旦一致性同步器确定(例如,根据无效探测响应)对应于包括在卸载请求310中的存储器地址的所有高速缓存条目已经被无效,则卸载请求310被转发到存储器控制器134以通过链路传输到卸载目标(例如,存储器设备的存储器接口)。存储器控制器134可以传输卸载请求310作为卸载命令的一部分。读者应当理解,通过使用利用远程寄存器的远程执行,没有数据(除了包括在命令中的数据之外)在卸载目标设备与处理器101中的数据缓冲区之间传送。

假定卸载指令代码与非卸载指令代码交织,则可能需要在卸载指令代码之前和卸载指令代码之后的显式同步来强制实施数据依赖性,以及卸载指令代码与访问存储器的非卸载指令之间的存储器一致性。例如,程序员可以负责通过指定什么代码可被卸载来确保显式同步。编程器/编译器可以插入常规同步原语,诸如非卸载指令代码和随后的卸载指令代码之间的屏障和存储器栅栏,以便以任何粒度(例如,比典型的64B更宽)建立卸载指令数据访问的一致性。可以采用同步原语来强制实施卸载指令代码和随后的非卸载指令代码之间的相同属性。这种同步原语可用于阻止较新的非卸载指令存储器访问,直到所有卸载指令存储器访问都已更新存储器为止。在本公开中,卸载指令在它们退出之后更新存储器,因此当卸载请求通过一致性同步器136时必须通过在所有核上释放这样的同步原语来保证一致性。

读者应当理解,扩展ISA对于处理器的标准ISA仅需要三个附加的指令。读者将进一步理解,保留用于远程执行的架构寄存器可用于在对所卸载指令的远程执行中强制实施数据依赖性。读者将进一步理解,卸载事务内的所有远程执行的指令由处理器核在退出时间按程序顺序分派并且按相同的程序顺序远程执行,因此允许消除对来自卸载目标设备的原子性强制实施或响应的需要。读者将进一步理解,保留用于远程执行的寄存器不占用系统100内的物理存储空间。

为了进一步解释,图4提出了例示根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。类似于图3的示例性方法,图4的方法还包括接收302被指定用于由目标设备远程执行的多个指令306,其中多个指令306中的每一个指令包括目标设备中的作为操作数的目标寄存器,以及针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令。

在图4的示例性方法中,针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令,包括在被指定用于远程执行的指令中生成402存储器地址。在一些示例中,通过标识指令中的阵列元素并且计算阵列元素的存储器中位置来执行在指定用于远程执行的指令中生成402存储器地址。例如,生成402指定用于远程执行的指令中的存储器地址可以由核308的地址生成单元(AGU)执行。所生成的存储器地址可以为虚拟存储器地址或物理存储器地址。根据本公开,远程执行的指令可以对在虚拟存储器中管理的可高速缓存数据进行操作。

考虑其中被指定用于远程执行的指令是将由卸载目标设备执行的remote_load或remote_store指令的示例。在该示例中,remote_load将指向阵列或向量中的元素的指针标识为源操作数,并且remote_store将指向阵列或向量中的元素的指针标识为目的地操作数。在该示例中,核308的AGU通过计算所标识元素的存储器中位置(即,源或目的地存储器操作数)来生成存储器地址。

在图4的方法中,针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令,还包括将所生成的存储器地址与卸载请求耦合404。在一些示例中,当计算出的存储器地址变得可用时,通过将所生成的存储器地址存储在卸载请求的存储器地址字段中来执行将所生成的存储器地址耦合404在卸载请求中。例如,卸载请求可被生成并且排队以等待存储器地址生成,以及其他数据。一旦用于存储器操作数的存储器地址变得可从AGU获得,就将存储器地址插入到卸载请求的存储器地址字段中。以此方式,当卸载目标设备接收到卸载请求时,该卸载目标设备不需要访问处理器寄存器来执行地址生成,该卸载目标设备也不需要使用其自身的资源来生成地址。因此,当执行远程指令诸如remote_load或remote_store指令时,该卸载目标设备从核308接收完成指令所必需的所有信息,包括可执行操作、在执行该操作时将使用的卸载目标设备本地的目标寄存器,以及用作加载/存储源/目的地操作数的存储器操作数。

为了进一步解释,图5提出了例示根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。类似于图3的示例性方法,图5的方法还包括接收302被指定用于由目标设备远程执行的多个指令306,其中多个指令306中的每一个指令包括目标设备中的作为操作数的目标寄存器,以及针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令。

在图5的示例性方法中,针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令,包括获得502被指定用于远程执行的指令的本地数据。在一些示例中,获得502被指定用于远程执行的指令的本地数据包括从本地处理器寄存器读取数据或从旁路网络转发的数据。在这些示例中,指定用于远程执行的指令标识包含在用于执行指令的处理器系统(例如,图1中的处理器101)本地的数据的处理器寄存器。例如,指令标识保存从其他非卸载指令计算的数据(例如,标量值)的寄存器。

考虑被指定用于远程执行的指令是remote_op指令的示例。在该示例中,remote_op指令将远程寄存器(即,卸载目标设备的寄存器)标识为目的地操作数以及作为核308的本地寄存器的至少一个源操作数。在该示例中,remote_op指令与包括指向卸载目标设备中的命令缓冲区条目的指针的元数据相关联。当源数据在本地寄存器中变得可用时,通过从本地寄存器读取数据来获得源数据。

在图5的方法中,对于多个指令306中的每一个指令按所接收的顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令,还包括将本地数据与卸载请求耦合504。在一些示例中,在数据变得可用之后,通过将从本地寄存器或处理器核308旁路网络读取的数据复制到卸载请求的源操作数字段中来执行将本地数据与卸载请求耦合504。例如,卸载请求可被生成并且排队以等待从其他非卸载指令计算的数据,以及其他数据。一旦数据在本地处理器寄存器中或经由处理器核308的旁路网络(未示出)变得可用,数据就被插入到卸载请求的源操作数字段中。以此方式,当卸载目标设备接收到卸载请求时,该卸载目标设备不需要访问处理器寄存器(例如,存储器映射的寄存器)来执行操作,该卸载目标设备也不需要使用其自身的资源来计算标量值。因此,当执行远程指令诸如remote_op指令时,卸载目标设备从核308接收完成指令所必需的所有信息,包括可执行操作、卸载目标设备本地的用于存储操作结果的目的地寄存器、作为从核308获得的数据的至少一个源操作数,以及指向卸载目标设备的固定功能模块中的命令缓冲区条目的指针。

为了进一步解释,图6提出了例示根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。类似于图3的示例性方法,图6的方法还包括接收302被指定用于由目标设备远程执行的多个指令306,其中多个指令306中的每一个指令包括目标设备中的作为操作数的目标寄存器,以及针对多个指令306中的每一个指令按所接收的顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令。

在图6的示例性方法中,针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令,包括缓冲602卸载请求直到多个指令中最老的指令已经退出。在一些示例中,通过检测包含多个指令306的卸载事务的开始和结束并且延迟指令306中的任何指令的传输直到卸载事务中的最后一个指令已经退出,执行缓冲602卸载请求直到多个指令中最老的指令已经退出的操作。在这些示例中,可以采用标记卸载事务的开始和结束的特殊指令来描绘卸载事务的边界,使得卸载事务可以表示一组所卸载指令。在一些具体实施中,当卸载事务中的对应的卸载指令退出时,使用FIFO来缓冲每个卸载请求。一旦多个指令306中最老的指令退出,FIFO中未决的卸载请求就被分派以传输到卸载目标设备,从而保存指令序列和依赖性。在一些示例中,接收指示卸载事务结束的特殊指令。在该指令退出时,可以确定卸载事务中的所有指令已退出。当在存储器控制器134处被接收时,被顺序接收的卸载请求被用于生成以顺序排序被传输到卸载目标的卸载命令。以此方式,卸载事务内的所有远程执行的指令由核按程序顺序分派,并且按相同的程序顺序远程执行。

为了进一步解释,图7提出了例示根据本公开的实施方案的用于使用固定功能操作的对所卸载指令的处理器引导的执行的另一个示例性方法的流程图。类似于图3的示例性方法,图7的方法还包括接收302被指定用于由目标设备远程执行的多个指令306,其中该多个指令306中的每一个指令包括目标设备中的作为操作数的目标寄存器,以及针对多个指令306中的每一个指令按其接收顺序传输304卸载请求310,该卸载请求310包括被指定用于远程执行的指令。

图7的示例性方法还包括对包含与卸载请求310中所包括的存储器地址相对应的条目的一个或多个高速缓存执行702高速缓存操作,其中高速缓存操作包括使包含干净数据的高速缓存条目无效和清除包含脏数据的高速缓存条目中的至少一种操作。在一些具体实施中,对包含与卸载请求310中所包括的存储器地址相对应的条目的一个或多个高速缓存执行702高速缓存操作,其中高速缓存操作包括使包含干净数据的高速缓存条目无效和清除包含脏数据的高速缓存条目中的至少一种操作,该至少一个操作由一致性同步器704(例如,图1中的一致性同步器136)执行,该一致性同步器接收卸载请求、标识卸载请求中所包括的存储器地址操作数,以及将探测传输到耦合到一致性同步器704的每个核复合体中的高速缓存。

在一些示例中,高速缓存探测使高速缓存条目中对应于待针对remote_load指令读取的存储器地址的干净数据无效,以确保该remote_load指令读取卸载请求期间的最新副本。在一些示例中,高速缓存探测将高速缓存条目中对应于待针对remote_load或remote_op指令读取的存储器地址的脏数据清除到存储器,使得卸载目标设备利用存储在高速缓存条目中的最新数据。在一些示例中,高速缓存探测使对应于待写入的存储器地址或remote_store指令的高速缓存条目中的数据无效,使得较新的指令不从高速缓存读取可能由remote_store指令更改的数据。接收高速缓存探测的每个高速缓存将探测响应发送回一致性同步器,指示适当的高速缓存操作已完成。当已经接收到探测响应时,卸载请求可以被转发到存储器控制器134以用于传输到卸载目标设备。一致性同步器704可以等到卸载事务中的所有卸载请求的高速缓存操作已完成(即,已经接收到所有卸载请求的探测响应),然后再将卸载请求转发到存储器控制器,或者可以在其探测操作(如果有的话)完成时顺序地转发每个请求。

在这些示例中,针对给定卸载事务的所有卸载请求执行高速缓存操作。在一些具体实施中,一致性同步器采用探测过滤器,该探测过滤器指示对于给定事务的所有卸载请求,不需要清除来自核的任何数据或不需要使来自核的任何数据无效。在这种情况下,卸载请求被转发到存储器控制器而不等待探测响应到达。否则,在卸载请求被发送到存储器控制器之前,卸载请求在探测过滤器处等待脏数据被发送到存储器控制器。读者应当理解,卸载请求可以通过使探测无效来强制实施一致性,并且可以在甚至不等待探测完成的情况下继续访问存储器,只要高速缓存中没有脏行将被卸载指令读取即可。读者还应当理解,通过一致性同步器704,高速缓存探测可以与多个核复合体中的多个最后一级高速缓存通信,以跨这些多个核复合体强制实施一致性,这对于多线程应用程序是有利的。

在一些实施方案中,每个卸载请求310被直接传输到一致性同步器704。在这些实施方案中,一致性同步器704标识所接收的卸载请求中的存储器地址操作数,并且向每个连接的核复合体中的每个高速缓存传输高速缓存探测。高速缓存探测请求根据包括在卸载请求中的操作码(即,remote_load、remote_store、remote_op)来使数据无效或清除数据。

考虑使用图1的示例,其中核106传输由一致性同步器136接收的卸载请求。一致性同步器136标识请求中的存储器地址操作数,并且向核复合体102中的L3高速缓存130和L3高速缓存132发送针对存储器地址的高速缓存探测。高速缓存探测指示应当使对应于存储器地址的高速缓存条目中的干净数据无效或者应当清除对应于存储器地址的高速缓存条目中的脏数据。核复合体102中的L3高速缓存130中的高速缓存逻辑接收探测请求,在适当的情况下执行高速缓存操作,并且将探测请求转发到L2高速缓存114、116。L2高速缓存114、116中的高速缓存逻辑接收探测请求,在适当的情况下执行高速缓存操作,并且将探测请求转发到相应的L1高速缓存122、124。L1高速缓存122、124中的高速缓存逻辑接收探测请求,并且在适当的情况下执行高速缓存操作。L1高速缓存122、124向L2高速缓存114、116发送探测响应,L2高速缓存向L3高速缓存130发送探测响应,L3高速缓存向一致性同步器136发送探测响应,指示核复合体102中的所有高速缓存对于卸载请求310是同步的。在核复合体104中执行相同的过程。一旦一致性同步器136已经接收到指示两个核复合体102、104中的所有高速缓存120至132对于卸载请求310是同步的探测响应,卸载请求就准备好转发到存储器控制器134。

在一些实施方案中,每个卸载请求310通过核308的每个连续高速缓存级被传输到一致性同步器704。在这些实施方案中,核308的每个高速缓存级(L1、L2、L3)中的高速缓存逻辑标识请求中的存储器操作数,并且执行高速缓存操作以使与存储器地址相对应的高速缓存条目中的数据无效或清除数据;核308的L3高速缓存标识所接收的卸载请求中的存储器地址操作数,并且将高速缓存探测传输到核复合体中的其他核的每个高速缓存。当一致性同步器接收到卸载请求时,一致性同步器704标识所接收的卸载请求中的存储器地址操作数,并且将高速缓存探测传输到其他核复合体。高速缓存探测请求根据包括在卸载请求中的操作码(即,remote_load、remote_store、remote_op)来使数据无效或清除数据。

考虑使用图1的示例,其中核110传输由核110的L1高速缓存126接收的卸载请求。L1高速缓存126中的高速缓存逻辑标识卸载请求中的存储器地址操作数,执行高速缓存操作以使对应于存储器地址的高速缓存条目中的数据无效或清除数据,并且将卸载请求转发到核110的L2高速缓存118。L2高速缓存118中的高速缓存逻辑标识卸载请求中的存储器地址操作数,执行高速缓存操作以使对应于存储器地址的高速缓存条目中的数据无效或清除数据,并且将卸载请求转发到核110的L3高速缓存132。核复合体104中的L3高速缓存132中的高速缓存逻辑标识卸载请求中的存储器地址操作数,执行高速缓存操作以使对应于存储器地址的高速缓存条目中的数据无效或清除数据,并且将探测请求发送到核复合体104中的另一个核112的L2高速缓存120。L2高速缓存120中的高速缓存逻辑接收探测请求,在适当的情况下执行高速缓存操作,并且将探测请求转发到核112的L1高速缓存128。L1高速缓存128中的高速缓存逻辑接收探测请求,并且在适当的情况下执行高速缓存操作。L1高速缓存128向L2高速缓存120发送探测响应,L2高速缓存向L3高速缓存132发送探测响应,L3高速缓存向一致性同步器136转发探测响应,指示核复合体104中的所有高速缓存对于卸载请求310是同步的。

在该示例中,当一致性同步器136接收到卸载请求310时,一致性同步器标识请求中的存储器地址操作数,并且向核复合体102中的L3高速缓存130发送针对存储器地址的高速缓存探测。高速缓存探测指示应当使对应于存储器地址的高速缓存条目中的干净数据无效以及/或者应当清除对应于存储器地址的高速缓存条目中的脏数据。核复合体102中的L3高速缓存130中的高速缓存逻辑接收探测请求,在适当的情况下执行高速缓存操作,并且将探测请求转发到L2高速缓存114、116。L2高速缓存114、116中的高速缓存逻辑接收探测请求,在适当的情况下执行高速缓存操作,并且将探测请求转发到相应的L1高速缓存122、124。L1高速缓存122、124中的高速缓存逻辑接收探测请求,并且在适当的情况下执行高速缓存操作。L1高速缓存122、124向L2高速缓存114、116发送探测响应,L2高速缓存向L3高速缓存130发送探测响应,L3高速缓存向一致性同步器136发送探测响应,指示核复合体102中的所有高速缓存对于卸载请求310是同步的。

鉴于以上描述,读者应当理解,根据本公开的实施方案提供许多优点。在这些实施方案中,基于CPU的ISA具有一组指令以及保留用于远程执行的架构寄存器文件。例如,当耦合到PIM设备时,远程寄存器文件物理上位于存储器中(其中发生由新指令和寄存器保存的数据所指示的计算)。远程寄存器定义远程执行指令之间的数据依赖性,并且指示在将执行代码的远程设备处的寄存器活跃度。实施方案不需要广泛的解码器修改来支持针对所有类型的所卸载操作的ISA扩展,因为指示存储待由卸载目标设备执行的实际操作的命令缓冲区条目的指针或其他元数据可以被包括在卸载请求中,使得CPU核不需要解码将由卸载目标设备中的固定功能模块执行的特定操作。此外,在此描述的架构不需要跟踪地址的时间重用的附加结构。

读者应当理解,根据本公开的实施方案将卸载事务提供为被卸载以供远程执行的线性指令序列。卸载事务内的所有远程执行的指令由CPU核在退出时间按程序顺序分派,并且按相同的程序顺序远程执行。

读者应当理解,根据本公开的实施方案提供了用于卸载保持存储器一致性和连贯性的指令的远程执行流。远程执行的指令对在虚拟存储器中管理的可高速缓存数据进行操作。通过由一致性同步器实施的高速缓存探测来强制实施CPU核和其他核以及核复合体中的高速缓存一致性。

读者应当理解,根据本公开的实施方案不要求卸载目标设备与CPU核之间的往返通信。由于卸载请求在卸载指令已经在CPU核中退出之后由卸载目标设备履行,因此不需要从卸载目标设备回到CPU核的附加通信。

读者应当理解,根据本公开的实施方案支持任何类型的CPU流水线清除,因为卸载指令如同常规指令一样流经CPU流水线。

实施方案可以是系统、装置、方法和/或逻辑电路。本公开中的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或者以一种或多种编程语言的任何组合编写的源代码或目标代码,编程语言包括诸如Smalltalk、C++等面向对象的编程语言,以及诸如“C”编程语言或类似编程语言的常规过程编程语言。在一些实施方案中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令。

本公开的各方面在此参考根据本公开的一些实施方案的方法、装置(系统)和逻辑电路的流程图图示和/或框图进行描述。应当理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以通过逻辑电路来实现。

逻辑电路可以在处理器、其他可编程数据处理装置或其他设备中实施,导致在处理器、其他可编程装置或其他设备上执行一系列操作步骤以得到计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现在流程图和/或框图的一个或多个框中指定的功能/动作。

图中的流程图和框图示出了根据本公开的各种实施方案的系统、方法和逻辑电路的可能具体实施的架构、功能和操作。就这一点而言,流程图或框图中的每个框可以表示指令的包括用于实现指定逻辑功能的一个或多个可执行指令的模块、段或部分。在一些另选的具体实施中,框中指出的功能可以不按照图中指出的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反顺序执行。还将注意到,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可由执行指定功能或动作或者执行专用硬件和计算机指令的组合的基于专用硬件的系统来实现。

本公开的优点和特征可通过以下陈述进一步描述:

1.一种使用固定功能操作的对所卸载指令的处理器引导的执行的方法,所述方法包括:接收被指定用于由目标设备远程执行的一个或多个指令;以及针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令。

2.根据陈述1所述的方法,其中所述一个或多个指令中的每一个指令包括所述目标设备中的作为操作数的目标寄存器;并且其中处理器实施将所述目标寄存器标识为虚拟寄存器的指令集架构扩展。

3.根据陈述1至2中任一项所述的方法,其中所述一个或多个指令中的每一个指令包括来自由处理器实施的指令集架构扩展中的操作码组的操作码;并且其中所述指令集架构扩展中的所述操作码组由远程加载操作码、远程计算操作码和远程存储操作码组成。

4.根据陈述1至3中任一项所述的方法,其中针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令,包括:生成被指定用于远程执行的所述指令的存储器地址;以及将所述存储器地址与所述卸载请求耦合。

5.根据陈述1至4中任一项所述的方法,其中针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令,包括:获得被指定用于远程执行的所述指令的本地数据;以及将所述本地数据与所述卸载请求耦合。

6.根据陈述1至5中任一项所述的方法,其中针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令,包括:缓冲所述卸载请求,直到所述一个或多个指令中最老的指令已经退出;以及针对所述一个或多个指令中的每一个指令按其接收顺序传输卸载请求。

7.根据陈述1至6中任一项所述的方法,还包括:对包含与所述卸载请求中所包括的存储器地址相对应的条目的一个或多个高速缓存执行高速缓存操作,其中所述高速缓存操作包括使包含干净数据的高速缓存条目无效和清除包含脏数据的高速缓存条目中的至少一种操作。

8.根据陈述1至7中任一项所述的方法,其中所述高速缓存操作对多个高速缓存执行,所述多个高速缓存包含对应于所述卸载请求中所包括的存储器地址的条目,并且其中所述多个高速缓存跨多个核集群分布,每个核集群包括多个处理器核。

9.根据陈述1至2中任一项所述的方法,其中所述目标设备是存储器内嵌处理设备。

10.根据陈述1至2中任一项所述的方法,其中所述目标设备是耦合到存储器设备的加速器。

11.一种多核处理器,所述多核处理器被配置为:接收被指定用于由目标设备远程执行的一个或多个指令;以及针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令。

12.根据陈述11所述的处理器,其中所述一个或多个指令中的每一个指令包括所述目标设备中的作为操作数的目标寄存器;并且其中所述处理器实施将所述目标寄存器标识为虚拟寄存器的指令集架构扩展。

13.根据陈述11至12中任一项所述的处理器,其中所述一个或多个指令中的每一个指令包括来自由所述处理器实施的指令集架构扩展中的操作码组的操作码;并且其中所述指令集架构扩展中的所述操作码组由远程加载操作码、远程计算操作码和远程存储操作码组成。

14.根据陈述11至13中任一项所述的处理器,其中针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令,包括:缓冲所述卸载请求,直到所述一个或多个指令中最老的指令已经退出;以及针对所述一个或多个指令中的每一个指令按其接收顺序传输卸载请求。

15.根据陈述11至14中任一项所述的处理器,还包括:对包含与所述卸载请求中所包括的存储器地址相对应的条目的一个或多个高速缓存执行高速缓存操作,其中所述高速缓存操作包括使包含干净数据的高速缓存条目无效和清除包含脏数据的高速缓存条目中的至少一种操作。

16.一种系统,所述系统包括:存储器内嵌处理(PIM)设备;以及多核处理器,所述多核处理器耦合到所述PIM设备,所述处理器被配置为:接收被指定用于由所述PIM设备远程执行的一个或多个指令;以及针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令。

17.根据陈述16所述的系统,其中所述一个或多个指令中的每一个指令包括所述PIM设备中的作为操作数的目标寄存器;并且其中所述处理器实施将所述目标寄存器标识为虚拟寄存器的指令集架构扩展。

18.根据陈述16至17中任一项所述的系统,其中所述一个或多个指令中的每一个指令包括来自由所述处理器实施的指令集架构扩展中的操作码组的操作码;并且其中所述指令集架构扩展中的所述操作码组由远程加载操作码、远程计算操作码和远程存储操作码组成。

19.根据陈述16至18中任一项所述的系统,其中针对所述一个或多个指令中的每一个指令,传输卸载请求,所述卸载请求包括被指定用于远程执行的所述指令,包括:缓冲所述卸载请求,直到所述一个或多个指令中最老的指令已经退出;以及针对所述一个或多个指令中的每一个指令按其接收顺序传输卸载请求。

20.根据陈述16至19中任一项所述的系统,还包括:对包含与所述卸载请求中所包括的存储器地址相对应的条目的一个或多个高速缓存执行高速缓存操作,其中所述高速缓存操作包括使包含干净数据的高速缓存条目无效和清除包含脏数据的高速缓存条目中的至少一种操作。

虽然已经参考本公开的实施方案具体地示出和描述了本公开内容,但应当理解,在不脱离所附权利要求的精神和范围的情况下,可以在其中进行形式和细节上的各种改变。因此,本文所描述的实施方案应当被认为仅是描述性的,而不是为了限制的目的。本公开不是由具体实施方式限定,而是由所附权利要求限定,并且在该范围内的所有差异将被解释为包括在本公开内容中。

相关技术
  • 数据储存装置、存储器操作方法及操作指令执行方法
  • SIMD指令执行方法、装置及处理器
  • 执行乘加指令的处理器和对分组数据执行乘加操作的系统
  • 具有执行送数指令执行部件的数据处理器及其操作方法
技术分类

06120116213883