用于复数乘法和累加的装置和方法与流程

文档序号:17831651发布日期:2019-06-05 23:06阅读:421来源:国知局
用于复数乘法和累加的装置和方法与流程

本发明的实施例一般地涉及计算机处理器的领域。更特别地,实施例涉及用于复数乘法和累加的装置和方法。



背景技术:

指令集或指令集架构(isa)是与编程有关的计算机架构的部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(i/o)。应当注意到,术语“指令”在本文中一般是指宏指令,即被提供给处理器以供执行的指令,其与微指令或微操作(micro-op)相反,那是处理器解码器对宏指令进行解码的结果。微指令或微操作可以被配置成指示处理器上的执行单元执行操作来实现与宏指令相关联的逻辑。

isa不同于微架构,所述微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可以共享公共的指令集。例如,intel®pentium4处理器、intel®core™处理器、以及来自加利福尼亚州森尼韦尔的advancedmicrodevices(超微半导体)有限公司的处理器实现x86指令集的几乎相同的版本(其中具有在较新版本情况下已经添加的一些扩展),但是具有不同的内部设计。例如,isa的相同寄存器架构可以通过使用众所周知的技术、以不同的方式被实现在不同的微架构中,包括专用物理寄存器、一个或多个使用寄存器重命名机制(例如使用寄存器别名表(rat)、重排序缓冲器(rob)和引退寄存器文件)的动态分配的物理寄存器。除非另行说明,否则短语寄存器架构、寄存器文件和寄存器在本文中被使用来指代对于软件/编程者可见的事物以及指令指定寄存器所用的方式。在需要区别的情况下,形容词“逻辑的”、“架构的”、或“软件可见的”将用于指示寄存器架构中的寄存器/文件,而不同的形容词将用于指明给定微架构中的寄存器(例如物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。

附图说明

本发明作为示例而不是限制地在附图的各图中被图示,在所述附图中同样的参考标记指示类似的元素,并且在所述附图中:

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

图1a是一框图,其图示了根据本发明的实施例的通用向量友好指令格式及其a类指令模板;

图1b是一框图,其图示了根据本发明的实施例的通用向量友好指令格式及其b类指令模板;

图2a是一框图,其图示了根据本发明的实施例的示例性的特定向量友好指令格式;

图2b是一框图,其图示了根据本发明的一个实施例的构成全操作码字段174的特定向量友好指令格式200的字段;

图2c是一框图,其图示了根据本发明的一个实施例的构成寄存器索引字段144的特定向量友好指令格式200的字段;

图2d是一框图,其图示了根据本发明的一个实施例的构成扩增操作字段150的特定向量友好指令格式200的字段;

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

图4a是一框图,其图示了根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线二者;

图4b是一框图,其图示了根据本发明的实施例的将被包括在处理器中的有序架构核的示例性实施例以及示例性寄存器重命名、无序发布/执行架构核二者;

图5a-b图示了更特定示例性核架构的框图,所述核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个;

图5a是根据本发明的实施例的单个处理器核连同其与管芯上互连网络502的连接以及连同其2级(l2)高速缓存504的局部子集的框图;

图5b是根据本发明的实施例的图5a中的处理器核的部分的展开视图;

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

图7-10是示例性计算机架构的框图;

图7示出了根据本发明的一个实施例的系统的框图;

图8是根据本发明的实施例的第一更特定示例性系统的框图;

图9是根据本发明的实施例的第二更特定示例性系统的框图;

图10是根据本发明的实施例的soc的框图;

图11是一框图,其对比了根据本发明的实施例的用来将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用;

图12是根据本发明的实施例的用于对复数进行乘法和累加的装置的框图;

图13是根据本发明的实施例的用于对复数进行乘法和累加的方法的流程图。

具体实施方式

在以下描述中,阐述了很多特定细节。然而,理解的是,本发明的实施例可以在没有这些特定细节的情况下被实践。在其他实例中,众所周知的电路、结构和技术没有被详细示出以便不使对该描述的理解模糊不清。

本说明书中对“一个实施例”、“实施例”、“示例实施例”等等的提及指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可以不一定包括所述特定的特征、结构或特性。此外,这样的短语不一定指代相同的实施例。此外,当结合实施例描述特定的特征、结构或特性的时候,所主张的是:无论是否被明确地描述,本领域技术人员都知道结合其他实施例来影响这样的特征、结构或特性。

如在本描述和权利要求书中所使用的,并且除非另行说明,否则使用序数形容词“第一”、“第二”、“第三”等等来描述一个元素仅仅指示元素的特定实例或同样元素的不同实例正被提及,并且不意图暗示这样描述的元素必须在时间上、空间上、等级上或以任何其他方式处于特定序列。

根据本发明的实施例的将由处理器核执行的指令可以用以下详述的“通用向量友好指令格式”来被具体化。在其他实施例中,不利用这样的格式,而是使用另一指令格式,然而,对写-掩码寄存器、各种数据变换(拌和(swizzle)、广播等等)、寻址等等的以下描述一般可适用于以上(多个)指令的实施例的描述。另外,在以下详述示例性的系统、架构和流水线。指令可以在这样的系统、架构和流水线上被执行,但是不限于所详述的那些。

指令集

指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如位的数目、位的位置)来除了其他许多东西之外还指定将被执行的操作(例如操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如掩码)。尽管有指令模板(或子格式)的定义,但是一些指令格式被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段典型地处于相同的次序,但是至少一些具有不同的位定位,因为有较少的字段被包括)和/或被定义成具有被不同地解释的给定字段。因而,isa的每个指令通过使用给定的指令格式(并且如果被定义的话,则以该指令格式的指令模板中的给定的一个指令模板)来被表述,并且包括用于指定操作和操作数的字段。例如,示例性的add指令具有特定的操作码和指令格式,所述指令格式包括用于指定该操作码的操作码字段以及用于选择操作数的操作数字段(源1/目的地和源2);并且该add指令在指令流中的出现将在操作数字段中具有特定的内容,其选择特定的操作数。被称为高级向量扩展(avx、avx2和avx-512)并且使用向量扩展(vex)编码方案的simd扩展集已经被发布和/或公布(例如,参见intel®64和ia-32架构软件开发者手册,2014年9月;intel®高级向量扩展编程参考,2014年10月;以及intel®架构指令集扩展编程参考,2016年10月)。

示例性指令格式

本文中描述的(多个)指令的实施例可以用不同的格式被具体化。另外,以下详述示例性的系统、架构和流水线。(多个)指令的实施例可以在这样的系统、架构和流水线上被执行,但是不限于所详述的那些。

通用向量友好指令格式

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

图1a-1b是框图,其图示了根据本发明的实施例的通用向量友好指令格式及其指令模板。图1a是一框图,其图示了根据本发明的实施例的通用向量友好指令格式及其a类指令模板;而图1b是一框图,其图示了根据本发明的实施例的通用向量友好指令格式及其b类指令模板。特别地,一通用向量友好指令格式100,为其定义了a类和b类指令模板,这二者包括无存储器访问(nomemoryaccess)105指令模板和存储器访问120指令模板。在向量友好指令格式的上下文中的术语“通用”是指:指令格式不被约束到任何特定的指令集。

虽然本发明的实施例将被描述,其中向量友好指令格式支持以下各项:具有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字节向量操作数)。

图1a中的a类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问、全舍入(fullround)控制类型操作110指令模板,以及无存储器访问、数据变换类型操作115指令模板;以及2)在存储器访问120指令模板内,示出了存储器访问、暂时125指令模板,以及存储器访问、非暂时130指令模板。图1b中的b类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问、写掩码控制、部分舍入控制类型操作112指令模板,以及无存储器访问、写掩码控制、vsize类型操作117指令模板;以及2)在存储器访问120指令模板内,示出了存储器访问、写掩码控制127指令模板。

通用向量友好指令格式100包括下文中按图1a-1b中所图示的次序所列出的以下字段。

格式字段140——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且因而标识以向量友好指令格式的指令在指令流中的出现。照此,在以下意义上该字段是可选的:对于仅仅具有通用向量友好指令格式的指令集而言,不需要它。

基本操作字段142——其内容区分不同的基本操作。

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

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

扩增操作字段150——其内容区分除了基本操作之外还将执行各种不同操作中的哪一个。该字段是内容特定的。在本发明的一个实施例中,该字段被划分成类字段168、阿尔法(alpha)字段152和贝塔(beta)字段154。扩增操作字段150允许在单个指令、而不是2个、3个或4个指令中执行公共群组的操作。

缩放(scale)字段160——其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用“2缩放*索引+基础(2scale*index+base)”的地址生成)。

位移字段162a——其内容用作存储器地址生成的部分(例如,用于使用“2缩放*索引+基础+位移(2scale*index+base+displacement)”的地址生成)。

位移因子字段162b(注意到,位移字段162a直接在位移因子字段162b上的并置指示一个或另一个被使用)——其内容用作地址生成的部分;它指定将通过存储器访问的大小(n)被缩放的位移因子——其中n是存储器访问中的字节的数目(例如,用于使用“2缩放*索引+基础+缩放的位移(2scale*index+base+scaleddisplacement)”的地址生成)。冗余低阶位被忽略并且因此,位移因子字段的内容乘以存储器操作数总大小(n)以便生成将在计算有效地址中被使用的最终位移。n的值由处理器硬件在运行时基于全操作码字段174(在本文中稍后被描述)以及数据操纵字段154c来确定。位移字段162a和位移因子字段162b在如下意义上是可选的:它们不用于无存储器访问105指令模板,和/或不同的实施例可以实现两个中的仅一个或可以两个都不实现。

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

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

立即数(immediate)字段172——其内容允许对立即数的指定(specification)。该字段在如下意义上是可选的:它不存在于不支持立即数的通用向量友好格式的实现方式中并且它不存在于不使用立即数的指令中。

类字段168——其内容在不同类的指令之间进行区分。参考图1a-b,该字段的内容在a类和b类指令之间进行选择。在图1a-b中,圆形拐角的方形用于指示在字段中存在特定值(例如,分别在图1a-b中,针对类字段168的a类168a和b类168b)。

a类指令模板

在a类的非存储器访问105指令模板的情况中,阿尔法字段152被解释为rs字段152a,其内容区分将执行不同扩增操作类型中的哪一个(例如,为无存储器访问、舍入类型操作110和无存储器访问、数据变换类型操作115指令模板分别指定舍入152a.1和数据变换152a.2),而贝塔字段154区分将执行所指定类型的操作中的哪一个。在无存储器访问105指令模板中,缩放字段160、位移字段162a、和位移缩放字段162b不存在。

无存储器访问指令模板——全舍入控制类型操作

在无存储器访问全舍入控制类型操作110指令模板中,贝塔字段154被解释为舍入控制字段154a,其(多个)内容提供静态舍入。虽然在本发明的所描述的实施例中,舍入控制字段154a包括抑制所有浮点异常(sae)字段156和舍入操作控制字段158,但是可替换的实施例可以支持、可以将这两个概念编码到相同字段中或仅仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段158)。

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

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

无存储器访问指令模板——数据变换类型操作

在无存储器访问数据变换类型操作115指令模板中,贝塔字段154被解释为数据变换字段154b,其内容区分将执行多个数据变换中的哪一个(例如,无数据变换、拌和、广播)。

在a类的存储器访问120指令模板的情况中,阿尔法字段152被解释为驱逐提示字段152b,其内容区分将使用驱逐提示中的哪一个(在图1a中,为存储器访问、暂时125指令模板和存储器访问、非暂时130指令模板分别指定暂时152b.1和非暂时152b.2),而贝塔字段154被解释为数据操纵字段154c,其内容区分将执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问120指令模板包括缩放字段160,以及可选地位移字段162a或位移缩放字段162b。

向量存储器指令在具有转换支持的情况下执行从存储器的向量加载以及向存储器的向量存储。如同常规向量指令那样,向量存储器指令以逐数据元素的方式从/向存储器传递数据,其中实际被传递的元素由被选为写掩码的向量掩码的内容来指示。

存储器访问指令模板——暂时性

暂时性数据是很可能将足够快地被重用以受益于高速缓存的数据。然而,这是一提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略该提示。

存储器访问指令模板——非暂时性

非暂时性数据是不太可能足够快地被重用以受益于在第一层级高速缓存中高速缓存的数据,并且应当被给予驱逐的优先权。然而,这是一提示,并且不同的处理器可以用不同的方式来实现它,包括完全忽略该提示。

b类指令模板

在b类指令模板的情况中,阿尔法字段152被解释为写掩码控制(z)字段152c,其内容区分受写掩码字段170所控制的写屏蔽应当是合并还是归零。

在b类的非存储器访问105指令模板的情况中,贝塔字段154的部分被解释为rl字段157a,其内容区分将执行不同扩增操作类型中的哪一个(例如,为无存储器访问、写掩码控制、部分舍入控制类型操作112指令模板和无存储器访问、写掩码控制、vsize类型操作117指令模板分别指定舍入157a.1和向量长度(vsize)157a.2),而贝塔字段154的其余部分区分将执行所指定类型的操作中的哪一个。在无存储器访问105指令模板中,缩放字段160、位移字段162a、和位移缩放字段162b不存在。

在无存储器访问、写掩码控制、部分舍入控制类型操作110指令模板中,贝塔字段154的其余部分被解释为舍入操作字段159a并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处置程序)。

舍入操作控制字段159a——正如同舍入操作控制字段158那样,其内容区分要执行一群组的舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因而,舍入操作控制字段159a允许以每个指令为基础改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段150的内容覆写该寄存器值。

在无存储器访问、写掩码控制、vsize类型操作117指令模板中,贝塔字段154的其余部分被解释为向量长度字段159b,其内容区分将对多个数据向量长度中的哪一个(例如,128、256或512字节)执行。

在b类的存储器访问120指令模板的情况中,贝塔字段154的部分被解释为广播字段157b,其内容区分是否将执行广播类型数据操纵操作,而贝塔字段154的其余部分被解释为向量长度字段159b。存储器访问120指令模板包括缩放字段160,以及可选地位移字段162a或位移缩放字段162b。

关于通用向量友好指令格式100,示出了全操作码字段174,其包括格式字段140、基本操作字段142和数据元素宽度字段164。虽然示出了一个实施例,其中全操作码字段174包括所有这些字段,但是在不支持它们中所有的实施例中全操作码字段174包括少于所有这些字段。全操作码字段174提供操作代码(操作码)。

扩增操作字段150、数据元素宽度字段164、以及写掩码字段170允许在通用向量友好指令格式中以每个指令为基础指定这些特征。

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

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

示例性特定向量友好指令格式

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

应当理解的是,尽管为了说明性目的而在通用向量友好指令格式100的上下文中参考特定向量友好指令格式200描述了本发明的实施例,但是除了在要求的地方之外,本发明不限于特定向量友好指令格式200。例如,通用向量友好指令格式100设想用于各种字段的各种可能大小,而特定向量友好指令格式200被示出为具有特定大小的字段。作为特定示例,虽然数据元素宽度字段164在特定向量友好指令格式200中被图示为一位字段,但是本发明不被这样限制(也就是说,通用向量友好指令格式100设想数据元素宽度字段164的其他大小)。

通用向量友好指令格式100包括下文中按图2a中所图示的次序所列出的以下字段。

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

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

第二-第四字节(evex字节1-3)包括提供特定能力的多个位字段。

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

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

操作码映射字段215(evex字节1、位[3:0]-mmmm)——其内容对所暗指的前导操作码字节(0f、0f38或0f3)进行编码。

数据元素宽度字段164(evex字节2、位[7]-w)——其由记号evex.w来表示。evex.w用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。

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

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

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

阿尔法字段152(evex字节3、位[7]-eh;也称为evex.eh、evex.rs、evex.rl、evex.writemaskcontrol(写掩码控制)和evex.n;也用α来说明)——如先前所描述的,该字段是内容特定的。

贝塔字段154(evex字节3、位[6:4]-sss,也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0和evex.llb;也用βββ来说明)——如先前所描述的,该字段是内容特定的。

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

写掩码字段170(evex字节3、位[2:0]-kkk)——其内容指定写掩码寄存器中的一寄存器的索引,如先前所描述的。在本发明的一个实施例中,特定的值evex.kkk=000具有特殊的表现,其暗示没有写掩码被用于特定的指令(这可以用各种方式被实现,包括使用被硬连线到全一的写掩码或绕过屏蔽硬件的硬件)。

实操作码字段230(字节4)也被称为操作码字节。在该字段中指定操作码的部分。

modr/m字段240(字节5)包括mod字段242、reg字段244和r/m字段246。如先前所描述的,mod字段242的内容在存储器访问和非存储器访问操作之间进行区分。reg字段244的作用可以被总结成两种情形:对目的地寄存器操作数或源寄存器操作数进行编码,或被看作操作码扩展并且不用于对任何指令操作数进行编码。r/m字段246的作用可以包括以下:对引用存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。

缩放、索引、基本(sib)字节(字节6)——如先前所描述的,缩放字段150的内容用于存储器地址生成。sib.xxx254和sib.bbb256——这些字段的内容已经在先前关于寄存器索引xxxx和bbbb而被提及。

位移字段162a(字节7-10)——当mod字段242包含10时,字节7-10是位移字段162a,并且它与传统32位的位移(disp32)相同地起作用,并且以字节粒度起作用。

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

全操作码字段

图2b是一框图,其图示了根据本发明的一个实施例的构成全操作码字段174的特定向量友好指令格式200的字段。特别地,全操作码字段174包括格式字段140、基本操作字段142和数据元素宽度(w)字段164。基本操作字段142包括前缀编码字段225、操作码映射字段215和实操作码字段230。

寄存器索引字段

图2c是一框图,其图示了根据本发明的一个实施例的构成寄存器索引字段144的特定向量友好指令格式200的字段。特别地,寄存器索引字段144包括rex字段205、rex'字段210、modr/m.reg字段244、modr/m.r/m字段246、vvvv字段220、xxx字段254和bbb字段256。

扩增操作字段

图2d是一框图,其图示了根据本发明的一个实施例的构成扩增操作字段150的特定向量友好指令格式200的字段。当类(u)字段168包含0时,它表示evex.u0(a类168a);当它包含1时,它表示evex.u1(b类168b)。当u=0并且mod字段242包含11(表示无存储器访问操作)时,阿尔法字段152(evex字节3、位[7]-eh)被解释为rs字段152a。当rs字段152a包含一个1(舍入152a.1)时,贝塔字段154(evex字节3、位[6:4]-sss)被解释为舍入控制字段154a。舍入控制字段154a包括一位sae字段156和两位舍入操作字段158。当rs字段152a包含一个0(数据变换152a.2)时,贝塔字段154(evex字节3、位[6:4]-sss)被解释为三位数据变换字段154b。当u=0并且mod字段242包含00、01或10(表示存储器访问操作)时,阿尔法字段152(evex字节3、位[7]-eh)被解释为驱逐提示(eh)字段152b,并且贝塔字段154(evex字节3、位[6:4]-sss)被解释为三位数据操纵字段154c。

当u=1时,阿尔法字段152(evex字节3、位[7]-eh)被解释为写掩码控制(z)字段152c。当u=1并且mod字段242包含11(表示无存储器访问操作)时,贝塔字段154的部分(evex字节3、位[4]-s0)被解释为rl字段157a;当它包含一个1(舍入157a.1)时,贝塔字段154的其余部分(evex字节3、位[6-5]-s2-1)被解释为舍入操作字段159a,而当rl字段157a包含一个0(vsize157.a2)时,贝塔字段154的其余部分(evex字节3、位[6-5]-s2-1)被解释为向量长度字段159b(evex字节3、位[6-5]-l1-0)。当u=1并且mod字段242包含00、01或10(表示存储器访问操作)时,贝塔字段154(evex字节3、位[6:4]-sss)被解释为向量长度字段159b(evex字节3、位[6-5]-l1-0)和广播字段157b(evex字节3、位[4]-b)。

示例性寄存器架构

图3是根据本发明的一个实施例的寄存器架构300的框图。在所图示的实施例中,存在为512位宽的32个向量寄存器310;这些寄存器被引用为zmm0直到zmm31(zmm寄存器组)。代替于zmm寄存器组,其他实施例可以包括为256位宽的十六个向量寄存器的组;这些寄存器被引用为ymm0直到ymm15(ymm寄存器组)。代替于zmm寄存器组或ymm寄存器组,其他实施例可以包括为128位宽的十六个向量寄存器的组;这些寄存器被引用为xmm0直到xmm15(xmm寄存器组)。在图3中,较低16个zmm寄存器的较低阶256位被叠加(overlay)在寄存器ymm0-15上,并且较低16个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)被叠加在寄存器xmm0-15上。

特定向量友好指令格式200在这些叠加的寄存器文件上操作,如以下的表中所说明的那样。

换言之,向量长度字段159b在最大长度和一个或多个其他较短的长度之间选择,其中每个这样的较短的长度是在前长度的长度的一半;并且没有向量长度字段159b的指令模板在最大向量长度上操作。此外,在一个实施例中,特定向量友好指令格式200的b类指令模板对打包(packed)或标量单精度/双精度浮点数据以及打包或标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素定位上执行的操作;要么使较高阶数据元素定位与它们在指令之前那样相同,要么使较高阶数据元素定位归零,这取决于实施例。

写掩码寄存器315——在所图示的实施例中,存在8个写掩码寄存器(k0直到k7),每一个在大小方面为64位。在可替换的实施例中,写掩码寄存器315在大小方面为16位。在一个实施例中,向量掩码寄存器k0不能被用作写掩码;当通常将会指示k0的编码用于写掩码时,它选择0xffff的硬连线的写掩码,从而有效地禁用针对那个指令的写屏蔽。

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

标量浮点堆栈寄存器文件(x87堆栈)345,在其上混叠(aliase)了mmx打包的整数平坦寄存器文件350——在所图示的实施例中,x87堆栈是八元素堆栈,其用于通过使用x87指令集扩展来对32/64/80-位浮点数据执行标量浮点操作;而mmx寄存器用于对64位打包的整数数据执行操作,以及保存用于在mmx和xmm寄存器之间执行的一些操作的操作数。

本发明的可替换的实施例可以使用更宽或更窄的寄存器。另外,本发明的可替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。

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

其中可以使本发明具体化的处理器核可以用不同的方式、为不同的目的并且在不同的处理器中实现。例如,这样的核的实现方式可以包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)主要意图用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可以包括:1)中央处理单元(cpu),其包括一个或多个意图用于通用计算的通用有序核和/或一个或多个意图用于通用计算的通用无序核;以及2)协处理器,其包括一个或多个主要意图用于图形和/或科学(吞吐量)计算的专用核。这样的不同的处理器导致不同的计算机系统架构,其可以包括:1)在与cpu分离的芯片上的协处理器;2)在与cpu相同的封装中的分离管芯上的协处理器;3)在与cpu相同的管芯上的协处理器(在所述情况中,这样的协处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或被称为专用核);以及4)片上系统(soc),其可以在相同管芯上包括所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能性。

示例性核架构

有序和无序核框图

图4a是一框图,其图示了根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线二者。图4b是一框图,其图示了根据本发明的实施例的将被包括在处理器中的有序架构核的示例性实施例以及示例性寄存器重命名、无序发布/执行架构核二者。图4a-b中的实线框图示了有序流水线和有序核,而虚线框的可选的添加图示了寄存器重命名、无序发布/执行流水线与核。考虑到有序方面是无序方面的子集,将描述无序方面。

在图4a中,处理器流水线400包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处置级422、以及提交级424。

图4b示出了处理器核490,所述处理器核490包括前端单元430,所述前端单元430耦合到执行引擎单元450,并且所述前端单元430和执行引擎单元450二者耦合到存储器单元470。核490可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或者混合的或可替换的核类型。作为又一选项,核490可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核等等。

前端单元430包括分支预测单元432,所述分支预测单元432耦合到微操作高速缓存433和指令高速缓存单元434,所述指令高速缓存单元434耦合到指令转译后备缓冲器(tlb)436,所述指令转译后备缓冲器(tlb)436耦合到指令取出单元438,所述指令取出单元438耦合到解码单元440。解码单元440(或解码器)可以解码指令,并且作为输出而生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其解码自原始指令、或其以其他方式反映原始指令、或从原始指令导出。可以通过使用各种不同的机制来实现解码单元440。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等等。在一个实施例中,核490包括微代码rom或其他介质,其存储针对某些宏指令的微代码(例如在解码单元440中或以其他方式在前端单元430内)。微操作高速缓存433和解码单元440耦合到执行引擎单元450中的重命名/分配器单元452。在各种实施例中,微操作高速缓存、诸如433还可以或代替地被称为操作高速缓存。

执行引擎单元450包括重命名/分配器单元452,所述重命名/分配器单元452耦合到引退单元454和一组一个或多个调度器单元456。(多个)调度器单元456表示任何数目的不同调度器,包括保留站、中央指令窗口等等。(多个)调度器单元456耦合到(多个)物理寄存器文件单元458。(多个)物理寄存器文件单元458中的每一个表示一个或多个物理寄存器文件,其中的不同的多个存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为将执行的下一个指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器文件单元458包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。(多个)物理寄存器文件单元458被引退单元454重叠,用以图示可以以其来实现寄存器重命名和无序执行的各种方式(例如,通过使用(多个)重排序缓冲器和(多个)引退寄存器文件;通过使用(多个)未来文件、(多个)历史缓冲器,以及(多个)引退寄存器文件;通过使用寄存器映射和寄存器池;等等)。引退单元454和(多个)物理寄存器文件单元458被耦合到(多个)执行集群460。(多个)执行集群460包括一组一个或多个执行单元462以及一组一个或多个存储器访问单元464。执行单元462可以执行各种操作(例如移位、加法、减法、乘法),并且可以对各种数据类型(例如标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行各种操作。虽然一些实施例可以包括专用于特定功能或功能集的多个执行单元,但是其他实施例可以包括仅一个执行单元或全部执行所有功能的多个执行单元。(多个)调度器单元456、(多个)物理寄存器文件单元458、和(多个)执行集群460被示出为可能是复数的,因为某些实施例为某些数据/操作类型创建分离的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其各自具有其自己的调度器单元、(多个)物理寄存器文件单元和/或执行集群——并且在分离的存储器访问流水线的情况中,实现某些实施例,其中仅仅该流水线的执行集群具有(多个)存储器访问单元464)。还应当理解的是,在其中使用分离的流水线的情况中,这些流水线中的一个或多个可以是无序发布/执行并且其余是有序的。

该组存储器访问单元464耦合到存储器单元470,所述存储器单元470包括数据tlb单元472,所述数据tlb单元472耦合到数据高速缓存单元474,所述数据高速缓存单元474耦合到2级(l2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可以包括加载单元、存储地址单元、和存储数据单元,其中的每一个耦合到存储器单元470中的数据tlb单元472。指令高速缓存单元434此外耦合到存储器单元470中的2级(l2)高速缓存单元476。l2高速缓存单元476耦合到高速缓存的一个或多个其他层级并且最后耦合到主存储器。

作为示例,示例性寄存器重命名、无序发布/执行核架构可以如下实现流水线400:1)指令取出438执行取出和长度解码级402和404;2)解码单元440执行解码级406;3)重命名/分配器单元452执行分配级408和重命名级410;4)(多个)调度器单元456执行调度级412;5)(多个)物理寄存器文件单元458和存储器单元470执行寄存器读取/存储器读取级414;执行集群460实行执行级416;6)存储器单元470和(多个)物理寄存器文件单元458执行写回/存储器写入级418;7)在异常处置级422中可以涉及各种单元;以及8)引退单元454和(多个)物理寄存器文件单元458执行提交级424。

核490可以支持一个或多个指令集(例如x86指令集(具有在较新版本的情况下已经添加的一些扩展);加利福尼亚州森尼维耳市的mipstechnologies的mips指令集;加利福尼亚州森尼维耳市的armholdings的arm指令集(具有可选的附加扩展、诸如neon)),包括本文中描述的(多个)指令。在一个实施例中,核490包括用于支持打包数据指令集扩展(例如avx、avx2、avx-512)的逻辑,从而允许通过使用打包数据来执行由许多多媒体应用使用的操作。

应当理解的是,核可以支持多线程(执行两组或更多组并行的操作或线程),并且可以用各种方式来这样做,包括时间切片的多线程、smt(例如,单个物理核为物理核正同时进行多线程的线程中的每一个提供逻辑核),或其组合(例如,时间切片的取出和解码以及此后的smt,诸如在intel®超线程技术中那样)。

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

特定示例性核架构

图5a-b图示了更特定示例性核架构的框图,所述核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如环状网络)来与某个固定的功能逻辑、存储器i/o接口、以及其他必要的i/o逻辑通信。

图5a是根据本发明的实施例的单个处理器核连同其与管芯上互连网络502的连接以及连同其2级(l2)高速缓存504的局部子集的框图。在一个实施例中,指令解码器500支持x86指令集,其具有打包数据指令集扩展。l1高速缓存506允许到标量和向量单元中的对高速缓存存储器的低等待时间访问。虽然在一个实施例中(为了简化设计),标量单元508和向量单元510使用分离的寄存器组(相应地,标量寄存器512和向量寄存器514),并且在它们之间传递的数据被写到存储器,然后从1级(l1)高速缓存506中读回,但是本发明的可替换的实施例可以使用不同的途径(例如使用单个寄存器组或包括通信路径,所述通信路径允许数据在两个寄存器文件之间被传递而没有被写入和读回)。

l2高速缓存的局部子集504是全局l2高速缓存的部分,所述全局l2高速缓存被划分成分离的局部子集,每个处理器核一个。每个处理器核具有至其自己的l2高速缓存的局部子集504的直接访问路径。由处理器核读取的数据被存储在其l2高速缓存子集504中,并且可以被快速地访问,这与其他处理器核访问其自己的局部l2高速缓存子集并行。由处理器核所写入的数据被存储在其自己的l2高速缓存子集504中,并且被从其他子集清除,如果必要的话。环状网络确保共享数据的一致性。环状网络是双向的以允许代理、诸如处理器核、l2高速缓存和其他逻辑块在芯片内与彼此通信。每个环状数据路径每个方向是1012位宽。

图5b是根据本发明的实施例的图5a中的处理器核的部分的展开视图。图5b包括l1高速缓存504的l1数据高速缓存506a部分,以及关于向量单元510和向量寄存器514的更多细节。特别地,向量单元510是16宽向量处理单元(vpu)(参见16宽alu528),其执行整数、单精度浮点、以及双精度浮点指令中的一个或多个。vpu支持利用拌和单元520来拌和寄存器输入,利用数值转换单元522a-b来进行数值转换,以及利用复制单元524来对存储器输入进行复制。写掩码寄存器526允许预测结果产生的向量写入。

特定处理器架构

图6是根据本发明的实施例的处理器600的框图,所述处理器600可以具有多于一个核、可以具有集成的存储器控制器、并且可以具有集成的图形元件。图6中的实线框图示了处理器600,其具有单个核602a、系统代理610、一组一个或多个总线控制器单元616,虽然虚线框的可选添加图示了可替换的处理器600,其具有多个核602a-n、在系统代理单元610中的一组一个或多个集成的存储器控制器单元614、以及专用逻辑608。

因而,处理器600的不同实现方式可以包括:1)具有专用逻辑608和核602a-n的cpu,所述专用逻辑608是集成的图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),所述核602a-n是一个或多个通用核(例如,通用有序核、通用无序核、二者的组合);2)具有核602a-n的协处理器,所述核602a-n是大量主要意图用于图形和/或科学(吞吐量)的专用核;以及3)具有核602a-n的协处理器,所述核602a-n是大量通用有序核。因而,处理器600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量集成众核(mic)协处理器(包括30或更多核)、嵌入式处理器等等。处理器可以实现在一个或多个芯片上。处理器600可以是一个或多个衬底的一部分和/或可以通过使用多个处理技术(诸如例如bicmos、cmos、或nmos)中的任一个而实现在一个或多个衬底上。

存储器层次包括核内的一个或多个层级的高速缓存、一组或一个或多个共享高速缓存单元606、以及外部存储器(未示出),所述外部存储器耦合到该组集成存储器控制器单元614。该组共享高速缓存单元606可以包括一个或多个中级高速缓存,诸如2级(l2)、3级(l3)、4级(l4)或其他层级的高速缓存、最后层级高速缓存(llc)和/或其组合。虽然在一个实施例中,基于环的互连单元612互连着集成图形逻辑608(集成图形逻辑608是专用逻辑的示例并且在本文中还被称为专用逻辑)、该组共享高速缓存单元606、以及系统代理单元610/(多个)集成存储器控制器单元614,但是可替换的实施例可以使用任何数目的众所周知的技术来互连这样的单元。在一个实施例中,在一个或多个高速缓存单元606与核602-a-n之间维持一致性。

在一些实施例中,核602a-n中的一个或多个能够进行多线程。系统代理610包括协调和操作核602a-n的那些组件。系统代理单元610可以包括例如功率控制单元(pcu)和显示单元。pcu可以是或包括对于调节核602a-n以及集成图形逻辑608的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

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

示例性计算机架构

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

现在参考图7,示出的是根据本发明的一个实施例的系统700的框图。系统700可以包括一个或多个处理器710、715,其耦合到控制器中枢720。在一个实施例中,控制器中枢720包括图形存储器控制器中枢(gmch)790以及输入/输出中枢(ioh)750(其可以在分离的芯片上);gmch790包括存储器和图形控制器,向其耦合了存储器740和协处理器745;ioh750将输入/输出(i/o)设备760耦合到gmch790。可替换地,存储器和图形控制器中的一个或二者被集成在(如本文中所描述的)处理器内,存储器740和协处理器745直接耦合到处理器710,并且控制器中枢720与ioh750在单个芯片中。

在图7中用断线来表示附加处理器715的可选性质。每个处理器710、715可以包括本文中描述的处理核中的一个或多个,并且可以是某个版本的处理器600。

存储器740可以例如是动态随机存取存储器(dram)、相变存储器(pcm)或二者的组合。对于至少一个实施例,控制器中枢720经由多点分支总线(multi-dropbus)诸如前侧总线(fsb)、点对点接口诸如快速路径互连(quickpathinterconnect,qpi)或类似的连接795来与(多个)处理器710、715通信。

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

就包括架构、微架构、热学、功率消耗特性等等的指标的度量的范围而言,在物理资源710、715之间可以存在各种差异。

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

现在参考图8,示出的是根据本发明的实施例的第一更特定示例性系统800的框图。如图8中所示,多处理器系统800是点对点互连系统,并且包括经由点对点互连850所耦合的第一处理器870和第二处理器880。处理器870和880中的每一个可以是某个版本的处理器600。在本发明的一个实施例中,处理器870和880分别是处理器710和715,而协处理器838是协处理器745。在另一实施例中,处理器870和880分别是处理器710协处理器745。

示出了处理器870和880,其分别包括集成存储器控制器(imc)单元872和882。处理器870作为其总线控制器单元的部分还包括点对点(p-p)接口876和878;类似地,第二处理器880包括p-p接口886和888。处理器870、880可以通过使用p-p接口电路878、888、经由点对点(p-p)接口850来交换信息。如图8中所示,imc872和882将处理器耦合到相应的存储器,即存储器832和存储器834,其可以是被本地附连到相应处理器的主存储器的部分。

处理器870、880可以各自通过使用点对点接口电路876、894、886、898经由单独的p-p接口852、854来与芯片组890交换信息。芯片组890可以可选地经由高性能接口892来与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。

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

芯片组890可以经由接口896而耦合到第一总线816。在一个实施例中,第一总线816可以是外围组件互连(pci)总线,或诸如pci快速总线或另一第三代i/o互连总线之类的总线,但是本发明的范围不被这样限制。

如图8中所示,各种i/o设备814可以连同总线桥818一起被耦合到第一总线816,所述总线桥818将第一总线816耦合到第二总线820。在一个实施例中,一个或多个附加的处理器815、诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列、或任何其他处理器被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚计数(lpc)总线。在一个实施例中,各种设备可以耦合到第二总线820,包括例如键盘和/或鼠标822、通信设备827和诸如盘驱动器或其他大容量存储设备的存储单元828,其可以包括指令/代码和数据830。此外,音频i/o824可以耦合到第二总线820。注意到,其他架构是可能的。例如,代替图8的点对点架构,系统可以实现多点分支总线或其他这样的架构。

现在参考图9,示出的是根据本发明的实施例的第二更特定示例性系统900的框图。图8和9中同样的元素具有同样的参考标号,并且图8的某些方面已经从图9中省略以便避免使图9的其他方面模糊。

图9图示了处理器870、880可以分别包括集成存储器和i/o控制逻辑(“cl”)872和882。因而,cl872、882包括集成存储器控制器单元并且包括i/o控制逻辑。图9图示了不仅是存储器832、834被耦合到cl872、882,而且i/o设备914也被耦合到控制逻辑872、882。传统i/o设备915被耦合到芯片组890。

现在参考图10,示出的是根据本发明的实施例的soc1000的框图。图6中的类似元素具有同样的参考标号。而且,虚线框是更高级soc上的可选特征。在图10中,(多个)互连单元1002耦合到:应用处理器1010,其包括一组一个或多个核602a-n以及(多个)共享的高速缓存单元606,所述核包括高速缓存单元604a-n;系统代理单元610;(多个)总线控制器单元616;(多个)集成存储器控制器单元614;一组一个或多个协处理器1020,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元1030;直接存储器存取(dma)单元1032;以及显示单元1040,其用于耦合到一个或多个外部显示器。在一个实施例中,(多个)协处理器1020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等等。

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

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

程序代码可以用高级过程编程语言或面向对象的编程语言来被实现以与处理系统通信。如果期望,则程序代码还可以用汇编或机器语言来被实现。事实上,本文中描述的机制在范围上不被限制到任何特定的编程语言。在任何情况中,语言可以是经编译或解释的语言。

至少一个实施例的一个或多个方面可以由被存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其当被机器读取的时候使得所述机器制作逻辑以执行本文中描述的技术。被为“ip核”的这样的表示可以被存储在有形的机器可读介质上,并且被供应到各种消费者或制造设施以加载到制作机器中,所述制作机器实际上制造逻辑或处理器。

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

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

仿真(包括二进制转化、代码变形等等)

在一些情况中,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转化(例如,通过使用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或以其他方式转换成一个或多个其他指令来由核处理。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、离开处理器、或部分在处理器上并且部分离开处理器。

图11是一框图,其对比了根据本发明的实施例的用来将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用。在所图示的实施例中,指令转换器是软件指令转换器,尽管可替换地,指令转换器可以用软件、固件、硬件或其各种组合来实现。图11示出了采用高级语言1102的程序可以通过使用x86编译器1104来被编译以生成x86二进制代码1106,所述x86二进制代码1106可以由具有至少一个x86指令集核1116的处理器来本地地执行。具有至少一个x86指令集核1116的处理器表示可以通过如下而执行与具有至少一个x86指令集核的英特尔处理器大体上相同的功能的任何处理器:兼容地执行或以其他方式处理(1)英特尔x86指令集核的指令集的大部分,或(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便实现与具有至少一个x86指令集核的英特尔处理器大体上相同的结果。x86编译器1104表示一种编译器,所述编译器可操作以生成x86二进制代码1106(例如目标代码),所述x86二进制代码1106可以在具有或没有附加链接处理的情况下在具有至少一个x86指令集核1116的处理器上被执行。类似地,图11示出了采用高级语言1102的程序可以通过使用可替换的指令集编译器1108来被编译以生成可替换的指令集二进制代码1110,所述可替换的指令集二进制代码1110可以由没有至少一个x86指令集核的处理器1114(例如具有如下核的处理器:所述核执行加利福尼亚州森尼维耳市的mipstechnologies的mips指令集和/或执行加利福尼亚州森尼维耳市的armholdings的arm指令集)本地地执行。指令转换器1112用于将x86二进制代码1106转换成可以由没有x86指令集核的处理器1114本地地执行的代码。这种经转换的代码不大可能与可替换的指令集二进制代码1110相同,因为能够这样做的指令转换器难以制造;然而,经转换的代码将实现一般操作并且由来自可替换指令集的指令构成。因而,指令转换器1112表示软件、固件、硬件、或它们的组合,其通过仿真、模拟或任何其他过程而允许没有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1106。

复数乘法和累加

本发明的实施例可以使用图12中示出的装置来通过使用打包的实和虚数据元素来执行复数乘法和累加。图12的装置可以被包括在各自如以上所描述的图4至10的处理器和/或系统中,其图示了包括本发明的实施例的处理器和系统,其中处理器490、600、710、715、870、880和1010以及系统700、800、900和1000可以包括图12中示出的块和/或元素中的任何或全部,其可以根据在图13的描述中所描述的技术和/或方法来操作。

所描述的实施例对128位、256位、和512位打包数据寄存器和存储器位置中的16位半精度浮点值执行操作。例如,一个实施例将xmm2和xmm3/m128中的打包数据值相乘,将来自xmm1的打包数据值与所述乘积相加,并且使xmm1中的结果累加,其中xmm1、xmm2和xmm3/m128将复数的实分量存储在偶元素中,并且将复数的虚分量存储在奇元素中。然而,其他实施例可以对其他大小和/或数据类型执行操作。

在实施例中,包括经融合的乘加器的处理硬件执行第一计算来计算结果的实分量,并且执行第二计算来计算结果的虚分量。通过使用记号x=xr+i*xi、y=yr+i*yi和z=zr=i*zi来分别表示具有实分量xr和虚分量xi的第一复数x、具有实分量yr和虚分量yi的第二复数y、以及具有实分量zr和虚分量zi的第三复数z,所述第一计算可以被表示为zr+xr*yr-xi*yi,并且第二计算可以被表示为zi+xr*yi+yr*xi,因为(xr+i*xi)(yr+i*yi)=[xr*yr+i2(xi*yi)]+i[xr*yi+yr*xi]。

实施例使用处理硬件来响应于解码单个指令而执行这两个计算,所述单个指令在本文中利用助记符vcfmaddph来被标识。相比之下,用于执行复数乘法-累加的其他途径可以使用多于一个指令,例如包括一个或多个置乱指令以及一个或多个乘-加指令的指令组合。

以下的伪代码指定了在一个实施例中执行的计算,其中src1和src2是源寄存器或存储器位置,temp是用于存储中间值的寄存器,dest是源和目的地寄存器,实分量被存储在源和目的地寄存器或存储器位置的偶元素(例如每个32位字的较低16位)中,并且虚分量被存储在源和目的地寄存器或存储器位置的奇元素(例如每个32位字的较高16位)中。

用于计算偶元素的示例伪代码:

temp[15:0]←dest[15:0]+src1[15:0]*src2[15:0]

dest[15:0]←temp[15:0]-src1[31:16]*src2[31:16]

用于计算奇元素的示例伪代码:

temp[31:16]←dest{31:16]+src1[31:16]*src2[15:0]

dest[31:16]←temp[31:16]+src1[15:0]*src2[31:16]

因而,结果的实分量被存储在dest的偶元素中,并且结果的虚分量被存储在dest的奇元素中。

此外,单个vcfmaddph指令的执行还可以执行两个操作来计算打包结果的其他字的实和虚分量,所述其他字例如128位打包结果的其他三个字、256位打包结果的其他七个字、或512位打包结果的其他十五个字。

在实施例中,处理器的isa可以包括第一单个指令(例如vcfaddph)来执行如以上所描述的复数乘法-加法,并且包括第二单个指令,其在本文中利用助记符vcfcmaddph来被标识,来执行由vcfmaddph执行的复数乘法的共轭版本。例如,在其中vcfmaddph是要计算偶元素,包括从两个对应的偶输入元素的乘积中减去两个奇输入元素的乘积的实施例中,vcfcmaddph是要计算偶元素,包括将两个奇输入元素的乘积与两个对应偶输入元素的乘积相加。

在各种实施例中,vcfmaddph和vcfcmaddph指令中的任一个或二者可以提供可选的写屏蔽、广播和/或归零。

返回到图12,寄存器文件1210可以在第一源寄存器中存储第一向量x,在第二源寄存器中存储第二向量y,并且在源/目的地寄存器中存储第三向量x,其中向量x、y和z中的每一个可以表示n个复数的集合。x的每对偶和奇元素(例如x[0]和x[1]、x[2]和x[3]……x[2n-2]和x[2n-1])可以在偶元素中存储复数的实分量,并且在奇元素中存储复数的虚分量。同样地,y的每对偶和奇元素(例如y[0]和y[1]、y[2]和y[3]……y[2n-2]和y[2n-1])可以在偶元素中存储复数的实分量,并且在奇元素中存储复数的虚分量;并且z的每对偶和奇元素(例如z[0]和z[1]、z[2]和z[3]……z[2n-2]和z[2n-1])可以在偶元素中存储复数的实分量,并且在奇元素中存储复数的虚分量。

复制复用器(dupmux)1220可以执行值从奇元素往偶元素位置中的拷贝(例如将{a,b,c,d}变换成{b,b,d,d})。在一个实施例中,dupmux1220可以用具有双输入向量、一输出向量复用器电路的硬件来被实现。交换复用器(swapmux)1230可以基于一个或多个控制信号的值来执行值从奇元素往偶元素位置中的拷贝(例如将{a,b,c,d}变换成{b,b,d,d}),值从偶元素往奇元素位置中的拷贝(例如将{a,b,c,d}变换成{a,a,c,c}),或交换奇和偶元素(例如将{a,b,c,d}变换成{b,a,d,c})。在实施例中,swapmux1230可以用具有两个双输入向量、一输出向量复用器电路的硬件来被实现。

经融合的乘加器(fma)1240可以是任何类型的乘法器和加法器电路。在实施例中,fma1240可以用具有浮点向量fma电路的硬件来被实现。fma1240可以将第一输入向量的任何大小元素(例如十六位)中的每一个乘以第二输入向量的相同大小元素中的每一个,并且将乘积与第三输入向量的相同大小元素中的每一个相加。

在实施例中,vcfmaddph指令可以被解码成两个微操作,其可以使得处理硬件(诸如图12的那个)计算复数的向量的偶和奇元素二者。

例如,第一微操作可以使用控制信号来使得硬件使用来自寄存器文件1210中的第一源寄存器的第一操作数(例如x)作为dupmux1220的一输入;使用来自第二源寄存器的第二操作数(例如y)作为swapmux1230的一输入;使用dupmux1220来将未被改变的第一操作数传递到fma1240的第一输入1241;使用swapmux1230来将第二操作数的偶元素拷贝到奇元素并且将经变换的第二操作数传递到fma1240的第二输入1242;使用来自源/目的地寄存器的第三操作数(例如z)作为fma1240的第三输入1243;执行fma操作;并且将fma操作的结果存储在暂时寄存器中。因而,例如,fma1240的第一输入1241将是{x[0],x[1],x[2],x[3],…x[2n-2],x[2n-1]};fma1240的第二输入1242将是{y[0],y[0],y[2],y[2],…y[2n-2],y[2n-2]};fma1240的第三输入1243将是{z[0],z[1],z[2],z[3],…z[2n-2],z[2n-1]};fma1240将把第一输入乘以第二输入并且将z与所述乘积相加;并且被存储在暂时寄存器中的fma结果将是{z[0]+x[0]*y[0],z[1]+x[1]*y[0],z[2]+x[2]*y[2],z[3]+x[3]*y[2],…z[2n-2]+x[2n-2]*y[2n-2],z[2n-1]+x[2n-1]*y[2n-2]}。

继续前述示例,对应的第二微操作可以使用控制信号来使得相同的硬件使用来自寄存器文件1210中的第二源寄存器的第二操作数(例如y)作为dupmux1220的一输入;使用来自第一源寄存器的第一操作数(例如x)作为swapmux1230的一输入;使用dupmux1220来将第二操作数的奇元素拷贝到偶元素并且将经变换的第二操作数传递到fma1240的第一输入1241;使用swapmux1230来交换第一操作数的偶和奇元素并且将经变换的第一操作数传递到fma1240的第二输入1242;使用来自暂时寄存器的第一微操作的结果作为fma1240的第三输入1243;执行fma操作的乘法部分;使用非电路(诸如fma控制逻辑)来对乘法结果的偶元素求反;执行fma操作的加法部分;以及将fma操作的结果存储在寄存器文件1210中的源/目的地寄存器中。因而,例如,fma1240的第一输入1241将是{y[1],y[1],y[3],y[3],…y[2n-1],y[2n-1]};fma1240的第二输入1242将是{x[1],x[0],x[3],x[2],…x[2n-1],x[2n-2]};乘法结果将是{x[1]*y[1],x[0]*y[1],x[3]*y[3],x[2]*y[3],…x[2n-1]*y[2n-1],x[2n-2]*y[2n-1]};并且被存储在源/目的地寄存器中的fma结果将是{z[0]+x[0]*y[0]-x[1]*y[1],z[1]+x[1]*y[0]+x[0]*y[1],z[2]+x[2]*y[2]-x[3]*y[3],z[3]+x[3]*y[2]+x[2]*y[3],…z[2n-2]+x[2n-2]*y[2n-2]-x[2n-1]*y[2n-1],z[2n-1]+x[2n-1]*y[2n-2]+x[2n-2]*y[2n-1]}。

因而,结果的实分量被存储在目的地寄存器的偶元素中,并且结果的虚分量被存储在目的地寄存器的奇元素中。

在图13中图示了根据本发明的实施例的方法。所述方法可以在本文中所描述的处理器架构的上下文内被实现,但是不限于任何特定的处理器架构。

在1302中,第一指令(例如vcfmaddph)被取出,所述指令具有用来指定操作码、第一和第二源操作数、以及源/目的地操作数的字段。在实施例中,第一和第二源操作数字段以及源/目的地操作数字段将指定128位、256位或512位打包数据寄存器,其存储具有16位打包数据元素的复数的集合,其中每个偶数据元素表示复数的实分量并且每个对应的奇数据元素表示对应复数的对应虚分量。

在1304中,第一指令被解码。在实施例中,指令被解码成第一微操作和第二微操作。

在1310中,第一微操作的执行开始。第一微操作的执行包括1312、1314、1316和1318。

在1312中,来自第一源寄存器的第一操作数被用作dupmux的一输入,并且来自第二源寄存器的第二操作数被用作swapmux的一输入。在1314中,dupmux将未被改变的第一操作数传递到fma的第一输入;swapmux将第二操作数的偶元素拷贝到奇元素并且将经变换的第二操作数传递到fma的第二输入;并且来自源/目的地寄存器的第三操作数用于fma的第三输入。在1316中,通过如下来执行fma操作:将被提供到第一和第二输入的向量相乘并且将被提供到第三输入的向量与所述乘积相加。在1318中,fma操作的结果被存储在暂时寄存器中。

在1320中,第二微操作的执行开始。第一微操作的执行包括1322、1324、1326和1328。

在1322中,第二操作数被用作dupmux的一输入,并且第一操作数被用作swapmux的一输入。在1324中,dupmux将第二操作数的奇元素拷贝到偶元素,并且将经变换的第二操作数传递到fma的第一输入,swapmux交换第一操作数的偶和奇元素并且将经变换的第一操作数传递到fma的第二输入,并且来自暂时寄存器的第一微操作的结果用于fma的第三输入。在1326中,通过如下来执行fma操作:将被提供到第一和第二输入的向量相乘,对乘法结果的偶元素求反,并且将被提供到第三输入的向量与所述乘积相加。在1328中,fma操作的结果被存储在目的地寄存器中。

虽然以上描述的实和虚值在长度上是16位,但是本发明的基本原理可以通过使用任何大小的数据元素来被实现。例如,实和虚分量可以是8位、32位或64位,而仍遵从本发明的基本原理。对图13的方法实施例的改变和各种其他方法实施例在本发明的范围内是可能的。作为一个示例,第二指令(例如vcfcmaddph)可以在1302中被取出,在1304中被解码,并且在1326中通过省略对乘法结果的偶元素的求反而被执行。作为另一示例,第一和/或第二源操作数字段可以指定128位、256位或512位存储器位置,其存储具有16位打包数据元素的复数的集合,其中每个偶数据元素表示复数的实分量并且每个对应的奇数据元素表示对应复数的对应虚分量。

可能已经参考其他图的示例性实施例而描述了流程图中的操作。然而,应当理解的是,流程图的操作可以由除了参考其他图所讨论的那些之外的本发明的实施例来执行,并且参考其他图所讨论的本发明的实施例可以执行与参考流程图所讨论的那些不同的操作。此外,虽然图中的流程图示出了由本发明的某些实施例执行的操作的特定次序,但是应当理解的是,这样的次序是示例性的(例如可替换的实施例可以用不同的次序执行操作、组合某些操作、重叠某些操作等等)。

因此,本发明可以被具体化在机器可执行指令中,所述机器可执行指令可以用于使得通用或专用处理器执行操作。可替换地,这些操作可以由包含用于执行操作的硬连线的逻辑的特定硬件组件来执行,或由经编程的计算机组件和定制硬件组件的任何组合来执行。

因而,本发明的实施例的一个或多个部分可以通过使用软件、固件和/或硬件的不同组合而被实现。实施例可以通过使用电子设备来被实现,所述电子设备存储并且传输(在内部和/或通过网络而与其他电子设备)代码(其由软件指令组成并且其有时被称为计算机程序代码或计算机程序)和/或数据,这通过如下来进行:使用机器可读介质(也被称为计算机可读介质),诸如机器可读存储介质(例如磁盘、光盘、只读存储器(rom)、闪速存储器设备、相变存储器)以及机器可读传输介质(也被称为载体)(例如电气、光学、无线电、声学或其他形式的传播信号——诸如载波、红外信号)。因而,电子设备(例如计算机)可以包括硬件和软件,诸如耦合到一个或多个机器可读存储介质的一组一个或多个处理器,所述一个或多个机器可读存储介质用以存储用于在该组处理器上执行的代码和/或用以存储数据。例如,电子设备可以包括非易失性存储器,所述非易失性存储器包含代码,因为即使当电子设备被关断时(当电源被移除时),非易失性存储器也可以保持代码/数据,并且当电子设备被接通时,将被该电子设备的(多个)处理器执行的代码的那部分典型地被从较缓慢的非易失性存储器拷贝到该电子设备的易失性存储器(例如,动态随机存取存储器(dram)、静态随机存取存储器(sram))中。典型的电子设备还包括一组或一个或多个物理网络接口来与其他电子设备建立网络连接(用于通过使用传播信号来传输和/或接收代码和/或数据)。

本发明的实施例是一处理器,其包括执行电路来响应于经解码的指令而计算第一复数、第二复数、和第三复数的复数乘法-累加的结果。计算包括第一操作,其用于计算结果的实分量的第一项以及结果的虚分量的第一项。计算还包括第二操作,其用于计算结果的实分量的第二项以及结果的虚分量的第二项。处理器还包括解码器、第一源寄存器、第二源寄存器、以及源和目的地寄存器。解码器将解码指令来生成经解码的指令。第一源寄存器将提供第一复数,第二源寄存器将提供第二复数,并且源和目的地寄存器将提供第三复数。

结果可以被存储在源和目的地寄存器中。第一复数可以是将由将被存储在第一源寄存器中的第一向量表示的第一组复数中的一个,第二复数可以是将由将被存储在第二源寄存器中的第二向量表示的第二组复数中的一个,第三复数可以是将由第三向量表示的第三组复数中的一个,并且结果可以是用于表示第四组复数的第四向量。第一向量可以包括用于表示第一组复数的实分量的第一组元素以及用于表示第一组复数的虚分量的第二组元素,第二向量可以包括用于表示第二组复数的实分量的第三组元素以及用于表示第二组复数的虚分量的第四组元素,第三向量可以包括用于表示第三组复数的实分量的第五组元素以及用于表示第三组复数的虚分量的第六组元素,并且第四向量可以包括用于表示第四组复数的实分量的第七组元素以及用于表示第四组复数的虚分量的第八组元素。第一、第三、第五和第七组元素可以是偶元素,并且第二、第四、第六、和第八组元素可以是奇元素。第一实分量可以由第一操作数的第一偶元素表示,第一虚分量可以由第一操作数的第一奇元素表示,第二实分量可以由第二操作数的第二偶元素表示,第二虚分量可以由第二操作数的第二奇元素表示,第三实分量可以由第三操作数的第三偶元素表示,第三虚分量可以由第三操作数的第三奇元素表示,第四实分量可以由结果的第四偶元素表示,并且第四虚分量可以由结果的第四奇元素表示。执行电路可以包括第一复用器来将第二实分量从第二操作数的第二偶元素拷贝到第一操作的经变换的第二操作数的第二奇元素。执行电路可以包括第二复用器来将第一实分量从第一操作数的第一偶元素拷贝到第二操作的经变换的第一操作数的第一奇元素,并且将第一虚分量从第一操作数的第一奇元素拷贝到第二操作的经变换的第一操作数的第一偶元素,并且所述第一复用器可以将第二虚分量从第二操作数的第二奇元素拷贝到第二操作的经变换的第二操作数的第二偶元素。执行电路可以包括乘法电路和加法电路,用于作为第一操作的部分,将第一操作数的第一偶元素与第一操作的经变换的第二操作数的第二偶元素相乘以计算第一实乘积,将第三操作数的第三偶元素与所述第一实乘积相加以计算第四实分量的第一项,将第一操作数的第一奇元素与第一操作的经变换的第二操作数的第二偶元素相乘以计算第一虚乘积,并且将第三操作数的第三奇元素与所述第一虚乘积相加以计算第四虚分量的第一项。所述处理器可以包括暂时寄存器,在其中将存储第四实分量的第一项与第四虚分量的第一项。乘法电路可以作为第二操作的部分而将第二操作的经变换的第一操作数的第一奇元素与第二操作的经变换的第二操作数的第二奇元素相乘用于计算第四实分量的第二项,并且将第二操作的经变换的第一操作数的第一偶元素与第二操作的经变换的第二操作数的第二奇元素相乘用于计算第四虚分量的第二项。执行电路可以包括非电路用于对第四实分量的第二项求反以生成第四实分量的经求反的第二项。加法电路可以将第四实分量的第一项与第四实分量的经求反的第二项相加用于计算第四实分量,并且将第四虚分量的第一项与第四虚分量的第二项相加用于计算第四虚分量。执行电路可以包括经融合的乘加器,其包括乘法电路和加法电路。解码器还可以解码第二指令来生成第二经解码的指令,并且执行电路可以执行第二经解码的指令,其中第二经解码的指令的执行将包括绕过非电路并且将第四实分量的第一项与第四实分量的第二项相加用于计算第四实分量。

本发明的实施例是一种包括处理器和系统存储器的系统。系统存储器可以提供第二复数。

在实施例中,一种方法可以包括:解码第一指令以生成第一微操作和第二微操作,所述第一指令用于指定具有第一实分量和第一虚分量的第一操作数、具有第二实分量和第二虚分量的第二操作数、以及具有第三实分量和第三虚分量的第三操作数;执行所述第一微操作来计算第四实分量的第一项与第四虚分量的第一项;执行所述第二微操作来计算第四实分量的第二项与第四虚分量的第二项,对第四实分量的第二项求反以生成第四实分量的经求反的第二项,将第四实分量的第一项与第四实分量的经求反的第二项相加用于计算第四实分量,并且将第四虚分量的第二项与第四虚分量的第二项相加用于计算第四虚分量;以及将第四实分量与第四虚分量存储在目的地寄存器中。

执行第一微操作可以包括将第一实分量与第二实分量相乘以计算第一实乘积,将第三实分量与第一实乘积相加以计算第四实分量的第一项,将第一虚分量与第二实分量相乘以计算第一虚乘积,并且将第三虚分量与第三虚乘积相加以计算第四虚分量的第一项。执行第二微操作可以包括将第一虚分量与第二虚分量相乘以计算第四实分量的第二项,以及将第一实分量与第二虚分量相乘以计算第四虚分量的第二项。

在实施例中,一种装置可以包括用于执行以上描述的方法中的任一个的构件。在实施例中,机器可读有形介质可以存储指令,所述指令当被机器执行的时候使得所述机器执行以上描述的方法中的任一个。

本申请提供了如下的技术方案:

1.一种处理器,包括:

解码器,其用于解码第一指令来生成第一经解码的指令;

第一源寄存器,在其中将存储具有第一实分量和第一虚分量的第一复数;

第二源寄存器,在其中将存储具有第二实分量和第二虚分量的第二复数;

源和目的地寄存器,其用于存储具有第三实分量和第三虚分量的第三复数;

执行电路,其用于执行第一经解码的指令,其中对第一经解码的指令的执行将包括执行包括第一操作和第二操作的计算,所述计算用于计算第一复数和第二复数的复数乘法和第三复数的复数加法的结果,所述结果将包括第四实分量和第四虚分量,所述第一操作用于计算第四实分量的第一项与第四虚分量的第一项,所述第二操作用于计算第四实分量的第二项与第四虚分量的第二项。

2.技术方案1所述的处理器,其中所述结果将被存储在源和目的地寄存器中。

3.技术方案1所述的处理器,其中:

第一复数是将由将被存储在第一源寄存器中的第一向量表示的第一组复数中的一个;

第二复数是将由将被存储在第二源寄存器中的第二向量表示的第二组复数中的一个;

第三复数是将由将被存储在源和目的地寄存器中的第三向量表示的第三组复数中的一个;并且

结果是用于表示第四组复数的第四向量。

4.技术方案3所述的处理器,其中:

第一向量将包括用于表示第一组复数的实分量的第一组元素以及用于表示第一组复数的虚分量的第二组元素;

第二向量将包括用于表示第二组复数的实分量的第三组元素以及用于表示第二组复数的虚分量的第四组元素;

第三向量将包括用于表示第三组复数的实分量的第五组元素以及用于表示第三组复数的虚分量的第六组元素;并且

第四向量将包括用于表示第四组复数的实分量的第七组元素以及用于表示第四组复数的虚分量的第八组元素。

5.技术方案4所述的处理器,其中第一、第三、第五和第七组元素是偶元素,并且第二、第四、第六、和第八组元素是奇元素。

6.技术方案1所述的处理器,其中:

第一实分量将由第一操作数的第一偶元素表示并且第一虚分量将由第一操作数的第一奇元素表示;

第二实分量将由第二操作数的第二偶元素表示并且第二虚分量将由第二操作数的第二奇元素表示;

第三实分量将由第三操作数的第三偶元素表示并且第三虚分量将由第三操作数的第三奇元素表示;并且

第四实分量将由结果的第四偶元素表示并且第四虚分量将由结果的第四奇元素表示。

7.技术方案6所述的处理器,其中所述执行电路包括第一复用器来将第二实分量从第二操作数的第二偶元素拷贝到第一操作的经变换的第二操作数的第二奇元素。

8.技术方案7所述的处理器,其中所述执行电路还包括第二复用器来将第一实分量从第一操作数的第一偶元素拷贝到第二操作的经变换的第一操作数的第一奇元素,并且将第一虚分量从第一操作数的第一奇元素拷贝到第二操作的经变换的第一操作数的第一偶元素,并且所述第一复用器还用于将第二虚分量从第二操作数的第二奇元素拷贝到第二操作的经变换的第二操作数的第二偶元素。

9.技术方案8所述的处理器,其中所述执行电路还包括乘法电路和加法电路用于作为第一操作的部分而:

将第一操作数的第一偶元素与第一操作的经变换的第二操作数的第二偶元素相乘以计算第一实乘积并且将第三操作数的第三偶元素与所述第一实乘积相加以计算第四实分量的第一项,并且

将第一操作数的第一奇元素与第一操作的经变换的第二操作数的第二偶元素相乘以计算第一虚乘积并且将第三操作数的第三奇元素与所述第一虚乘积相加以计算第四虚分量的第一项。

10.技术方案9所述的处理器,此外包括暂时寄存器,在其中将存储第四实分量的第一项与第四虚分量的第一项。

11.技术方案10所述的处理器,其中经融合的乘法电路还用于作为第二操作的部分而:

将第二操作的经变换的第一操作数的第一奇元素与第二操作的经变换的第二操作数的第二奇元素相乘用于计算第四实分量的第二项,以及

将第二操作的经变换的第一操作数的第一偶元素与第二操作的经变换的第二操作数的第二奇元素相乘用于计算第四虚分量的第二项。

12.技术方案11所述的处理器,其中所述执行电路还包括非电路用于对第四实分量的第二项求反以生成第四实分量的经求反的第二项。

13.技术方案12所述的处理器,其中所述加法电路还用于:

将第四实分量的第一项与第四实分量的经求反的第二项相加用于计算第四实分量;以及

将第四虚分量的第一项与第四虚分量的第二项相加用于计算第四虚分量。

14.技术方案13所述的处理器,其中所述执行电路还包括经融合的乘加器,其包括乘法电路和加法电路。

15.技术方案14所述的处理器,其中:

所述解码器还用于解码第二指令来生成第二经解码的指令;并且

所述执行电路还可以用于执行第二经解码的指令,其中对第二经解码的指令的执行将包括绕过非电路并且将第四实分量的第一项与第四实分量的第二项相加用于计算第四实分量。

16.一种方法,包括:

解码第一指令以生成第一微操作和第二微操作,所述第一指令用于指定具有第一实分量和第一虚分量的第一操作数、具有第二实分量和第二虚分量的第二操作数、以及具有第三实分量和第三虚分量的第三操作数;

执行所述第一微操作来计算第四实分量的第一项与第四虚分量的第一项;

执行所述第二微操作来计算第四实分量的第二项与第四虚分量的第二项,对第四实分量的第二项求反以生成第四实分量的经求反的第二项,将第四实分量的第一项与第四实分量的经求反的第二项相加用于计算第四实分量,并且将第三虚分量的第二项与第四虚分量的第二项相加用于计算第四虚分量;以及

将第四实分量与第四虚分量存储在目的地寄存器中。

17.技术方案16所述的方法,其中执行第一微操作包括:

将第一实分量与第二实分量相乘以计算第一实乘积;

将第三实分量与第一实乘积相加以计算第四实分量的第一项;

将第一虚分量与第二实分量相乘以计算第一虚乘积;以及

将第三虚分量与第一虚乘积相加以计算第四虚分量的第一项。

18.技术方案17所述的方法,其中执行第二微操作包括:

将第一虚分量与第二虚分量相乘以计算第四实分量的第二项;以及

将第一实分量与第二虚分量相乘以计算第四虚分量的第二项。

19.一种具有被存储在其上的程序代码的机器可读介质,所述程序代码当被机器执行的时候使得机器执行如下操作:

解码第一指令以生成第一微操作和第二微操作,所述第一指令用于指定具有第一实分量和第一虚分量的第一操作数、具有第二实分量和第二虚分量的第二操作数、以及具有第三实分量和第三虚分量的第三操作数;

执行所述第一微操作来计算第四实分量的第一项与第四虚分量的第一项;

执行所述第二微操作来计算第四实分量的第二项与第四虚分量的第二项,对第四实分量的第二项求反以生成第四实分量的经求反的第二项,将第四实分量的第一项与第四实分量的经求反的第二项相加用于计算第四实分量,并且将第四虚分量的第二项与第四虚分量的第二项相加用于计算第四虚分量;以及

将第四实分量与第四虚分量存储在目的地寄存器中。

20.技术方案19所述的机器可读介质,其中:

执行第一微操作包括将第一实分量与第二实分量相乘以计算第一实乘积,将第三实分量与第一实乘积相加以计算第四实分量的第一项,将第一虚分量与第二实分量相乘以计算第一虚乘积,将第三虚分量与第一虚乘积相加以计算第四虚分量的第一项;并且

执行所述第二微操作包括将第一虚分量与第二虚分量相乘以计算第四实分量的第二项以及将第一实分量与第二虚分量相乘以计算第四虚分量的第二项。

尽管已经依据若干实施例而描述了本发明,但是本发明不限于所描述的实施例,并且它可以在具有各种改变的情况下被实践而不偏离如所附权利要求阐明的本发明的精神和范围。因此,说明书和附图将被视为说明性的而不是限制性的。

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