用于矩阵运算的加速器系统和方法与流程

文档序号:22469624发布日期:2020-10-09 21:58阅读:103来源:国知局
用于矩阵运算的加速器系统和方法与流程

本公开涉及加速器电路,具体地涉及与具有乱序执行能力的处理器核心电路相结合地使用的加速器电路。



背景技术:

加速器通过从其他系统硬件(诸如中央处理单元(cpu)中的处理器电路)卸载重复或耗时的任务来改进系统性能。通常,处理器电路将转移输入数据到加速器电路或使输入数据转移到加速器电路,加速器电路将使用输入数据来执行一个或多个运算,诸如矩阵乘法或卷积运算,以生成输出数据,所述输出数据被传送到处理器电路或者存储在存储器电路中。现代cpu常常包括执行指令的推测执行和/或指令分支预测以改进系统速度、效率和响应性的处理器电路和指令集。加速器电路必须能够适应处理器电路速度和效率增强功能,诸如指令的推测执行、乱序(ooo)指令执行和指令分支预测。

附图说明

随着以下具体实施方式继续进行,并且在参考附图时,所要求保护的主题的各种实施例的特征和优点将变得显而易见,其中相似的标号标明相似的部分,并且在附图中:

图1是依照本文描述的至少一个实施例的说明性系统的框图,所述说明性系统包括通信地耦合到处理器电路的拼贴(tiled)矩阵乘法单元(tmu);

图2是依照本文描述的至少一个实施例的描绘tmu与处理器电路之间的命令和/或数据流的系统的框图;

图3是依照本文描述的至少一个实施例的包括tmu和处理器电路的说明性电子基于处理器的设备的示意图;

图4是依照本文描述的至少一个实施例的使用包括tmu的加速器来对二维拼贴寄存器执行一个或多个运算的说明性方法的高级流程图;

图5a和图5b是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图;

图6a、图6b、图6c和图6d是图示根据本发明的实施例的示例性具体向量友好指令格式的框图;

图7是根据本发明的一个实施例的寄存器架构的框图;

图8a是图示根据本发明的实施例的示例性顺序管线和示例性寄存器重命名乱序发出/执行管线两者的框图;

图8b是图示根据本发明的实施例的要包括在处理器中的顺序架构核心和示例性寄存器重命名乱序发出/执行架构核心两者的示例性实施例的框图;

图9a和图9b图示更具体示例性顺序核心架构的框图,该核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个;

图10是根据本发明的实施例的处理器的框图,所述处理器可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成显卡;

图11、图12、图13和图14是示例性计算机架构的框图;以及

图15是根据本发明的实施例的对比用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。

具体实施方式

拼贴寄存器包括一组二维寄存器,每个二维寄存器具有表示存储器的打包区域的多个行和多个列。拼贴寄存器乘法(tmul)指令集提供改进机器学习(ml)性能的指令集架构(isa)。在执行拼贴寄存器的矩阵乘法时使用tmulisa。本文公开的系统和方法包括一种具有自包含加速器电路的tmu,所述自包含加速器电路被通信地耦合到处理器电路,诸如ooo核心电路。tmu包括tmu缓冲器(tmb)电路以在同时地执行矩阵乘法运算的同时适应进出tmu的拼贴的转移—完全无需来自ooo核心/处理器核心电路(在下文中为“处理器电路”)的协助。tmu包括包含mac计算网格的拼贴矩阵乘法(tmm)电路。tmu包括用于在处理器电路、tmm电路和tmb电路之间通信从而在进一步卸载处理器电路的同时改进tmu的总体效率的tmu控制电路(tmc)。

本文公开的系统和方法提供通信地耦合到处理器电路并能够从处理器电路发送和接收拼贴数据的自主tmu。处理器电路和tmu监视通过tmm电路所执行的矩阵运算的执行和完成。

本文公开的系统和方法有益地提供连续矩阵乘法运算流,同时允许在运算完成时直接访问拼贴寄存器。

本文公开的系统和方法有益地分派拼贴矩阵乘法运算以供执行,解析依赖性,并且一旦乘法运算完成就允许对拼贴的直接处理器电路访问。

本文公开的系统和方法提供一种tmu,其包括:tmc(tmu控制)电路;tmb(tmu缓冲器)电路;tmu分派队列(tdq)电路;以及tmm(矩阵乘法)电路。通信地耦合到tmu的处理器电路包括:重排序缓冲器(rob)电路;保留站(rs)电路;以及tmu影子队列(rs-tdq)电路。在操作中,rs电路将矩阵乘法运算分派给tmu中的tdq电路,这些运算中的每一个均占据tdq电路内的一个条目。矩阵乘法运算保持在tdq电路中,直到tmc电路生成写回(wb)指示并且安排通过tmm电路来执行矩阵乘法运算为止。当矩阵乘法运算可用时,tmc电路将矩阵乘法运算分派给tmm电路并且生成被传送到rs电路的tdq分派通知。

在处理器电路内,rs电路向rob电路发出完成指示。rob电路提交矩阵乘法运算并且允许回收拼贴寄存器的重命名副本。在发生相关矩阵乘法运算的情况下,rs电路在运算被写入到tdq电路时或者基于将矩阵乘法运算分派给tmm电路来将相关矩阵乘法运算从处理器电路分派给tmu。在矩阵乘法运算完成时,rs电路将相关拼贴读取分派到存储器操作中。

为了维护一致架构状态,rs电路响应于分支误预测或核清除(nuke)而从tdq电路和rs-tdq电路中清除虚假条目。rs-tdq电路生成要从tdq电路中取消这样的运算的请求并且将该请求传送到tmc电路。tmc电路使用对每个取消的矩阵乘法运算的写回请求来对rs电路做出响应。在这样的情况下,rs电路不将写回传送到rob电路并且矩阵乘法运算被丢弃。

提供了核心电路。所述核心电路包括:处理器电路;重排序缓冲器(rob)电路,该重排序缓冲器(rob)电路被耦合到所述处理器电路;以及保留站(rs)电路,该保留站(rs)电路包括矩阵乘法单元分派影子队列(rs-tdq)电路,所述rs电路用于:将至少一个第一矩阵运算分派给设置在通信地耦合到所述rs电路的矩阵乘法单元(tmu)中的tdq电路;将所述至少一个第一矩阵运算分派给所述rs-tdq电路;在通过所述tmu来执行所述至少一个第一矩阵运算时从所述tmu接收分派指示;向所述rob电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;使所述rob电路提交所述至少一个第一矩阵运算;并且使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路。

提供了一种执行一个或多个拼贴寄存器矩阵乘法运算的方法。所述方法可以包括:通过保留站(rs)电路来将至少一个第一矩阵运算分派给设置在通信地耦合到所述rs电路的矩阵乘法单元(tmu)中的tdq电路;通过所述rs电路来将所述至少一个第一矩阵运算分派给所述rs-tdq电路;通过所述rs电路来向重排序缓冲器(rob)电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;通过所述rs电路来使所述rob电路提交所述至少一个第一矩阵运算;以及通过所述rs电路来使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路。

提供了一种用于执行一个或多个拼贴寄存器矩阵乘法运算的系统。所述系统可以包括:用于将至少一个第一矩阵运算分派给设置在矩阵乘法单元(tmu)中的tdq电路的装置;用于将所述至少一个第一矩阵运算分派给rs-tdq电路的装置;用于向重排序缓冲器(rob)电路传送信号的装置,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;用于使所述rob电路提交所述至少一个第一矩阵运算的装置;以及用于使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路的装置。

提供了一种非暂时性存储设备。所述非暂时性存储设备可以包括指令,所述指令当通过保留站(rs)电路来执行时,使所述rs电路:将至少一个第一矩阵运算分派给设置在通信地耦合到所述rs电路的矩阵乘法单元(tmu)中的tdq电路;将所述至少一个第一矩阵运算分派给所述rs-tdq电路;向重排序缓冲器(rob)电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;使所述rob电路提交所述至少一个第一矩阵运算;并且使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路。

提供了一种tmu。所述tmu可以包括:tmu数据存储缓冲器(tmb)电路;tmu运算队列(tmq)电路;tmu矩阵乘法(tmm)电路;tmu控制(tmc)电路,所述tmu控制(tmc)电路被耦合到所述tmb电路、所述tmq电路和所述tmm电路,所述tmc电路用于:使所述tmb电路在所述tmb电路中存储至少一个拼贴寄存器,所述至少一个拼贴寄存器被从通信地耦合到核心电路的保留站(rs)电路接收,其中所述至少一个拼贴寄存器中的每一个均包括相应的二维数据数组;使所述tmq电路使用所述至少一个拼贴寄存器来存储至少一个第一矩阵乘法运算;使所述tmm电路对所述一个或多个拼贴寄存器执行所述至少一个第一矩阵乘法运算以生成至少一个第一输出拼贴寄存器;使所述tmb电路存储所述至少一个第一输出拼贴寄存器;并且响应于通过所述rs电路接收请求而使所述至少一个第一输出拼贴寄存器转移到所述tmu外部的存储器电路。

提供了一种非暂时性存储设备。所述非暂时性存储设备可以包括指令,所述指令当通过tmu控制(tmc)电路来执行时,使所述tmc电路:使所述tmb电路在所述tmb电路中存储至少一个拼贴寄存器,所述至少一个拼贴寄存器被从通信地耦合到核心电路的保留站(rs)电路接收,其中所述至少一个拼贴寄存器中的每一个均包括相应的二维数据数组;使所述tmq电路使用所述至少一个拼贴寄存器来存储至少一个第一矩阵乘法运算;使所述tmm电路对所述一个或多个拼贴寄存器执行所述至少一个第一矩阵乘法运算以生成至少一个第一输出拼贴寄存器;使所述tmb电路存储所述至少一个第一输出拼贴寄存器;并且响应于通过所述rs电路接收请求而使所述至少一个第一输出拼贴寄存器转移到所述tmu外部的存储器电路。

图1是依照本文描述的至少一个实施例的说明性系统100的框图,所述说明性系统100包括通信地耦合到处理器电路130的tmu110。如图1中所描绘的,tmu110包括tmu控制(tmc)电路112、tmu分派队列(tdq)电路114、tmu缓冲器(tmb)电路116和拼贴矩阵乘法(tmm)电路118。如图1中所描绘的,处理器电路130可以包括处理器核心电路132、重排序缓冲器(rob)电路134、保留站(rs)电路136和rs影子tdq(rs-tdq)电路136。高带宽互连140将tmu110通信地耦合或者链接到处理器电路130。

tmu110使用输入数据(诸如从系统存储器电路和/或处理器高速缓存存储器电路向tmb电路116转移到tmu110的二维(2d)拼贴寄存器)来自主地执行矩阵乘法运算。tmu110接收输入数据以及要使用所接收到的输入数据来执行各种矩阵运算以生成输出数据的指令。在实施例中,tmb电路116包括物理寄存器堆(prf),所述物理寄存器堆(prf)存储、包含或者以其他方式保持所接收到的输入数据和所生成的输出数据中的任何一个或两个。可以从外部存储器电路(系统存储器电路、处理器高速缓存存储器电路等)转移通过tmm电路118所使用的拼贴,并且通过tmm电路118所生成的拼贴在转移到处理器电路130和/或其他外部存储器电路之前可以被存储在tmb电路116中。在实施例中,在tmu110执行多个相关拼贴矩阵运算的情况下,tmb电路116可以存储或者以其他方式保持通过tmm电路118所生成的中间拼贴矩阵。处理器电路130将拼贴矩阵乘法(tmul)指令转换成多个操作,所述多个操作包括但不限于:将输入数据转移到tmb电路116并且将拼贴矩阵乘法运算转移到tdq电路114,包括从分配、重命名和回收中以各种形式管理目的地。tmc电路112管理处理器电路130、tdq电路114、tmb电路116和tmm电路118之间的通信。

当tdq电路114存储或者以其他方式保持从处理器电路130接收的tmul运算时,rs电路134包括tmu影子队列(rs-tdq)电路136。rs-tdq电路136控制tmul运算和所关联的拼贴寄存器。tmu110包括三个接口电路。第一接口电路为从存储器电路加载的拼贴提供对tmb电路116的访问。第二接口电路提供对处理器电路130的访问以存储从tmb电路116读取的拼贴数据。第三接口电路提供对tdq电路114的访问以从处理器电路130接收tmul运算。

处理器电路130引起使拼贴输入数据从系统或处理器存储器电路转移到tmb电路116的存储器加载/转移操作。rs电路134维护转移到tmb电路116的已加载的拼贴输入数据的依赖性。在到tmb电路116的拼贴输入数据加载(用于非相关tmul运算)完成和/或在先tmul运算(用于相关tmul运算)完成时,rs电路134使拼贴输入数据转移到tmm电路118。rs电路134将tmul运算分派给tdq电路114并且在rs-tdq电路136中维护tmul运算的影子副本。rs电路134跟踪tmul运算的进度以确定新tmul何时可以被分派给tmu110并且通过tmm电路118所生成的输出数据何时从tmb电路116转移。

在实施例中,rs电路134将每个tmul运算作为长延迟运算来处置。rs电路134根据提供给tmu110的拼贴输入数据的尺寸来确定唤醒定时。然而,rs电路134不能预测tmul运算的完成和/或tmul何时会准备好通过tmu110分派的定时中的任何一个或两个。

tmc电路112控制通过tmm电路118对tmul运算的执行。在实施例中,tmc电路112执行拼贴寄存器源旁路控制、去往/来自tmb电路116的拼贴寄存器读取/写入操作、调度操作、解析对后期累积的依赖性等。tmu110和处理器电路130共同管理tmb电路116的物理寄存器堆。tmc电路112通过管理tmu110与处理器电路130之间的通信来有利地改进tmu110的效率。在实施例中,tmc电路112接收通过rs电路134所分派的一个或多个运算并且将该一个或多个运算存储在tdq电路114中。rs电路134将一个或多个运算的副本(或影子)存储在rs-tdq电路136中。rs电路134使用存储在rs-tdq电路136中的信息来跟踪通过rs电路134分派给tmu110的一个或多个运算的完成。在实施例中,tdq电路114充当先进先出(fifo)数据存储电路,因此tdq电路114使通过rs电路134所转移的运算以运算被tdq电路114接收的次序执行。存储在tdq电路114中的运算被以从rs电路134接收的次序执行。tdq电路114跟踪头指针和尾指针。在通过rs电路134分派时,tmc电路112通过将运算绑定到存储在tdq电路114中的相应的条目来生成与相应的运算相关联的标识符。涉及运算的tmc电路112与rs电路134之间的每个通信包括与相应的运算相关联的标识符。包括标识符允许通过rs电路134对条目进行适当的唤醒、写回请求和释放。每个运算能够随着tmu资源变得可用而开始和结束,从而允许同时地执行多个运算,有益地改进tmu110的效率。

rs电路134解析tmul运算内的任何依赖性。在一些实施例中,rs电路134管理给tmu110的唤醒指示,所述唤醒指示允许分派两个相关运算,使得这些运算通过tmc电路112在tmu内被对齐。tmc电路112在从tdq电路114向tmm电路118分派tmul运算时向rs电路134传送通知消息。在其他实施例中,在接收到这样的通知时,rs电路134可以分派相关tmul运算。

tmu110包括tmc电路112、tdq电路114、tmb电路116和tmm电路118。在实施例中,tmu可以被形成或者以其他方式设置在半导体小芯片上,所述半导体小芯片又被集成到包含处理器电路130的半导体封装(诸如多芯片模块)中。在其他实施例中,tmu110可以被形成或者以其他方式设置在半导体管芯(诸如包括处理器电路130的片上系统(soc))的一部分上。在实施例中,tmu110经由一个或多个高带宽连接或通信链路直接地或间接地与系统存储器电路进行通信,这样的连接使得能够例如在tmu110与系统存储器之间交换输入数据和输出数据,而不会进一步加重处理器存储器管理单元(mmu)电路的负担。

tmc电路112包括能够在处理器电路130、tdq电路114、tmb电路116和tmm电路118之间进行双向通信的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。tmc电路112从rs电路134接收运算并将所接收到的运算加载到tdq电路114中。在实施例中,tmc电路112以运算被rs电路134分派的次序将所接收到的运算加载到tdq电路中。tmc电路112处置与通过tmm电路118所执行的矩阵乘法相关联的一个或多个操作。这些操作包括但不限于:拼贴寄存器源旁路控制、来自tmb电路116的拼贴寄存器读取和对tmb电路116的写入、在tmm电路118中对运算进行调度以及解析对后期累积的依赖性。

tdq电路114包括能够存储从tmc电路112接收的运算、使运算通过tmm电路118来执行并且随着运算被tmm电路118执行而跟踪头指针和尾指针的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。在实施例中,tdq电路114使得在fifo基础上执行所接收到的运算。在实施例中,tdq电路114响应于接收到通过tmc电路112所生成的分派命令而向tmm电路118分派运算。

tmb电路116包括能够接收并存储或者以其他方式保持转移到tmu110的输入数据以及在将通过tmm电路118所生成的输出数据转移到系统存储器电路和/或处理器高速缓存存储器电路之前接收并存储或者以其他方式保持该输出数据的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。在实施例中,rs电路134在tmul运算结束和/或拼贴加载操作完成时从tmb电路116读取输出数据。

tmm电路118包括能够对从tmb电路116转移的输入数据执行运算和/或数学函数以产生用于转移回到tmb电路116的输出数据的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。在实施例中,从tmb电路116转移到tmm电路118的输入数据包括一个或多个二维拼贴寄存器。在实施例中,从tmm电路118转移到tmb电路116的输出数据包括一个或多个二维拼贴寄存器。在实施例中,tmm电路118可以包括一个或多个mac计算网格。

处理器电路130包括能够执行机器可读指令集的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。在实施例中,处理器电路110可以提供rob电路132的全部或一部分、rs电路134的全部或一部分和/或rs-tdq电路136的全部或一部分。在实施例中,处理器电路110可以包括任何数量的单线程或多线程处理器核心电路。在实施例中,处理器电路110可以包括片上系统(soc)或多芯片模块(mcm)架构。在实施例中,处理器电路110可以包括但不限于任何数量的以下各项和/或它们的组合:控制器、数字信号处理器、微控制器、微处理器、现场可编程门阵列(fpga)、专用集成电路(asic)、精简指令集计算机(risc)和类似物。

rob电路132包括能够存储指令的原始执行顺序或次序使得乱序执行的指令被处理器电路以原始次序执行的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。rob电路132被至少部分地设置在处理器电路130内。在实施例中,处理器电路130可以提供rob电路132的至少一部分。在实施例中,rob电路132可以包括循环缓冲器电路,在所述循环缓冲器电路中指令在被分派时被添加到缓冲器电路的第一端而在完成时被从缓冲器电路的相对端移除。

rs电路134包括能够直接地或间接地使运算、指令和/或数据从处理器电路130和/或存储器电路转移到tmu110的任何数量的任何当前可用的和/或将来开发的电子组件、半导体器件和/或逻辑元件和/或它们的组合。rs电路134被至少部分地设置在处理器电路130内。在实施例中,处理器电路130可以提供rs电路134的至少一部分。

在实施例中,rs电路134包括rs-tdq电路136。在实施例中,当rs电路134向tdq电路114传送指令时,rs电路134在rs-tdq电路136中存储或者以其他方式保持每个指令的影子副本。因此,rs-tdq电路136的内容镜像tmu110中的tdq电路114的内容。rs电路134监视通过tmm电路118经由tmc电路112执行的运算的进度。基于tmu110中的运算的进度,rs电路134可以将相关运算分派给tdq电路114和/或将附加/新运算分派给tdq电路114。rs电路134和tmc电路112交换双向通知。因此,例如,如果先前传送到tmu110的运算被稍后确定为被错误地传送(例如,误预测的分支或不正确的推测执行),则rs电路134可使tmc电路112从tdq电路114中移除运算(和任何相关运算)。

互连140便于tmu110与处理器电路130之间的双向通信。在实施例中,互连140可以包括多个通信信道或路径。在实施例中,互连140可以包括将tmu110与处理器电路130通信地耦合的高带宽连接。

图2是依照本文描述的至少一个实施例的描绘tmu110与处理器电路130之间的命令和/或数据流的系统200的框图。如图2中所描绘的,rs电路134以从rs电路134接收的次序分派220被存储或者以其他方式占据tdq电路114中的一个条目的运算(例如,tmul运算)。同时地,rs电路134将运算的影子副本分派222给rs-tdq电路136。rs电路134使用rs-tdq电路136来跟踪和/或监视传送到tdq电路114的运算。

响应于接收到写回240,tmc电路112对通过tmm电路180对运算的执行进行调度。在tmul运算可用时,tmc电路112将运算分派给tmm电路118并且向rs电路134发出分派指示。rs电路134向rob电路136发出完成指示224。rob电路136提交运算并从tmb电路116回收输出拼贴寄存器。在实施例中,输出拼贴寄存器可以被转移并存储在存储器电路250(诸如系统存储器电路或处理器高速缓存电路)中。rs电路134可以在相关运算被写入到tdq电路114时或者基于将运算分派给tmm电路118来分派相关运算。在完成时,rs电路134可以分派相关拼贴寄存器读取到系统存储器250操作。

为了维护架构状态一致性,rs电路134从tdq电路114和rs-tdq电路136中清除取消的运算(例如,通过分支误预测或不正确的推测地执行的指令所生成的运算)。rs电路134生成用于取消运算的请求并且将该请求传送230到tmc电路112。该请求包括与所取消的运算中的每一个相关联的一个或多个唯一标识符。在实施例中,tmc电路112用对所取消的运算中的每一个的写回请求来对rs电路134做出响应。在这样的情况下,rs电路134不会向rob电路132传送指示运算成功完成的写回,从而导致rob电路132丢弃该运算。

图3是依照本文描述的至少一个实施例的包括tmu110和处理器电路130的说明性电子基于处理器的设备300的示意图。基于处理器的设备300可以附加地包括图形处理单元(gpu)电路312。基于处理器的设备300可以附加地包括下列中的一个或多个:无线输入/输出(i/o)接口320、有线i/o接口330、系统存储器电路340、电源管理电路350、非暂时性存储设备360以及用于经由一个或多个网络380将基于处理器的设备300通信地耦合到一个或多个外部设备(例如,基于云的服务器)390的网络接口370。以下讨论提供对形成说明性基于处理器的设备300的组件的简要一般描述。示例非限制性基于处理器的设备300可以包括但不限于:自主机动车辆、半自主机动车辆、手动地控制的机动车辆、智能电话、可穿戴计算机、便携式计算设备、手持计算设备、桌面计算设备、刀片服务器设备、工作站和类似物。

相关领域的技术人员应领会的是,可以用其他基于处理器的设备配置来实践所图示的实施例以及其他实施例,所述其他基于处理器的设备配置包括便携式电子或手持电子设备,例如智能电话、便携式计算机、可穿戴计算机、消费者电子装置、个人计算机(“pc”)、网络pc、微型计算机、服务器刀片、大型计算机等。处理器电路130可以包括任何数量的硬连线或可配置的电路,其中的一些或全部可以包括被部分地或全部设置在pc、服务器或能够执行机器可读指令的其他计算系统中的电子组件、半导体器件和/或逻辑元件的可编程和/或可配置组合。在实施例中,处理器电路130可以包括rob电路132、rs电路134和rs-tdq电路136。

基于处理器的设备300包括总线或类似的通信链路316,其通信地耦合各种系统组件并且便于在各种系统组件之间交换信息和/或数据,所述各种系统组件包括处理器电路130、图形处理器电路312、一个或多个无线i/o接口320、一个或多个有线i/o接口330、系统存储器340、一个或多个存储设备360和/或网络接口电路370。可以在本文中以单数引用基于处理器的设备300,但是这不旨在将实施例限于单个基于处理器的设备300,因为在某些实施例中,可以存在并入、包括或者包含任何数量的通信地耦合、并置或远程联网的电路或设备的多于一个基于处理器的设备300。

处理器电路130可以包括能够执行机器可读指令集的任何数量、类型的当前可用的或将来开发的设备或它们的组合。处理器电路130可以包括但不限于任何当前或将来开发的单核心或多核心处理器或微处理器,诸如:一个或多个片上系统(soc);中央处理器(cpu);数字信号处理器(dsp);图形处理单元(gpu);专用集成电路(asic)、可编程逻辑单元、现场可编程门阵列(fpga)等。除非另外描述,否则图3中所示的各个块的构造和操作采用常规设计。因此,不需要在本文中更详细地描述这样的块,因为它们将被相关领域的技术人员理解。互连基于处理器的设备300的组件中的至少一些的总线316可以采用任何当前可用的或将来开发的串行或并行总线结构或架构。

系统存储器340可以包括只读存储器(“rom”)342和随机存取存储器(“ram”)346。rom342的一部分可以用于存储或者以其他方式保持基本输入/输出系统(“bios”)344。bios344例如通过使处理器电路130加载和/或执行一个或多个机器可读指令集314来向基于处理器的设备300提供基本功能性。在实施例中,一个或多个机器可读指令集314中的至少一些使处理器电路130的至少一部分提供、创建、产生、转变和/或充当专用、具体且特定的机器。

基于处理器的设备300可以包括至少一个无线输入/输出(i/o)接口320。该至少一个无线i/o接口320可以被通信地耦合到一个或多个物理输出设备322(触觉设备、视频显示器、音频输出设备、硬拷贝输出设备等)。该至少一个无线i/o接口320可以通信地耦合到一个或多个物理输入设备324(指点设备、触摸屏、键盘、触觉设备等)。该至少一个无线i/o接口320可以包括任何当前可用的或将来开发的无线i/o接口。示例无线i/o接口包括但不限于:bluetooth®、近场通信(nfc)和类似物。

基于处理器的设备300可以包括一个或多个有线输入/输出(i/o)接口330。该至少一个有线i/o接口330可以被通信地耦合到一个或多个物理输出设备322(触觉设备、视频显示器、音频输出设备、硬拷贝输出设备等)。该至少一个有线i/o接口330可以被通信地耦合到一个或多个物理输入设备324(指点设备、触摸屏、键盘、触觉设备等)。有线i/o接口330可以包括任何当前可用的或将来开发的i/o接口。示例有线i/o接口包括但不限于:通用串行总线(usb)、ieee1394(“火线(firewire)”)和类似物。

基于处理器的设备300可以包括一个或多个通信地耦合的非暂时性数据存储设备360。数据存储设备360可以包括一个或多个硬盘驱动器(hdd)和/或一个或多个固态存储设备(ssd)。一个或多个数据存储设备360可以包括任何当前或将来开发的存储器具、网络存储设备和/或系统。这样的数据存储设备360的非限制性示例可以包括但不限于任何当前或将来开发的非暂时性存储器具或设备,诸如一个或多个磁存储设备、一个或多个光学存储设备、一个或多个电阻存储设备、一个或多个分子存储设备、一个或多个量子存储设备或其各种组合。在一些实施方式中,一个或多个数据存储设备360可以包括一个或多个可移动存储设备,诸如一个或多个闪存驱动器、闪速存储器、闪速存储单元,或能够通信地耦合到基于处理器的设备300并从基于处理器的设备300解耦的类似的器具或设备。

一个或多个数据存储设备360可以包括将相应的存储设备或系统通信地耦合到总线316的接口或控制器(未示出)。一个或多个数据存储设备360可以存储、保持或者以其他方式包含机器可读指令集、数据结构、程序模块、数据暂存器、数据库、逻辑结构和/或对处理器电路130和/或图形处理器电路312和/或在处理器电路310和/或图形处理器电路312上执行的或者由处理器电路310和/或图形处理器电路312执行的一个或多个应用有用的其他数据。在一些情况下,一个或多个数据存储设备360可以被通信地耦合到处理器电路130,例如经由总线316或者经由一个或多个有线通信接口330(例如,通用串行总线或usb);一个或多个无线通信接口320(例如,bluetooth®、近场通信或nfc);和/或一个或多个网络接口370(ieee802.3或以太网、ieee802.11或wifi®等)。

机器可读指令集314及其他程序、应用、逻辑集和/或模块可以被全部地或部分地存储在系统存储器340中。这样的指令集314可以被全部地或部分地从一个或多个数据存储设备360转移。指令集314可以在通过处理器电路130和/或图形处理器电路312执行期间被全部地或部分地加载、存储或者以其他方式保持在系统存储器340中。

基于处理器的设备300可以包括控制能量存储设备352的一个或多个操作方面的电源管理电路350。在实施例中,能量存储设备352可以包括一个或多个一次(即,不可再充电的)或二次(例如,可再充电的)电池或类似的能量存储设备。在实施例中,能量存储设备352可以包括一个或多个超级电容器或超电容器。在实施例中,电源管理电路350可以更改、调整或者控制从外部电源354到能量存储设备352和/或到基于处理器的设备300的能量流。电源354可以包括但不限于不限于太阳能系统、商用电网、便携式发电机、外部能量存储设备或其任何组合。

为了方便,处理器电路130、gpu电路312、无线i/o接口320、有线i/o接口330、系统存储器电路340、电源管理电路350、存储设备360和网络接口370被图示为经由总线316彼此通信地耦合,从而在上述组件之间提供连接性。在替代实施例中,可以以不同于图3中所图示的方式通信地耦合上述组件。例如,上述组件中的一个或多个可以被直接地耦合到其他组件,或者可以经由一个或多个中间组件(未示出)彼此耦合。在另一示例中,可以将上述组件中的一个或多个集成到处理器电路130和/或图形处理器电路312中。在一些实施例中,可以省略总线316的全部或一部分并且这些组件使用适合的有线或无线连接来彼此直接地耦合。

图4是依照本文描述的至少一个实施例的使用包括拼贴矩阵乘法单元(tmu)110的加速器来对二维拼贴寄存器执行一个或多个运算的说明性方法400的高级流程图。处理器电路130包括用于将处理器电路130通信地耦合到tmu110的保留站(rs)电路134。rs电路134协调通过tmu110所执行的运算。tmu110中的tmu分派队列(tdq)电路114以运算被从rs电路134接收的次序维护从rs电路134接收的运算。由于每个运算的持续时间在通过tmu110执行之前是未知的,所以rs电路134维护镜像在tdq电路114中的运算的影子分派队列(rs-tdq)电路136。rs电路134与tmu110之间的通信给rs电路134提供成功地执行的运算的通知并且允许rs电路134取消运算,其中所述运算与分支误预测和/或非回退推测地执行的指令相关联。方法400通过将与tmu110的管理相关联的基本上所有开销从处理器电路130卸载到tmu中的rs电路134和/或tmu控制(tmc)电路112来有益地改进主机系统的性能。方法400在402处开始。

在404处,rs电路134向tmu110中的tdq电路114分派220第一矩阵运算。在实施例中,rs电路134可以将第一矩阵运算分派220给设置在tmu110中的tmc电路112。tmc电路112然后可以将运算分派给tdq电路114,其中运算被以从rs电路134接收的次序存储。

在406处,rs电路将第一矩阵运算分派222给rs-tdq电路136。在实施例中,rs电路134与将第一矩阵运算分派222给rs-tdq电路136同时地将第一矩阵运算分派220给tdq电路114。存储在rs-tdq电路136中的矩阵运算镜像存储在tdq电路114中的矩阵运算并且允许rs电路134监视第一矩阵运算的状态—从而有益地许可rs电路134在第一矩阵运算成功完成时接收到写回指示并且还允许rs电路在推测(例如,未回退推测地执行的指令)或乱序执行错误(例如,误预测的分支指令)情况下取消第一矩阵运算。在第一矩阵运算结束时,tmm电路118将输出数据转移到tmb电路116。

在408处,tmc电路112将第一矩阵运算完成传送到rs电路134。rs电路134将第一矩阵运算完成传送到重排序缓冲器(rob)电路132。

在410处,响应于接收到指示第一矩阵运算完成的通信,rob电路132提交第一矩阵运算。

在412处,tmc电路112使输出数据从tmb电路116转移到存储器电路,诸如系统存储器电路或处理器高速缓存存储器电路。方法在414处结束。

下图详述用于实现上述实施例的示例性架构和系统。在一些实施例中,上述的一个或多个硬件组件和/或指令如在下面详述的那样被仿真或者被实现为软件模块。

可以以在下面详述的“通用向量友好指令格式”具体实现上面详述的(一个或多个)指令的实施例。在其他实施例中,不利用这样的格式而使用另一指令格式,然而,在下面对写入掩码寄存器、各种数据变换(调配、广播等)、寻址等的描述通常适用于在上面对(一个或多个)指令的实施例的描述。附加地,在下面详述示例性系统、架构和管线。上面的(一个或多个)指令的实施例可以在这样的系统、架构和管线上被执行,但是不限于详述的那些。

指令集可以包括一种或多种指令格式。给定指令格式可以定义各种字段(例如,位数、位的位置)以尤其指定要执行的运算(例如,操作码)以及要对其执行该运算的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常具有相同的次序,但是至少一些字段具有不同的位位置,因为包括的字段较少)和/或被定义成使给定字段被不同地解释。因此,isa的每个指令使用给定指令格式来表达(并且如果被定义,则以该指令格式的指令模板中的给定一个表达)并且包括用于指定运算和操作数的字段。例如,示例性add指令具有具体操作码以及包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地和源2)的操作数字段的指令格式;并且此add指令在指令流中的出现将在选择具体操作数的操作数字段中具有具体内容。已发布和/或公布了被称为高级向量扩展(avx)(avx1和avx2)并使用向量扩展(vex)编码方案的一组simd扩展(例如,参见intel®64andia-32architecturessoftwaredeveloper’smanual,september2014;并且参见intel®advancedvectorextensionsprogrammingreference,october2014)。

示例性指令格式

可以以不同的格式具体实现本文描述的(一个或多个)指令的实施例。附加地,在下面详述示例性系统、架构和管线。(一个或多个)指令的实施例可以在这样的系统、架构和管线上被执行,但是不限于详述的那些。

通用向量友好指令格式

向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量运算的某些字段)。虽然描述了其中通过向量友好指令格式来支持向量运算和标量运算两者的实施例,但是替代实施例仅使用向量友好指令格式的向量运算。

图5a和图5b是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图5a是图示根据本发明的实施例的通用向量友好指令格式及其a类指令模板的框图;然而图5b是图示根据本发明的实施例的通用向量友好指令格式及其b类指令模板的框图。具体地,通用向量友好指令格式500是为a类和b类指令模板而定义的,这两个a类和b类指令模板不包括存储器存取505指令模板和存储器存取520指令模板。在向量友好指令格式的上下文中的术语通用指代不束缚于任何具体指令集的指令格式。

虽然将描述其中向量友好指令格式支持下列的本发明的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小)(并且因此,64字节向量由16个双字大小元素或可替换地8个四字大小元素构成);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节向量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16位向量操作数长度(或大小);但是替代实施例可以支持具有更多、更少或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同的向量操作数大小(例如,256字节向量操作数)。

图5a中的a类指令模板包括:1)在无存储器存取505指令模板内示出了无存储器存取完全舍入控制类型运算510指令模板和无存储器存取数据变换类型运算515指令模板;以及2)在存储器存取520指令模板内示出了存储器存取时间525指令模板和存储器存取非时间530指令模板。图5b中的b类指令模板包括:1)在无存储器存取505指令模板内示出了无存储器存取、写入掩码控制、部分舍入控制类型运算512指令模板和无存储器存取、写入掩码控制、vsize类型运算517指令模板;以及2)在存储器存取520指令模板内示出了存储器存取、写入掩码控制527指令模板。

通用向量友好指令格式500包括在下面以图5a和图5b中图示的次序列举的以下字段。

格式字段540—此字段中的具体值(指令格式标识符值)唯一地标识向量友好指令格式,并且因此标识向量友好指令格式的指令在指令流中的出现。因此,此字段在它不是仅具有通用向量友好指令格式的指令集所需的意义上是可选的。

基础运算字段542—其内容区分不同的基础运算。

寄存器索引字段544—其内容直接地或通过地址生成来指定源操作数和目的地操作数的位置,它们在寄存器或在存储器中。这些包括足够的位数以从pxq(例如32x512、16x128、32x1024、64x1024)寄存器堆中选择n个寄存器。虽然在一个实施例中n可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源(其中这些源中的一个也作为目的地),可以支持多达三个源(其中这些源中的一个也作为目的地),可以支持多达两个源和一个目的地)。

修饰符字段546—其内容区分通用向量指令格式的指定存储器存取的指令的出现与未指定存储器存取的那些指令的出现;也就是说,在无存储器存取505指令模板与存储器存取520指令模板之间。存储器存取操作读取和/或写入到存储器层次(在一些情况下使用寄存器中的值来指定源和/或目的地地址),然而非存储器存取操作不读取和/或写入到存储器层次(例如,源和目的地是寄存器)。虽然在一个实施例中此字段还在用于执行存储器地址计算的三种不同的方式之间选择,但是替代实施例可以支持用于执行存储器地址计算的更多、更少或不同的方式。

扩增运算字段550—其内容区分除了基础运算之外还要执行的各种不同的运算中的哪一种运算。此字段是上下文特定的。在本发明的一个实施例中,此字段被划分成类字段568、α字段552和β字段554。扩增运算字段550允许在单个指令而不是2、3或4个指令中执行公共成组的运算。

比例字段560—其内容允许索引字段的内容的缩放用于存储器地址生成(例如,用于使用2比例*索引+基址的地址生成)。

位移字段562a—其内容被用作存储器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。

位移因数字段562b(注意的是,位移字段562a在位移因数字段562b正上方的并置指示一个或另一个被使用)—其内容被用作地址生成的一部分;它指定要按存储器存取的大小(n)缩放的位移因数—其中n是存储器存取中的字节数(例如,用于使用2比例*索引+基址+缩放位移的地址生成)。冗余低阶位被忽视并且因此,位移因数字段的内容被乘以存储器操作数总大小(n)以便生成要在计算有效地址时使用的最终位移。n的值由处理器硬件在运行时基于全操作码字段574(在下文中稍后描述)和数据操纵字段554c来确定。位移字段562a和位移因数字段562b从它们未被用于无存储器存取505指令模板的意义上是可选的和/或不同的实施例可以实现两者中的仅一个或一个也没有。

数据元素宽度字段564—其内容区分许多数据元素宽度中的哪一个将被使用(在一些实施例中用于所有指令;在其他实施例中用于指令中的仅一些)。此字段在如果支持仅一个数据元素宽度和/或使用操作码的一些方面来支持数据元素宽度则不需要它的意义上是可选的。

写入掩码字段570—其内容在每数据元素位置基础上控制目的地向量操作数中的该数据元素位置是否反映基础运算和扩增运算的结果。a类指令模板支持合并写入掩码处理,然而b类指令模板支持合并写入掩码处理和归零写入掩码处理两者。当合并时,向量掩码允许在执行任何运算(通过基础运算和扩增运算来指定)期间保护目的地中的任一组元素免于更新。在另一个实施例中,保存所对应的掩码位具有0的目的地的每个元素的旧值。相比之下,当归零向量掩码允许在执行任何运算(通过基础运算和扩增运算来指定)期间将目的地中的任一组元素归零;在一个实施例中,当所对应的掩码位具有0值时目的地的元素被设置为0。此功能性的子集是控制正在执行的运算的向量长度(即,正被修改的元素的跨度,从第一元素到最后元素)的能力;然而,被修改的元素不必是连续的。因此,写入掩码字段570允许部分向量运算,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段570的内容选择许多写入掩码寄存器中的包含要使用的写入掩码的一个(并且因此写入掩码字段570的内容间接地标识要执行的掩码处理)的本发明的实施例,但是替代实施例替代地或附加地允许掩码写入字段570的内容直接地指定要执行的掩码处理。

立即数字段572—其内容允许指定立即数。此字段在它不存在于不支持立即数的通用向量友好格式的实施方式中并且它不存在于不使用立即数的指令中的意义上是可选的。

类字段568—其内容区分不同类的指令。参考图5a和图5b,此字段的内容在a类指令与b类指令之间选择。在图5a和图5b中,圆角正方形用于指示在字段中存在具体值(例如,对类字段568来说在图5a和图5b中分别为a类568a和b类568b)。

a类的指令模板

在a类的非存储器存取505指令模板的情况下,α字段552被解释为rs字段552a,其内容区分不同的扩增运算类型中的哪一种类型将被执行(例如,舍入552a.1和数据变换552a.2是分别为无存储器存取舍入类型运算510指令模板和无存储器存取数据变换类型运算515指令模板所指定的),然而β字段554区分所指定的类型的运算中的哪一个将被执行。在无存储器存取505指令模板中,不存在比例字段560、位移字段562a和位移比例字段562b。

无存储器存取指令模板—全舍入控制类型运算

在无存储器存取全舍入控制类型运算510指令模板中,β字段554被解释为舍入控制字段554a,其(一个或多个)内容提供静态舍入。虽然在所描述的本发明的实施例中舍入控制字段554a包括抑制所有浮点异常(sae)字段556和舍入运算控制字段558,但是替代实施例可以支持可以将这两个概念编码成同一字段或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入运算控制字段558)。

sae字段556—其内容区分是否禁用异常事件报告;当sae字段556的内容指示抑制被启用时,给定指令不会报告任何种类的浮点异常标志并且不会引发任何浮点异常处理程序。

舍入运算控制字段558—其内容区分要执行的一组舍入运算中的哪一个(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入运算控制字段558允许在每指令基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入运算控制字段550的内容覆写该寄存器值。

无存储器存取指令模板—数据变换类型运算

在无存储器存取数据变换类型运算515指令模板中,β字段554被解释为数据变换字段554b,其内容区分许多数据变换中的哪一个将被执行(例如,无数据变换、调配、广播)。

在a类的存储器存取520指令模板的情况下,α字段552被解释为驱逐提示字段552b,其内容区分驱逐提示中的哪一个提示将被使用(在图5a中,时间552b.1和非时间552b.2是分别为存储器存取时间525指令模板和存储器存取非时间530指令模板所指定的),然而β字段554被解释为数据操纵字段554c,其内容区分许多数据操纵运算(也称为原语)中的哪一个运算将被执行(例如,不操纵;广播;源的上转换;以及目的地的下转换)。存储器存取520指令模板包括比例字段560,并且可选地包括位移字段562a或位移比例字段562b。

向量存储器指令利用转换支持执行向量从存储器的加载和向量到存储器的存储。与常规向量指令一样,向量存储器指令以逐数据元素方式从/向存储器转移数据,其中被实际地转移的元素通过被选择为写入掩码的向量掩码的内容来规定。

存储器存取指令模板—时间

时间数据是很可能被尽快重用以从缓存中受益的数据。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽视提示。

存储器存取指令模板—非时间

非时间数据是不可能被尽快重用以从缓存在第一级高速缓存中受益的数据并且应该被优先驱逐。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽视提示。

b类的指令模板

在b类的指令模板的情况下,α字段552被解释为写入掩码控制(z)字段552c,其内容区分通过写入掩码字段570所控制的写入掩码应该是合并还是归零。

在b类的非存储器存取505指令模板的情况下,β字段554的一部分被解释为rl字段557a,其内容区分不同的扩增运算类型中的哪一种类型将被执行(例如,舍入557a.1和向量长度(vsize)557a.2是分别为无存储器存取、写入掩码控制、部分舍入控制类型运算512指令模板和无存储器存取、写入掩码控制、vsize类型运算517指令模板所指定的),然而β字段554的其余部分区分所指定的类型的运算中的哪一个将被执行。在无存储器存取505指令模板中,不存在比例字段560、位移字段562a和位移比例字段562b。

在无存储器存取、写入掩码控制、部分舍入控制类型运算510指令模板中,β字段554的其余部分被解释为舍入运算字段559a并且异常事件报告被禁用(给定指令不会报告任何种类的浮点异常标志并且不会引发任何浮点异常处理程序)。

舍入运算控制字段559a—就像舍入运算控制字段558一样,其内容区分要执行一组舍入运算中的哪一个运算(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入运算控制字段559a允许在每指令基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入运算控制字段550的内容覆写该寄存器值。

在无存储器存取、写入掩码控制、vsize类型运算517指令模板中,β字段554的其余部分被解释为向量长度字段559b,其内容区分要对许多数据向量长度中的哪一个执行(例如,128、256或512字节)。

在b类的存储器存取520指令模板的情况下,β字段554的一部分被解释为广播字段557b,其内容区分广播类型数据操纵运算是否将被执行,然而β字段554的其余部分被解释为向量长度字段559b。存储器存取520指令模板包括比例字段560,并且可选地包括位移字段562a或位移比例字段562b。

关于通用向量友好指令格式500,全操作码字段574被示出为包括格式字段540、基础运算字段542和数据元素宽度字段564。虽然示出了其中全操作码字段574包括所有这些字段的一个实施例,但是在不支持所有字段的实施例中全操作码字段574包括少于所有这些字段的字段。全操作码字段574提供操作代码(操作码)。

扩增运算字段550、数据元素宽度字段564和写入掩码字段570允许以通用向量友好指令格式在每指令基础上指定这些特征。

写入掩码字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。

在a类和b类内找到的各种指令模板在不同的情形下是有益的。在本发明的一些实施例中,不同的处理器或处理器内的不同的核心可以支持仅a类、仅b类或两类。例如,意在供通用计算使用的高性能通用乱序核心可以支持仅b类,主要意在供图形和/或科学(吞吐量)计算使用的核心可以支持仅a类,而意在供两者使用的核心可以支持两者(当然,具有来自两类的模板和指令而不是来自两类的所有模板和指令的某种混合的核心在本发明的范围内)。另外,单个处理器可以包括多个核心,所有这些核心都支持相同的类或者其中不同的核心支持不同的类。例如,在具有单独的图形和通用核心的处理器中,主要意在供图形和/或科学计算使用的图形核心中的一个可以支持仅a类,然而通用核心中的一个或多个可以是具有意在供支持仅b类的通用计算使用的乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可以包括支持a类和b类两者的一个或多个通用顺序或乱序核心。当然,还可以在本发明的不同的实施例中在另一个类中实现来自一个类的特征。用高级语言编写的程序将被放置(例如,及时编译或静态地编译)成各种不同的可执行形式,包括:1)仅具有由目标处理器所支持以供执行的(一个或多个)类的指令的形式;或2)具有使用所有类的指令的不同组合编写的替代例程并且具有控制流代码的形式,所述控制流代码基于由当前正在执行该代码的处理器所支持的指令来选择要执行的例程。

示例性具体向量友好指令格式

图6是图示根据本发明的实施例的示例性具体向量友好指令格式的框图。图6示出具体向量友好指令格式600,所述具体向量友好指令格式600在它指定字段的位置、大小、解释和次序以及用于那些字段中的一些的值的意义上是具体的。具体向量友好指令格式600可以用于扩展x86指令集,并且因此这些字段中的一些与在现有x86指令集及其扩展(例如,avx)中使用的那些字段类似或相同。此格式保持与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、modr/m字段、sib字段、位移字段和立即数字段一致。图示了来自图6的字段映射成的来自图5的字段。

应该理解的是,尽管出于说明性目的在通用向量友好指令格式500的上下文中参考具体向量友好指令格式600描述本发明的实施例,然而除了在要求保护的情况下本发明不限于具体向量友好指令格式600。例如,通用向量友好指令格式500为各个字段设想了各种可能的大小,然而具体向量友好指令格式600被示出为具有具体大小的字段。作为具体示例,虽然数据元素宽度字段564在具体向量友好指令格式600中被图示为一位字段,但是本发明不限于此(也就是说,通用向量友好指令格式500设想了数据元素宽度字段564的其他大小)。

通用向量友好指令格式500包括在下面以图6a中图示的次序列举的以下字段。

evex前缀(字节0-3)602—被以四字节形式编码。

格式字段540(evex字节0,位[7:0])—第一字节(evex字节0)是格式字段540并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。

第二至第四字节(evex字节1-3)包括提供具体能力的许多位字段。

rex字段605(evex字节1,位[7-5])—由evex.r位字段(evex字节1,位[7]–r)、evex.x位字段(evex字节1,位[6]–x)和557bex字节1,位[5]–b)构成。evex.r、evex.x和evex.b位字段提供与所对应的vex位字段相同的功能性,并且使用1s补码形式来编码,即zmm0被编码为1111b,zmm15被编码为0000b。指令的其他字段对如本领域中已知的寄存器索引的低三位(rrr、xxx和bbb)进行编码,使得可以通过添加evex.r、evex.x和evex.b来形成rrrr、xxxx和bbbb。

rex’字段510—这是rex’字段510的第一部分并且是用于对扩展32个寄存器集的高16个或低16个进行编码的evex.r’位字段(evex字节1,位[4]-r’)。在本发明的一个实施例中,此位以及如在下面所指示的其他位被以位反转格式存储以区分(在众所周知的x8632位模式下)bound指令,其真实操作码字节是62,但是在modr/m字段(在下面描述)中不接受mod字段中的值11;本发明的替代实施例不以反转格式存储此位和在下面指示的其他位。值1用于对低16个寄存器进行编码。换句话说,r’rrrr是通过组合evex.r’、evex.r和其他rrr从其他字段形成的。

操作码映射字段615(evex字节1,位[3:0]–mmmm)—其内容对隐含前导操作码字节(0f、0f38或0f3)进行编码。

数据元素宽度字段564(evex字节2,位[7]–w)—通过表示法evex.w来表示。evex.w用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。

evex.vvvv620(evex字节2,位[6:3]-vvvv)—evex.vvvv的作用可以包括下列的:1)evex.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码并且对具有2个或更多源操作数的指令有效;2)evex.vvvv对以1s补码形式指定用于某些向量移位的目的地寄存器操作数进行编码;或者3)evex.vvvv不对任何操作数进行编码,该字段被保留并且应该包含1111b。因此,evex.vvvv字段620对以反转(1s补码)形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,使用额外不同的evex位字段来将指定符大小扩展到32个寄存器。

evex.u568类字段(evex字节2,位[2]-u)—如果evex.u=0,则它指示a类或evex.u0;如果evex.u=1,则它指示b类或evex.u1。

前缀编码字段625(evex字节2,位[1:0]-pp)—为基础运算字段提供附加位。除了为evex前缀格式的传统sse指令提供支持之外,这还具有压缩simd前缀的好处(不是需要一字节来表达simd前缀,而是evex前缀仅需要2位)。在一个实施例中,为了支持既以传统格式又以evex前缀格式使用simd前缀(66h、f2h、f3h)的传统sse指令,这些传统simd前缀被编码到simd前缀编码字段中;并且在被提供给解码器的pla之前在运行时被扩展到传统simd前缀中(所以pla可在没有修改的情况下执行这些传统指令的传统格式和evex格式两者)。尽管较新的指令能将evex前缀编码字段的内容直接地用作操作码扩展,然而某些实施例为了一致性以类似的方式扩展,但是允许通过这些传统simd前缀来指定不同的含义。替代实施例可以重新设计pla以支持2位simd前缀编码,并且因此不需要扩展。

α字段552(evex字节3,位[7]–eh;也称为evex.eh、evex.rs、evex.rl、evex.写入掩码控制和evex.n;也用α来图示)—如先前描述的,此字段是上下文特定的。

β字段554(evex字节3,位[6:4]-sss,也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ来图示)—如先前描述的,此字段是上下文特定的。

rex’字段510—这是rex’字段的剩余部分并且是可以用于对扩展32个寄存器集的高16个或低16个进行编码的evex.v’位字段(evex字节3,位[3]-v’)。此位被以位反转格式存储。值1用于对低16个寄存器进行编码。换句话说,v’vvvv是通过组合evex.v’、evex.vvvv来形成的。

写入掩码字段570(evex字节3,位[2:0]-kkk)–其内容像先前描述的那样指定写入掩码寄存器中的寄存器的索引。在本发明的一个实施例中,具体值evex.kkk=000具有暗示无写入掩码被用于特定指令的具体行为(这可以被以各种方式实现,包括使用硬连线到全一的写入掩码或绕过掩码处理硬件的硬件)。

真实操作码字段630(字节4)也被称为操作码字节。在此字段中指定操作码的一部分。

modr/m字段640(字节5)包括mod字段642、reg字段644和r/m字段646。如先前描述的,mod字段642的内容区分存储器存取操作和非存储器存取操作。可将reg字段644的作用概括为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展而不用于对任何指令操作数进行编码。r/m字段646的作用可以包括下列的:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。

比例、索引、基址(sib)字节(字节6)—如先前描述的,比例字段550的内容被用于存储器地址生成。sib.xxx654和sib.bbb656—先前已针对寄存器索引xxxx和bbbb引用了这些字段的内容。

位移字段562a(字节7-10)—当mod字段642包含10时,字节7-10是位移字段562a,并且它工作方式与传统32位位移(disp32)相同并且以字节粒度工作。

位移因数字段562b(字节7)—当mod字段642包含01时,字节7是位移因数字段562b。此字段的位置与传统x86指令集8位位移(disp8)的位置相同,后者以字节粒度工作。由于disp8被符号扩展,所以它仅可在-128字节偏移与127字节偏移之间寻址。在64字节高速缓存行方面,disp8使用可被设置为仅四个真正可用的值-128、-64、0和64的8个位;由于常常需要较大的范围,所以使用disp32。然而,disp32需要4个字节。和disp8和disp32对比,位移因数字段562b是对disp8的重新解释。当使用位移因数字段562b时,实际位移通过位移因数字段的内容乘以存储器操作数存取的大小(n)来确定。这种类型的位移被称为disp8*n。这减小平均指令长度(单个字节被用于位移但是范围大得多)。这样的压缩位移基于这样的假设:有效位移是存储器存取的粒度的倍数,并且因此,不需要对地址偏移的冗余低阶位进行编码。换句话说,位移因数字段562b取代传统x86指令集8位位移。因此,位移因数字段562b被以与x86指令集8位位移相同的方式编码(所以在modrm/sib编码规则方面没有变化),其唯一例外是disp8被重载为disp8*n。换句话说,在编码规则或编码长度方面没有变化,而仅在通过硬件对位移值的解释方面有变化(这需要按存储器操作数的大小缩放位移以获得逐字节地址偏移)。立即数字段572像先前描述的那样操作。

全操作码字段

图6b是图示根据本发明的一个实施例的组成全操作码字段574的具体向量友好指令格式600的字段的框图。具体地,全操作码字段574包括格式字段540、基础运算字段542和数据元素宽度(w)字段564。基础运算字段542包括前缀编码字段625、操作码映射字段615和真实操作码字段630。

寄存器索引字段

图6c是图示根据本发明的一个实施例的组成寄存器索引字段544的具体向量友好指令格式600的字段的框图。具体地,寄存器索引字段544包括rex字段605、rex’字段610、modr/m.reg字段644、modr/m.r/m字段646、vvvv字段620、xxx字段654和bbb字段656。

扩增运算字段

图6d是图示根据本发明的一个实施例的组成扩展运算字段550的具体向量友好指令格式600的字段的框图。当类(u)字段568包含0时,它表示evex.u0(a类568a);当它包含1时,它表示evex.u1(b类568b)。当u=0并且mod字段642包含11(表示无存储器存取操作)时,α字段552(evex字节3,位[7]–eh)被解释为rs字段552a。当rs字段552a包含1(舍入552a.1)时,β字段554(evex字节3,位[6:4]-sss)被解释为舍入控制字段554a。舍入控制字段554a包括一位sae字段556和两位舍入运算字段558。当rs字段552a包含0(数据变换552a.2)时,β字段554(evex字节3,位[6:4]-sss)被解释为三位数据变换字段554b。当u=0并且mod字段642包含00、01或10(表示存储器存取操作)时,α字段552(evex字节3,位[7]–eh)被解释为驱逐提示(eh)字段552b并且β字段554(evex字节3,位[6:4]-sss)被解释为三位数据操纵字段554c。

当u=1时,α字段552(evex字节3,位[7]–eh)被解释为写入掩码控制(z)字段552c。当u=1并且mod字段642包含11(表示无存储器存取操作)时,β字段554的一部分(evex字节3,位[4]-s0)被解释为rl字段557a;当它包含1(舍入557a.1)时,β字段554的其余部分(evex字节3,位[6-5]-s2-1)被解释为舍入运算字段559a,然而当rl字段557a包含0(vsize557.a2)时β字段554的其余部分(evex字节3,位[6-5]-s2-1)被解释为向量长度字段559b(evex字节3,位[6-5])-l1-0)。当u=1并且mod字段642包含00、01或10(表示存储器存取操作)时,β字段554(evex字节3,位[6:4]-sss)被解释为向量长度字段559b(evex字节3,位[6-5]-l1-0)和广播字段557b(evex字节3,位[4]-b)。

示例性寄存器架构

图7是根据本发明的一个实施例的寄存器架构700的框图。在所图示的实施例中,存在宽度为512位的32个向量寄存器710;这些寄存器被引用为zmm0至zmm31。低16个zmm寄存器的低阶256位重叠在寄存器ymm0-16上。低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)重叠在寄存器xmm0-15上。具体向量友好指令格式600像下表中所图示的那样在这些重叠寄存器堆上操作。

换句话说,向量长度字段559b在最大长度与一个或多个其他较短的长度之间选择,其中每个这样较短的长度是前一个长度的长度的一半;并且没有向量长度字段559b的指令模板在最大向量长度上操作。进一步地,在一个实施例中,具体向量友好指令格式600的b类指令模板对打包或标量单/双精度浮点数据和打包或标量整数数据进行操作。标量运算是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的运算;取决于实施例,更高阶数据元素位置在指令之前保持不变或者归零。

写入掩码寄存器715—在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每个大小为64位。在替代实施例中,写入掩码寄存器715的大小为16位。如先前描述的,在本发明的一个实施例中,向量掩码寄存器k0不能被用作写入掩码;当将通常指示k0的编码被用于写入掩码时,它选择0xffff的硬连线写入掩码,从而对于该指令有效地禁用写入掩码处理。

通用寄存器725—在所图示的实施例中,存在连同现有x86寻址模式一起用于对存储器操作数进行寻址的十六个64位通用寄存器。这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8至r15来引用。

标量浮点堆栈寄存器堆(x87堆栈)745,在其上别名为mmx打包整数平面寄存器堆750—在所图示的实施例中,x87堆栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点运算的八元素堆栈;然而mmx寄存器用于对64位压缩整数数据执行运算,以及用于为在mmx寄存器与xmm寄存器之间执行的一些运算保存操作数。

本发明的替代实施例可以使用更宽或更窄的寄存器。附加地,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。

示例性核心架构、处理器和计算机架构

可以以不同的方式、出于不同的目的并且在不同的处理器中实现处理器核心。例如,这样的核心的实施方式可以包括:1)意在供通用计算使用的通用顺序核心;2)意在供通用计算使用的高性能通用乱序核心;3)主要意在供图形和/或科学(吞吐量)计算使用的专用核心。不同的处理器的实施方式可以包括:1)包括有意在供通用计算使用的一个或多个通用顺序核心和/或意在供通用计算使用的一个或多个通用乱序核心的cpu;以及2)包括有主要意在供图形和/或科学(吞吐量)使用的一个或多个专用核心的协处理器。这样不同的处理器导致不同的计算机系统架构,其可以包括:1)协处理器位于与cpu分开的芯片上;2)协处理器位于与cpu相同的封装中的单独的管芯上;3)协处理器位于与cpu相同的管芯上(在此情况下,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑或专用核心);以及4)可以在同一管芯上包括所描述的cpu(有时称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能性的的片上系统。接下来描述示例性核心架构,后面是示例性处理器和计算机架构的描述。

示例性核心架构

顺序和乱序核心框图

图8a是图示根据本发明的实施例的示例性顺序管线和示例性寄存器重命名乱序发出/执行管线的框图。图8b是图示根据本发明的实施例的要包括在处理器中的顺序架构核心和示例性寄存器重命名乱序发出/执行架构核心两者的示例性实施例的框图。图8a和图8b中的实线框图示顺序管线和顺序核心,然而虚线框的可选添加图示寄存器重命名乱序发出/执行管线和核心。假定顺序方面是乱序方面的子集,将描述乱序方面。

在图8a中,处理器管线800包括获取级802、长度解码级804、解码级806、分配级808、重命名级810、调度(也称为分派或发出)级812、寄存器读取/存储器读取级814、执行级816、写回/存储器写入级818、异常处置级822和提交级824。

图8b示出处理器核心890,所述处理器核心890包括前端单元830和执行引擎单元850,并且两者都被耦合到存储器单元870。核心890可以是精简指令集计算(risc)核心、复杂指令集计算(cisc)核心、甚长指令字(vliw)核心或混合或替代核心类型。作为另一个选项,核心890可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(gpgpu)核心、图形核心等。

前端单元830包括耦合到指令高速缓存单元834的分支预测单元832,所述指令高速缓存单元834被耦合到指令转换后备缓冲器(tlb)836,所述tlb836被耦合到指令获取单元838,所述指令获取单元838被耦合到解码单元840。解码单元840(或解码器)可以对指令进行解码,并且生成被从原始指令解码或者以其他方式反映原始指令或者被从原始指令导出的一个或多个运算、微码入口点、微指令、其他指令或其他控制信号作为输出。可以使用各种不同的机制来实现解码单元840。适合的机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(pla)、微码只读存储器(rom)等。在一个实施例中,核心890包括微码rom或存储用于某些宏指令的微码的其他介质(例如,在解码单元840中或者否则在前端单元830内)。解码单元840被耦合到执行引擎单元850中的重命名/分配器单元852。

执行引擎单元850包括耦合到回退单元854和一组一个或多个调度器单元856的重命名/分配器单元852。(一个或多个)调度器单元856表示任何数量的不同的调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元856被耦合到(一个或多个)物理寄存器堆单元858。(一个或多个)物理寄存器堆单元858中的每一个均表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元858包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元858被回退单元854重叠以图示可以实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)回退寄存器堆;使用(一个或多个)将来堆、(一个或多个)历史缓冲器和(一个或多个)回退寄存器堆;使用寄存器映射和寄存器池;等)。回退单元854和(一个或多个)物理寄存器堆单元858被耦合到(一个或多个)执行集群860。(一个或多个)执行集群860包括一组一个或多个执行单元862和一组一个或多个存储器存取单元864。执行单元862可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行各种运算(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于具体功能或功能集的许多执行单元,但是其他实施例可以包括仅一个执行单元或全部执行所有功能的多个执行单元。(一个或多个)调度器单元856、(一个或多个)物理寄存器堆单元858和(一个或多个)执行集群860被示出为可能是复数的,因为某些实施例为某些类型的数据/运算创建单独的管线(例如,标量整数管线、标量浮点/打包整数/打包浮点/向量整数/向量浮点管线,和/或各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行群集的存储器存取管线—并且在单独的存储器存取管线的情况下,实现了其中仅此管线的执行群集具有(一个或多个)存储器存取单元864的某些实施例)。还应该理解的是,在使用单独的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行而其余管线是顺序的。

存储器存取单元864组被耦合到存储器单元870,所述存储器单元870包括数据tlb单元872,所述数据tlb单元872被耦合到数据高速缓存单元874,所述数据高速缓存单元874被耦合到第2级(l2)高速缓存单元876。在一个示例性实施例中,存储器存取单元864可以包括加载单元、存储地址单元和存储数据单元,其中的每一个均被耦合到存储器单元870中的数据tlb单元872。指令高速缓存单元834被进一步耦合到存储器单元870中的第2级(l2)高速缓存单元876。l2高速缓存单元876被耦合到一个或多个其他级的高速缓存并且最终耦合到主存储器。

作为示例,示例性寄存器重命名、乱序发出/执行核心架构可以实现管线800如下:1)指令获取838执行获取级802和长度解码级804;2)解码单元840执行解码级806;3)重命名/分配器单元852执行分配级808和重命名级810;4)(一个或多个)调度器单元856执行调度级812;5)(一个或多个)物理寄存器堆单元858和存储器单元870执行寄存器读取/存储器读取级814;执行集群860执行执行级816;6)存储器单元870和(一个或多个)物理寄存器堆单元858执行写回/存储器写入级818;7)可以在异常处置级822中涉及各种单元;并且8)回退单元854和(一个或多个)物理寄存器堆单元858执行提交级824。

核心890可以支持一个或多个指令集(例如,x86指令集(具有已随较新版本添加的一些扩展);加利福尼亚州桑尼维尔的mips科技公司的mips指令集;加利福尼亚州桑尼维尔的arm控股公司的arm指令集(具有诸如neon之类的可选附加扩展),包括本文描述的(一个或多个)指令。在一个实施例中,核心890包括用于支持打包数据指令集扩展(例如,avx1,avx2)的逻辑,从而允许使用打包数据来执行由许多多媒体应用所使用的操作。

应该理解的是,核心可以支持多线程处理(执行两个或更多个并行操作或线程集),并且可以以各种方式这样做,所述各种方式包括时间分片多线程处理、同时多线程处理(其中单个物理核心为物理核心正在同时地多线程处理的线程中的每一个提供逻辑核心)或它们的组合(例如,诸如在intel®超线程技术中的时间分片获取和解码及此后的同时多线程处理)。

虽然在乱序执行的上下文中描述寄存器重命名,但是应该理解的是,可以在顺序架构中使用寄存器重命名。虽然所图示的处理器的实施例还包括单独的指令和数据高速缓存单元834/874及共享l2高速缓存单元876,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级(l1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核心和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存可以在核心和/或处理器外部。

具体示例性顺序核心架构

图9a和图9b图示更具体示例性顺序核心架构的框图,该核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个。取决于应用,这些逻辑块通过高带宽互连网络(例如,环形网络)与某个固定功能逻辑、存储器i/o接口和其他必要的i/o逻辑进行通信。

图9a是根据本发明的实施例的单个处理器核心以及其到管芯上互连网络902且与第2级(l2)高速缓存904的其本地子集的连接的框图。在一个实施例中,指令解码器900支持具有打包数据指令集扩展的x86指令集。l1高速缓存906允许对高速缓存存储器的低延迟存取到标量和向量单位中。虽然在一个实施例中(为了简化设计),标量单元908和向量单元910使用单独的寄存器组(分别为标量寄存器912和向量寄存器914)并且在它们之间转移的数据被写入到存储器,然后从第1级(l1)高速缓存906读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器组或者包括允许数据在不用被写入和读回的情况下在两个寄存器堆之间进行转移的通信路径)。

l2高速缓存904的本地子集是被划分成单独的本地子集(每个处理器核心一个)的全局l2高速缓存的一部分。每个处理器核心有到它自己的l2高速缓存904的本地子集的直接存取路径。通过处理器核心读取的数据被存储在其l2高速缓存子集904中,并且与其他处理器核心存取它们自己的本地l2高速缓存子集并行地可被快速地存取。通过处理器核心写入的数据被存储在它自己的l2高速缓存子集904中并且必要时被从其他子集中清除。环形网络确保共享数据的一致性。环形网络是双向的以允许诸如处理器核心、l2高速缓存和其他逻辑块之类的代理在芯片内相互通信。每个环形数据路径每方向宽度为1012位。

图9b是根据本发明的实施例的图9a中的处理器核心的一部分的放大视图。图9b包括l1高速缓存904的l1数据高速缓存906a部分以及有关向量单元910和向量寄存器914的更多细节。具体地,向量单元910是16宽向量处理单元(vpu)(参见16位宽alu928),其执行整数指令、单精度浮点指令和双精度浮点指令中的一个或多个。vpu支持在存储器输入上用调配单元920调配寄存器输入,用数值转换单元922a-b调配数值转换,并且用复制单元924调配复制。写入掩码寄存器926允许预测结果得到的向量写入。

图10是根据本发明的实施例的处理器1000的框图,所述处理器1000可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成显卡。图10中的实线框图示具有单个核心1002a、系统代理1010、一组一个或多个总线控制器单元1016的处理器1000,然而虚线框的可选添加图示具有多个核心1002a-n、系统代理单元1010中的一组一个或多个集成存储器控制器单元1014和专用逻辑1008的替代处理器1000。

因此,处理器1000的不同的实施方式可以包括:1)专用逻辑1008是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心)并且核心1002a-n是一个或多个通用核心(例如,通用顺序核心、通用乱序核心、两者的组合)的cpu;2)核心1002a-n是主要意在供图形和/或科学(吞吐量)使用的大量专用核心的协处理器;以及3)核心1002a-n是大量通用顺序核心的协处理器。因此,处理器1000可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量多集成核心(mic)协处理器(包括30或更多个核心)、嵌入式处理器等。可以在一个或多个芯片上实现处理器。处理器1000可以是一个或多个基板的一部分和/或可以使用许多处理技术中的任一种(诸如例如bicmos、cmos或nmos)被实现在一个或多个基板上。

存储器层次包括核心内的一级或多级高速缓存、一组或一个或多个共享高速缓存单元1006以及耦合到一组集成存储器控制器单元1014的外部存储器(未示出)。所述一组共享高速缓存单元1006可以包括一个或多个中级高速缓存,诸如第2级(l2)、第3级(l3)、第4级(l4)或其他级高速缓存、最后级高速缓存(llc)和/或其组合。虽然在一个实施例中基于环的互连单元1012互连集成图形逻辑1008、所述一组共享高速缓存单元1006以及系统代理单元1010/(一个或多个)集成存储器控制器单元1014,但是替代实施例可以将任何数量的众所周知的技术用于互连这样的单元。在一个实施例中,在一个或多个高速缓存单元1006与核心1002-a-n之间维护一致性。

在一些实施例中,核心1002a-n中的一个或多个能够多线程处理。系统代理1010包括协调并操作核心1002a-n的那些组件。系统代理单元1010可以包括例如电源控制单元(pcu)和显示单元。pcu可以是或者包括用于调节核心1002a-n和集成图形逻辑1008的电源状态所需的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。

核心1002a-n在架构指令集方面可以是同构的或异构的;也就是说,核心1002a-n中的两个或更多个可以能够执行相同的指令集,然而其他核心可以能够仅执行该指令集的子集或不同的指令集。

示例性计算机架构

图11、图12、图13和图14是示例性计算机架构的框图。本领域中已知用于笔记本电脑、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是适合的。通常,能够并入如本文所公开的处理器和/或其他执行逻辑的各式各样的系统或电子设备通常是适合的。

现在参考图11,示出的是依照本发明的一个实施例的系统1100的框图。系统1100可以包括一个或多个处理器1110、1115,其被耦合到控制器集线器1120。在一个实施例中控制器集线器1120包括图形存储器控制器集线器(gmch)1190和输入/输出集线器(ioh)1150(其可以在单独的芯片上);gmch1190包括被耦合有存储器1140和协处理器1145的存储器和图形控制器;ioh1150将输入/输出(i/o)设备1160耦合到gmch1190。可替换地,存储器和图形控制器中的一个或两个被集成在处理器内(如本文所描述的),存储器1140和协处理器1145被直接地耦合到处理器1110,并且控制器集线器1120与ioh1150一起位于单个芯片中。

在图11中用虚线表示附加处理器1115的可选性质。每个处理器1110、1115可以包括本文描述的处理核心中的一个或多个,并且可以是处理器1000的某个版本。

存储器1140可以是例如动态随机存取存储器(dram)、相变存储器(pcm)或两者的组合。对于至少一个实施例,控制器集线器1120经由多跳总线(诸如前端总线(fsb)、点对点接口(诸如快速通道互连(qpi))或类似的连接1195与(一个或多个)处理器1110、1115进行通信。

在一个实施例中,协处理器1145是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。在一个实施例中,控制器集线器1120可以包括集成图形加速器。

在包括架构、微架构、热、功耗特性等的一系列品质度量方面,在物理资源1110、1115之间可以存在各种差异。

在一个实施例中,处理器1110执行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器1110将这些协处理器指令辨识为具有应该由所附连的协处理器1145执行的类型。因此,处理器1110在协处理器总线或其他互连上向协处理器1145发出这些协处理器指令(或表示协处理器指令的控制信号)。(一个或多个)协处理器1145接受并执行所接收到的协处理器指令。

现在参考图12,示出的是依照本发明的实施例的第一更具体示例性系统1200的框图。如图12中所示,多处理器系统1200是点对点互连系统,并且包括经由点对点互连1250耦合的第一处理器1270和第二处理器1280。处理器1270和1280中的每一个均可以是处理器1000的某个版本。在本发明的一个实施例中,处理器1270和1280分别是处理器1110和1115,而协处理器1238是协处理器1145。在另一实施例中,处理器1270和1280分别是处理器1110和协处理器1145。

处理器1270和1280被示出为分别包括集成存储器控制器(imc)单元1272和1282。处理器1270还包括点对点(p-p)接口1276和1278作为其总线控制器单元的一部分;类似地,第二处理器1280包括p-p接口1286和1288。处理器1270、1280可以使用点对点(p-p)接口电路1278、1288来经由点对点(p-p)接口1250交换信息。如图12中所示,imc1272和1282将处理器耦合到相应的存储器,即存储器1232和存储器1234,其可以是在本地附连到相应的处理器的主存储器的部分。

处理器1270、1280可以各自使用点对点接口电路1276、1294、1286、1298来经由单独的p-p接口1252、1254与芯片组1290交换信息。芯片组1290可以可选地经由高性能接口1239与协处理器1238交换信息。在一个实施例中,协处理器1238是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。

共享高速缓存(未示出)可以被包括在任何一个处理器中或者在两个处理器外部,但仍经由p-p互连与处理器连接,使得如果处理器被置于低功率模式中,则可以将任何一个或两个处理器的本地高速缓存信息存储在共享高速缓存中。

芯片组1290可以经由接口1296被耦合到第一总线1216。在一个实施例中,第一总线1216可以是外围组件互连(pci)总线或诸如pciexpress总线或另一第三代i/o互连总线之类的总线,但是本发明的范围不限于此。

如图12中所示,各种i/o设备1214可以连同将第一总线1216耦合到第二总线1220的总线桥接器1218一起被耦合到第一总线1216。在一个实施例中,一个或多个附加处理器1215(诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器)被耦合到第一总线1216。在一个实施例中,第二总线1220可以是低引脚计数(lpc)总线。各种设备可以被耦合到第二总线1220,所述各种设备包括例如键盘和/或鼠标1222、通信设备1227和存储单元1228,诸如磁盘驱动器或在一实施例中可以包括指令/代码和数据1230的其他大容量存储设备。进一步地,音频i/o1224可以被耦合到第二总线1220。注意的是,其他架构是可能的。例如,代替图12的点对点架构,系统可以实现多跳总线或其他这样的架构。

现在参考图13,示出的是依照本发明的实施例的第二更具体示例性系统1300的框图。图12和图13中的相似的元件具有相似的附图标记,并且已从图13中省略了图12的某些方面以便避免使图13的其他方面模糊。

图13图示处理器1270、1280分别可以包括集成存储器和i/o控制逻辑(“cl”)1272和1282。因此,cl1272、1282包括集成存储器控制器单元并且包括i/o控制逻辑。图13图示不仅存储器1232、1234被耦合到cl1272、1282,而且i/o设备1314也被耦合到控制逻辑1272、1282。传统i/o设备1315被耦合到芯片组1290。

现在参考图14,示出的是依照本发明的实施例的soc1400的框图。图10中的类似的元件具有相似的附图标记。另外,虚线框是更高级soc上的可选特征。在图14中,(一个或多个)互连单元1402被耦合到:包括一组一个或多个核心202a-n和(一个或多个)共享高速缓存单元1006的应用处理器1410;系统代理单元1010;(一个或多个)总线控制器单元1016;(一个或多个)集成存储器控制器单元1014;可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器的一组或一个或多个协处理器1420;静态随机存取存储器(sram)单元1430;直接存储器存取(dma)单元1432;以及用于耦合到一个或多个外部显示器的显示单元1440。在一个实施例中,(一个或多个)协处理器1420包括专用处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等。

本文公开的机制的实施例可以用硬件、软件、固件或这样的实现方法的组合加以实现。可以将本发明的实施例实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。

程序代码(诸如图12中图示的代码1230)可以被应用于输入指令以执行本文描述的功能并生成输出信息。可以以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。

程序代码可以用高级过程或面向对象编程语言加以实现以与处理系统进行通信。视需要而定,程序代码也可以用汇编或机器语言加以实现。实际上,本文描述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是编译语言或解释语言。

可以通过存储在机器可读介质上的代表性指令来实现至少一个实施例的一个或多个方面,所述代表性指令表示处理器内的各种逻辑,所述各种逻辑当被机器读取时,使机器制作逻辑来执行本文描述的技术。可以将这样的表示(称为“ip核心”)存储在有形机器可读介质上并供应给各种客户或制造设施以加载到实际地做出逻辑或处理器的制作机器中。

这样的机器可读存储介质可以包括但不限于通过机器或设备制造或者形成的物品的非暂时性有形布置,包括诸如硬盘之类的存储介质、包括软盘、光盘、紧致盘只读存储器(cd-rom)、可写紧致盘(cd-rw)和磁光盘的任何其他类型的盘、诸如只读存储器(rom)之类的半导体设备、诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)之类的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪速存储器、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm)、磁或光学卡,或适合于存储电子指令的任何其他类型的介质。

因此,本发明的实施例还包括包含指令或者包含设计数据(诸如硬件描述语言(hdl))的非暂时性有形机器可读介质,所述hdl定义本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以被称为程序产品。

仿真(包括二进制翻译、代码变形等)

在一些情况下,可以使用指令转换器来将指令从源指令集转换为目标指令集。例如,指令转换器可以对指令进行翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真,或者以其他方式将指令转换为要通过核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合加以实现。指令转换器可以在处理器上,在处理器外,或者部分在处理器上并部分在处理器外。

图15是根据本发明的实施例的对比用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是可替换地,指令转换器可以用软件、固件、硬件或其各种组合加以实现。图15示出可以使用x86编译器1504来编译高级语言1502的程序以生成可以通过具有至少一个x86指令集核心1516的处理器在本机执行的x86二进制代码1506。具有至少一个x86指令集核心1516的处理器表示可通过兼容地执行或者以其他方式处理以下各项来执行与具有至少一个x86指令集核心的intel处理器基本上相同的功能以便实现与具有至少一个x86指令集核心的intel处理器基本上相同的结果的任何处理器:(1)intelx86指令集核心的指令集的基本部分或(2)旨在在具有至少一个x86指令集核心的intel处理器上运行的应用或其他软件的目标代码版本。x86编译器1504表示可操作来生成x86二进制代码1506(例如,目标代码)的编译器,所述x86二进制代码可在有或没有附加链接处理的情况下在具有至少一个x86指令集核心1516的处理器上被执行。类似地,图15示出可以使用替代指令集编译器1508来编译高级语言1502的程序以生成可以通过没有至少一个x86指令集核心1514的处理器(例如,具有执行加利福尼亚州桑尼维尔的mips科技公司的mips指令集和/或执行加利福尼亚州桑尼维尔的arm控股公司的arm指令集的核心的处理器)在本机执行的替代指令集二进制代码1510。指令转换器1512用于将x86二进制代码1506转换成可以通过没有x86指令集核心1514的处理器在本机执行的代码。这种转换后的代码不可能与替代指令集二进制代码1510相同,因为有这个能力的指令转换器难以做出;然而,经转换后的代码将完成一般操作并且由来自替代指令集的指令组成。因此,指令转换器1512表示通过仿真、模拟或任何其他过程来允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码1506的软件、固件、硬件或其组合。

虽然图8和图9图示根据一个或多个实施例的各种操作,但是应当理解的是,并非图8和图9中描绘的所有操作对其他实施例来说都是必要的。实际上,在本文中充分地设想了在本公开的其他实施例中,图8和图9中描绘的操作和/或本文描述的其他操作可以被以在任何附图中未具体地示出的方式组合,但是仍与本公开充分地一致。因此,针对未在一个附图中确切地示出的特征和/或操作的权利要求被视为在本公开的范围和内容内。

如在本申请中并在权利要求书中使用的,通过术语“和/或”接合的项目的列表可意指所列举的项目的任何组合。例如,短语“a、b和/或c”可意指a;b;c;a和b;a和c;b和c;或a、b和c。如在本申请中并在权利要求书中使用的,通过术语“……中的至少一个”接合的项目的列表可意指所列举的术语的任何组合。例如,短语“a、b或c中的至少一个”可意指a;b;c;a和b;a和c;b和c;或a、b和c。

如本文任何实施例中使用的,术语“系统”或“模块”可以指代例如被配置成执行前述操作中的任一个的软件、固件和/或电路。可以将软件具体实现为软件包、代码、指令、指令集和/或记录在非暂时性计算机可读存储介质和/或设备上的数据。可以将固件具体实现为在存储器设备中被硬编码(例如,非易失性)的代码、指令或指令集和/或数据。

如本文任何实施例中使用的,术语“电路”可以例如单独地或按照任何组合包括硬连线电路、诸如包括一个或多个单独指令处理核心的计算机处理器之类的可编程电路、状态机电路和/或固件,所述固件存储通过可编程电路或将来的计算范例所执行的指令,所述将来的计算范例包括例如大规模并行性、模拟或量子计算、诸如神经网络处理器之类的加速器的硬件实施例和上述的非硅实施方式。可以将电路共同地或单独地具体实现为形成较大的系统的一部分的电路,所述较大的系统例如为集成电路(ic)、片上系统(soc)、台式计算机、膝上型计算机、平板计算机、服务器、智能电话等。

可以在系统中实现本文描述的操作中的任一个,所述系统包括单独地或相结合地在其中存储有指令的一个或多个介质(例如,非暂时性存储介质),所述指令当由一个或多个处理器执行时执行方法。在这里,处理器可以包括例如服务器cpu、移动设备cpu和/或其他可编程电路。另外,意图是本文描述的操作可以跨多个物理设备(诸如在多于一个不同的物理位置处的处理结构)分布。存储介质可以包括任何类型的有形介质,例如,包括硬盘、软盘、光盘、紧致盘只读存储器(cd-rom)、可写紧致盘(cd-rw)和磁光盘的任何类型的盘、诸如只读存储器(rom)之类的半导体设备、诸如动态ram和静态ram之类的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、闪速存储器、固态盘(ssd)、嵌入式多媒体卡(emmc)、安全数字输入/输出(sdio)卡、磁或光学卡,或适合于存储电子指令的任何类型的介质。可以将其他实施例实现为由可编程控制设备执行的软件。

因此,本公开涉及用于使用包括拼贴矩阵乘法单元(tmu)的加速器来对二维拼贴寄存器执行一个或多个运算的系统和方法。处理器电路包括用于将处理器电路通信地耦合到tmu的保留站(rs)电路。rs电路协调通过tmu执行的操作。tmu中的tmu分派队列(tdq)电路以运算被从rs电路接收的次序维护从rs电路接收的运算。由于每个运算的持续时间在通过tmu执行之前是未知的,所以rs电路会维护在tdq电路中镜像运算的影子分派队列(rs-tdq)电路。rs电路134与tmu之间的通信给rs电路提供成功地执行的运算的通知并且允许rs电路取消运算,其中所述运算与分支误预测和/或非回退推测地执行的指令相关联。

以下示例和另外的实施例有关。本公开的以下示例可以包括诸如以下各项之类的题材:至少一个设备;方法;用于存储指令的至少一个机器可读介质,所述指令当被执行时使机器基于方法执行动作;用于基于方法执行动作的装置;和/或用于分解脉动阵列电路以使用包括拼贴矩阵乘法单元(tmu)的加速器来对二维拼贴寄存器执行一个或多个运算的系统。

根据示例1,提供了核心电路。所述核心电路包括:处理器电路;重排序缓冲器(rob)电路,所述重排序缓冲器(rob)电路被耦合到所述处理器电路;以及保留站(rs)电路,所述保留站(rs)电路包括矩阵乘法单元分派影子队列(rs-tdq)电路,所述rs电路用于:将至少一个第一矩阵运算分派给设置在通信地耦合到所述rs电路的矩阵乘法单元(tmu)中的tdq电路;将所述至少一个第一矩阵运算分派给所述rs-tdq电路;在通过所述tmu来执行所述至少一个第一矩阵运算时从所述tmu接收分派指示;向所述rob电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;使所述rob电路提交所述至少一个第一矩阵运算;并且使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路。

示例2可以包括示例1的要素并且所述核心电路可以进一步包括:高速缓存存储器电路,所述高速缓存存储器电路被通信地耦合到所述处理器电路;其中为了使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路,所述rs电路进一步:使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到所述高速缓存存储器电路。

示例3可以包括示例1或2中的任一项的要素,其中为了使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路,所述rs电路进一步:使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到所述核心电路的系统存储器电路。

示例4可以包括示例1至3中的任一项的要素,其中所述rs电路可以进一步:将至少一个第二矩阵运算分派给所述tdq电路,所述第二矩阵运算取决于来自所述至少一个第一矩阵运算的所述数据;将所述至少一个第一矩阵运算分派给所述tdq影子队列电路;在通过所述tmu来执行所述至少一个第二矩阵运算时从所述tmu接收分派指示;向所述rob电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第二矩阵运算的信息;使所述rob电路提交所述至少一个第二矩阵运算;并且使来自所述至少一个第二矩阵运算的数据从所述tmb电路转移到存储器电路。

示例5可以包括示例1至4中的任一项的要素,其中为了将至少一个第二矩阵运算分派给所述tdq电路,所述rs电路可以进一步:响应于将所述至少一个第一矩阵运算分派给所述tdq电路而将所述至少一个第二矩阵运算分派给所述tdq电路。

示例6可以包括示例1至5中的任一项的要素,其中为了将至少一个第二矩阵运算分派给所述tdq电路,所述rs电路可以进一步:响应于接收到将所述至少一个第一矩阵运算分派给所述tmu中的所述矩阵乘法(tmm)电路的指示而将至少一个第二矩阵运算分派给所述tdq电路。

示例7可以包括示例1至6中的任一项的要素,其中为了使来自所述至少一个第二矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路,所述rs电路可以进一步:使通过所述至少一个第二矩阵运算所生成的二维数组从所述tmb电路转移到存储器电路,所述存储器电路包括以下各项中的至少一个:处理器高速缓存电路或系统存储器电路。

示例8可以包括示例1至7中的任一项的要素,其中所述rs电路进一步响应于从所述处理器电路接收到以下各项中的至少一个的指示:与所述至少一个第一矩阵运算相关联的误推测或与所述至少一个第一矩阵运算相关联的误预测:使从所述rs-tdq电路中取消所述至少一个第一矩阵运算;并且使从所述tdq电路中取消所述至少一个第一矩阵运算。

根据示例9,提供了一种执行一个或多个矩阵运算的方法。所述方法可以包括:通过保留站(rs)电路来将至少一个第一矩阵运算分派给设置在通信地耦合到所述rs电路的矩阵乘法单元(tmu)中的tdq电路;通过所述rs电路来将所述至少一个第一矩阵运算分派给所述rs-tdq电路;通过所述rs电路来向重排序缓冲器(rob)电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;通过所述rs电路来使所述rob电路提交所述至少一个第一矩阵运算;以及通过所述rs电路来使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路。

示例10可以包括示例9的要素,其中使来自所述至少一个第一矩阵运算的数据从所述tmb电路转移到所述存储器电路可以进一步包括:通过所述rs电路来使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到核心电路的处理器高速缓存存储器电路。

示例11可以包括示例9或10中的任一项的要素,其中使来自所述至少一个第一矩阵运算的数据从所述tmb电路转移到所述存储器电路可以进一步包括:通过所述rs电路来使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到核心电路的系统存储器电路。

示例12可以包括示例9至11中的任一项的要素,并且所述方法可以附加地包括:通过所述rs电路来将至少一个第二矩阵运算分派给所述tdq电路,所述第二矩阵运算使用来自所述至少一个第一矩阵运算的所述数据的至少一部分;通过所述rs电路来将所述至少一个第二矩阵运算分派给所述rs-tdq电路;通过所述rs电路来向重排序缓冲器(rob)电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第二矩阵运算的信息;通过所述rs电路来使所述rob电路提交所述至少一个第二矩阵运算;以及通过所述rs电路来使来自所述至少一个第二矩阵运算的数据从所述tmu缓冲器(tmb)电路转移到所述存储器电路。

示例13可以包括示例9至12中的任一项的要素,其中将至少一个第二矩阵运算分派给所述tdq电路可以进一步包括:响应于将所述至少一个第一矩阵运算分派给所述tdq电路而通过所述rs电路来将所述至少一个第二矩阵运算分派给所述tdq电路。

示例14可以包括示例9至13中的任一项的要素,其中将至少一个第二矩阵运算分派给所述tdq电路可以进一步包括:响应于接收到将所述至少一个第一矩阵运算分派给所述tmu中的矩阵乘法(tmm)电路的指示而通过所述rs电路来将所述至少一个第二矩阵运算分派给所述tdq电路。

示例15可以包括示例9至14中的任一项的要素,其中使来自所述至少一个第二矩阵运算的数据从所述tmu缓冲器(tmb)电路转移到所述存储器电路可以进一步包括:通过所述rs电路来使通过所述至少一个第二矩阵运算所生成的二维数组从所述tmb电路转移到存储器电路,所述存储器电路包括以下各项中的至少一个:处理器高速缓存电路或系统存储器电路。

示例16可以包括示例9至15中的任一项的要素,并且所述方法可以附加地包括:响应于从所述处理器电路接收到以下各项中的至少一个的指示:与所述至少一个第一矩阵运算相关联的误推测或与所述至少一个第一矩阵运算相关联的误预测:通过所述rs电路来使从所述rs-tdq电路中取消所述至少一个第一矩阵运算;以及通过所述rs电路来使从所述tdq电路中取消所述至少一个第一矩阵运算。

根据示例17,提供了一种用于执行一个或多个矩阵运算的系统。所述系统可以包括:用于将至少一个第一矩阵运算分派给设置在矩阵乘法单元(tmu)中的tdq电路的装置;用于将所述至少一个第一矩阵运算分派给rs-tdq电路的装置;用于向重排序缓冲器(rob)电路传送信号的装置,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;用于使所述rob电路提交所述至少一个第一矩阵运算的装置;以及用于使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路的装置。

示例18可以包括示例17的要素,其中所述用于使来自所述至少一个第一矩阵运算的数据从所述tmb电路转移到所述存储器电路的装置可以进一步包括:用于使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到核心电路的处理器高速缓存存储器电路的装置。

示例19可以包括示例17或18中的任一项的要素,其中所述用于使来自所述至少一个第一矩阵运算的数据从所述tmb电路转移到所述存储器电路的装置可以进一步包括:用于使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到核心电路的系统存储器电路的装置。

示例20可以包括示例17至19中的任一项的要素,并且所述系统可以进一步包括:用于将至少一个第二矩阵运算分派给所述tdq电路的装置,所述第二矩阵运算使用来自所述至少一个第一矩阵运算的所述数据的至少一部分;用于将所述至少一个第二矩阵运算分派给所述rs-tdq电路的装置;用于向重排序缓冲器(rob)电路传送信号的装置,所述信号包括指示通过所述tmu完成所述至少一个第二矩阵运算的信息;用于使所述rob电路提交所述至少一个第二矩阵运算的装置;以及用于使来自所述至少一个第二矩阵运算的数据从所述tmu缓冲器(tmb)电路转移到所述存储器电路的装置。

示例21可以包括示例17至20中的任一项的要素,其中所述用于将至少一个第二矩阵运算分派给所述tdq电路的装置可以进一步包括:用于响应于将所述至少一个第一矩阵运算分派给所述tdq电路而将所述至少一个第二矩阵运算分派给所述tdq电路的装置。

示例22可以包括示例17至21中的任一项的要素,其中所述用于将至少一个第二矩阵运算分派给所述tdq电路的装置可以进一步包括:用于响应于接收到将所述至少一个第一矩阵运算分派给所述tmu中的矩阵乘法(tmm)电路的指示而将所述至少一个第二矩阵运算分派给所述tdq电路的装置。

示例23可以包括示例17至22中的任一项的要素,其中所述用于使来自所述至少一个第二矩阵运算的数据从所述tmu缓冲器(tmb)电路转移到所述存储器电路的装置可以进一步包括:用于使通过所述至少一个第二矩阵运算所生成的二维数组从所述tmb电路转移到存储器电路的装置,所述存储器电路包括以下各项中的至少一个:处理器高速缓存电路或系统存储器电路。

示例24可以包括示例17至23中的任一项的要素,并且所述系统可以附加地包括:响应于从所述处理器电路接收到以下各项中的至少一个的指示:与所述至少一个第一矩阵运算相关联的误推测或与所述至少一个第一矩阵运算相关联的误预测:用于使从所述rs-tdq电路中取消所述至少一个第一矩阵运算的装置;以及用于使从所述tdq电路中取消所述至少一个第一矩阵运算的装置。

根据示例25,提供了一种非暂时性存储设备。所述非暂时性存储设备包括指令,所述指令当通过保留站(rs)电路来执行时,使所述rs电路:将至少一个第一矩阵运算分派给设置在通信地耦合到所述rs电路的矩阵乘法单元(tmu)中的tdq电路;将所述至少一个第一矩阵运算分派给所述rs-tdq电路;向重排序缓冲器(rob)电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第一矩阵运算的信息;使所述rob电路提交所述至少一个第一矩阵运算;并且使来自所述至少一个第一矩阵运算的数据从tmu缓冲器(tmb)电路转移到存储器电路。

示例26可以包括示例25的要素,其中使所述rs电路使来自所述至少一个第一矩阵运算的数据从所述tmb电路转移到所述存储器电路的所述指令进一步使所述rs电路:使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到核心电路的处理器高速缓存存储器电路。

示例27可以包括示例25或26中的任一项的要素,其中使所述rs电路使来自所述至少一个第一矩阵运算的数据从所述tmb电路转移到所述存储器电路的所述指令进一步使所述rs电路:使包括通过所述至少一个第一矩阵运算所生成的二维数组的输出拼贴寄存器从所述tmb电路转移到通信地耦合到核心电路的系统存储器电路。

示例28可以包括示例25至27中的任一项的要素,其中所述指令当通过所述rs电路来执行时,进一步使所述rs电路:将至少一个第二矩阵运算分派给所述tdq电路,所述第二矩阵运算使用来自所述至少一个第一矩阵运算的所述数据的至少一部分;将所述至少一个第二矩阵运算分派给所述rs-tdq电路;向重排序缓冲器(rob)电路传送信号,所述信号包括指示通过所述tmu完成所述至少一个第二矩阵运算的信息;使所述rob电路提交所述至少一个第二矩阵运算;并且使来自所述至少一个第二矩阵运算的数据从所述tmu缓冲器(tmb)电路转移到所述存储器电路。

示例29可以包括示例25至28中的任一项的要素,其中使所述rs电路将至少一个第二矩阵运算分派给所述tdq电路的所述指令进一步使所述rs电路:响应于将所述至少一个第一矩阵运算分派给所述tdq电路而将所述至少一个第二矩阵运算分派给所述tdq电路。

示例30可以包括示例25至29中的任一项的要素,其中使所述rs电路将至少一个第二矩阵运算分派给所述tdq电路的所述指令进一步使所述rs电路:响应于接收到将所述至少一个第一矩阵运算分派给所述tmu中的矩阵乘法(tmm)电路的指示而将所述至少一个第二矩阵运算分派给所述tdq电路。

示例31可以包括示例25至30中的任一项的要素,其中使所述rs电路使来自所述至少一个第二矩阵运算的数据从所述tmu缓冲器(tmb)电路转移到所述存储器电路的所述指令进一步使所述rs电路:使通过所述至少一个第二矩阵运算所生成的二维数组从所述tmb电路转移到存储器电路,所述存储器电路包括以下各项中的至少一个:处理器高速缓存电路或系统存储器电路。

示例32可以包括示例25至31中的任一项的要素,其中所述指令当通过所述rs电路来执行时,进一步使所述rs电路响应于从所述处理器电路接收到以下各项中的至少一个的指示:与所述至少一个第一矩阵运算相关联的误推测或与所述至少一个第一矩阵运算相关联的误预测:使从所述rs-tdq电路中取消所述至少一个第一矩阵运算;并且使从所述tdq电路中取消所述至少一个第一矩阵运算。

根据示例33,提供了一种矩阵乘法单元(tmu)。所述tmu可以包括:tmu数据存储缓冲器(tmb)电路;tmu运算队列(tmq)电路;tmu矩阵乘法(tmm)电路;tmu控制(tmc)电路,所述tmu控制(tmc)电路被耦合到所述tmb电路、所述tmq电路和所述tmm电路,所述tmc电路用于:使所述tmb电路在所述tmb电路中存储至少一个拼贴寄存器,所述至少一个拼贴寄存器被从通信地耦合到核心电路的保留站(rs)电路接收,其中所述至少一个拼贴寄存器中的每一个均包括相应的二维数据数组;使所述tmq电路使用所述至少一个拼贴寄存器来存储至少一个第一矩阵乘法运算;使所述tmm电路对所述一个或多个拼贴寄存器执行所述至少一个第一矩阵乘法运算以生成至少一个第一输出拼贴寄存器;使所述tmb电路存储所述至少一个第一输出拼贴寄存器;并且响应于通过所述rs电路接收到请求而使所述至少一个第一输出拼贴寄存器转移到所述tmu外部的存储器电路。

示例34可以包括示例33的要素,所述tmq电路可以进一步:响应于从所述rs电路接收到取消请求而取消所述至少一个第一矩阵乘法运算。

示例35可以包括示例33或34中的任一项的要素,其中为了响应于通过rs电路接收到请求而使所述至少一个输出拼贴寄存器转移到所述tmu外部的存储器电路,所述tmc电路可以进一步:使所述tmb电路将所述至少一个输出拼贴寄存器转移到高速缓存存储器电路,所述高速缓存存储器电路被通信地耦合到所述处理器电路。

示例36可以包括示例33至35中的任一项的要素,其中为了响应于通过所述rs电路接收到请求而使所述至少一个输出拼贴寄存器转移到所述tmu外部的存储器电路,所述tmc电路可以进一步:使所述tmb电路将所述至少一个输出拼贴寄存器转移到系统存储器电路,所述系统存储器电路被通信地耦合到所述处理器电路。

示例37可以包括示例33至36中的任一项的要素,其中所述tmc电路可以进一步:使所述tmq电路存储至少一个第二矩阵乘法运算,所述第二矩阵运算使用所述第一输出拼贴寄存器作为输入;使所述tmm电路对所述第一输出拼贴寄存器执行所述至少一个第二矩阵乘法运算以生成所述至少一个第二输出拼贴寄存器;使所述tmb电路存储所述至少一个第二输出拼贴寄存器;并且响应于通过所述rs电路接收到请求而使所述至少一个第二输出拼贴寄存器转移到所述tmu外部的存储器电路。

示例38可以包括示例33至37中的任一项的要素,其中为了使所述tmq电路存储至少一个第二矩阵乘法运算,所述tmc电路可以进一步:使所述tmq电路响应于使所述tmm电路对所述一个或多个拼贴寄存器执行所述至少一个第一矩阵乘法运算而存储所述至少一个第二矩阵运算。

根据示例39,提供了一种非暂时性存储设备,所述非暂时性存储设备包括指令,所述指令当通过tmu控制(tmc)电路来执行时,使所述tmc电路:使所述tmb电路在所述tmb电路中存储至少一个拼贴寄存器,所述至少一个拼贴寄存器被从通信地耦合到核心电路的保留站(rs)电路接收,其中所述至少一个拼贴寄存器中的每一个均包括相应的二维数据数组;使所述tmq电路使用所述至少一个拼贴寄存器来存储至少一个第一矩阵乘法运算;使所述tmm电路对所述一个或多个拼贴寄存器执行所述至少一个第一矩阵乘法运算以生成至少一个第一输出拼贴寄存器;使所述tmb电路存储所述至少一个第一输出拼贴寄存器;并且响应于通过所述rs电路接收到请求而使所述至少一个第一输出拼贴寄存器转移到所述tmu外部的存储器电路。

示例40可以包括示例39的要素,其中所述指令进一步使所述tmc电路:使所述tmq电路响应于从所述rs电路接收到取消请求而取消所述至少一个第一矩阵乘法运算。

示例41可以包括示例39或40中的任一项的要素,其中使所述tmc电路响应于通过所述rs电路接收到请求而使所述至少一个输出拼贴寄存器转移到所述tmu外部的存储器电路的所述指令进一步使所述tmc电路:使所述tmb电路将所述至少一个输出拼贴寄存器转移到高速缓存存储器电路,所述高速缓存存储器电路被通信地耦合到所述处理器电路。

示例42可以包括示例39至41中的任一项的要素,其中使所述tmc电路响应于通过所述rs电路接收到请求而使所述至少一个输出拼贴寄存器转移到所述tmu外部的存储器电路的所述指令进一步使所述tmc电路:使所述tmb电路将所述至少一个输出拼贴寄存器转移到系统存储器电路,所述系统存储器电路被通信地耦合到所述处理器电路。

示例43可以包括示例39至42中的任一项的要素,其中所述指令进一步使所述tmc电路:使所述tmq电路存储至少一个第二矩阵乘法运算,所述第二矩阵运算使用所述第一输出拼贴寄存器作为输入;使所述tmm电路对所述第一输出拼贴寄存器执行所述至少一个第二矩阵乘法运算以生成所述至少一个第二输出拼贴寄存器;使所述tmb电路存储所述至少一个第二输出拼贴寄存器;并且响应于通过所述rs电路接收到请求而使所述至少一个第二输出拼贴寄存器转移到所述tmu外部的存储器电路。

示例44可以包括示例39至43中的任一项的要素,其中使所述tmc电路使所述tmq电路存储至少一个第二矩阵乘法运算的所述指令进一步使所述tmc电路:使所述tmq电路响应于使所述tmm电路对所述一个或多个拼贴寄存器执行所述至少一个第一矩阵乘法运算而存储所述至少一个第二矩阵运算。

根据示例45,提供了一种拼贴寄存器矩阵乘法系统,所述系统被布置成执行根据示例9至16中的任一项所述的方法。

根据示例46,提供了一种芯片组,所述芯片组被布置成执行根据示例9至16中的任一项所述的方法。

根据示例47,提供了至少一种机器可读存储设备,所述至少一种机器可读存储设备包括多个指令,所述多个指令响应于在计算设备上被执行而使所述计算设备执行根据示例9至16中的任一项所述的方法。

根据示例48,提供了一种包括拼贴寄存器矩阵乘法系统的设备,所述设备被布置成执行根据示例9至16中的任一项所述的方法。

已在本文中采用的术语和表述被用作描述而不是限制的术语,并且在使用这样的术语和表述时,不存在排除所示出和描述的特征(或其部分)的任何等同物的意图,并且应认识到,各种修改在权利要求的范围内是可能的。因此,权利要求旨在涵盖所有这样的等同物。已在本文中描述了各种特征、方面和实施例。如本领域的技术人员将理解的那样,这些特征、方面和实施例容易彼此组合并且容易变化和修改。因此,本公开应该被认为包含这样的组合、变化和修改。

如本文所描述的,可以使用硬件元件、软件元件或其任何组合来实现各种实施例。硬件元件的示例可以包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(asic)、可编程逻辑器件(pld)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。

贯穿本说明书对“一个实施例”或“实施例”的引用意味着连同该实施例一起描述的特定特征、结构或特性被包括在至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”贯穿本说明书在各个地方中的出现不一定全部参考同一实施例。此外,可以在一个或多个实施例中以任何适合的方式组合这些特定特征、结构或特性。

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