去交织跨距数据元素处理器、方法、系统和指令与流程

文档序号:15384726发布日期:2018-09-08 00:25阅读:257来源:国知局

本文描述的实施例一般涉及处理器。具体地,本文描述的实施例一般涉及可操作以处理具有跨距布局或布置的数据的处理器。



背景技术:

结构阵列(aos)是广泛使用的数据结构或布置。如它的名字所意指的,aos典型地包括结构的阵列或序列,所述结构各自包括多个数据元素。每个结构的数据元素一般表示不同类型的数量、值或事物。作为一个说明性示例,每个结构的数据元素可表示对应像素的不同类型的颜色分量(例如红(r)、绿(g)和蓝(b)颜色分量)。典型地,每个结构具有相同数量的数据元素,并且表示不同类型的数量、值或事物的数据元素以相同顺序布置在每个结构中。这促使aos具有“跨距”数据布置或模式,其中表示不同类型的数量、值或事物的数据元素驻留在相等间距或“跨距”数据元素位置处。

这样的aos通常存储在存储器中。为了处理数据元素,处理器可将数据元素从aos加载到它的内部寄存器中。可被用于将aos的数据元素从存储器加载到内部处理器寄存器中的一种类型的指令是矢量加载指令。当被执行时,矢量加载指令可加载aos的连续数据元素的矢量的价值,并且将它们存储在矢量或打包数据寄存器中,而无需重新布置或重新排序数据元素。可用于将aos的数据元素从存储器加载到内部处理器寄存器中的另一种类型的指令是收集指令。通常,收集指令可指示为将要收集的每个数据元素存储收集索引或偏移的打包数据寄存器。每个收集索引可表示存储器地址信息,以及各自可指示将要收集的对应数据元素的潜在性非连续位置。当被执行时,收集指令可促进处理器执行单独的收集或加载操作,以从对应的位置收集每个数据元素,所述对应位置由收集索引指示。收集的数据元素然后可存储在矢量或打包数据寄存器中。

附图说明

通过参考以下描述和被用于示出实施例的附图,可最佳地理解本公开。附图中:

图1是合适的结构阵列(aos)的示例实施例的框图。

图2是具有指令集的处理器的实施例的框图,所述指令集包括去交织跨距数据元素指令的实施例和/或交织具有跨距的数据元素指令的实施例中的至少一个。

图3是执行选择性去交织跨距数据元素指令的实施例的方法的实施例的框流程图。

图4是处理器的实施例的框图,所述处理器可操作以执行选择性去交织跨距数据元素指令的实施例。

图5是选择性去交织跨距数据元素操作的示例实施例的框图。

图6是具有位掩码以指示跨距数据元素位置的一个或多个集合的选择性去交织跨距数据元素操作的第一特定示例实施例的框图。

图7是具有偏移的序列以指示跨距数据元素位置的一个或多个集合的选择性去交织跨距数据元素操作的第二特定示例实施例的框图。

图8是处理器的实施例的框图,所述处理器可操作以执行掩蔽的(可选地选择性)去交织跨距数据元素指令的实施例。

图9是掩蔽的完整去交织跨距数据元素操作的示例实施例的框图。

图10是掩蔽的选择性去交织跨距数据元素操作的示例实施例的框图。

图11是选择性交织具有跨距的数据元素操作的示例实施例的框图。

图12是掩蔽的选择性交织具有跨距的数据元素操作的示例实施例的框图。

图13a示出avx指令格式的示例实施例,所述avx指令格式包括vex前缀、真操作码字段、modr/m字节、sib字节、位移字节和imm8。

图13b示出来自图13a的哪些字段构成完整操作码字段和基础操作字段。

图13c示出来自图13a的哪些字段构成寄存器索引字段。

图14a是示出一般矢量友好指令格式和其类别a指令模板的示例实施例的框图。

图14b是示出根据本公开的实施例的一般矢量友好指令格式和其类别b指令模板的框图。

图15是特定矢量友好指令格式的实施例的框图。

图16是本公开实施例中的寄存器架构的框图。

图17a是示出有序管线的实施例和寄存器重命名、乱序发布/运行管线的实施例两者的框图。

图17b是示出有序架构核的实施例和寄存器重命名、乱序发布/运行架构核的实施例两者的框图。

图18a是根据本公开实施例的单个处理器核,连同与它的到管芯上互连网络的连接以及连同它的等级2(l2)高速缓冲存储器的本地子集的框图。

图18b是根据本公开实施例的在图18a中的处理器核的部分的展开图。

图19是根据本公开实施例的处理器的框图,所述处理器可具有多于一个核、集成存储器控制器以及集成图形。

图20是系统的示例实施例的框图。

图21是系统的第一更具体示例实施例的框图。

图22是系统的第二更具体示例实施例的框图。

图23是片上系统的示例实施例的框图。

图24是根据本公开实施例的与软件指令转换器的使用对照来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。

具体实施方式

本文公开的是去交织跨距数据元素指令的实施例和交织具有跨距的数据元素指令的实施例。还公开了用于执行这些指令的处理器的实施例、当执行这些指令时由处理器执行的方法的实施例、合并一个或多个处理器以执行这些指令的系统的实施例以及存储或以其它方式提供这些指令的程序或机器可读介质的实施例。在一些实施例中,处理器可具有用于执行这些指令中的至少一项的逻辑(例如用于解码指令的解码单元或其它单元或逻辑,以及用于运行或执行指令的运行单元或其它单元或逻辑)。在以下描述中,陈述了许多特定细节(例如特定数据布置、指令操作、处理器配置、微架构细节、操作的序列等)。然而,可在没有这些特定细节的情况下实践实施例。在其它实例中,公知的电路、结构或技术未被详细地示出以避免使本描述的理解模糊。

图1是合适的结构阵列(aos)100的示例实施例的框图。aos包括第零个结构s[0]、第一个结构s[1]等等,到第n个结构s[n]。本公开的范畴不限于结构的任何已知数量,尽管通常结构的数量可能十分庞大。在该示例中,每个结构包括至少三个数据元素,以及可以可选地包括零个或更多附加的数据元素。具体地,第零个结构s[0]包括数据元素a0、b0、c0,以及可以可选地包括零个或更多其它数据元素。同样地,第一结构s[1]包括数据元素a1、b1、c1,以及可以可选地包括零个或更多其它数据元素。此外,第n个结构s[n]包括数据元素an、bn、cn,以及可以可选地包括零个或更多其它数据元素。本公开的范畴不限于每结构的数据元素的任何已知数量。在各种实施例中,每个结构可具有两个、三个、四个、五个、六个、七个、八个、九个、十个、多于十个、多于二十个、或多于一百个数据元素,仅举几个示例。

a-类型数据元素(例如,a0、a1、an)、b-类型数据元素(例如,b0、b1、bn),以及c-类型数据元素(例如,c0、c1、cn)可表示不同类型的数量、值或事物。作为一个说明性示例,a-类型、b-类型、和c-类型数据元素可表示不同对应像素的红(r)、绿(g)、和蓝(b)颜色分量。在这样的情况下,aos可包括数据元素r0、g0、b0、r1、g1、b1、r2、g2、b2、r3、g3、b3等等。作为另一说明性示例,每个结构可包括附加的阿尔法(a)透明/不透明分量。在这样的情况下,aos可包括数据元素r0、g0、b0、a0、r1、g1、b1、a1、r2、g2、b2、a2、r3、g3、b3、a3等等。rgb和rgba数据经常被用在计算机和具有显示器/屏幕以表示像素的外观的其它电子装置中。又在另一说明性示例中,每个结构可替换地是两数据元素结构,其含有共同表示复数的实数(r)和虚数(i)。在这样的情况下,aos可包括数据元素r0、i0、r1、i1、r2、i2、r3、i3等等。又在另外说明性示例中,aos的每个结构可以是x数据元素结构,其含有来自表格的x列的数据或记录的x条目等等。x数据元素可表示各种各样的不同类型的数据,诸如例如,金融数据、会计数据、科学数据、高性能计算数据、个人数据或其它类型的数据。

再次参考图1,如所示,不同类型的数据元素(例如,a-类型、b-类型、和c-类型数据元素)与在aos中彼此交织。此外,不同类型的数据元素具有在每个结构内相同的顺序或布置。例如,a0在b0左边(例如,a0比b0更重要或没那么重要),b0本身在c0左边,a1在b1左边,b1本身在c1左边,以及an在bn的左边,bn本身在cn的左边。该重复的布局或布置(其中每个结构具有相同数量的数据元素,以及其中数据元素以相同顺序布置)表示“跨距”数据部署或布置。在跨距数据布局或布置中,不同类型的数据元素驻留在相等间距或“跨距”数据元素位置处。单个结构的每个不同数据元素位置可对应于跨距数据元素位置的不同集合。给定类型(例如,a-类型)的每个数据元素与它的相同给定类型(例如,a-类型)的最近的相邻数据元素分开恒定跨距(s)。在示出的示例中,跨距(s)被表示为多个数据元素位置,尽管跨距可以替代地以其它方式表示(例如,作为多个比特、半字节、字节或其它方式)。例如,假设每个结构仅包括a-类型、b-类型和c-类型数据元素,a0将与a1分开三个中间数据元素位置的跨距,a1将与a2(未示出)分开三个中间数据元素位置的相同跨距,如此类推。以该方式,a-类型数据元素占据跨距数据元素位置(例如,位置0、0+s、0+2s、0+3s、……0+n*s)的第一集合,b-类型数据元素占据跨距数据元素位置(例如,位置1、1+s、1+2s、1+3s、……1+n*s)的第二集合,c-类型数据元素占据跨距数据元素位置(例如,位置2、2+s、2+2s、2+3s、……2+n*s)的第三集合,对于其它可选类型的数据元素如此类推。

aos表示一个可能数据结构或布置,其中不同类型的数据元素(例如a-类型、b-类型和c-类型数据元素)在跨距数据元素位置的对应集合彼此交织。这样的数据结构或布置对于某些目的和/或在某些实例中可以是高效的和/或在其它方面是可期望的。例如,这样的数据结构或布置可将对于像素的颜色分量数据、来自表格的行的数据、来自单个记录的数据等等紧密地放在一起。然而,存在其它实例,其中使用备选数据结构或布置可能是更高效和/或在其它方面是可期望的,在备选数据结构或布置中一个或多个给定单个类型的数据元素被去交织或以其它方式被隔离于不同类型的数据元素,以及由它们本身收集或存储在阵列或存储位置的邻近数据元素位置中。术语阵列结构(soa)通常被用于指各自具有相同单个类型的数据元素的两个或更多这样的阵列。soa可潜在地包括对于aos的每个不同类型的数据元素的不同对应阵列,或仅包括这样的阵列的完整集合的子集。具代表性地,这样的备选数据结构或布置可潜在地通过单指令多数据(simd)指令或操作来允许更高效的处理,或者对于算法更高效或其它方面可期望的等等。例如,这样的备选布置可结合不同类型的算法中的环的矢量化来被使用。

在任何事件中,存在有如下情形,其中能够去交织或以其它方式重新布置第一数据布置或布局(例如aos、交织或跨距数据布置)的数据元素以及将它们存储在第二数据布置或布局(例如aos、去交织或未跨距数据布置)将会是有用的和/或有益的。相反地,存在其它情形,其中能够交织或以其它方式重新布置第一数据布置或布局(例如soa、去交织或未跨距数据布置)的数据元素以及将它们存储在第二数据布置或布局(例如aos、交织或跨距数据布置)将会是有用的和/或有益的。在一些实施例中,一个或多个指令可被包括在处理器的指令集中以能够协助或加速一个或多个这样的数据重新布置。

图2是处理器210的实施例的框图,所述处理器210具有指令集212,所述指令集212包括(连同各种其它类型的指令)去交织跨距数据元素指令214的实施例和交织具有跨距的数据元素指令220的实施例中的至少一个。指令集的指令可表示宏指令、机器语言指令、机器代码指令、或能够原生地由处理器解码的其它指令。

在一些实施例中,指令集可以可选地包括完整去交织跨距数据元素指令215的实施例。在一些实施例中,指令215可以可操作以指定或以其它方式指示灵活/可变/可配置的跨距(例如指令和/或它的操作码可允许不同跨距)。在一些实施例中,跨距可以能够包含两个、三个、四个、或多于四个和/或至少五个数据元素位置(例如五个、六个、七个、八个、九个、十个、多于十个、或多于二十个数据元素位置)。在一些实施例中,当被执行时指令215可以可操作以促使处理器用于去交织对于跨距的跨距数据元素位置(例如aos的结构的所有数据元素位置)的所有集合的数据元素,并且将对于跨距数据元素位置的所有集合中的每个的数据元素存储在不同的对应目的地打包数据寄存器。通过示例方式,在一些实施例中,这样的指令可被用于将多个3元素、4元素、5元素、或多于5元素结构的数据元素加载到三个、四个、五个、或多于五个对应的目的地打包数据寄存器中。

在一些实施例中,指令集可以可选地包括选择性去交织跨距数据元素指令216的实施例。在一些实施例中,类似指令215,指令216可以可操作以指定或以其它方式指示跨距。在一些实施例中,跨距可以能够是灵活/可变/可配置的,以及在一些实施例中可被允许以包含多于四个和/或至少五个数据元素位置。在一些实施例中,指令216可以可操作以灵活地、可变地或可配置地指示或选择跨距数据元素位置的一个或多个集合(例如,指令和/或它的操作码可允许跨距数据元素位置的集合的不同组合)。在一些实施例中,指令可允许跨距数据元素位置的任何一个或多个、或可选地任何子集、或可选地所有集合被选择或指示。在一些实施例中,当被执行时指令216可以可操作以促使处理器去交织跨距数据元素位置的所选择/所指示的集合(例如在某些情况下,仅跨距数据元素位置的所有集合的子集)的数据元素,并且将对于跨距数据元素位置的所选择的集合中的每个的数据元素存储在不同的对应目的地打包数据寄存器。

在一些实施例中,指令集可以可选地包括掩蔽的完整去交织跨距数据元素指令217的实施例。在一些实施例中,类似指令215,指令217可以可操作以指定或以其它方式指示跨距。在一些实施例中,跨距可以能够是灵活/可变/可配置的,以及在一些实施例中可被允许以包括至少五个数据元素位置。此外,在一些实施例中,当被执行时指令217可以可操作以促使处理器掩蔽地去交织跨距数据元素位置的所有集合的数据元素,所述跨距数据元素位置服从一个或多个打包数据操作掩码中的掩蔽或预测,并且将对于跨距数据元素位置的所有集合中的每个的数据元素存储在不同的对应目的地打包数据寄存器,所述跨距数据元素位置服从一个或多个打包数据操作掩码中的掩蔽或预测。在一些实施例中,不同对应打包数据操作掩码可被用于跨距数据元素位置的所有集合中的每个。备选地,单个掩码可以可选地被使用,以及可以可选地被用于跨距数据元素位置的集合中的仅一个,或可以可选地被重复用于跨距数据元素位置的所有集合。

在一些实施例中,指令集可以可选地包括掩蔽的选择性去交织跨距数据元素指令218的实施例。在一些实施例中,指令218可以可操作以指定或以其它方式指示跨距。在一些实施例中,跨距可以能够是灵活/可变/可配置的,以及在一些实施例中可被允许以包括至少五个数据元素位置。在一些实施例中,指令218可以可操作以灵活地、可变地或可配置地指示或选择跨距数据元素位置的一个或多个集合。在一些实施例中,指令可允许跨距数据元素位置的任何一个或多个、或可选地任何子集、或可选地所有集合被选择或指示。在一些实施例中,当被执行时指令218可以可操作以促使处理器掩蔽地去交织跨距数据元素位置的所选择/所指示的集合的数据元素,所述跨距数据元素位置服从一个或多个打包数据操作掩码中的掩蔽或预测,并且将对于跨距数据元素位置的所选择/所指示的集合中的每个的数据元素存储在不同的对应目的地打包数据寄存器,所述跨距数据元素位置服从一个或多个打包数据操作掩码中的掩蔽或预测。在一些实施例中,不同对应打包数据操作掩码可被用于跨距数据元素位置的所选择/所指示的集合中的每个。

在一些实施例中,指令集可以可选地包括交织具有跨距的数据元素指令220的实施例。例如,指令集可以可选地包括以下中的一个或多个:完整交织具有跨距的数据元素指令221、选择性交织具有跨距的数据元素指令222、掩蔽的完整交织具有跨距的数据元素指令223、和掩蔽的选择性交织具有跨距的数据元素指令224。在一些实施例中,交织具有跨距的数据元素指令的完整、选择性、掩蔽的完整、和掩蔽的选择性变型可相应地相似于去交织跨距数据元素指令的完整、选择性、掩蔽的完整、和掩蔽的选择性变型,不同之处在于操作的方向可能通常是颠倒的。例如,在一些实施例中,如去交织指令214的源操作数(例如aos)的操作数可充当交织指令220的结果操作数(例如aos)的角色,以及如去交织指令214的目的地打包数据寄存器的打包数据寄存器可替换地充当交织指令220的源打包数据寄存器的角色。此外,交织操作可被执行用于交织指令220,替代用于去交织指令214的去交织操作。

这些指令中尽可能少地仅任何一个可以可选地包括在指令集中。备选地,这样的指令中的任何两个或多个、或任何组合可以可选地包括在指令集中。

图3是执行选择性去交织跨距数据元素指令的实施例的方法326的实施例的框流程图。在各种实施例中,方法可由处理器、指令处理设备、数字逻辑装置或集成电路来执行。

方法包括:取或以其它方式接收选择性去交织跨距数据元素指令(在框327)。在各种方面中,可在处理器处或其部分(指令取单元、解码单元、总线接口单元等)处接收指令。在各种方面中,可从处理器外和/或管芯外的源(例如从存储器或互连)、或从处理器上和/或管芯上的源(例如在来自指令高速缓冲存储器的解码单元处)接收指令。指令可指定或以其它方式指示源操作数、出自于对于指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、和处理器的至少一个目的地打包数据寄存器中的每个。

方法包括响应于和/或由于指令针对跨距数据元素位置的指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在处理器的对应目的地打包数据寄存器中(在框328)。在一些实施例中,每个结果打包数据操作数可包括至少两个数据元素,其来自源操作数的跨距数据元素位置的对应指示的集合。在一些实施例中,集合的跨距数据元素位置可彼此分开整数倍的指示的跨距。

示出的方法涉及架构操作(从软件角度是可视的那些)。在其它实施例中,方法可以可选地包括一个或多个微架构操作。通过示例方式,指令可被取、解码、乱序地调度,源操作数可被访问,运行单元可执行微架构操作以实现指令等。

图4是处理器410的实施例的框图,处理器410可操作以执行选择性去交织跨距数据元素指令416的实施例。在一些实施例中,处理器410可以可操作以执行图3的方法326。本文针对处理器410描述的组件、特征和具体可选的细节还可选地适用于方法326。备选地,方法326可由相似或不同处理器或设备执行和/或在相似或不同处理器或设备中执行。此外,处理器410可执行与方法326相同、相似或不同的方法。

在一些实施例中,处理器可以是通用处理器(例如用在桌上型、膝上型或其它计算机中的类型的通用微处理器或中央处理单元(cpu))。备选地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于:图形处理器、网络处理器、通信处理器、加密处理器、协同处理器、嵌入式处理器、数字信号处理器(dsp)和控制器(例如微控制器)。处理器可具有以下架构中的任何,各种复杂指令集计算(cisc)架构、精简指令集计算(risc)架构、超长指令字(vliw)架构、混合架构、其它类型的架构,或具有不同架构的组合(例如不同核可具有任何这样的不同架构)。在一些实施例中,处理器可包括至少一个集成电路或半导体管芯(例如部署在其上)。在一些实施例中,处理器可包括至少一些硬件(例如晶体管、电路、存储电路级别指令/控制信号的非易失性存储器等等)。

处理器包括标量寄存器444(例如通用寄存器堆(registerfile))的集合和打包数据寄存器440的集合。这些寄存器中的每个可表示管芯上或集成电路上的存储位置,其可操作以存储数据。打包数据寄存器可以可操作以存储打包数据、矢量数据、或单指令多数据(simd)数据。打包数据寄存器还可称为矢量寄存器或单指令多数据(simd)寄存器。标量和打包数据寄存器可表示架构上可视或架构寄存器,其对软件和/或编程器是可视的和/或是由指令集的指令指示以识别操作数的寄存器。这些架构寄存器与给定的微架构中的其它非架构寄存器(例如暂时寄存器、重排序缓冲器、引退寄存器等)形成对比。标量和打包数据寄存器可以以不同方式实现在不同微架构中,并且不限于任何特定设计。合适类型的寄存器的示例包括但不限于:专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、以及其的组合。打包数据寄存器的合适集合的一个具体示例是图16的寄存器1610,尽管本公开的范畴未被如此限制。

再次参考图4,在操作期间,处理器可被耦合以接收指令416。例如,处理器可被耦合以通过总线或其它互连从存储器436接收指令。指令可包括在处理器的至少一个核的指令集中。在一些实施例中,指令416可显式地指定(例如通过一个或多个字段或比特的集合)或以其它方式指示(例如隐式地指示)源操作数438。在一些实施例中,源操作数可包括结构阵列(aos)、或展示跨距布局或布置的数据的其它集合,尽管本公开的范畴未被如此限制(例如它还能够是对于其期望跨距访问的同类阵列)。合适的源操作数的一个具体示例是图1的aos100的至少一部分,包括为此提及的任何变型和备选,尽管本公开的范畴未被如此限制。如所示,通常源操作数可存储在存储器436(例如主存储器)中。当部署在系统中时,处理器可以与存储器耦合。然而,将要意识到的是,在处理器部署在系统中和/或与存储器耦合之前,实施例仅涉及处理器。备选地,源操作数可以可选地存储在另一合适的存储位置(例如由指令指示的一个或多个打包数据寄存器)。例如,来自由指令指示的多个源打包数据寄存器的数据可至少逻辑地作为源操作数被连结(或可以可选地实际上连结在内部暂时寄存器中)。

当源操作数438存储在存储器436中时,指令416可指定(例如显式地指定)或指示(例如隐式地指示)指针或其它存储器地址信息,其可用于(或潜在地取决于正在使用的存储器寻址模式来与其它存储器地址信息一起用于)寻址或识别源操作数在存储器中的位置。如所示,在一些实施例中,这样的存储器地址信息446可以可选地存储在处理器的第一源标量寄存器447中。备选地,存储器地址信息可以替代地通过指令的立即数(immediate)来被指定或指示,或以其它方式提供。取决于正在使用的存储器寻址模式,由指令提供的存储器地址信息可以可选地与附加存储器地址信息组合以便充分寻址或识别源操作数的位置。通过示例方式,这样的附加存储器地址信息可被存储在数据段寄存器、扩展段寄存器或其它存储器地址寄存器中,或以其它方式被提供。

在一些实施例中,指令416可以可操作以指示跨距。跨距可广泛地表示两个数据元素之间(例如aos中相同类型的最近的邻居数据元素(例如a-类型数据元素、红颜色分量等)之间)的固定间距或距离。在一些情况下,跨距可表示为数据元素位置的整数数量。通过示例方式,假设aos包括五数据元素结构,包括a0、b0、c0、d0、e0、a1、b1、c1、d1、e1等等,给定类型(例如a0和a1)的最近的邻居数据元素可分开五个数据元素位置的跨距。备选地,跨距可以以其它方式表示,诸如例如,通过比特的数量、半字节的数量、字节的数量、或其它方式。在一些实施例中,指令可允许跨距是灵活、可配置、或可变的值,使得不同跨距可与相同指令(例如相同操作码)一同使用。在一些实施例中,跨距可由单个灵活、可配置、或可变的值来指示(例如与收集索引或整数的另一序列相反,其由固定量来彼此间隔开,但这一般将需要通过显著努力来生成)。在一些情况下,跨距的指示可与跨距相等,而在其它情况下,跨距的指示可不与跨距相等,但跨距从跨距的指示可以是可确定的(例如一个数据元素位置的值可被添加到跨距的指示以达到跨距,或跨距的指示可与跨距具有另一关系)。备选地,在其它实施例中,固定的跨距值可以可选地对于指令(例如对于它的操作码)是固定的或隐式的。例如,指令集可包括不同指令(例如不同操作码),其各自具有不同的固定隐式的跨距值(例如一个操作码具有4的跨距,另一指令具有5的跨距等)。

在一些实施例中,指令416可以可操作以灵活地、自适应地、可配置地、或可变地指定或以其它方式选择或指示跨距数据元素位置的一个或多个集合。在一些实施例中,指令可允许对于跨距的跨距数据元素位置(例如,aos的结构的所有数据元素位置)的任何一个或多个、或可选地任何子集、或可选地所有集合被选择或指示。有利地,如将在下文进一步解释,在一些情况下这可仅允许跨距数据元素位置的所有集合的子集(例如仅被需要的或不被需要的那些)被指示/选择,这可帮助避免不必要地将一个或多个打包数据寄存器与不需要的数据捆绑。

在不同实施例中可以以不同方式选择或指示跨距数据元素位置的一个或多个集合。在一些实施例中,指令可指示掩码(例如位掩码),其具有不同部分(例如不同比特),所述不同部分可配置成指示或选择(或不指示或选择)跨距数据元素位置的不同对应集合。这样的途径的一个说明性示例针对图6在下文进一步示出和描述。在其它实施例中,指令可指示一个或多个值的矢量、序列、列表、或其它集合,其可被用于提供各自可操作以指示或选择跨距数据元素位置(例如aos的结构的任何数据元素位置)的一个或多个对应集合的一个或多个偏移、索引、或其它值。这样的途径的一个说明性示例针对图7在下文进一步示出和描述。又在其它实施例中,指令可指示处理器理解的值被任意和/或按采取的规定(例如,如在逻辑中硬连线、在表格中编程等)映射到跨距数据元素位置的预定的一个或多个集合。不管如何指示/选择,跨距数据元素位置的指示/选择的集合可以是被需要的那些(例如存储在将要存储在对应的结果打包数据操作数中的跨距数据元素位置的那些集合处的数据元素)、或不被需要的那些。

再次参考图4,在一些实施例中,指令可以显式地指定(例如通过一个或多个字段或比特的集合)或以其它方式指示(例如隐式地指示)可选第二源标量寄存器449,其可被用于存储跨距的指示和/或跨距数据元素位置的一个或多个集合的指示中的一个或多个448。在一些实施例中,指令可具有可选的立即数450,其可指定或指示跨距的指示和/或跨距数据元素位置的一个或多个集合的指示中的一个或多个。立即数可(例如作为字段)包括在指令的编码中,以及可在运行时间和/或基于运行时间变量或数据(例如由编译器)配置。第二源标量寄存器或立即数或两者可被用于传递跨距的指示和跨距数据元素位置的一个或多个集合的指示。

在一些实施例中,选择性去交织跨距数据元素指令还可显式地指定(例如通过一个或多个字段或比特的集合)或以其它方式指示(例如隐式地指示)一个或多个目的地打包数据寄存器443,其中将存储一个或多个对应的结果打包数据操作数442。备选地,一个或多个其它存储位置(例如一个或多个存储器位置)可以可选地被用于存储一个或多个结果打包数据操作数。

第一源标量寄存器447、第二源标量寄存器449、目的地打包数据寄存器443中的一个或多个、以及本文公开的其它寄存器(例如下文将进一步讨论的打包数据操作掩码寄存器)可在不同实施例中以不同方式指定(例如显式地指定)或指示(例如隐式地指示)。在一些实施例中,指令416在它的指令编码中可具有比特的一个或多个集合(例如专用寄存器说明字段)以显式地指定寄存器(例如作为寄存器索引)。在其它实施例中,寄存器(例如固定寄存器)可以可选地对于指令是隐式的(固有的或暗示的)(例如对于它的操作码是隐式的)。例如,处理器可隐式地理解,当它在没有需要具有任何非操作码比特以显式地指定固定寄存器的指令的情况下辨认指令(例如当它解码它的操作码时)时,固定寄存器将被用于给定操作数。此外,在一些实施例中,在目的地打包数据寄存器的情况下(或在下文进一步讨论打包数据操作掩码寄存器的情况下),可以可选地隐式使用按需要尽可能多的连续目的地打包数据寄存器,其连续地跟随给定指定的或指示的目的地打包数据寄存器(或打包数据操作掩码寄存器)。

再次参考图4,处理器包括解码单元或解码器430。解码单元可被耦合以接收,并且可以可操作以解码选择性去交织跨距数据元素指令。解码单元可输出一个或多个相对较低级别指令或其它控制信号432(例如一个或多个微指令、微操作、微代码入口点、解码的指令或控制信号等),其反映、代表和/或源自解码的相对较高级别指令。在一些实施例中,解码单元可包括:至少一个输入结构(例如端口、互连或接口),其被耦合以接收指令;与其耦合的指令辨认和解码逻辑,用于辨认和解码指令;以及与其耦合的至少一个输出结构(例如端口、互连或接口),用于输出较低级别指令或控制信号。解码单元和/或它的指令辨认和解码逻辑可使用各种机制来实现,各种机制包括但不限于:微代码只读存储器(rom)、查找表、硬件实现、可编程逻辑阵列(pla)或适合实现解码单元的其它机制、以及其组合。在一些实施例中,解码单元可包括至少一些硬件(例如晶体管、集成电路、存储微代码、管芯上只读存储器或其它硬件级别指令的其它非易失性存储器等中的一个或多个)。在一些实施例中,解码单元可包括在管芯、集成电路、或半导体衬底上。

在其它实施例中,替代直接提供给解码单元的指令416,指令仿真器、翻译器、变形器(morpher)、解译器、或其它指令转换模块可以可选地被使用。各种类型的指令转换模块可实现在软件、硬件、固件、或其组合中。在一些实施例中,指令转换模块可位于处理器外侧,诸如例如在单独管芯上和/或在存储器中(例如作为静态、动态或运行时间仿真模块)。通过示例方式,指令转换模块可接收指令416,其可属于第一指令集,以及可仿真、翻译、变形、解译或以其它方式将它转换成一个或多个对应立即数指令或控制信号,其可属于第二不同指令集。第二指令集的一个或多个立即数指令或控制信号可被提供给解码单元(例如解码单元430),其可将它们解码成可由处理器的本地硬件(例如一个或多个运行单元)可执行的一个或多个较低级别指令或控制信号。

再次参考图4,运行单元434与解码单元430耦合以接收一个或多个解码的或以其它方式转换的指令或控制信号432,其表示和/或源于选择性去交织跨距数据元素指令。在一些实施例中,运行单元可以与解码单元一起在管芯上或集成的电路上。在一些情况下,运行单元可与标量寄存器444耦合以接收可选存储器地址信息446和/或跨距的指示和/或跨距数据元素位置的一个或多个集合的指示中的一个或多个448。在操作期间,当处理器部署在系统中时,运行单元可以可操作以与存储器436耦合来接收来自源操作数438的数据。运行单元还与打包数据寄存器440的集合耦合。运行单元可以可操作以响应于和/或由于选择性去交织跨距数据元素指令(例如响应于一个或多个控制信号432和/或响应于正被解码的指令和/或响应于正提供给解码器的指令)来运行或以其它方式执行选择性去交织跨距数据元素指令的操作。在一些实施例中,操作可以与针对图5-7中的任何图的任何那些所示或所述的相似或相同,尽管本公开的范畴未被如此限制。

在一些实施例中,运行单元响应于指令可以可操作以针对跨距数据元素位置的指示的至少一个集合中的每个来存储对应的结果打包数据操作数442。在一些实施例中,每个结果打包数据操作数可存储在多个打包数据寄存器440的对应目的地打包数据寄存器中。在一些实施例中,每个结果打包数据操作数可包括多个数据元素,其将来自源操作数438的跨距数据元素位置的对应指示的集合。在一些实施例中,跨距数据元素位置的集合将彼此分开整数倍的指示的跨距。

在一些实施例中,运行单元响应于指令可以可操作以从存储器加载aos的多个n-元素结构(例如与结果打包数据中的数据元素数量相等的数量)。在一些实施例中,运行单元响应于指令可以可操作以去交织和存储跨距数据元素的m个集合,其来自m个对应目的地打包数据寄存器中的n-元素结构的跨距数据元素位置的m个对应指示的或选择的集合,其中m和n是整数且m小于n。在一些实施例中,m个目的地打包数据寄存器中的每个可存储来自m个跨距数据元素位置中的单个对应一个的数据元素。在一些实施例中,m个目的地打包数据寄存器可表示m个连续目的地打包数据寄存器(例如rx、rx+1、rx+2等)。在一些实施例中,m个寄存器中的仅一个可由指令指定(例如序列的第一寄存器),以及它可对于用来顺序地在指定的寄存器之后使用寄存器的指令是隐式的(例如对于操作码是隐式的)。

替代指示或选择所需的跨距数据元素位置的一个或多个集合,另一可能途径将会是针对指令(例如完整交织跨距数据元素指令215)以隐式地、固有地、或非灵活地指示跨距数据元素位置(例如aos的结构的所有数据元素位置)的所有集合将会存储到一个或多个对应的结果打包数据操作数和/或目的地打包数据寄存器。然而,有时仅需要跨距数据元素位置的子集和/或少于所有集合。例如,跨距可以是至少五个、六个、七个或甚至更多,但可以仅需要跨距数据元素位置的几个集合。在这样的情况下,如果指令固有地或非灵活地将跨距数据元素位置的所有集合存储到对应目的地打包数据寄存器,则一个或多个目的地打包数据寄存器可不必要地被使用或捆绑以存储不需要的数据。通常,打包数据寄存器可表示有价值的和潜在地稀有的资源,使得不必要地捆绑它们可趋向减损性能。然而,选择性去交织跨距数据元素指令可操作以灵活地、自适应地、或选择性地指定或以其它方式仅指示需要的跨距数据元素位置的所有集合的子集,以及仅将跨距数据元素的指示的集合存储到目的地打包数据寄存器,由此避免不必要地将打包数据寄存器与不需要的数据捆绑。

运行单元和/或处理器可包括具体或特定逻辑(例如晶体管、集成电路、或潜在地与固件(例如存储在非易失性存储器中的指令)和/或软件组合的其它硬件),其可操作以响应于和/或由于指令(例如响应于从指令解码的一个或多个指令或控制信号)来执行指令和/或存储一个或多个结果打包数据操作数。在一些实施例中,运行单元可包括:一个或多个输入结构(例如端口、互连或接口),其被耦合以接收源操作数;与其耦合的电路或逻辑,用于接收和处理源操作数并生成一个或多个结果打包数据操作数;以及与其耦合的一个或多个输出结构(例如端口、互连或接口),用于输出一个或多个结果打包数据操作数。在一些实施例中,与其耦合以接收和处理源操作数并生成一个或多个结果打包数据操作数的电路或逻辑可以可选地包括:内部暂时寄存器491,用于存储源操作数的数据元素;以及与其耦合的数据元素重新布置逻辑492,用于将源操作数的数据元素重新布置到适于结果操作数的格式中。这样的数据元素重新布置逻辑的示例包括但不限于硬线互连或其它路由选择逻辑、复用器或其它选择逻辑、置乱逻辑、排列逻辑等等。这样的选择、置乱、或排列逻辑可基于指令(例如操作码、跨距、指示的或选择的数据元素位置等)来被控制以重新布置如本文所示和所述的数据元素。在一些实施例中,当操作数在存储器中时,运行单元可包括地址生成逻辑(未示出)和/或用于与外部地址生成逻辑接口的逻辑。

将意识到的是,术语“运行单元”包含但不限于执行所有操作以实现选择性去交织跨距数据元素指令的单个分立单元。然而,这样的操作可潜在地由分布在处理器的两个或更多单元或组件中的分布式逻辑执行。例如,存储器地址生成操作可部分地由地址生成单元的逻辑执行,加载操作可部分地由加载数据单元的逻辑执行,以及数据重新布置操作可部分地由矢量运行单元(例如置乱或排列单元)的逻辑执行。作为另一示例,处理器的加载路径可具有与矢量运行单元(例如置乱或排列单元)的逻辑潜在组合的用于实现指令的逻辑。然而,为了符合普通使用,这样的逻辑共同地表示以及在本文称为运行或执行选择性去交织跨距数据元素指令的运行单元。

为了避免使描述模糊,已示出和描述相对简化的处理器410。然而,处理器可以可选地包括其它处理器组件。例如,各种实施例可包括针对图16、17a-b、18a-b中的任何图所示和所述的组件的各种组合和配置。处理器的所有组件可一起耦合以允许它们如计划地操作。

图5是选择性去交织跨距数据元素操作558的示例实施例的框图。选择性去交织跨距数据元素操作可响应于选择性去交织跨距数据元素指令516(例如指令216和/或指令416)的实施例来被执行。

源操作数538可由指令指定或以其它方式指示。在一些实施例中,源操作数可与图4的源操作数438和/或图1的aos100的至少一部分相似或相同,包括为此的任何变型和备选。在示出的示例中,源操作数包括包括数据元素a0、b0、c0以及可选地零个或更多其它的第零个结构、包括数据元素a1、b1、c1以及可选地零个或更多其它的第一个结构、直到包括数据元素an、bn、cn以及可选地零个或更多其它的第n个结构。在各种实施例中,数据元素可以是8-比特、16-比特、32-比特或64-比特数据元素,以及可表示整数、固定点或浮点数据元素,尽管本公开的范畴未被如此限制。

跨距(s)的指示559还可由指令指定或以其它方式指示。在一些实施例中,跨距的指示可与针对图4提及的跨距的指示相似或相同,包括为此的任何变型和备选。如所示,在一些实施例中,跨距的指示可以可选地提供在指令的立即数和/或由指令指示的标量寄存器中的一个或多个561(例如任一个)中。

跨距数据元素位置的一个或多个集合的指示560还可由指令指定或以其它方式指示。在一些实施例中,跨距数据元素位置的一个或多个集合的指示可与针对图4提及的跨距数据元素位置的一个或多个集合的指示相似或相同,包括为此的任何变型和备选。如所示,在一些实施例中,跨距的指示和跨距数据元素位置的一个或多个集合的指示可以可选地提供在指令的立即数和/或由指令指示的标量寄存器中的一个或多个561(例如任一个)中。

如先前提及的,在一些实施例中,跨距数据元素位置的一个或多个集合的指示560可以能够指示跨距数据元素位置的任何一个或多个、或可选地任何子集、或可选地所有集合。如所示,在示出的示例中,a-类型(例如a0、a1、a2等)、c-类型(例如c0、c1、c2等)和可选地零个或更多其它类型的数据元素作为被指示为需要的,但b-类型(例如b0、b1、b2等)数据元素不被指示为需要的,尽管这仅仅是一个示例。在一些实施例中,指示可表示一个或多个值的矢量、序列、列表、或其它集合,用于提供一个或多个偏移、索引、或其它值以指示或选择跨距数据元素位置的一个或多个对应集合。在其它实施例中,指示可表示掩码(例如位掩码),其可具有不同部分(例如不同比特),所述不同部分可配置成指示或选择(或不指示或选择)跨距数据元素位置的不同对应集合。又在其它实施例中,指示可表示处理器理解的值被任意和/或根据采取的规定映射到一个或多个跨距数据元素位置的预定集合。

源操作数538、跨距的指示559、和跨距数据元素位置的一个或多个集合的指示560各自可被提供给运行单元534。从选择性去交织跨距数据元素指令516由解码单元530解码的一个或多个解码的指令或控制信号532还可提供给运行单元。运行单元可以可操作以响应于和/或由于选择性去交织跨距数据元素指令(例如响应于正被解码的指令516和/或响应于控制信号532)执行选择性去交织跨距数据元素操作558的实施例。在一些实施例中,运行单元可以可操作以针对跨距数据元素位置的一个或多个指示的集合中的每个560来生成和存储对应的结果打包数据操作数。在一些实施例中,这些结果打包数据操作数中的每个可存储在由指令指示的不同目的地打包数据寄存器或其它存储位置(例如存储器位置)。在一些实施例中,指令可以显式地指定或隐式地指示给定目的地打包数据寄存器(rx),并且它对于用来按需使用尽可能多的连续跟随的目的地打包数据寄存器(例如rx+1、rx+2等)以针对跨距数据元素位置的所有指示的/选择的集合来存储结果打包数据操作数的指令(例如它的操作码)可以是隐式的。

在示出的示例中,具有a-类型数据元素的第一结果打包数据操作数542-1可存储在第一目的地打包数据寄存器543-1(例如rx)中,具有c-类型数据元素的第二结果打包数据操作数542-2可存储在第二目的地打包数据寄存器543-2(例如rx+1)中,以及可选地具有零个或更多其它类型的元素的零个或更多其它结果打包数据操作数542-3可以可选地存储在零个或更多其它目的地打包数据寄存器543-3(例如rx+2、rx+3等)中。然而,对于该示例,如由“x”所示,结果打包数据操作数562可以不针对b-类型数据元素而被存储,以及目的地打包数据寄存器可以不被用于对于b-类型数据元素的这样的结果打包数据操作数。相反,如由标注563所示,在一些实施例中,通过跨距数据元素位置的一个或多个集合的指示560,对于不按需被指示/选择的跨距数据元素位置的一个或多个集合,一个或多个结果打包数据操作数可不被保存,并且一个或多个目的地打包数据寄存器可不被需要。有利地,这可避免不必要地将打包数据寄存器与不需要的数据捆绑,这可趋向帮助提高性能。

在示出的示例中,每个结果打包数据操作数存储四个数据元素并且可以可选地存储其它。在各种实施例中,每个结果打包数据操作数可表示64-比特、128-比特、256-比特、1024-比特、或2048-比特结果打包数据操作数,并且可以可选地存储在相同大小的打包数据寄存器中,尽管本公开的范畴未被如此限制。备选地,其它大小的寄存器或其它存储位置(例如存储器位置)可以可选地被使用。

图6是具有用于指示跨距数据元素位置的一个或多个集合的位掩码660的选择性去交织跨距数据元素操作658的第一具体示例实施例的框图。选择性去交织跨距数据元素操作可响应于选择性去交织跨距数据元素指令616的实施例来被执行。

源操作数638可由指令指示。在示出的示例中,源操作数包括七个数据元素结构。前七个数据元素结构664包括数据元素a0、b0、c0、d0、e0、f0和g0。还示出第二结构的数据元素a1。备选地,本文公开的其它aos和/或其它源操作数可替换地被使用。数据元素可具有针对图4-5先前提及的大小和类型,包括为此的任何变型和备选。

跨距(s)的指示659还可由指令指示。如所示,跨距的指示可以可选地提供在由指令指示的标量寄存器649中,尽管这不是要求的。在示出的示例中,跨距的指示被表示为(s-1)并且具有六的值以指示七的跨距。由处理器暗示或理解,一个数据元素位置的值将被添加到跨距的指示(例如s-1=6)以生成跨距(s=7)。备选地,跨距可以以如先前所述的各种其它方式来表示。

指示或选择跨距数据元素位置的一个或多个集合的位掩码660还由指令指示。如所示,位掩码可以可选地提供在指令的立即数(例如8-比特立即数650)中。备选地,位掩码可存储在由指令指示的寄存器中。针对跨距数据元素位置(例如七数据元素结构664中的每个数据元素位置)的所有集合中的每个对应一个,位掩码可具有不同比特。在一些实施例中,立即数和结构中的相同相对或对应位置中的比特和数据元素可彼此相对应,尽管还可以可选地采取对于对应性的其它规定。在示出的示例中,箭头的集合用于示出跨距数据元素位置的对应比特和集合。在该示例中,比特[7]表示超出对于跨距数据元素位置的所有集合所需的那些比特之外的额外比特(例如比结构中的数据元素位置的数量和/或跨距大的比特的数量),并且可表示可以可选地被忽略和/或不被使用的不关心值(*)。如由“x”所示,它可以不对应于跨距数据元素位置的任何集合。掩码的每个不同部分的值(例如位掩码的每个不同比特)可指示跨距数据元素位置的对应集合是否被选择。例如,比特可具有第一值(例如按示出的规定被设为二进制一)以指示跨距数据元素位置的对应集合被选择,或可具有第二不同值(例如被清除为二进制零)以指示跨距数据元素位置的对应集合不被选择。在特定示出的示例中,比特[0]到比特[6]相应地具有值“0110001”以指示或选择b-类型、c-类型和g-类型数据元素或跨距数据元素位置的集合(如正被选择的并且在该情况下是所需的),尽管这仅仅是一个示例。在其它实施例中,比特可被清除为二进制零以指示选择的或需要的位置。

源操作数638、跨距的指示659、和位掩码660各自可被提供给运行单元634。由解码单元630从指令616解码的一个或多个解码的指令或控制信号632也可被提供给运行单元。运行单元可以可操作以响应于和/或由于指令616的实施例(例如响应于解码指令616的解码单元630和/或响应于一个或多个控制信号632)来执行选择性去交织跨距数据元素操作658的实施例。

在特定示出的示例中,具有b-类型数据元素的第一结果打包数据操作数642-1可存储在第一目的地打包数据寄存器643-1(例如rx)中,具有c-类型数据元素的第二结果打包数据操作数642-2可存储在第二目的地打包数据寄存器643-2(例如rx+1)中,以及具有g-类型数据元素的第三结果打包数据操作数642-3可存储在第三目的地打包数据寄存器643-2(例如rx+2)中。注意在该示例中,针对a-类型、d-类型、e-类型和f-类型数据元素,结果数据操作数不被存储,以及目的地打包数据寄存器不被使用。有利地,在该示例中,这可避免不必要地将四个打包数据寄存器与不需要的数据捆绑。结果打包数据操作数和打包数据寄存器可具有针对图4-5先前提及的大小,包括为此的任何变型和备选。

图7是具有偏移的序列760以指示跨距数据元素位置的一个或多个集合的选择性去交织跨距数据元素操作758的第二特定示例实施例的框图。选择性去交织跨距数据元素操作可响应于选择性去交织跨距数据元素指令716的实施例来被执行。

源操作数738可由指令指示。在示出的示例中,源操作数包括六个数据元素结构。前六个数据元素结构764包括数据元素a0、b0、c0、d0、e0和f0。a0占据第零个位置,b0占据第一个位置,如此类推。备选地,本文公开的其它aos和/或其它源操作数可以替代地被使用。数据元素可具有针对图4-5先前提及的大小和类型,包括为此的任何变型和备选。

跨距(s)的指示759还由指令指示。如所示,跨距的指示可以可选地提供在指令的立即数750中,尽管这不是要求的。在示出的示例中,跨距的指示与跨距(例如s=6)相等。备选地,跨距可另外地如先前所述那样表示。

指示或选择跨距数据元素位置的一个或多个对应集合的一个或多个偏移的矢量或其它序列760还可由指令指示。如所示,偏移的序列可以可选地存储在处理器的通用或其它标量寄存器(例如64-比特标量寄存器749)中,尽管这不是要求的。偏移广泛地表示能够指示数据元素偏移或位置(例如对于aos的单个结构的任何数据元素位置)的整数或其它值。在示出的示例中,每个偏移存储在不同的8-比特字节中,在其它实施例中,每个偏移可以可选地存储在4-比特半字节、16-比特半字、32-比特字、或64-比特双字中。

在示出的示例中,如由箭头的集合所示,值零“0”的第一偏移(在该示例中存储在标量寄存器的比特[7:0]中)指示包括a0的跨距数据元素位置的第零集合,值三“3”的第二偏移(存储在比特[15:8]中)指示包括d0的跨距数据元素位置的第三集合,值四“4”的第三偏移(存储在比特[23:16]中)指示包括e0的跨距数据元素位置的第四集合,以及值五“5”的第四偏移(存储在比特[31:24]中)指示包括f0的跨距数据元素位置的第五集合。这些偏移还被重复使用以用于aos的其它结构。标量寄存器的剩余字节不存储偏移,并且可表示不关心值(*),其可以可选地被忽略和/或不被使用。通过示例方式,范围外的值和/或大于跨距的值可被用于这些不关心值。在示出的示例中,值零“0”的偏移被用于指示对应于a0的数据元素位置,尽管在其它实施例中,一“1”的偏移值可指示该数据元素位置。在示出的示例中,偏移指示需要的位置,尽管在其它实施例中,偏移可以可选地指示不需要的位置。

源操作数738、跨距的指示759、和偏移的序列760可被提供给运行单元734。由解码单元730从指令716解码的一个或多个解码的控制信号732也可被提供给运行单元。运行单元可以可操作以响应于和/或由于指令716的实施例(例如响应于正被解码的指令716和/或响应于一个或多个控制信号732)来执行操作758的实施例。

在特定示出的示例中,具有a-类型数据元素(例如a0、a1、a2、a3等)的第一结果打包数据操作数742-1可存储在第一目的地打包数据寄存器743-1(例如rx)中,具有d-类型数据元素的第二结果打包数据操作数742-2可存储在第二目的地打包数据寄存器743-2(例如rx+1)中,具有e-类型数据元素的第三结果打包数据操作数742-3可存储在第三目的地打包数据寄存器743-2(例如rx+2)中,以及具有f-类型数据元素的第四结果打包数据操作数742-4可存储在第四目的地打包数据寄存器743-4(例如rx+3)中。注意在该示例中,对于b-类型和c-类型数据元素,结果数据操作数不被存储,并且目的地打包数据寄存器不被使用或不必要的捆绑。结果打包数据操作数和打包数据寄存器可具有针对图4-5先前提及的大小,包括为此的任何变型和备选。

在一些实施例中,图5-7的选择性去交织跨距数据元素操作558、658和758中的任何一个或多个可以可选地由图4的处理器410执行。备选地,操作可以可选地由相似或不同处理器执行。此外,处理器410可以可操作以执行与图5-7的那些操作相似或不同的操作。

在一些情况下和/或对于一些算法,可不一定将来自数据元素位置的集合的所有数据元素位置的数据元素存储到对应的结果打包数据操作数中。例如,当算法有条件地处理数据元素(仅当条件被满足时,否则不处理数据元素)时,这可以是该情况。通过示例方式,考虑以下循环:

for(i=0;i<n;i++){

if(条件_a)a_本地=s[i].a;

if(条件_b)b_本地=s[i].b;

if(条件_c)c_本地=s[i].c;

在条件下计算(a_本地,b_本地,c_本地);

}

在该循环下,aos的三个数据元素结构s[i]的a-类型、b-类型和c-类型数据元素相应地取决于条件_a、条件_b和条件_c的评估可以或可以不被需要以用于进一步处理(即“在条件下计算”)。表示这样的条件的评估的一个方式是通过掩码。例如,第一掩码(ma)、第二掩码(mb)、和第三掩码(mc)可相应地被用于表示上文循环的不同迭代中的条件(条件_a、条件_b和条件_c)的评估,如下:

ma=条件_a[迭代0:迭代1:迭代2:迭代3…]

mb=条件_b[迭代0:迭代1:迭代2:迭代3…]

mc=条件_c[迭代0:迭代1:迭代2:迭代3…]

在其它情况下,相同条件可适用于a-类型、b-类型和c-类型数据元素中的每个,使得仅单个掩码可被用于表示针对不同迭代的条件的评估(可适用于a-类型、b-类型和c-类型数据元素中的每个)。

在一些实施例中,如本文公开的指令(例如掩蔽的完整去交织跨距数据元素指令、掩蔽的选择性去交织跨距数据元素指令等)可使用一个或多个这样的掩码以有条件地将数据元素存储到结果打包数据操作数。无限制地,在一些情况下,这样的掩蔽的类型的指令的使用可由软件(例如编译器)使用以帮助促进在条件下完成的循环的矢量化(例如利用来自结构阵列的负载)。增加的矢量化可趋向帮助提高性能。

图8是可操作以执行掩蔽的(可选地选择性)去交织跨距数据元素指令823的实施例的处理器810的实施例的框图。处理器包括解码单元830、运行单元834、标量寄存器844的可选集合、和打包数据寄存器840的集合。在一些实施例中,运行单元可以可选地包括:用于存储源操作数的数据元素的内部暂时寄存器891、如先前所述的数据元素重新布置逻辑892、和掩码/预测逻辑893。当部署在系统中时,处理器可与存储器836(例如主存储器)耦合。然而,在处理器部署在系统中和/或与存储器耦合之前,实施例仅涉及处理器。

除了指令823的掩蔽的和可选地选择性方面以外,除非被指定和/或以其它方式清楚明显,处理器810和它的组件可以可选地与图4的处理器410和它的对应命名的组件相同或相似。此外,寄存器和存储器位置可以按照先前所述的各种方式被指示。为了避免使描述模糊,将主要描述图8的实施例的不同和/或附加特性,而无需重复可以可选地与针对图4先前所述的那些特性相同或相似的所有特性。

处理器可接收掩蔽的(可选地选择性)去交织跨距数据元素指令823。指令823可指定(例如显式地指定)以其它方式指示(例如隐式地指示)源操作数838。源操作数可与图1的aos100的至少一部分和/或图4-8中的任何图的源操作数相似或相同,包括为此的任何变型和备选。如所示,在一些实施例中,源操作数可以可选地存储在存储器中,尽管这不是要求的。当源操作数可选地存储在存储器中时,指令823可指定或以其它方式指示可选存储器地址信息846。可选存储器地址信息可与图4的存储器地址信息446相同或相似,包括为此的任何变型和/或备选。如所示,存储器地址信息可以可选地存储在第一标量寄存器847中,或可提供在立即数中,尽管本公开的范畴未被如此限制。

指令823可指定(例如显式地指定)以其它方式指示(例如隐式地指示)跨距的指示。在一些实施例中,指令823可以可操作地指定(例如显式地指定)以其它方式指示(例如隐式地指示)跨距数据元素位置的一个或多个集合的可选指示,尽管这不是要求的。跨距的指示和跨距数据元素位置的一个或多个集合的可选指示可与图4-7中的任何图的那些相似或相同,包括为此的任何变型和备选。在一些实施例中,跨距的指示的一个或多个848和跨距数据元素位置的一个或多个集合的可选指示可以可选地存储在由指令指示的可选第二源标量寄存器849。在一些实施例中,指令的可选立即数850可以可选地指示跨距的指示和跨距数据元素位置的一个或多个集合的可选指示中的一个或多个。第二源标量寄存器或立即数或两者可被用于传递跨距的指示和跨距数据元素位置的一个或多个集合的可选指示。备选地,替代“可选地选择性”变型,指令823可以可选地是“完整”变型,以及可对应地不提供跨距数据元素位置的一个或多个集合的可选指示

指令823可指定(例如显式地指定)以其它方式指示(例如隐式地指示)一个或多个源打包数据操作掩码866。如所示,在一些实施例中,一个或多个源打包数据操作掩码可以可选地存储在打包数据操作掩码寄存器868的集合中。打包数据操作掩码寄存器可表示处理器的任何类型的架构寄存器。打包数据操作掩码寄存器的合适集合的一个具体示例是图16的寄存器1615(例如八个64-比特寄存器,其中最低有效8-比特、16-比特、或32-比特部分、或全部64-比特被用于存储掩码),尽管本公开的范畴未被如此限制。备选地,一个或多个源打包数据操作掩码866可以可选地存储在标量寄存器844、打包数据寄存器840或另一存储位置中。例如,打包数据寄存器的每个数据元素的最高有效比特、最低有效比特、或其它单个比特或所有比特可以可选地被使用为掩码元素。

解码单元830可以可操作以解码指令823以及输出一个或多个对应指令或其它控制信号832。运行单元834可以可操作以响应于和/或由于指令823(例如响应于正被解码的指令823和/或响应于一个或多个控制信号832)来执行掩蔽的(可选地选择性)去交织跨距数据元素操作的实施例。

在一些实施例中,运行单元可以可操作以将至少一个结果打包数据操作数852存储在打包数据寄存器840的集合的至少一个对应目的地打包数据寄存器中。在一些实施例中,可针对跨距数据元素位置的每个(可选地指示的)至少一个集合(例如在“完整”指令变型的情况下的跨距数据元素位置的所有集合或在“选择性”指令变型的情况下仅指示的或选择的集合)来存储至少一个结果打包数据操作数。在一些实施例中,每个结果打包数据操作数可服从由一个或多个源打包数据操作掩码866提供的预测或掩蔽。在一些实施例中,每个结果打包数据操作数可包括来自源操作数的跨距数据元素位置的对应集合的未掩蔽(unmasked)数据元素位置的数据元素,所述未掩蔽数据元素位置对应于一个或多个源打包数据操作掩码866的未掩蔽的掩码元素。在一些实施例中,每个结果打包数据操作数可包括对于掩蔽出(masked-out)的数据元素位置的掩蔽出的值,所述掩蔽出的数据元素位置对应于一个或多个源打包数据操作掩码866的掩蔽出的掩码元素。在一些实施例中,不同对应的源打包数据操作掩码可以可选地用于跨距数据元素位置的至少一个集合中的每个和/或至少一个结果打包数据操作数中的每个。在其它实施例中,单个源打包数据操作掩码可以可选地被重复用于跨距数据元素位置的至少一个集合中的每个和/或至少一个结果打包数据操作数中的每个。

图9是掩蔽的完整去交织跨距数据元素操作970的示例实施例的框图。操作可响应于掩蔽的完整去交织跨距数据元素指令917的实施例来被执行。

掩蔽的完整去交织跨距数据元素指令可指定或以其它方式指示跨距的指示959和源操作数938。跨距的指示可与图4-8中的任何图的那些相似或相同,包括为此的变型和备选。源操作数可与图1的aos100的至少一部分和/或图4-8中的任何图的源操作数相似或相同,包括为此的变型和备选。

指令还可指定(例如显式地指定)或以其它方式指示(例如隐式地指示)至少一个源打包数据操作掩码。在示出的示例中,指令指示第一源打包数据操作掩码966-1、第二源打包数据操作掩码966-2、第三源打包数据操作掩码966-3、和可选地零个或更多其它源打包数据操作掩码966-4,其相应地对应于第一结果打包数据操作数942-1、第二结果打包数据操作数942-2、第三结果打包数据操作数942-3、和可选地零个或更多其它结果打包数据操作数942-4。备选地,指令可仅指示单个源打包数据操作掩码,其可以可选地对应于并被重复用于结果打包数据操作数中的每个,或可以可选地对应于并被用于结果打包数据操作数中的仅一个。

在一些实施例中,源打包数据操作掩码966-1、966-2、966-3、966-4中的每个可以可选地存储在不同对应打包数据操作掩码寄存器中,尽管这不是要求的。在一些实施例中,指令可显式地指定或隐式地指示源打包数据操作掩码寄存器中的给定一个(例如用于966-1的一个)的寄存器(mx),并且它对于用来按需使用尽可能多的连续跟随的打包数据操作掩码寄存器(例如mx+1、mx+2等)以存储所有源打包数据操作掩码的指令(例如它的操作码)可以是隐式的。

每个打包数据操作掩码还可在本文简单地称为操作掩码、预测掩码、掩码、预测操作数、或有条件的控制操作数。每个掩码可被用于预测、有条件地控制、或掩蔽对应的操作(例如加载和去交织操作)是否将被执行和/或对应结果数据元素是否将被存储在对应的结果打包数据操作数中。在一些实施例中,掩蔽、预测、或有条件的控制可以是以每数据元素的粒度,使得对于不同结果数据元素的操作可单独地和/或独立于其它操作而被预测或有条件地控制。每个掩码可包括多个掩码元素、预测元素、或有条件的控制元素。在示图中,每个掩码示出成包括至少四个这样的元素,被标记为m0-m3,并且可以可选地包括其它。在一个方面中,掩码元素可包括在与对应的结果打包数据操作数的对应结果数据元素的一对一对应中。对于对应的结果打包数据操作数的每个结果数据元素,掩码可具有不同对应掩码元素。

对于对应的掩码和结果元素要在操作数内的相同相对位置中(例如对于要对应的最不重要的掩码和结果元素、要对应的最重要的掩码与结果元素等等)通常是便利的,尽管这不是要求的。在示出的示例中,对应的掩码和结果元素是垂直对齐的。具体地,第一掩码966-1的四个掩码元素m0-m3相应地对应于第一结果打包数据操作数942-1的四个垂直对齐的结果数据元素(例如m2对应于a2、m3对应于a3,等等),第二掩码966-2的四个掩码元素m0-m3相应地对应于第二结果打包数据操作数942-2的四个垂直对齐的结果数据元素,如此类推。

每个掩码元素的值可控制对应操作是否将被执行和/或对应结果数据元素是否将被存储。每个掩码元素可具有第一“未掩蔽的”值以指示操作要被执行,并且对应结果数据元素要被存储在对应的结果打包数据操作数,或可具有第二不同“掩蔽出的”值以指示操作将不被执行和/或对应结果数据元素将不被存储在对应的结果打包数据操作数中。在数据正从存储器加载的一些实施例中,运行单元和/或处理器响应于指令可以可选地抑制和/或不引起针对跨距数据元素位置的指示的至少一个集合的数据元素位置的可能的故障或其它异常条件(例如页故障、存储器访问故障、存储器访问类型违反故障等),所述数据元素位置对应于掩蔽出的掩码元素。在一些情况下,这可趋向帮助增加矢量化。例如,在存储器访问可在阵列的边界外发生或潜在地发生的情况下,如果掩蔽不被支持,则编译器可趋向保守地运转,并且决定不矢量化循环。然而,如果掩蔽被支持,则编译器可掩蔽在阵列的边界外发生或潜在地发生的访问,并且决定矢量化循环而同时掩蔽在阵列的边界外发生或潜在地发生的那些访问。

在一些实施例中,每个掩码元素可以可选地是被用于提供未掩蔽的或掩蔽出的值的单个掩码比特。根据一个可能规定,如示图中所示,被清除为二进制零(即0)的单个掩码比特可表示掩蔽出的掩码元素或值,而设为二进制一(即1)的单个掩码比特可表示未掩蔽的掩码元素或值。相反的规定也是可能的。备选地,两个或更多比特可以可选地被用于每个掩码元素(例如每个掩码元素可具有与每个对应结果数据元素相同数量的比特),以及掩码元素的一个或多个比特(例如最高或最低有效比特之一或所有比特)可被用于提供未掩蔽的或掩蔽出的值。在示出的示例中,对于第一掩码966-1,m0和m1是掩蔽出的而m2和m3是未掩蔽的,对于第二掩码966-2,m0和m1是未掩蔽的而m2和m3是掩蔽出的,以及对于第三掩码966-3,m1和m3是掩蔽出的而m0和m2是未掩蔽的。

跨距的指示959、源操作数938、和一个或多个掩码(例如966-1、966-2、966-3、966-4)各自可被提供给运行单元934。由解码单元930从指令917解码的一个或多个解码的指令或控制信号932还可被提供给运行单元。运行单元可以可操作以响应于和/或由于指令917的实施例(例如响应于正被解码的指令917和/或响应于控制信号932)来执行掩蔽的完整去交织跨距数据元素操作970的实施例。

在一些实施例中,在“完整”去交织操作的情况下,运行单元可以可操作以针对跨距数据元素位置的所有集合中的每个生成并且存储对应的结果打包数据操作数。在一些实施例中,在“掩蔽的”操作的情况下,运行单元可以可操作以将来自跨距数据元素位置的集合的数据元素存储到对应的结果打包数据操作数中,其符合由一个或多个对应源打包数据操作掩码提供的预测或掩蔽。在特定示出的示例实施例中,不同的对应源打包数据操作掩码被用于跨距数据元素位置的所有集合中的每个和/或对应的结果打包数据操作数中的每个。备选地,单个打包数据操作掩码(例如掩码966-1)可以可选地被重复用于跨距数据元素位置的所有集合中的每个和/或对应的结果打包数据操作数中的每个。

如所示,在特定示出的示例实施例中,对于第一结果打包数据操作数942-1,掩蔽出的值(#)可存储在对应于第一掩码966-1的掩蔽出的掩码元素m0和m1的前两个数据元素位置中,而a-类型数据元素a2和a3可存储在对应于966-1的未掩蔽的掩码元素m2和m3的下两个数据元素位置中。类似地,对于第二结果打包数据操作数942-2,b-类型数据元素b0和b1可存储在对应于第二掩码966-2的未掩蔽的掩码元素m0和m1的前两个数据元素位置中,而掩蔽出的值(#)可存储在对应于966-2的掩蔽出的掩码元素m2和m3的下两个数据元素位置中。对于第三结果打包数据操作数942-3,c-类型数据元素c0和c2可存储在对应于第三掩码966-3的未掩蔽的掩码元素m0和m2的第零和第二数据元素位置中,而掩蔽出的值(#)可存储在对应于966-3的掩蔽出的掩码元素m1和m3的第一和第三数据元素位置中。类似的途径可被用于零个或更多其它结果打包数据操作数942-4。

掩蔽出的值(#)可在不同实施例中以不同方式被确定。在一些实施例中,第一类型的掩蔽(被称为归零类型掩蔽)可以可选地被使用。在归零类型掩蔽中,掩蔽出的结果数据元素可被归零出(例如被强制具有零的值)和/或具有零值。例如,掩蔽出的16-比特结果数据元素的所有十六个比特可被清除为二进制零。在其它实施例中,第二类型的掩蔽(被称为合并类型掩蔽)可以可选地被使用。在合并类型掩蔽中,在指令刚好被执行之前最初存储在目的地打包数据寄存器或其它目的地存储位置中的对应数据元素位置的值可作为掩蔽出的值来被维持或保存。例如a2和a3可被“合并”到被用于存储第一结果打包数据操作数942-1的目的地打包数据寄存器中,而用于前两个掩蔽出的值(#)的比特可维持或保持它们的在指令的执行之前在那个打包数据寄存器中所具有的相同比特值。备选地,其它类型的预定值可以可选地被用于掩蔽出的值(#)。在一些实施例中,多个不同类型的掩蔽(例如归零掩蔽和合并掩蔽)可以可选地由处理器和/或指令支持。在一些实施例中,指令还可包括可选类型的掩蔽操作说明字段以灵活地指示掩蔽的类型(例如字段可具有用于指示合并-掩蔽的第一值或用于指示归零-掩蔽的第二值)。备选地,掩蔽的类型可以可选地指示在处理器的控制寄存器中。

在一些实施例中,结果打包数据操作数942中的每个可存储在由指令指示的不同目的地打包数据寄存器或其它目的地存储位置(例如存储器位置)中。在一些实施例中,它对于用于按需使用尽可能多的以给定指示的目的地打包数据寄存器开始的连续目的地打包数据寄存器以存储所有结果打包数据操作数和/或跨距数据元素位置的所有集合的指令(例如它的操作码)可以是隐式的。结果打包数据操作数和打包数据寄存器可具有针对图4-8先前提及的大小,包括为此的任何变型和备选。

图10是掩蔽的选择性去交织跨距数据元素操作1072的示例实施例的框图。该操作可响应于掩蔽的选择性去交织跨距数据元素指令1018的实施例来被执行。

图10的掩蔽的“选择性”去交织跨距数据元素操作1072和指令1018与图9的掩蔽的“完整”去交织跨距数据元素操作970和指令917相似。为了避免使描述模糊,将主要描述对于图10的“选择性”操作和指令的不同和/或附加特性。然而,将要意识到的是,图9的“完整”操作和指令的先前所述的特性和细节还可以可选地适用于图10的“选择性”操作和指令,除非以其它方式表述或在以其它方式清楚明显(例如,如果它们涉及使用跨距数据元素位置的所有集合的“完整”方面)。

掩蔽的选择性去交织跨距数据元素指令1018可以指定或以其它方式指示跨距的指示1059和跨距数据元素位置的一个或多个集合的指示1060,其可以可选地在立即数和标量寄存器中的一个或多个1061中。指令1018还可指定或以其它方式指示源操作数1038、第一源打包数据操作掩码1066-1、第二源打包数据操作掩码1066-2、和可选地零个或更多其它1066-3。这些不同类型的项中的每个可以与先前所述的那些相似或相同,包括为此提及的任何变型和/或备选。

跨距的指示1059、跨距数据元素位置的一个或多个集合的指示、源操作数1038、和一个或多个掩码(例如1066-1、1066-2、1066-3)各自可提供给运行单元1034。由解码单元1030从指令1018解码的一个或多个解码的指令或控制信号1032还可提供给运行单元。运行单元可以可操作以响应于和/或由于指令1018的实施例来执行掩蔽的选择性去交织跨距数据元素操作1072的实施例。

在“选择性”类型操作的该情况下,在一些实施例中,运行单元可以可操作以针对被选择/指示为被指示1060需要的跨距数据元素位置的仅一个或多个集合中的每个生成并存储对应的结果打包数据操作数。在特定示出的示例中,如由“x”所示,指示1060指示没有结果打包数据操作数1062需要针对对应于c-类型数据元素的跨距数据元素位置的集合而被存储,尽管这仅仅是一个说明性示例。有利地,这可避免不必要地将打包数据寄存器与不需要的数据捆绑,其可趋向帮助提高性能。对于该示例,如由“x”所示,没有源打包数据操作掩码1053对于对应于c-类型数据元素的跨距数据元素位置的集合是需要的。在其它实施例中,单个源打包数据操作掩码可由指令指示,并且被重复用于被指示为需要的跨距数据元素位置的集合中的每个,但可不被用于不被指示为需要的跨距数据位置的那些集合。

在一些实施例中,图9-10的操作970和1072中的任何一个或多个可以而可选地由图8的处理器810执行。备选地,操作可以可选地由相似或不同的处理器执行。此外,处理器810可以可操作以执行与图9-10的那些操作相似或不同的操作。

替代使用如本文公开的去交织跨距数据元素指令,另一可能途径将会是使用具有彼此偏移的跨距收集索引的相应集合的多个收集指令。通过示例方式,在包括三数据元素结构的aos的情况下,所述三数据元素结构包括a-类型、b-类型、和c-类型数据元素(例如a0、b0、c0、a1、b1、c1等等),具有相同收集索引[0、3、6、9…]但彼此偏移一个数据元素位置的第一、第二、和第三收集指令可被用于相应地将a-类型、b-类型、和c-类型数据元素收集到第一、第二、和第三目的地打包数据寄存器中。然而,关于这样的途径的一个潜在缺点是,可需要执行多个收集指令(例如针对跨距数据元素位置的每个集合一个)而不是仅单个选择性去交织跨距数据元素指令。

另一潜在缺点是,在通常情况下索引可以不是已知的或可用的,和/或可需要通过执行附加指令来被生成。相反,选择性去交织跨距数据元素指令不需要使用这样的收集索引,而是可指示单个跨距值(例如标量寄存器或立即数中的单个整数值)以及指示将被重复用于不同跨距位置(例如基于跨距的aos的不同结构)的一个或多个数据元素位置的集合。又一潜在缺点是,结构的数据元素的局域性(其通常驻留在相同高速缓冲存储器线中)未被考虑。相反,收集指令通常可通过对于每个收集索引的单独连续加载操作来被实现。除了连续加载操作通常占用更多时间以实现之外,它们可潜在地遭遇多个连续页故障、存储器访问故障等等。相反,选择性去交织跨距数据元素指令的实现可通过同时加载多个邻近数据元素和/或多个邻近结构来更好地利用空间局域性(如果它们驻留在相同高速缓冲存储器线内的话),这可帮助提高性能。

如结合图2在上文所讨论的,在一些实施例中,指令集212可以可选地包括交织具有跨距的数据元素指令220的实施例。例如,指令集可以可选地包括以下项中的一个或多个:完整交织具有跨距的数据元素指令221、选择性交织具有跨距的数据元素指令222、掩蔽的完整交织具有跨距的数据元素指令223、和掩蔽的选择性交织具有跨距的数据元素指令224。这些指令和操作可与相似于先前所述的那些(例如图4和/或图8的那些)的处理器、解码单元、运行单元和寄存器一起执行。备选地,这些指令和操作可以可选地由相似或不同处理器执行。

在一些实施例中,交织具有跨距的数据元素指令的完整、选择性、掩蔽的完整、和掩蔽的选择性变型可相应地相似于去交织跨距数据元素指令的完整、选择性、掩蔽的完整、和掩蔽的选择性变型,不同之处在于操作的方向可能大体上是颠倒的。例如,在一些实施例中,如去交织指令214的源操作数(例如aos)的操作数可以替代地充当交织指令220的结果操作数(例如aos)的角色,以及如去交织指令214的目的地打包数据寄存器的打包数据寄存器可替换地充当交织指令220的源打包数据寄存器的角色。此外,交织操作可被执行以用于交织指令220,替代用于去交织指令214的去交织操作。

然而,除了这样的差异之外,交织指令220和操作可具有跨距的指示、跨距数据元素位置的一个或多个集合的指示(在选择性变型的情况下)、和打包数据操作掩码(在掩蔽的变型的情况下),其可与先前所述的那些相同或相似,包括为此提及的任何变型和/或备选。此外,相同或相似的途径可被用于指定或指示寄存器和存储器位置,包括为此提及的任何变型和/或备选。为了避免使描述模糊,将主要描述交织指令220和操作的不同和/或附加特性。

图11是选择性交织具有跨距的数据元素操作1198的示例实施例的框图。操作可响应于选择性交织具有跨距的数据元素指令1122的实施例来被执行。指令1122可指定或以其它方式指示跨距的指示1159和跨距数据元素位置的一个或多个集合的指示1160,其可以可选地在立即数和标量寄存器中的一个或多个1161中。指示1159和1160可以与先期所述的那些相似或相同,包括为此提及的任何变型和/或备选。

指令1122还可指定或以其它方式指示一个或多个源打包数据操作数和/或一个或多个对应源打包数据寄存器。在一些实施例中,指令可指示对于由指示1160指示的跨距数据元素位置的一个或多个集合中的每个的不同对应的源打包数据操作数和/或源打包数据寄存器。在示出的示例实施例中,这些包括在第一源打包数据寄存器1143-1(例如rx)中的第一源打包数据操作数1142-1、在第二源打包数据寄存器1143-2(例如rx+1)中的第二源打包数据操作数1142-2、以及可选地在零个或更多对应源打包数据寄存器1143-3(例如rx+2、rx+3等)中的零个或更多其它源打包数据操作数1142-3。在示出的示例中,第一操作数1142-1包括a-类型数据元素a0*、a1*、a2*和a3*以及可选地其它,并且第二操作数1142-2包括c-类型数据元素c0*、c1*、c2*和c3*以及可选地其它。这些操作数和寄存器可具有先前所述的相同大小,以及可包括先前所述的相同大小和类型的数据元素。在该示例中,如由“x”所示,b-类型数据元素不在跨距数据元素位置的指示的集合之中,因此没有源打包数据操作数和/或没有源打包数据寄存器被用于b-类型数据元素(b0、b1、b2、b3和可选地其它)。

跨距的指示1159、跨距数据元素位置的一个或多个集合的指示1160、和一个或多个源打包数据操作数(例如1142-1、1142-2、1142-3)各自可被提供给运行单元1134。由解码单元1130从指令1122解码的一个或多个解码的指令或控制信号1132还可提被供给运行单元。运行单元可以可操作以响应于和/或由于指令1122的实施例来执行选择性交织具有跨距的数据元素操作的实施例。运行单元可存储结果操作数1138。在一些实施例中,结果操作数可表示跨距数据的部分更新的集合(例如图1的aos100的至少一部分)。在一些实施例中,结果操作数可以可选地存储在存储器(例如主存储器)中。备选地,结果操作数可以可选地存储在多个打包数据寄存器中。

在一些实施例中,运行单元可以可操作以将来自不同源打包数据操作数的数据元素在跨距数据元素位置处彼此交织,和/或与用于结果操作数的存储器或其它存储位置中的现存数据元素交织。如所示,a0*、a1*等等可存储在结果操作数中的跨距数据元素位置处。同样地,c0*、c1*等等可存储在结果操作数中的跨距数据元素位置处。然而,在“选择性”类型操作的该情况下,由于b-类型数据元素未由指示1160指示或选择,最初存储在用于结果操作数的存储位置中的b-类型数据元素(例如b0、b1等)可被略过。例如,在指令/操作之前最初存储在用于结果操作数的存储器位置或其它存储位置中的数据元素b0和b1的比特值可在指令/操作之后被维持。

图12是掩蔽的选择性交织具有跨距的数据元素操作1299的示例实施例的框图。操作可响应于掩蔽的选择性交织具有跨距的数据元素指令1224的实施例来被执行。指令1224可指定或以其它方式指示跨距的指示1259和跨距数据元素位置的一个或多个集合的指示1260,其可以可选地在立即数和标量寄存器中的一个或多个1261中。指示1259和1260可以与先期所述的那些相似或相同,包括为此提及的任何变型和/或备选。

指令1224还可指定或以其它方式指示一个或多个源打包数据操作数和/或一个或多个对应源打包数据寄存器。在一些实施例中,指令可指示对于由指示1260指示的跨距数据元素位置的一个或多个集合中的每个的不同对应的源打包数据操作数和/或源打包数据寄存器。在示出的示例实施例中,这些包括第一源打包数据操作数1242-1(例如存储在第一源打包数据寄存器(例如rx)中)、第二源打包数据操作数1242-2(例如存储在第二源打包数据寄存器(例如rx+1)中)、以及可选地零个或更多其它源打包数据操作数1242-3(例如存储在零个或更多其它源打包数据寄存器(例如rx+2、rx+3等)中)。在示出的示例中,第一操作数1242-1包括a-类型数据元素a0*、a1*、a2*和a3*以及可选地其它,并且第二操作数1242-2包括b-类型数据元素b0*、b1*、b2*和b3*以及可选地其它。这些操作数和寄存器可具有先前所述的相同大小并且可包括先前所述的相同大小和类型的数据元素。在该示例中,如由“x”所示,c-类型数据元素不在对于指示1260的跨距数据元素位置的集合之中,因此没有源打包数据操作数1262和/或没有源打包数据寄存器被用于c-类型数据元素。

指令1224还可指定或以其它方式指示一个或多个源打包数据操作数和/或一个或多个对应源打包数据操作掩码寄存器。如所示,在一些实施例中,对于由指示1260指示的跨距数据元素位置的一个或多个集合中的每个和/或对于每个源打包数据操作数,指令可指示不同的对应源打包数据操作掩码。在示出的示例实施例中,这些包括第一源打包数据操作掩码1266-1(例如存储在第一源打包数据操作掩码寄存器(例如mx)中)、第二源打包数据操作掩码1266-2(例如存储在第二源打包数据操作掩码寄存器(例如mx+1)中)、以及可选地零个或更多其它源打包数据操作掩码1266-3(例如存储在零个或更多其它源打包数据操作掩码寄存器(例如mx+2、mx+3等)中)。在示出的示例中,第一掩码1266-1的掩码元素m0和m1是掩蔽出的而掩码元素m2和m3是未掩蔽的,并且第二掩码1266-2的掩码元素m0和m1是未掩蔽的而掩码元素m2和m3是掩蔽出的,尽管这仅仅是一个示例。这些掩码和掩码元素可以可选地与先前描述的那些相似或相同,包括为此提及的任何变型和备选。在该示例中,如由“x”所示,对于c-类型数据元素没有掩码被需要1253。在其它实施例中,替代针对不同源打包数据操作数使用不同的对应掩码,单个掩码可以可选地被重复用于不同的源打包数据操作数中的每个,如先前所述。

跨距的指示1259、跨距数据元素位置的一个或多个集合的指示1260、一个或多个源打包数据操作数(例如1242-1、1242-2、1242-3)和一个或多个源打包数据操作掩码(例如1266-1、1266-2、1266-3)各自可被提供给运行单元1234。由解码单元1230从指令1224解码的一个或多个解码的指令或控制信号1232还可提供给运行单元。运行单元可以可操作以响应于和/或由于指令1224的实施例来执行掩蔽的选择性交织具有跨距的数据元素操作的实施例。运行单元可存储结果操作数1238。在一些实施例中,结果操作数可表示跨距数据的部分更新的集合(例如图1的aos100的至少一部分)。在一些实施例中,结果操作数可以可选地存储在存储器(例如主存储器)中。备选地,结果操作数可以可选地存储在多个打包数据寄存器中。

在一些实施例中,运行单元可以可操作以将来自不同源打包数据操作数的数据元素在跨距数据元素位置处彼此交织,和/或与用于结果操作数的存储器或其它存储位置中的现存数据元素交织,所述跨距数据元素位置服从由一个或多个源打包数据操作掩码(例如1266-1、1266-2、1266-3)提供的掩蔽或预测。在一些实施例中,来自源操作数的未掩蔽数据元素位置的数据元素(其对应于对应源打包数据操作掩码的未掩蔽的掩码元素)可被存储到结果操作数的跨距数据元素位置。例如,如所示,b0*和b1*(其对应于第二掩码1266-2的未掩蔽的掩码元素m0和m1)可被存储到结果操作数的对应跨距数据元素位置。

相反,在一些实施例中,来自源操作数的掩蔽出的数据元素位置的数据元素(其对应于对应源打包数据操作掩码的掩蔽出的掩码元素)可被存储到结果操作数的跨距数据元素位置。例如,如所示,a0*和a1*(其对应于第一掩码1266-1的掩蔽出的掩码元素m0和m1)可不被存储到结果操作数的对应跨距数据元素位置。相反,在一些实施例中,在指令/操作之前最初存储在用于结果操作数的存储器位置或其它存储位置中的数据元素a0和a1的比特值可在指令/操作之后被维持。同样地,对于该示例这还可以是对于c-类型数据元素的情况,所述c-类型数据元素不由指示1260指示/选择。备选地,归零掩蔽(其中掩蔽出的结果数据元素被归零)可以可选地被使用。

将要意识到,这些仅仅是一些说明性示例。其它示例关于完整和完整掩蔽的指令/操作变型。掩蔽和选择方面可被单独地或共同地使用。

指令集包括一个或多个指令格式。给定的指令格式定义各种字段(比特数量、比特位置)以在其它事物中指定要被执行的操作(操作码)和操作数(在其上要执行操作)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义以具有指令格式的字段的不同子集(包括的字段典型地采用相同顺序,但至少一些具有不同比特位置,因为包括有较少字段)和/或被定义以具有不同地解译的给定字段。因此,isa的每个指令使用给定的指令格式来表示(并且如果被定义,则采用该指令格式的指令模板中的给定一个)并且包括用于指定操作和操作数的字段。例如,示范性add指令具有特定操作码和指令格式,其包括用于指定那个操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地和源2));以及指令流中的该add指令的出现将具有选择特定操作数的操作数字段中的特定内容。simd扩展的集合(涉及高级矢量扩展(avx)(avx1和avx2)以及使用矢量扩展(vex)编码方案)已被发布和/或公布(例如见intel64和ia-32architecturessoftwaredevelopersmanual,2011年10月;以及见inteladvancedvectorextensionsprogrammingreference,2011年6月)。

示范性指令格式

本文描述的指令的实施例可以采用不同格式实施。此外,示范性系统、架构和管线在下文被详述。指令的实施例可在这样的系统、架构和管线上执行,但不限于详述的那些。

vex指令格式

vex编码允许指令具有多于两个操作数,并且允许simd矢量寄存器要长于128比特。vex前缀的使用提供三操作数(或更多)语法。例如,之前二操作数指令执行了操作(诸如a=a+b),其改写了源操作数。vex前缀的使用使操作数能够执行无损操作(诸如a=b+c)。

图13a示出示范性avx指令格式,其包括vex前缀1302、真操作码字段1330、modr/m字节1340、sib字节1350、位移字段1362和imm81372。图13b示出来自图13a的哪些字段构成完整操作码字段1374和基础操作字段1342。图13c示出来自图13a的哪些字段构成寄存器索引字段1344。

vex前缀(字节0-2)1302以三字节形式编码。第一字节是格式字段1340(vex字节0,比特[7:0]),其含有显式的c4字节值(用于识别c4指令格式的唯一值)。第二-第三字节(vex字节1-2)包括提供特定能力的多个比特字段。具体地,rex字段1305(vex字节1,比特[7-5])由以下项组成:vex.r比特字段(vex字节1,比特[7]-r)、vex.x比特字段(vex字节1,比特[6]-x)和vex.b比特字段(vex字节1,比特[5]-b)。指令的其它字段编码如本领域已知的寄存器索引的较低三比特(rrr、xxx和bbb),使得rrrr、xxxx、和bbbb可通过添加vex.r、vex.x和vex.b来形成。操作码映射字段1315(vex字节1,比特[4:0]-mmmmm)包括内容以编码所暗示的前导操作码字节。w字段1364(vex字节2,比特[7]-w)由符号vex.w来表示并且取决于指令来提供不同功能。vex.vvvv1320(vex字节2,比特[6:3]-vvvv)的角色可包括以下项:1)vex.vvvv编码第一源寄存器操作数,以倒置(1s补码)的形式指定并对于带有2个或更多源操作数的指令有效;2)vex.vvvv编码目的地寄存器操作数,对于某些矢量移位以1s补码形式指定;或者3)vex.vvvv不编码任何操作数,字段被预留并应含有1111b。如果vex.l1368大小字段(vex字节2,比特[2]-l)=0,则它指示128比特矢量;如果vex.l=1,则它指示256比特矢量。前缀编码字段1325(vex字节2,比特[1:0]-pp)为基础操作字段提供附加的比特。

真操作码字段1330(字节3)还被称为操作码字节。操作码的部分在此字段中被指定。

modr/m字段1340(字节4)包括mod字段1342(比特[7-6])、reg字段1344(比特[5-3])和r/m字段1346(比特[2-0])。reg字段1344的角色可包括以下:编码目的地寄存器操作数或源寄存器操作数(rrrr的rrr),或作为操作码扩展被对待并且不被用于编码任何指令操作数。r/m字段1346的角色可包括以下:编码参考存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。

缩放、索引、基址(sib)-缩放字段1350(字节5)的内容包括ss1352(比特[7-6]),其被用于存储器地址生成。sib.xxx1354(比特[5-3])和sib.bbb1356(比特[2-0])的内容之前已关于寄存器索引xxxx和bbbb而被提到。

位移字段1362和立即数字段(imm8)1372含有地址数据。

一般矢量友好指令格式

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

图14a-14b是框图,其示出根据本公开的实施例的一般矢量友好指令格式和其指令模板。图14a是框图,其示出根据本公开的实施例的一般矢量友好指令格式和其类别a指令模板;而图14b是框图,其示出根据本公开的实施例的一般矢量友好指令格式和其类别b指令模板。具体地,对于一般矢量友好指令格式1400,定义了类别a和类别b指令模板,它们两者包括无存储器访问1405指令模板和存储器访问1420指令模板。矢量友好指令格式的上下文中的术语“一般”指的是指令格式不被束缚于任何特定指令集。

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

图14a中的类别a指令模板包括:1)在无存储器访问1405指令模板内,示出了无存储器访问、完整舍入(fullround)控制类型操作1410指令模板,和无存储器访问、数据变换类型操作1415指令模板;以及2)在存储器访问1420指令模板内,示出了存储器访问、暂时1425指令模板,和存储器访问、非暂时1430指令模板。图14b中的类别b指令模板包括:1)在无存储器访问1405指令模板内,示出了无存储器访问、写掩码控制、部分舍入控制类型操作1412指令模板,和无存储器访问、写掩码控制、vsize类型操作1417指令模板;以及2)在存储器访问1420指令模板内,示出了存储器访问、写掩码控制1427指令模板。

一般矢量友好指令格式1400包括图14a-14b中所示出的以下按顺序列出的以下字段。

格式字段1440—此字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,并因此标识指令流中矢量友好指令格式中的指令的出现。因而,此字段在它对于仅具有一般矢量友好指令格式的指令集不被需要的意义中是可选的。

基础操作字段1442—它的内容识别出不同的基础操作。

寄存器索引字段1444—它的内容直接或通过地址生成来指定源和目的地操作数的位置(它们在寄存器中或在存储器中)。这些包括用于从pxq(例如32x512、16x128、32x1024、64x1024)寄存器堆选择n个寄存器的比特的足够数量。虽然在一个实施例中n可多至三个源和一个目的地寄存器,但备选实施例可支持更多或更少的源和目的地寄存器(例如,可支持多至两个源,其中这些源之一还充当目的地;可支持多至三个源,其中这些源之一还充当目的地;可支持多至两个源和一个目的地)。

修改符(modifier)字段1446—它的内容识别出一般矢量指令格式中指定存储器访问的指令与不指定存储器访问的那些指令的出现;那就是说,在无存储器访问1405指令模板和存储器访问1420指令模板之间进行识别。存储器访问操作对存储器层级进行读和/或写(在使用寄存器中的值来指定源和/或目的地地址的一些情况中),而非存储器访问操作不进行(例如,源和目的地是寄存器)。虽然在一个实施例中此字段还在三个不同方式之间选择以执行存储器地址运算,但备选实施例可支持用于执行存储器地址运算的更多、更少、或不同方式。

扩增(augmentation)操作字段1450—它的内容识别出除了基础操作之外还要被执行的多种不同操作的哪一个。此字段是上下文特定的。在本公开的一个实施例中,此字段被划分成类别字段1468、阿尔法字段1452、和贝塔字段1454。扩增操作字段1450允许操作的通用组在单个指令而不是2、3、或4个指令中被执行。

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

位移(displacement)字段1462a—它的内容作为存储器地址生成(例如,用于使用2缩放*索引+基址+位移的地址生成)的部分被使用。

位移因子字段1462b(注意,直接在位移因子字段1462b上的位移字段1462a的并置指示一个或另一个被使用)—它的内容作为地址生成的部分被使用;它指定要通过存储器访问的大小(n)来缩放的位移因子—其中n是存储器访问中的字节的数量(例如,用于使用2缩放*索引+基址+缩放的位移的地址生成)。冗余低顺序比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(n)以便生成要在运算有效地址中被使用的最终位移。n的值由处理器硬件在运行时间基于完整操作码字段1474(本文中较后所描述)和数据操纵字段1454c来确定。位移字段1462a和位移因子字段1462b在它们不被用于无存储器访问1405指令模板和/或不同实施例可实现所述两个的仅一个或没有一个的意义中是可选的。

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

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

立即数字段1472—它的内容允许立即数的规格。此字段在它在不支持立即数的一般矢量友好格式的实现中不存在和它在不使用立即数的指令中不存在的意义中是可选的。

类别字段1468—它的内容在指令的不同类别之间进行识别。参考图14a-b,此字段的内容在类别a和类别b指令之间选择。在图14a-b中,圆角方形被用于指示在字段中呈现的特定值(例如,在图14a-b中相应对于类别字段1468的类别a1468a和类别b1468b)。

类别a的指令模板

在类别a的非存储器访问1405指令模板的情况中,阿尔法字段1452被解译为rs字段1452a,其内容识别出不同扩增操作类型的哪一个要被执行(例如,舍入1452a.1和数据变换1452a.2对于无存储器访问、舍入类型操作1410,和无存储器访问、数据变换类型操作1415指令模板被相应指定),而贝塔字段1454识别出所指定的类型的操作的哪个要被执行。在无存储器访问1405指令模板中,缩放字段1460、位移字段1462a、和位移缩放字段1462b不存在。

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

在无存储器访问完整舍入控制类型操作1410指令模板中,贝塔字段1454被解译为舍入控制字段1454a,其内容提供静态舍入。虽然在本公开的所描述的实施例中,舍入控制字段1454a包括所有浮点异常(sae)字段1456和舍入操作控制字段1458的抑制,但备选实施例可支持可将这些概念两者编码成相同字段,或仅具有这些概念/字段的一个或另一个(例如,可具有仅舍入操作控制字段1458)。

sae字段1456—它的内容识别出是否禁用异常事件报告;在sae字段1456的内容指示抑制被启用时,给定的指令不报告任何种类的浮点异常标记且不唤起(raise)任何浮点异常处置器。

舍入操作控制字段1458—它的内容识别出一组舍入操作的哪一个要执行(例如,上舍入、下舍入、朝零舍入和往最近舍入)。因此,舍入操作控制字段1458允许按指令的基础上的舍入模式的改变。在本公开的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段1450的内容覆盖那个寄存器值。

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

在无存储器访问数据变换类型操作1415指令模板中,贝塔字段1454被解译为数据变换字段1454b,其内容识别出多个数据变换的哪一个要被执行(例如,无数据变换、打乱(swizzle)、广播)。

在类别a的存储器访问1420指令模板的情况中,阿尔法字段1452被解译为驱逐提示字段1452b,其内容识别出驱逐提示的哪一个要被使用(在图14a中,暂时1452b.1和非暂时1452b.2对于存储器访问、暂时1425指令模板,和存储器访问、非暂时1430指令模板被相应指定),而贝塔字段1454被解译为数据操纵字段1454c,其内容识别出多个数据操纵操作(还已知为原语(primitive))的哪一个要被执行(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问1420指令模板包括缩放字段1460、并可选地包括位移字段1462a或位移缩放字段1462b。

矢量存储器指令通过转换支持来执行自存储器的矢量加载和往存储器的矢量存储。如通过常规矢量指令,矢量存储器指令以数据元素式的方式将数据转移自/往存储器,实际上被转移的元素由作为写掩码被选择的矢量掩码的内容来指示。

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

暂时数据是这样的数据,其有可能被足够快地再使用以受益于进行高速缓冲存储器。然而,这是提示,并且不同处理器可以采用不同方式来实现它,包括完全忽略该提示。

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

非暂时数据是这样的数据,其不太可能被足够快地再使用以受益于在第1等级高速缓冲存储器中进行高速缓冲存储器并应被给定用于驱逐的优先权。然而,这是提示,并且不同处理器可以采用不同方式来实现它,包括完全忽略该提示。

类别b的指令模板

在类别b的指令模板的情况中,阿尔法字段1452被解译为写掩码控制(z)字段1452c,其内容识别出由写掩码字段1470所控制的写掩蔽应是合并还是归零。

在类别b的非存储器访问1405指令模板的情况中,贝塔字段1454的部分被解译为rl字段1457a,其内容识别出不同扩增操作类型的哪一个要被执行(例如,舍入1457a.1和矢量长度(vsize)1457a.2对于无存储器访问、写掩码控制、部分舍入控制类型操作1412指令模板,和无存储器访问、写掩码控制、vsize类型操作1417指令模板被相应指定),而贝塔字段1454的剩余部分识别出指定类型的操作的哪个要被执行。在无存储器访问1405指令模板中,缩放字段1460、位移字段1462a、和位移缩放字段1462b不存在。

在无存储器访问、写掩码控制、部分舍入控制类型操作1410指令模板中,贝塔字段1454的剩余部分被解译为舍入操作字段1459a,并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标记且不唤起任何浮点异常处置器)。

舍入操作控制字段1459a—正如舍入操作控制字段1458,它的内容识别出一组舍入操作的哪一个要执行(例如,上舍入、下舍入、朝零舍入和往最近舍入)。因此,舍入操作控制字段1459a允许在按指令的基础上的舍入模式的改变。在本公开的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段1450的内容覆盖那个寄存器值。

在无存储器访问、写掩码控制、vsize类型操作1417指令模板中,贝塔字段的剩余部分1454被解译为矢量长度字段1459b,其内容识别出多个数据矢量长度的哪一个要被执行(例如,128、256、或512字节)。

在类别b的存储器访问1420指令模板的情况中,贝塔字段1454的部分被解译为广播字段1457b,其内容识别出广播类型数据操纵操作是否要被执行,而贝塔字段1454的剩余部分被解译为矢量长度字段1459b。存储器访问1420指令模板包括缩放字段1460、并可选地包括位移字段1462a或位移缩放字段1462b。

关于一般矢量友好指令格式1400,完整操作码字段1474被示出,包括格式字段1440、基础操作字段1442、和数据元素宽度字段1464。虽然一个实施例被示出,其中完整操作码字段1474包括所有这些字段,但在不支持所有这些字段的实施例中,完整操作码字段1474包括少于所有这些字段。完整操作码字段1474提供操作代码(操作码)。

扩增操作字段1450、数据元素宽度字段1464、和写掩码字段1470允许这些特征在一般矢量友好指令格式中在按指令的基础上被指定。

写掩码字段和数据元素宽度字段的组合创建分类的(typed)指令,因为它们允许掩码基于不同数据元素宽度而被应用。

在类别a和类别b内建立的各种指令模板在不同情境中是有益的。在本公开的一些实施例中,不同处理器或处理器内的不同核可支持仅类别a、仅类别b、或两个类别。例如,打算用于通用计算的高性能通用乱序核可支持仅类别b,打算主要用于图形和/或科学(吞吐量)计算的核可支持仅类别a,以及打算用于两者的核可支持两个类别(当然,具有来自两个类别的模板和指令但不是来自两个类别的所有模板和指令的某些混合的核在本公开的界限之内)。同样,单个处理器可包括多个核,其的所有支持相同类别或其中不同核支持不同类别。例如,在带有单独的图形和通用核的处理器中,打算主要用于图形和/或科学计算的图形核之一可支持仅类别a,而通用核的一个或多个通用核可以是支持仅类别b的打算用于通用计算的带有乱序运行和寄存器重命名的高性能通用核。不具有单独的图形核的另一个处理器可包括支持类别a和类别b两者的更多一个通用有序或乱序核。当然,来自一个类别的特征可还被实现于本公开的不同实施例中的另一类别中。以高等级语言所写的程序将被翻译(例如,准时编译或静态编译)成多种不同可运行的形式,包括:1)具有用于运行的由目标处理器所支持的类别的仅指令的形式;或2)具有使用所有类别的指令的不同组合所写的备选例程并具有选择例程以基于由处理器(其当前正运行代码)所支持的指令来运行的控制流程代码(controlflowcode)的形式。

示范性特定矢量友好指令格式

图15是框图,其示出根据本公开的实施例的示范性特定矢量友好指令格式。图15示出特定矢量友好指令格式1500,其在它指定位置、大小、解译、和字段的顺序、以及那些字段的一些字段的值的意义中是特定的。特定矢量友好指令格式1500可被用于扩展x86指令集,并且因此字段的一些字段与现存x86指令集和其扩展(例如,avx)中所使用的那些字段类似或相同。此格式与带有扩展的现存x86指令集的前缀编码字段、真操作码字节字段、modr/m字段、sib字段、位移字段,和立即数字段保持一致。来自图15的字段所映射到其中的来自图14的字段被示出。

应被理解的是,尽管本公开的实施例为了说明性目的而参考一般矢量友好指令格式1400的上下文中的特定矢量友好指令格式1500来描述,但除非在声明之处,本公开不限于特定矢量友好指令格式1500。例如,一般矢量友好指令格式1400对于各种字段设想多种可能大小,而特定矢量友好指令格式1500被示出为具有特定大小的字段。通过特定示例的方式,虽然数据元素宽度字段1464被示出为特定矢量友好指令格式1500中的一个比特字段,但本公开不被如此限制(那就是说,一般矢量友好指令格式1400设想数据元素宽度字段1464的其它大小)。

一般矢量友好指令格式1400包括图15a中所示出的以下按顺序列出的以下字段。

evex前缀(字节0-3)1502-以四字节形式来编码。

格式字段1440(evex字节0,比特[7:0])-第一字节(evex字节0)是格式字段1440,并且它含有0x62(被用于识别出本公开的一个实施例中的矢量友好指令格式的唯一值)。

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

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

rex'字段1410—这是rex'字段1410的第一部分并且是被用于编码扩展的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来形成。

操作码映射字段1515(evex字节1,比特[3:0]—mmmm)—它的内容编码所暗示的前导操作码字节(0f,0f38,或0f3)。

数据元素宽度字段1464(evex字节2,比特[7]—w)-由符号evex.w来表示。evex.w被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。

evex.vvvv1520(evex字节2,比特[6:3]-vvvv)-evex.vvvv的角色可包括以下项:1)evex.vvvv编码以倒置(1s补码)的形式所指定的第一源寄存器操作数,并对于带有2个或更多源操作数的指令有效;2)evex.vvvv编码对于某些矢量移位以1s补码形式所指定的目的地寄存器操作数;或者3)evex.vvvv不编码任何操作数,字段被保留并应含有1111b。因此,evex.vvvv字段1520编码以倒置(1s补码)的形式所存储的第一源寄存器指定符(specifier)的4个低顺序比特。取决于指令,额外不同evex比特字段被用于将指定符大小扩展到32个寄存器。

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

前缀编码字段1525(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前缀编码,并因此不要求扩展。

阿尔法字段1452(evex字节3,比特[7]—eh;还已知为evex.eh、evex.rs、evex.rl、evex.写掩码控制、和evex.n;还通过α来示出)—如之前所描述的,此字段是上下文特定的。

贝塔字段1454(evex字节3,比特[6:4]-sss,还已知为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;还通过βββ来示出)—如之前所描述的,此字段是上下文特定的。

rex'字段1410—这是rex'字段的其余部分并且是可被用于编码扩展的32寄存器集合的较上16或较低16的evex.v'比特字段(evex字节3,比特[3]-v')。此比特以比特倒置的格式来存储。1的值被用于编码较低16个寄存器。换句话说,v'vvvv通过组合evex.v'、evex.vvvv来形成。

写掩码字段1470(evex字节3,比特[2:0]-kkk)—它的内容指定如之前所描述的写掩码寄存器中寄存器的索引。在本公开的一个实施例中,特定值evex.kkk=000具有暗示没有写掩码被用于具体指令的特别行为(这可以包括使用硬连线到所有寄存器的写掩码或绕过掩蔽硬件的硬件的多种方式来实现)。

真操作码字段1530(字节4)还已知为操作码字节。操作码的部分在此字段中被指定。

modr/m字段1540(字节5)包括mod字段1542、reg字段1544、和r/m字段1546。如之前所描述的,mod字段1542的内容在存储器访问和非存储器访问操作之间进行识别。reg字段1544的角色能被概括成两种情境:编码目的地寄存器操作数或源寄存器操作数,或作为操作码扩展被对待并不被用于编码任何指令操作数。r/m字段1546的角色可包括以下项:编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。

缩放、索引、基址(sib)字节(字节6)—如之前所描述的,缩放字段1450的内容被用于存储器地址生成。sib.xxx1554和sib.bbb1556—这些字段的内容之前已关于寄存器索引xxxx和bbbb被提到。

位移字段1462a(字节7-10)—在mod字段1542含有10时,字节7-10是位移字段1462a,并且它与遗留32比特位移(disp32)相同地工作并在字节粒度工作。

位移因子字段1462b(字节7)—在mod字段1542含有01时,字节7是位移因子字段1462b。此字段的位置与遗留x86指令集8比特位移(disp8)的位置相同,其在字节粒度工作。由于disp8是扩展的记号,它能仅定址于-128和127字节偏移之间;在64字节高速缓冲存储器行方面,disp8使用能被设置成仅四个真正有用的值-128、-64、0、和64的8比特;由于更大的范围常常被需要,disp32被使用;然而,disp32要求4字节。与disp8和disp32对照,位移因子字段1462b是disp8的重新解译;在使用位移因子字段1462b时,实际位移由乘以存储器操作数访问的大小(n)的位移因子字段的内容来确定。此类型的位移被称为disp8*n。这减少平均指令长度(用于位移但带有大得多的范围的单个字节)。此类压缩的位移基于有效位移是存储器访问的粒度的倍数并且因此地址偏移的冗余低顺序比特不需要被编码的假定。换句话说,位移因子字段1462b替代遗留x86指令集8比特位移。因此,位移因子字段1462b以与x86指令集8比特位移相同的方式来编码(所以在modrm/sib编码规则中没有改变),带有disp8被过载到disp8*n的仅有例外。换句话说,在编码规则或编码长度中不存在改变,仅除了在通过硬件的位移值的解译中之外(其需要通过存储器操作数的大小来缩放位移以获得字节式地址偏移)。

立即数字段1472如之前所描述地操作。

完整操作码字段

图15b是框图,其示出根据本公开的一个实施例的构成完整操作码字段1474的特定矢量友好指令格式1500的字段。具体地,完整操作码字段1474包括格式字段1440、基础操作字段1442、和数据元素宽度(w)字段1464。基础操作字段1442包括前缀编码字段1525、操作码映射字段1515、和真操作码字段1530。

寄存器索引字段

图15c是框图,其示出根据本公开的一个实施例的构成寄存器索引字段1444的特定矢量友好指令格式1500的字段。具体地,寄存器索引字段1444包括rex字段1505、rex'字段1510、modr/m.reg字段1544、modr/m.r/m字段1546、vvvv字段1520、xxx字段1554、和bbb字段1556。

扩增操作字段

图15d是框图,其示出根据本公开的一个实施例的构成扩增操作字段1450的特定矢量友好指令格式1500的字段。在类别(u)字段1468含有0时,它象征evex.u0(类别a1468a);在它含有1时,它象征evex.u1(类别b1468b)。在u=0并且mod字段1542含有11(象征无存储器访问操作)时,阿尔法字段1452(evex字节3,比特[7]—eh)被解译为rs字段1452a。在rs字段1452a含有1(舍入152a.1)时,贝塔字段1454(evex字节3,比特[6:4]-sss)被解译为舍入控制字段1454a。舍入控制字段1454a包括一比特sae字段1456和两比特舍入操作字段1458。在rs字段1452a含有0(数据变换1452a.2)时,贝塔字段1454(evex字节3,比特[6:4]-sss)被解译为三比特数据变换字段1454b。在u=0并且mod字段1542含有00、01、或10(象征存储器访问操作)时,阿尔法字段1452(evex字节3,比特[7]—eh)被解译为驱逐提示(eh)字段1452b并且贝塔字段1454(evex字节3,比特[6:4]-sss)被解译为三比特数据操纵字段1454c。

在u=1时,阿尔法字段1452(evex字节3,比特[7]—eh)被解译为写掩码控制(z)字段1452c。在u=1并且mod字段1542含有11(象征无存储器访问操作)时,贝塔字段1454的部分(evex字节3,比特[4]-s0)被解译为rl字段1457a;在它含有1(舍入1457a.1)时,贝塔字段1454的剩余部分(evex字节3,比特[6-5]-s2-1)被解译为舍入操作字段1459a,而在rl字段1457a含有0(vsize1457.a2)时,贝塔字段1454的剩余部分(evex字节3,比特[6-5]-s2-1)被解译为矢量长度字段1459b(evex字节3,比特[6-5]-l1-0)。在u=1并且mod字段1542含有00、01、或10(象征存储器访问操作)时,贝塔字段1454(evex字节3,比特[6:4]-sss)被解译为矢量长度字段1459b(evex字节3,比特[6-5]-l1-0)和广播字段1457b(evex字节3,比特[4]-b)。

示范性寄存器架构

图16是根据本公开的一个实施例的寄存器架构1600的框图。在所示出的实施例中,存在512比特宽的32个矢量寄存器1610;这些寄存器被引用为zmm0直到zmm31。较低的16个zmm寄存器的较低顺序256比特被覆载在寄存器ymm0-16上。较低的16个zmm寄存器的较低顺序128比特(ymm寄存器的较低顺序128比特)被覆载在寄存器xmm0-15上。特定矢量友好指令格式1500在如以下表中所示出的这些覆载寄存器堆上操作。

换句话说,矢量长度字段1459b在最大长度和一个或多个其它更短长度之间选择,其中每个此类更短长度是前述长度的一半长度;并且不带有矢量长度字段1459b的指令模板在最大矢量长度上操作。进一步地,在一个实施例中,特定矢量友好指令格式1500的类别b指令模板在打包的或标量的单/双精度浮点数据和打包的或标量的整数数据上操作。标量的操作是在zmm/ymm/xmm寄存器中最低顺序数据元素位置上执行的操作;更高顺序数据元素位置取决于实施例保持与它们在该指令之前一样或被归零。

写掩码寄存器1615-在所示出的实施例中,存在8个写掩码寄存器(k0直到k7),每个的大小是64比特。在备选实施例中,写掩码寄存器1615的大小是16比特。如之前所描述的,在本公开的一个实施例中,矢量掩码寄存器k0不能作为写掩码被使用;在将通常指示k0的编码被用于写掩码时,它选择0xffff的硬连线写掩码,对于那个指令有效地禁用写掩蔽。

通用寄存器1625-在所示出的实施例中,存在连同现存x86寻址模式被用于寻址存储器操作数的十六个64-比特通用寄存器。这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp、和r8直到r15来引用。

标量浮点栈寄存器堆(x87栈)1645,在其上mmx打包整数平寄存器堆1650被别名化-在所示出的实施例中,x87栈是用于使用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素栈;而mmx寄存器被用于在64-比特打包整数数据上执行操作,还被用于为在mmx和xmm寄存器之间所执行的一些操作来保存操作数。

本公开的备选实施例可使用更宽或更窄的寄存器。另外,本公开的备选实施例可使用更多、更少、或不同寄存器堆和寄存器。

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

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

示范性核架构

有序与乱序核框图

图17a是框图,其示出根据本公开的实施例的示范性有序管线和示范性寄存器重命名、乱序发布/运行管线两者。图17b是框图,其示出根据本公开的实施例的要被包括在处理器中的有序架构核的示范性实施例和示范性寄存器重命名、乱序发布/运行架构核两者。图17a-b中的实线框示出有序管线和有序核,而虚线框的可选附加示出寄存器重命名、乱序发布/运行管线和核。给定有序方面是乱序方面的子集,乱序方面将被描述。

在图17a中,处理器管线1700包括取阶段1702、长度解码阶段1704、解码阶段1706、分配阶段1708、重命名阶段1710、调度(还已知为分派或发布)阶段1712、寄存器读/存储器读阶段1714、运行阶段1716、写回/存储器写阶段1718、异常处置阶段1722、和提交阶段1724。

图17b示出处理器核1790,其包括耦合到运行引擎单元1750的前端单元1730,并且两者被耦合到存储器单元1770。核1790可以是简化指令集计算(risc)核、复杂指令集计算(cisc)核、非常长指令字(vliw)核、或混合或备选核类型。如仍有的另一个选项,核1790可以是专用核,诸如例如网络或通信核、压缩引擎、协同处理器核、通用计算图形处理单元(gpgpu)核、图形核等等。

前端单元1730包括耦合到指令高速缓冲存储器单元1734的分支预测单元1732,所述指令高速缓冲存储器单元1734被耦合到指令翻译旁视(lookaside)缓冲器(tlb)1736,其被耦合到指令取单元1738,指令取单元1738被耦合到解码单元1740。解码单元1740(或解码器)可解码指令,并生成为输出一个或多个微操作、微代码条目点、微指令、其它指令、或其它控制信号,其被解码自、或其以其它方式反映、或被推导自原始指令。使用各种不同机制,解码单元1740可被实现。适合的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)、等等。在一个实施例中,核1790包括存储用于某些宏指令的微代码的微代码rom或另一介质(例如,在解码单元1740中或以别的方式在前端单元1730内)。解码单元1740被耦合到运行引擎单元1750中的重命名/分配器单元1752。

运行引擎单元1750包括耦合到引退单元1754和一个或多个调度器单元1756的集合的重命名/分配器单元1752。调度器单元1756代表任何数量的不同调度器,包括保留站、中央指令窗口、等等。调度器单元1756被耦合到物理寄存器堆单元1758。物理寄存器堆单元1758中的每个代表一个或多个物理寄存器堆,其不同物理寄存器堆存储一个或多个不同数据类型,诸如标量整数、标量浮点、打包的整数、打包的浮点、矢量整数、矢量浮点、状态(例如,是要被运行的下一个指令的地址的指令指针)、等等。在一个实施例中,物理寄存器堆单元1758包括矢量寄存器单元、写掩码寄存器单元、和标量寄存器单元。这些寄存器单元可提供架构上的矢量寄存器、矢量掩码寄存器、和通用寄存器。物理寄存器堆单元1758通过引退单元1754来重叠以示出其中寄存器重命名和乱序运行可被实现的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用未来堆、历史缓冲器、和引退寄存器堆;使用寄存器映射和寄存器的池;等等)。引退单元1754和物理寄存器堆单元1758被耦合到运行集群1760。运行集群1760包括一个或多个运行单元1762的集合和一个或多个存储器访问单元1764的集合。运行单元1762可执行各种操作(例如,移位、加法、减法、乘法)以及在各种类型的数据(例如,标量浮点、打包的整数、打包的浮点、矢量整数、矢量浮点)上执行。虽然一些实施例可包括专用于特定功能或功能的集合的多个运行单元,其它实施例可包括都执行所有功能的多个运行单元或仅一个运行单元。调度器单元1756、物理寄存器堆单元1758、和运行集群1760被示出为可能是复数的,因为某些实施例对于某些类型的数据/操作来创建单独管线(例如,标量整数管线、标量浮点/打包的整数/打包的浮点/矢量整数/矢量浮点管线、和/或存储器访问管线,其各自具有它们自己的调度器单元、物理寄存器堆单元、和/或运行集群—并且在单独的存储器访问管线的情况中,其中此管线的仅运行集群具有存储器访问单元1764的某些实施例被实现)。还应被理解的是,在单独管线被使用之处,这些管线的一个或多个管线可以是乱序发布/运行,并且剩余的是有序。

存储器访问单元1764的集合被耦合到存储器单元1770,存储器单元1770包括耦合到数据高速缓冲存储器单元1774的数据tlb单元1772,数据高速缓冲存储器单元1774耦合到等级2(l2)高速缓冲存储器单元1776。在一个示范性实施例中,存储器访问单元1764可包括加载单元、存储地址单元、和存储数据单元,其的每个被耦合到存储器单元1770中的数据tlb单元1772。指令高速缓冲存储器单元1734被进一步耦合到存储器单元1770中的等级2(l2)高速缓冲存储器单元1776。l2高速缓冲存储器单元1776被耦合到一个或多个其它等级的高速缓冲存储器并最终到主存储器。

通过示例的方式,示范性寄存器重命名、乱序发布/运行核架构可实现如下管线1700:1)指令取1738执行取及长度解码阶段1702和1704;2)解码单元1740执行解码阶段1706;3)重命名/分配器单元1752执行分配阶段1708和重命名阶段1710;4)调度器单元1756执行调度阶段1712;5)物理寄存器堆单元1758和存储器单元1770执行寄存器读/存储器读阶段1714;运行集群1760执行运行阶段1716;6)存储器单元1770和物理寄存器堆单元1758执行写回/存储器写阶段1718;7)各种单元可在异常处置阶段1722中被涉及;以及8)引退单元1754和物理寄存器堆单元1758执行提交阶段1724。

核1790可支持一个或多个指令集(例如,x86指令集(带有已随较新版本被添加的一些扩展);mipstechnologiesofsunnyvale,ca的mips指令集;armholdingsofsunnyvale,ca的arm指令集(带有诸如neon的可选附加扩展)),包括本文中所描述的指令。在一个实施例中,核1790包括用于支持打包数据指令集扩展(例如,avx1、avx2)的逻辑,因此允许由许多多媒体应用来使用的操作使用打包的数据来执行。

应被理解的是,核可支持多线程(运行操作或线程的两个或更多并行集合),并可以多种方式来如此做,所述多种方式包括时间分段的多线程、同时多线程(在单个物理核为线程的每个提供逻辑核的情况中,那个物理核正进行同时多线程),或其组合(例如,诸如在intel®超线程技术中的时间分段的取和解码以及其后的同时多线程)。

虽然寄存器重命名在乱序运行的上下文中被描述,但应理解的是,寄存器重命名可被用在有序架构中。虽然处理器的所示出实施例还包括单独的指令和数据高速缓冲存储器单元1734/1774以及共享的l2高速缓冲存储器单元1776,但备选实施例可具有用于指令和数据两者的单个内部高速缓冲存储器,诸如例如,等级1(l1)内部高速缓冲存储器、或多个等级的内部高速缓冲存储器。在一些实施例中,系统可包括内部高速缓冲存储器及外部于核和/或处理器的外部高速缓冲存储器的组合。备选地,所有高速缓冲存储器可外部于核和/或处理器。

特定示范性有序核架构

图18a-b示出核将是芯片中若干逻辑块之一(包括相同类型和/或不同类型的其它核)的更特定示范性有序核架构的框图。逻辑块通过高带宽互连网络(例如,环网络)取决于应用而通信于一些固定的功能逻辑、存储器i/o接口、和另一必要i/o逻辑。

图18a是根据本公开的实施例的单个处理器核连同到管芯上互连网络1802的它的连接并连同等级2(l2)高速缓冲存储器1804的它的本地子集的框图。在一个实施例中,指令解码器1800支持带有打包的数据指令集扩展的x86指令集。l1高速缓冲存储器1806允许低等待时间访问以将存储器高速缓冲存储器到标量和矢量单元中。虽然在一个实施例中(为简化设计),标量单元1808和矢量单元1810使用单独的寄存器集合(相应地,是标量寄存器1812和矢量寄存器1814),并且在它们之间所转移的数据被写到存储器并然后从等级1(l1)高速缓冲存储器1806读回,但本公开的备选实施例可使用不同手段(例如,使用单个寄存器集合或包括允许数据在所述两个寄存器堆之间被转移而不被写和读回的通信路径)。

l2高速缓冲存储器1804的本地子集是全局l2高速缓冲存储器的部分,所述全局l2高速缓冲存储器被划分成单独的本地子集,每处理器核一个。每个处理器核具有到l2高速缓冲存储器1804的它自己的本地子集的直接访问路径。由处理器核所读的数据被存储在其l2高速缓冲存储器子集1804中并能被快速地访问,并行于其它处理器核访问它们自己的本地l2高速缓冲存储器子集。由处理器核所写的数据被存储在其自己的l2高速缓冲存储器子集1804中并且如果必要则从其它子集中被冲刷。环网络确保共享的数据的一致性。环网络是双向的以允许诸如处理器核、l2高速缓冲存储器、和其它逻辑块的代理在芯片内互相通信。每个环数据-路径每方向是1012-比特宽。

图18b是根据本公开的实施例的图18a中的处理器核的部分的扩展的视图。图18b包括l1高速缓冲存储器1804的l1数据高速缓冲存储器1806a部分,以及关于矢量单元1810和矢量寄存器1814的更多细节。具体地,矢量单元1810是16宽矢量处理单元(vpu)(见16宽alu1828),其运行整数、单精度浮动、和双精度浮动指令的一个或多个。vpu支持在存储器输入上通过打乱单元1820来打乱寄存器输入、通过数值转换单元1822a-b来进行数值转换、以及通过复制单元1824来进行复制。写掩码寄存器1826允许预测结果的矢量写。

带有集成的存储器控制器和图形的处理器

图19是根据本公开的实施例的可具有多于一个核、可具有集成存储器控制器、并可具有集成图形的处理器1900的框图。图19中的实线框示出带有单个核1902a、系统代理1910、一个或多个总线控制器单元1916的集合的处理器1900,而虚线框的可选附加示出带有多个核1902a-n、系统代理单元1910中的一个或多个集成存储器控制器单元1914的集合、和专用逻辑1908的备选处理器1900。

因此,处理器1900的不同实现可包括:1)cpu,带有是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核)的专用逻辑1908、以及是一个或多个通用核(例如,通用有序核、通用乱序核、所述两个核的组合)的核1902a-n;2)带有是打算主要用于图形和/或科学(吞吐量)的大量的专用核的核1902a-n的协同处理器;以及3)带有是大量的通用有序核的核1902a-n的协同处理器。因此,处理器1900可以是通用处理器、协同处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量许多集成核(mic)协同处理器(包括30或更多核)、嵌入式处理器等等。处理器可被实现在一个或多个芯片上。使用多个处理技术的任何个(诸如例如,bicmos、cmos、或nmos),处理器1900可被实现在一个或多个衬底上和/或是其部分。

存储器层级包括核内高速缓冲存储器的一个或多个等级、共享的高速缓冲存储器单元1906的集合或一个或多个、和耦合到集成存储器控制器单元1914的集合的外部存储器(未示出)。共享的高速缓冲存储器单元1906的集合可包括一个或多个中等级高速缓冲存储器,诸如等级2(l2)、等级3(l3)、等级4(l4)、或其它等级的高速缓冲存储器、最后等级高速缓冲存储器(llc)、和/或其组合。虽然在一个实施例中,基于环的互连单元1912将集成图形逻辑1908、共享的高速缓冲存储器单元1906的集合、以及系统代理单元1910/集成存储器控制器单元1914互连,但备选实施例可使用用于互连此类单元的任何数量的公知技术。在一个实施例中,一个或多个高速缓冲存储器单元1906和核1902-a-n之间的一致性被维持。

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

核1902a-n可关于架构指令集是同质或异质的;那就是说,核1902a-n的两个或更多核可有运行相同指令集的能力,而其它的核可有运行不同指令集或那个指令集的仅子集的能力。

示范性计算机架构

图20-23是示范性计算机架构的框图。在对于膝上型计算机、桌上型计算机、手持型pc、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置、以及各种其它电子装置的领域中已知的其它系统设计和配置也是适合的。一般来说,能够合并如本文中所公开的处理器和/或其它运行逻辑的极多种的系统或电子装置一般是适合的。

现在参考图20,所示出的是根据本公开的一个实施例的系统2000的框图。系统2000可包括被耦合到控制器集线器2020的一个或多个处理器2010、2015。在一个实施例中,控制器集线器2020包括图形存储器控制器集线器(gmch)2090和输入/输出集线器(ioh)2050(其可在单独的芯片上);gmch2090包括存储器2040和协同处理器2045被耦合到的存储器和图形控制器;ioh2050将输入/输出(i/o)装置2060耦合到gmch2090。备选地,存储器和图形控制器之一或两者被集成在处理器(如本文中所描述的)内,存储器2040和协同处理器2045被直接耦合到处理器2010、和带有ioh2050的单个芯片中的控制器集线器2020。

附加处理器2015的可选性质在图20中用断线来指代。每个处理器2010、2015可包括本文中所描述的处理核中的一个或多个,并可以是处理器1900的某版本。

存储器2040可以是例如动态随机存取存储器(dram)、相变存储器(pcm)、或所述两个存储器的组合。对于至少一个实施例,控制器集线器2020经由诸如前侧总线(fsb)的多点总线、诸如快速路径互连(qpi)的点对点接口、或类似连接2095来与处理器2010、2015通信。

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

物理资源2010、2015之间关于包括架构上、微架构上、热、功率耗用特性、和诸如此类的指标的规格的谱能存在多种不同。

在一个实施例中,处理器2010运行控制一般类型的数据处理操作的指令。指令内所嵌入的可以是协同处理器指令。处理器2010将这些协同处理器指令辨认为是应由附连的协同处理器2045来运行的类型。因此,处理器2010在协同处理器总线或其它互连上将这些协同处理器指令(或代表协同处理器指令的控制信号)发布到协同处理器2045。协同处理器2045接受并运行所接收的协同处理器指令。

现在参考图21,所示出的是根据本公开的一实施例的第一更特定示范性系统2100的框图。如图21中所示出的,多处理器系统2100是点对点互连系统,并包括经由点对点互连2150所耦合的第一处理器2170和第二处理器2180。处理器2170和2180中的每个可以是处理器1900的某版本。在本公开的一个实施例中,处理器2170和2180相应是处理器2010和2015,而协同处理器2138是协同处理器2045。在另一个实施例中,处理器2170和2180相应是处理器2010、协同处理器2045。

处理器2170和2180被示出相应包括集成存储器控制器(imc)单元2172和2182。处理器2170还包括作为它的总线控制器单元的部分的点对点(p-p)接口2176和2178;类似地,第二处理器2180包括p-p接口2186和2188。使用p-p接口电路2178、2188,处理器2170、2180可经由点对点(p-p)接口2150来互换信息。如图21中所示出的,imc2172和2182将处理器耦合到相应存储器(就是存储器2132和存储器2134),其可以是本地附连到相应处理器的主存储器的部分。

使用点对点接口电路2176、2194、2186、2198,处理器2170、2180可各自经由各个p-p接口2152、2154与芯片集2190互换信息。芯片集2190可以可选地经由高性能接口2139与协同处理器2138互换信息。在一个实施例中,协同处理器2138是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等

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

芯片集2190可经由接口2196来耦合到第一总线2116。在一个实施例中,第一总线2116可以是外围组件互连(pci)总线、或诸如pci高速总线或另一个第三代i/o互连总线的总线,尽管本公开的范畴未被如此限制。

如图21中所示出的,各种i/o装置2114可连同总线桥2118被耦合到第一总线2116,总线桥2118将第一总线2116耦合到第二总线2120。在一个实施例中,诸如协同处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列、或任何其它处理器的一个或多个附加处理器2115被耦合到第一总线2116。在一个实施例中,第二总线2120可以是低管脚计数(lpc)总线。各种装置可被耦合到第二总线2120,包括例如键盘和/或鼠标2122、通信装置2127和诸如硬盘驱动器或其它大容量存储装置的存储单元2128,其可包括指令/代码和数据2130(在一个实施例中)。进一步地,音频i/o2124可被耦合到第二总线2120。注意,其它架构是可能的。例如,替代图21的点对点架构,系统可实现多点总线或另一此类架构。

现在参考图22,所示出的是根据本公开的一实施例的第二更特定示范性系统2200的框图。图21和22中的相似元件标有相似附图标记,并且图21的某些方面已从图22中被省略以便避免使图22的其它方面难以理解。

图22示出了处理器2170、2180可相应包括集成存储器以及i/o控制逻辑(“cl”)2172和2182。因此,cl2172、2182包括集成存储器控制器单元并包括i/o控制逻辑。图22示出了不仅存储器2132、2134被耦合到cl2172、2182,而且i/o装置2214也被耦合到控制逻辑2172、2182。遗留i/o装置2215被耦合到芯片集2190。

现在参考图23,所示出的是根据本公开的实施例的soc2300的框图。图19中的类似元件标有相似附图标记。同样,虚线框在更高级的soc上是可选特征。在图23中,互连单元2302被耦合到:应用处理器2310,其包括一个或多个核202a-n的集合和共享的高速缓冲存储器单元1906;系统代理单元1910;总线控制器单元1916;集成存储器控制器单元1914;协同处理器2320的集合或一个或多个,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(sram)单元2330;直接存储器访问(dma)单元2332;以及用于耦合到一个或多个外部显示器的显示器单元2340。在一个实施例中,协同处理器2320包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等等。

本文中所公开的机制的实施例可被实现在硬件、软件、固件、或此类实现手段的组合中。本公开的实施例可被实现为在可编程系统上运行的程序代码或计算机程序,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置、和至少一个输出装置。

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

程序代码可被实现在高等级规程上(procedural)或面向对象的编程语言中以与处理系统通信。如果期望的话,则程序代码可还被实现在汇编或机器语言中。事实上,本文中所描述的机制不限于对任何具体编程语言的范畴中。在任何情况中,语言可以是编译或解译的语言。

至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其当由机器来读时促使该机器制作用于执行本文中所描述的技术的逻辑。此类表示(已知为“ip核”)可被存储在有形的、机器可读介质上并被供应给各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器。

此类机器可读存储介质可包括由机器或装置所制造或形成的物品(article)的非暂态、有形的布置而没有限制,包括存储介质(诸如硬盘、包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)、和磁光盘的任何其它类型的盘)、半导体装置(诸如只读存储器(rom),诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)的随机存取存储器(ram),可擦除可编程只读存储器(eprom)、闪速存储器、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm)、磁或光卡、或适合于存储电子指令的任何其它类型的介质)。

因此,本公开的实施例还包括非暂态、有形的机器可读介质,所述介质含有指令或含有设计数据,诸如硬件描述语言(hdl),其定义本文中所描述的结构、电路、设备、处理器和/或系统特征。此类实施例可还被称为程序产品。

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

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

图24是框图,其对照根据本公开的实施例的使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令。在所示出的实施例中,指令转换器是软件指令转换器,尽管备选地指令转换器可被实现在软件、固件、硬件、或其各种组合中。图24示出使用x86编译器2404,用高等级语言2402的程序可被编译以生成x86二进制代码2406,其可由带有至少一个x86指令集核的处理器2416来原生运行。带有至少一个x86指令集核的处理器2416表示能如带有至少一个x86指令集核的intel处理器一样大体上执行相同功能的任何处理器,这通过兼容地运行或以其它方式处理(1)intelx86指令集核的指令集的实质部分,或(2)针对于在带有至少一个x86指令集核的intel处理器上运行的应用或另一软件的对象(object)代码版本,以便取得大体上与带有至少一个x86指令集核的intel处理器相同的结果。x86编译器2404表示可操作以生成x86二进制代码2406(例如,对象代码)的编译器,x86二进制代码2406能通过或不通过附加联接处理而在带有至少一个x86指令集核的处理器2416上被运行。类似地,图24示出了使用备选指令集编译器2408,用高等级语言2402的程序可被编译以生成备选指令集二进制代码2410,其可由不带有至少一个x86指令集核的处理器2414(例如,带有运行mipstechnologiesofsunnyvale,ca的mips指令集和/或运行armholdingsofsunnyvale,ca的arm指令集的核的处理器)来原生运行。指令转换器2412被用于将x86二进制代码2406转换成可由不带有x86指令集核的处理器2414来原生运行的代码。此被转换的代码不可能与备选指令集二进制代码2410相同,因为能够这样做的指令转换器难以做出;然而,被转换的代码将完成一般操作并由来自备选指令集的指令构成。因此,指令转换器2412表示软件、固件、硬件、或其组合,其通过仿真、模拟或任何其它过程而允许不具有x86指令集处理器或核的处理器或另一电子装置运行x86二进制代码2406。

针对图1和5-7中的任何图所描述的组件、特征和细节还可以可选地适用于图3-4中的任何图。针对图1和9-10中的任何图所描述的组件、特征和细节还可以可选地适用于图8。针对本文公开的处理器(例如处理器410、810)所描述的组件、特征和细节可以可选地适用于本文公开的方法,其在实施例中可以可选地由这样的处理器和/或利用这样的处理器执行。本文所述的处理器(例如处理器410、810)在一些实施例中可以可选地被包括在本文公开的系统(例如图20-23的任何那些)中。在一些实施例中,本文公开的处理器(例如处理器410、810)可以可选地具有本文所示的微架构特征/组件(例如图17b和/或18a-b中的一个或多个特征/组件)。在一些实施例中,本文公开的指令可以可选地,在一些实施例中,可选地具有本文所示的指令格式的任何特征或细节(例如图13-15的那些)。

本公开还公开了一组技术方案如下:

1.一种处理器,包括:

多个打包数据寄存器;

解码单元,用于解码指令,所述指令用于指示源操作数、用于指示跨距、用于指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及用于指示所述多个打包数据寄存器的至少一个目的地打包数据寄存器;以及

运行单元,与所述多个打包数据寄存器耦合,并且与所述解码单元耦合,所述运行单元响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述多个打包数据寄存器的对应的目的地打包数据寄存器中,每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的对应的所指示的集合,其中所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

2.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令能够仅指示跨距数据元素位置的所述所有集合的子集。

3.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令能够指示跨距数据元素位置的所述所有集合的不同子集。

4.如技术方案1所述的处理器,其中,所述运行单元响应于所述指令要存储比跨距数据元素位置的所述所有集合更少的结果打包数据操作数。

5.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示对于跨距数据元素位置的所指示的至少一个集合中的每个的对应值,以及其中,每个值将会指示跨距数据元素位置的对应集合。

6.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示对应值,所述对应值是对于跨距数据元素位置的所指示的至少一个集合中的每个的偏移和索引中的一个。

7.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示掩码,所述掩码要具有对于跨距数据元素位置的所述所有集合中的每个的不同对应部分,以及其中,所述掩码的每个不同部分要具有第一值和第二值中的一个,所述第一值用于将跨距数据元素位置的所述对应集合包括在跨距数据元素位置的所述至少一个集合中,以及所述第二值用于不将跨距数据元素位置的所述对应集合包括在跨距数据元素位置的所述至少一个集合中。

8.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示位掩码,所述位掩码要指示跨距数据元素位置的所述至少一个集合。

9.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示所述跨距,所述跨距能够包含至少五个数据元素位置。

10.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令能够指示不同跨距以及所述指令要通过以下之一来指示所述跨距:

所述指令的立即数的值;以及

要被存储在要由所述指令指示的寄存器中的值。

11.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示至少一个打包数据操作掩码。

12.如技术方案11所述的处理器,其中,所述运行单元要响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来存储所述对应的结果打包数据操作数,其中每个结果打包数据操作数要包括所述多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合的未掩蔽数据元素位置,所述未掩蔽数据元素位置将会对应于所述至少一个打包数据操作掩码的未掩蔽的掩码元素。

13.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示对于所述结果打包数据操作数中的每个的不同对应打包数据操作掩码。

14.如技术方案13所述的处理器,其中,所述运行单元要响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来存储所述对应的结果打包数据操作数,其中每个结果打包数据操作数要包括所述多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合的未掩蔽数据元素位置,所述未掩蔽数据元素位置要对应于所述对应打包数据操作掩码的未掩蔽的掩码元素。

15.如技术方案13所述的处理器,其中,所述解码单元要解码所述指令,所述指令要显式地指定给定的打包数据操作掩码,以及其中,在对于一个或多个对应的所述结果打包数据操作数的所述给定的打包数据操作掩码后使用一个或多个连续打包数据操作掩码将会是隐式的。

16.如技术方案1所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示要在存储器中的所述源操作数,以及其中,所述运行单元响应于所述指令针对对应于掩蔽出的掩码元素的跨距数据元素位置的所指示的至少一个集合的数据元素位置,将不会引起存储器访问故障,以及将不会引起页故障。

17.一种由处理器执行的方法,包括:

接收指令,所述指令指示源操作数、指示跨距、指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及指示所述处理器的至少一个目的地打包数据寄存器;以及

响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述处理器的对应目的地打包数据寄存器中,每个结果打包数据操作数包括多个数据元素,所述多个数据元素来自所述源操作数的跨距数据元素位置的对应的所指示的集合,其中所述集合的跨距数据元素位置彼此分开整数倍的所指示的跨距。

18.如技术方案17所述的方法,其中,所述接收包括接收所述指令,所述指令仅指示跨距数据元素位置的所述所有集合的子集。

19.如技术方案17所述的方法,其中,所述接收包括接收所述指令,所述指令指示所述跨距,所述跨距包含至少五个数据元素位置,以及其中,要通过以下之一来指示所述跨距:

所述指令的立即数的值;以及

被存储在由所述指令指示的寄存器中的值。

20.如技术方案17所述的方法,其中,所述接收包括接收所述指令,所述指令指示至少一个打包数据操作掩码。

21.如技术方案17所述的方法,其中,所述接收包括接收所述指令,所述指令指示对于每个结果打包数据操作数的不同对应打包数据操作掩码。

22.一种用于处理指令的系统,包括:

互连;

与所述互连耦合的动态随机存取存储器(dram);

与所述互连耦合的处理器,所述处理器用于接收指令,所述指令要指示源操作数、用于指示跨距、用于指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及用于指示所述多个打包数据寄存器的至少一个目的地打包数据寄存器;所述处理器响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述多个打包数据寄存器的对应的目的地打包数据寄存器中,每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应指示的集合,其中所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

23.如技术方案22所述的系统,其中,所述指令能够仅指示跨距数据元素位置的所述所有集合的子集,以及其中,所述指令要指示至少一个打包数据操作掩码。

24.一种包括非暂态机器可读存储介质的制品,所述非暂态机器可读存储介质存储多个指令,所述多个指令包括第一指令,所述第一指令如果由机器运行则促使所述机器执行操作,所述操作包括:

访问将由所述第一指令指示的源操作数;以及

针对出自于要由所述第一指令指示的跨距数据元素位置的所有集合中的跨距数据元素位置中的至少一个集合的每个,针对要由所述第一指令指示的跨距,来将对应的结果打包数据操作数存储在对应的目的地打包数据寄存器中,每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的集合,所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

25.如技术方案24所述的制品,其中,所述非暂态机器可读存储介质包括以下之一:动态随机存取存储器(dram)、闪速存储器、相变存储器、光盘、和磁盘,以及所述第一指令要指示至少一个打包数据操作掩码。

本文公开的处理器组件可被宣称和/或要求执行操作,或可操作成、可操作以、能够、能、配置成、适配成、或以其它方式执行操作。例如,解码单元可被宣称和/或要求解码指令,运行单元可被宣称和/或要求存储结果等等。如本文中使用的,这些表示涉及当在断电状态时的组件的特性、性质或属性,并且不暗示组件或其中包括所述组件的装置或设备当前是通电的或正在操作。为了清楚起见,将要理解的是,本文要求的处理器和设备未被要求是通电的或正在操作。

在描述和权利要求中,术语“耦合”和/或“连接”连同它们的衍生可已经被使用。这些术语并不被意指为彼此的同义词。相反,在实施例中,“连接”可被用于指示两个或更多元件彼此直接物理和/或电接触。“耦合”可意味两个或更多元件彼此直接物理和/或电接触。然而,“耦合”还可意味两个或更多元件不彼此直接接触,但仍彼此合作或相互作用。例如,运行单元可通过一个或多个中间组件来与寄存器和/或解码单元耦合。在附图中,箭头被用于示出连接和耦合。

术语“和/或”可已经被使用。如本文中使用的,术语“和/或”意味一个或另一个或两者(例如a和/或b意味a或b或a和b两者)。

在上文描述中,已经陈述了特定细节以便提供实施例的全面理解。然而,可在没有这些特定细节中的某些的情况下实践其它实施例。本公开的范畴将不由上文提供的特定示例来确定,但仅由下文权利要求来确定。在其它实例中,众所周知的电路、结构、装置和操作采用框图形式和/或在没有细节的情况下已经被示出,以便避免使本描述的理解模糊。在适当考虑处,附图标记或附图标记的终端部分已经在附图之中重复以指示对应的或类似的元件,其可以可选地具有相似或相同的特性,除非以其它方式被指定或是清楚明显的。

某些操作可由硬件组件执行,或在机器可运行或电路可运行的指令中来实施,该机器可运行或电路可运行的指令可被用于促使和/或引起利用指令来编程的机器、电路或硬件组件(例如处理器、处理器的部分、电路等)执行操作。操作还可以可选地由硬件和软件的组合来执行。处理器、机器、电路或硬件可包括特定或具体电路或其它逻辑(例如潜在地与固件和/或软件组合的硬件),其可操作以运行和/或处理指令并且响应于指令来存储结果。

一些实施例包括制品(例如计算机程序产品),其包括机器可读介质。介质可包括以由机器可读的形式提供(例如存储)信息的机制。机器可读介质可提供(或已在其上存储)指令或指令的序列,其如果和/或当由机器运行时可操作以促使机器执行和/或引起机器执行本文公开的一个或多个操作、方法或技术。

在一些实施例中,机器可读介质可包括有形和/或非暂态机器可读存储介质。例如,非暂态机器可读存储介质可包括软盘、光存储介质、光盘、光数据存储装置、cd-rom、磁盘、磁光盘、只读存储器(rom)、可编程rom(prom)、可擦除和可编程rom(eprom)、电可擦除和可编程rom(eeprom)、随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、闪速存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储装置、非暂态存储器、非暂态数据存储装置等等。非暂态机器可读存储介质不由暂态传播的信号组成。在一些实施例中,存储介质可包括有形介质,其包括固态物质或材料,诸如例如半导体材料、相变材料、磁固体材料、固体数据存储材料等。

合适的机器的示例包括但不限于通用处理器、专用处理器、数字逻辑电路、集成电路等等。合适的机器的另外其它示例包括计算机系统或其它电子装置,其包括处理器、数字逻辑电路或集成电路。这样的计算机系统或电子装置的示例包括但不限于桌上型计算机、膝上型计算机、笔记本计算机、平板式计算机、上网本、智能电话、蜂窝电话、服务器、网络装置(例如路由器和交换机)、移动互联网装置(mid)、媒体播放器、智能电视、桌面一体机(nettops)、机顶盒和视频游戏控制器。

遍及本说明书提到的例如“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”,指示具体特征可被包括在本公开的实践中,但不是必然要求的。类似地,在描述中,各种特征有时被集合在单个实施例、附图或其描述中,以用于简化本公开并帮助理解各种发明的方面的目的。然而,公开的此方法不被解释为反映本公开要求比在每个权利要求中清楚叙述的更多的特征的意图。相反,如下文权利要求所反映,发明的方面在于少于单个公开的实施例的所有特征。因此,在详细描述之后的权利要求由此清楚地合并到该详细描述中,其中每个权利要求独立作为本公开的单独实施例。

示例实施例

以下示例关于另外实施例。示例中的特定性可被用于一个或多个实施例中的任何地方。

示例1是一种处理器,包括多个打包数据寄存器以及用于解码指令的解码单元。所述指令用于指示源操作数、用于指示跨距、用于指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及用于指示所述多个打包数据寄存器的至少一个目的地打包数据寄存器。所述处理器还包括运行单元,其与所述多个打包数据寄存器耦合,并且与所述解码单元耦合。所述运行单元响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述多个打包数据寄存器的对应的目的地打包数据寄存器中。每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的对应的所指示的集合。所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

示例2包括示例1所述的处理器,其中所述解码单元要解码所述指令,所述指令能够仅指示跨距数据元素位置的所述所有集合的子集。

示例3包括示例1到2中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令能够指示跨距数据元素位置的所述所有集合的不同子集。

示例4包括示例1到3中任一项所述的处理器,其中所述运行单元响应于所述指令要存储比跨距数据元素位置的所述所有集合更少的结果打包数据操作数。

示例5包括示例1到4中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示对于跨距数据元素位置的所指示的至少一个集合中的每个的对应值,以及可选地其中每个值将会指示跨距数据元素位置的所述对应集合。

示例6包括示例1到5中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示对应值,所述对应值是对于跨距数据元素位置的所指示的至少一个集合中的每个的偏移和索引中的一个。

示例7包括示例1到4中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示掩码,所述掩码要具有对于跨距数据元素位置的所述所有集合中的每个的不同对应部分,以及可选地其中所述掩码的每个不同部分要具有第一值和第二值中的一个,所述第一值用于将跨距数据元素位置的所述对应集合包括在跨距数据元素位置的所述至少一个集合中,以及所述第二值用于不将跨距数据元素位置的所述对应集合包括在跨距数据元素位置的所述至少一个集合中。

示例8包括示例1到4和7中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示掩码,所述掩码要指示跨距数据元素位置的所述至少一个集合。

示例9包括示例1到8中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示所述跨距,所述跨距能够包含至少五个数据元素位置。

示例10包括示例1到9中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令能够指示不同跨距以及所述指令可选地要通过以下之一来指示所述跨距:

所述指令的立即数的值;以及

要被存储在要由所述指令指示的寄存器中的值。

示例11包括示例1到10中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示至少一个打包数据操作掩码。

示例12包括示例11所述的处理器,其中所述运行单元要响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来存储所述对应的结果打包数据操作数,其中每个结果打包数据操作数要包括所述多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合的未掩蔽数据元素位置,所述未掩蔽数据元素位置将会对应于所述至少一个打包数据操作掩码的未掩蔽的掩码元素。

示例13包括示例1到10中任一项所述的处理器,其中所述解码单元要解码所述指令,所述指令要指示对于所述结果打包数据操作数中的每个的不同对应打包数据操作掩码。

示例14包括示例13所述的处理器,其中所述运行单元要响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来存储所述对应的结果打包数据操作数,其中每个结果打包数据操作数要包括所述多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合的未掩蔽数据元素位置,所述未掩蔽数据元素位置要对应于所述对应打包数据操作掩码的未掩蔽的掩码元素。

示例15包括示例13到14中任一项所述的处理器,其中,所述解码单元要解码所述指令,所述指令要显式地指定给定的打包数据操作掩码,以及可选地其中,在对于一个或多个对应的所述结果打包数据操作数的所述给定的打包数据操作掩码后使用一个或多个连续打包数据操作掩码将会是隐式的。

示例16包括示例1到15中任一项所述的处理器,其中,所述解码单元要解码所述指令,所述指令要指示要在存储器中的所述源操作数,以及可选地其中,所述运行单元响应于所述指令针对对应于掩蔽出的掩码元素的跨距数据元素位置的所指示的至少一个集合的数据元素位置,将不会引起存储器访问故障,以及将不会引起页故障。

示例17是一种由处理器执行的方法,包括:接收指令,所述指令指示源操作数、指示跨距、指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及指示所述处理器的至少一个目的地打包数据寄存器。所述方法还包括响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述处理器的对应目的地打包数据寄存器中。每个结果打包数据操作数包括多个数据元素,所述多个数据元素来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合。所述集合的跨距数据元素位置彼此分开整数倍的所指示的跨距。

示例18包括示例17所述的方法,其中所述接收包括接收所述指令,所述指令仅指示跨距数据元素位置的所述所有集合的子集。

示例19包括示例17到18中的任一项所述的方法,可选地其中所述接收包括接收所述指令,所述指令指示所述跨距,所述跨距包含至少五个数据元素位置,以及可选地其中要通过以下之一来指示所述跨距:所述指令的立即数的值;以及被存储在由所述指令指示的寄存器中的值。

示例20包括示例17到19中的任一项所述的方法,其中所述接收包括接收所述指令,所述指令指示至少一个打包数据操作掩码。

示例21包括示例17到20中的任一项所述的方法,其中所述接收包括接收所述指令,所述指令指示对于每个结果打包数据操作数的不同对应打包数据操作掩码。

示例22是一种用于处理指令的系统,包括互连、与所述互连耦合的动态随机存取存储器(dram)、以及与所述互连耦合的处理器。所述处理器用于接收指令,所述指令要指示源操作数、用于指示跨距、用于指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及用于指示所述多个打包数据寄存器的至少一个目的地打包数据寄存器。所述处理器用于响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述多个打包数据寄存器的对应的目的地打包数据寄存器中。每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合,其中所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

示例23包括示例22所述的系统,可选地其中所述指令能够仅指示跨距数据元素位置的所述所有集合的子集,以及可选地其中所述指令要指示至少一个打包数据操作掩码。

示例24是一种包括非暂态机器可读存储介质的制品。所述非暂态机器可读存储介质存储多个指令,所述多个指令包括第一指令。所述第一指令如果由机器执行则要促使所述机器执行操作,包括访问将由所述第一指令指示的源操作数。所述操作还包括针对出自于要由所述第一指令指示的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合中的每个,针对要由所述第一指令指示的跨距,来将对应的结果打包数据操作数存储在对应的目的地打包数据寄存器中。每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的集合。所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

示例25包括示例24所述的制品,其中所述非暂态机器可读存储介质可选地包括以下之一:动态随机存取存储器(dram)、闪速存储器、相变存储器、光盘、和磁盘,以及可选地其中所述第一指令要指示至少一个打包数据操作掩码。

示例26是处理器或其它设备,其包括用于解码指令的部件。所述指令用于指示源操作数、用于指示跨距、用于指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及用于指示所述处理器或设备的多个打包数据寄存器的至少一个目的地打包数据寄存器。所述处理器或其它设备还包括用于响应于所述指令针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在所述多个打包数据寄存器的对应的目的地打包数据寄存器中的部件。每个结果打包数据操作数用于包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合,其中所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

示例27是包括处理器的计算机系统或其它电子装置,所述处理器具有解码单元,所述解码单元可操作以解码第一指令集的指令,以及所述处理器具有运行单元,所述运行单元用于执行所述第一指令集的所解码的指令。电子装置还包括与所述处理器耦合的存储装置。所述存储装置可操作以存储第一指令,所述第一指令将属于第二不同指令集。所述第一指令用于指示源操作数、用于指示跨距、用于指示出自于对于所指示的跨距的跨距数据元素位置的所有集合中的跨距数据元素位置的至少一个集合、以及用于指示至少一个目的地打包数据寄存器。所述存储装置还可操作以存储指令以将所述第一指令转换成所述第一指令集的一个或多个指令。当由所述处理器执行时,所述第一指令集的所述一个或多个指令可操作以促使所述处理器针对跨距数据元素位置的所指示的至少一个集合中的每个来将对应的结果打包数据操作数存储在对应的目的地打包数据寄存器中。每个结果打包数据操作数要包括多个数据元素,所述多个数据元素将会来自所述源操作数的跨距数据元素位置的所述对应的所指示的集合,其中所述集合的跨距数据元素位置将会彼此分开整数倍的所指示的跨距。

示例28包括示例1到16中任一项所述的处理器,还包括可选的分支预测单元以预测分支,以及与所述分支预测单元耦合的可选的指令预取单元,所述指令预取单元用于预取包括所述指令的指令。所述处理器还可以可选地包括与所述指令预取单元耦合的可选的等级1(l1)指令高速缓冲存储器,所述l1指令高速缓冲存储器用于存储指令,可选的l1数据高速缓冲存储器用于存储数据,以及可选的等级2(l2)高速缓冲存储器用于存储数据和指令。所述处理器还可以可选地包括与所述解码单元、所述l1指令高速缓冲存储器和所述l2高速缓冲存储器耦合的指令取单元,用于在某些情况下从所述l1指令高速缓冲存储器和所述l2高速缓冲存储器中的一个中取所述指令,以及用于提供所述指令给所述解码单元。所述处理器还可以可选地包括用于重命名寄存器的寄存器重命名单元、用于调度已经从所述指令解码以用于运行的一个或多个操作的可选的调度器、以及用于提交所述指令的运行结果的可选的提交单元。

示例29包括片上系统,所述片上系统包括至少一个互连、与所述至少一个互连耦合的示例1到16中任一项所述的处理器、与所述至少一个互连耦合的可选的图形处理单元(gpu)、与所述至少一个互连耦合的可选的数字信号处理器(dsp)、与所述至少一个互连耦合的可选的显示器控制器、与所述至少一个互连耦合的可选的存储器控制器、与所述至少一个互连耦合的可选的无线调制解调器、与所述至少一个互连耦合的可选的图像信号处理器、与所述至少一个互连耦合的可选的通用串行总线(usb)3.0可兼容控制器、与所述至少一个互连耦合的可选的蓝牙4.1可兼容控制器、和与所述至少一个互连耦合的可选的无线收发器控制器。

示例30是处理器或其它设备,其可操作以执行示例17到21中任一项所述的方法。

示例31是处理器或其它设备,其包括用于执行示例17到21中任一项所述的方法的部件。

示例32是处理器或其它设备,其包括模块和/或单元和/或逻辑和/或部件的任何组合,其可操作以执行示例17到21中任一项所述的方法。

示例33是可选地非暂态和/或有形机器可读介质,其可选地存储或以其它方式提供包括第一指令的指令,所述第一指令如果和/或当由处理器、计算机系统、电子装置或其它机器执行时,可操作以促使所述机器用于执行示例17到21中任一项所述的方法。

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