用于确定直方图的指令的制作方法

文档序号:16207168发布日期:2018-12-08 07:15阅读:326来源:国知局
用于确定直方图的指令的制作方法

发明的领域通常涉及计算系统,并且更具体而言,涉及用于确定直方图的指令。

背景技术

图1示出在半导体芯片上用逻辑电路实现的处理核心100的高层图。处理核心包含流水线101。流水线包括多个阶段,每个设计为执行完全执行程序代码指令所需要的多步骤处理中的特定步骤。这些典型地至少包含:1)指令获取和解码;2)数据获取3)执行;4)写回。当数据由相同的指令识别并在之前阶段中获取(例如,在上述步骤2)中)时,执行特定操作的执行阶段由指令识别,该指令在另一个之前阶段中被获取并解码(例如,在上述步骤1)中)。被操作的数据典型地从(通用)寄存器存储空间102获取。在操作完成时创建的新数据也典型地“写回”到寄存器存储空间(例如,在上述4)阶段处)。

关联于执行阶段的逻辑电路典型地由多个“执行单元”或者“功能单元”103_1至103_n组成,其每个设计为执行其自身的操作的唯一子集(例如,第一功能单元执行整数数学操作,第二功能单元执行浮点指令,第三功能单元执行从/向缓存/存储器的加载/存储操作等)。由所有功能单元执行的所有操作的集合对应于处理核心100支持的“指令集”。

在计算机科学领域广泛知晓2个类型的处理器架构:“标量”和“矢量”。标量处理器被设计为执行对单集合数据执行操作的指令,而矢量处理器被设计为执行对多集合数据执行操作的指令。图2a和2b呈现展示了标量处理器与矢量处理器之间的基本差异的比较例。

图2a示出标量and指令的示例,其中,单个操作数集a和b被and在一起来生成单数(singular)(或者“标量”)结果c(即,ab=c)。与此相反,图2b示出矢量and指令的示例,其中,2个操作数集a/b和d/e分别被and,以生成矢量结果c,f(即,a.and.b=c且d.and.e=f)。关于术语,“矢量”是具有多个“元素”的数据元素。例如,矢量v=q、r、s、t、u具有5个不同元素:q、r、s、t和u。示例性矢量v的“尺寸”是5(因为其具有5个元素)。

图1还示出不同于通用寄存器空间102的矢量寄存器空间104的存在。具体而言,通用寄存器空间102在名义上被用于存储标量值。这样,当任何执行单元执行标量操作时,其在名义上使用从(并将结果写回)通用寄存器存储空间102调用的操作数。与此相反,当任何执行单元执行矢量操作时,其在名义上使用从(并将结果写回)矢量寄存器空间107调用的操作数。存储器的不同区域可以同样被分配用于存储标量值和矢量值。

还要注意的是,在向功能单元103_1至103_n的输入处和从功能单元103_1至103_n的输出处相应存在掩蔽(masking)逻辑104_1至104_n和105_1至105_n。在各种实施方式中,实际上仅实现这些层中的一个—尽管不是严格要求。对于采用掩蔽的任何指令,输入掩蔽逻辑104_1至104_n和/或输出掩蔽逻辑105_1至105_n可以被用于控制:针对矢量指令,哪些元素被有效地操作。此处,掩蔽矢量从掩蔽寄存器空间106读出(例如,连同从矢量寄存器存储空间107读出的输入数据矢量),并且被呈现给掩蔽逻辑104、105层中的至少一个。

在执行矢量程序代码的过程中,每个矢量指令不需要要求全数据字。例如,用于一些指令的输入矢量可以仅是8个元素,用于其他指令的输入矢量可以是16个元素,用于其他指令的输入矢量可以是32个元素等。因此,掩蔽层104/105被用于识别适用于特定指令的全矢量数据字的元素的集合,以便跨指令影响不同的矢量尺寸。典型地,对于每个矢量指令而言,保持在掩蔽寄存器空间106中的特定掩蔽模式由指令调出、从掩蔽寄存器空间获取并被提供至掩蔽层104/105中的一个或者两个,来“启用”对于特定矢量操作的元素的正确集合。

当前可用的矢量指令pcmpxesty能够针对另一个输入矢量的元素,对第一输入矢量的元素执行各种比较“聚合”函数。pcmpxesty指令的输出结果是表明由指令执行的比较的结果的掩蔽矢量。由特定pcmpxesty指令执行的特定聚合函数由pcmpxesty指令格式内的即时操作数的值指明。支持的聚合函数包含“equaleach”、“equalany”、“ranges”和“equalordered”,并且下文马上说明。尽管能够执行数值的比较,但pcmpxesty指令部分被开发为支持文本信息的处理。这样,输入“矢量”经常被指明为文本字符的“串”。

equaleach(imm[3:2]=10)。该操作比较2个串的相同定位的元素。比较的结果是位掩蔽(如果对应的字节相等为1,如果不相等则为0)。例如:

操作数1=“useflatassembler”

操作数2=“usinganassembler”

中间结果(intres1)=1100000111111111

equalany(imm[3:2]=00)。第一操作数是字符集,第二是串。如果字符属于集合,位掩蔽包含1,如果不属于则包含0:

操作数2=“youdrivememad”,操作数1=“aeiouy”

intresl=0110001010010010

equalrange(imm[3:2]=01)。第一操作数包括范围,例如“azaz”,意味着“a至z的所有字符和a至z的所有字符”:

操作数2=“i'mherebecause”,操作数1=“azaz”

intresl=1010111101111111

equalordered(imm[3:2]=11)。子串搜索。第一操作数含有要搜索的串,第二操作数是用于在其中进行搜索的串。如果在对应的位置发现子串,位掩蔽包含1:

操作数2=“whenwewillbewed!”,操作数1=“we”

intresl=000010000000100

在计算聚合函数之后,intresl能够被补码,扩展为字节掩蔽或呈现为位掩蔽。结果被写入矢量寄存器空间。

在图3中示出示例性直方图。如图3中示出的那样,水平轴被分割为分段301_1至301_n,其中每个分段对应于数值范围或者“分档(bin)”。例如,每个分段可能对应于不同重量范围(例如,分档301_1=少于90磅;301_2=91磅至110磅;301_3=111磅至130磅等)。每个相应分档内,水平轴对应于群体的计数。例如,如果100个男性成人的重量映射到水平轴的分档,那么直方图形状300将出现为示出:在每个相应分档的范围内,100人中人的数量(例如,分档301_1中0人;分档301_2中1人;分档301_3中2人等)。

附图说明

在附图的图中以示例的方式,而非以限制的方式示出本发明,其中相似的参考标记指代类似的元件,其中:

图1示出指令执行流水线;

图2a和2b涉及矢量处理;

图3示出直方图;

图4a、4b、以及4c示出prngcmp指令的不同方面;

图5a-d示出对prgncmp指令的不同功能单元设计;

图6a是示出根据本发明的实施例的通用矢量友好指令格式及其a级别指令模板的框图。

图6b是示出根据本发明的实施例的通用矢量友好指令格式及其b级别指令模板的框图。

图7a-c是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。

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

图9a是根据本发明的实施例的单个cpu核心的框图,连同其至管芯上互连网络的连接,及其2级(l2)缓存的本地子集。

图9b是根据本发明的实施例的图9a中的cpu核心的部分的分解图。

图10是示出根据本发明的实施例的示例性乱序架构的框图。

图11是依据本发明的一个实施例的系统的框图。

图12是依据本发明的实施例的第二系统的框图。

图13是依据本发明的实施例的第三系统的框图。

图14是依据本发明的实施例的soc的框图。

图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图。

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

具体实施方式

图4a示出新的指令prngcmp执行的能够被用于产生直方图的处理。prngcmp指令的操作基于pcmpxesty指令。然而,prngcmp指令提供矢量结果,其构成元素对应于分档而非掩蔽内的计数。如图4a中示出的那样,指令接受一矢量作为第一输入操作数,该矢量的构成元素对应于分档范围401;并且接受一矢量作为第二操作数,该矢量对应于要分档的相应群体单元的多个值402。例如,接着图3的示例,输入矢量401的不同元素将对应于直方图的不同分档范围(例如,第一元素=0至90lbs;第二元素=91至110lbs;第三元素=111至1301bs……);并且输入矢量402的不同元素对应于不同人的相应重量(例如,第一元素=人#1的重量;第二元素=人#2的重量;第三元素=人#3的重量……等)。

指令然后前进至执行其聚合函数,其对应于第二输入矢量402中每个元素与第一输入矢量中每个元素的比较403。如图4a所示,根据一个实施例,例如,在微码控制下,指令被设计为对第二输入矢量中的每个元素“循环”。因此,对于第一循环而言,输入矢量402的第一元素(例如,人#1的重量)与输入矢量401的每个元素(直方图的不同重量分档)比较。在简单直方图的情况下,水平轴分档之间没有重叠,并将存在最多一个匹配。

在图4a的示例性绘图中,第二输入矢量的第一元素落入分档内,其对应于第一输入矢量的第三元素。从比较得到的中间矢量450表明对于第三分档计数是1,对于其他分档计数是0。

每个接下来的循环对第二输入矢量中的下一个元素执行相同的处理。要注意的是,每个循环的比较结果增加至先前循环的相应中间矢量的总和404。因此,中间矢量总和像累加器那样动作,将对每个循环的每个分档的计数进行累加。例如,如果输入矢量402的第二元素也落入第三分档内,那么中间矢量总和404的第三元素将在第二循环的结束处含有2的值。当分析了第二输入矢量402的所有元素(所有循环完成)时,累加器/中间矢量对整个输入矢量集405保持每个分档的计数。此处,中间矢量总和被呈现为指令406的结果。

能够执行多个prngcmp指令来按比例调整要对任何特定直方图分析的分档数量和群体尺寸这两者。例如,如果矢量处理硬件逻辑仅考虑最大输入矢量操作数尺寸8,并且直方图期望对于1024的群体尺寸具有128个分档,那么,完整的直方图能够由16x128=2048个prngcmp指令计算。此处,需要128/8=16个指令来按比例调整分档的数量至128,并需要2048/8=128个指令来按比例调整群体至2048的尺寸。换言之,8个元素的16矢量每个将被需要,以有效形成64个直方图分档;并且每个元素的128个矢量每个将被需要,以有效创建尺寸为1024的群体。16个分档矢量的每个将被用作其自身相应的128个prngcmp指令的集合的第一输入矢量(对被用作第二输入矢量的每个群体矢量有一个指令)。

图4b更笼统绘出构造。如图4b所示,有需要用来创建所有期望的分档的x个第一输入矢量411_1至411_x,并且有需要用来创建整个群体的y个第二输入矢量412_1至412_y。在上述讨论的示例中,x=16并且y=128。用prngcmp指令对所有第二输入矢量412_1、412_2……412_y执行第一输入矢量411_1、411_2……411_x的每个,来形成对第一输入矢量的第一411_1的x个prngcmp指令420_1、420_2……420_x的集合430。每个指令的结果完成作为对于在接下来的集合中“相同定位的”指令的中间矢量总和的初始值,以对相同集合的分档推进中间值总和的累加本质。

例如,如果在第一集合420_1中第一指令的结果是(1,0,2,3,0,0,0,2),并且对于第二输入矢量412_2在接下来的集合420_x+1中的第一指令产生(0,0,1,2,1,1,0,3)的比较计数,那么指令420_x+1的结果将是2个矢量的总和(1,0,3,5,1,1,0,5)。累加的推进持续相同的分档的集合,直至所有y个第二输入矢量已在对于该分档的集合的直方图的计数完成的点处处理。对于x个第一输入矢量中的每个,跟随有相同的处理。要注意的是,中间矢量总和能够存储在矢量寄存器空间中,并之后读出用于用作对相同分档的集合(相同第一输入矢量)的接下来的指令的输入中间值总和。用于中间矢量总和的初始值被设定为用于第一集合430的指令的零矢量。

要注意的是,如果prngcmp指令不被设计为接受并增加中间值总和输入操作数,那么对于相同分档集合,紧接在前的prngcmp指令的结果能够被增加至紧接在后面的prngcmp指令的结果(使用位于2个prngcmp指令之间的介入矢量add指令)。

图4c呈现用于prngcmp指令的示例性指令格式440。要注意的是,除了将指令识别为prngcmp指令的操作码外,指令格式440指明3个输入操作数441、442和443和即时操作数444。指明输入操作数441的字段识别初始中间矢量总和所位于的矢量寄存器位置rl。如上所述,初始中间矢量总和值增加至第一与第二矢量比较的结果,以确定指令的最终结果。

在图4c的特定指令实施例中,指令的结果也写入对中间矢量总和441指明的相同寄存器位置rl。接下来的输入操作数字段442识别出含有直方图的分档定义的第一输入矢量所位于的矢量寄存器位置r2,并且下面的输入操作数字段443识别出含有群体单元的第二输入矢量所位于的矢量寄存器或者系统存储器位置r3/mem。

在实施例中,即时操作数字段444被编码为指明要执行的指令的高达4个不同的特定特征。具体而言,中间操作数444的第一字段指明要执行的比较的类型(聚合操作),第二字段指明中间和第二输入矢量的尺寸(例如,每个字节16个元素或者2个字节每个8个元素)以及元素是否被签名,第三字段指明结果元素在其相应矢量位置中是左还是右对齐。在其他实施例中,能够指明2个类型的聚合函数:“范围相等(equalrange)”或者“任意相等(equalany)”。在“范围相等”的情况下,2个值被打包到单个矢量元素位置。例如,如果第一输入矢量指明8个不同的分档,那么输入矢量将具有16个不同值。此处,每个分档由如下定义:第一输入矢量中的一对值、指明范围的上限的一对中的一个、指明下限的一对中的另一个。在“任意相等”的情况下,每个分档被定义为标量,而非范围,这样,在第一矢量中只需要一个值来指明分档。此处,例如,“任意相等”模式能够被用于创建与“范围相等”相比更颗粒化的直方图。例如,相对于将被用于实现磅范围(120-139lbs、140-159lbs……等)的“范围相等”,分档至单个磅粒度(120lbs、121lbs、122lbs……)的直方图能够用“任意相等”实现。

在额外的实施例中,操作码或者中间值444还可以指明第一、第二和/或中间矢量中的元素的数据格式(整数、浮点、字符),和/或第一和中间输入矢量和第二输入矢量的相应尺寸。相对于矢量尺寸,要注意的是,指明分档的数量的第一输入矢量(和中间矢量)不需要是与具有群体值的第二输入矢量相同的尺寸。

替代实施例不接受初始中间矢量总和值作为输入操作数。在该实施例中,由字段441识别的寄存器对应于仅仅结果目的地,并且不被认为保持输入操作数。

图5a示出设计为执行prngcmp指令的功能单元500的架构。如图5a中示出的那样,功能单元具有比较器电路库505,比较器电路库505具有前级复用器504。比较器库中的每个比较器电路的一个输入从第一输入矢量寄存器501接受其自身对齐的相应输入。该输入对应于被保持在寄存器501的第一输入矢量中识别的每个分档的分档定义。在“任意相等”的情况下,每个输入携带一个值,并且每个比较器电路在其相应分档位置实现一个比较函数。在相同的机器周期中,复用器电路504中被配置为从寄存器502中的第二输入矢量选择特定群体值,并呈现给比较器库505中的每个比较器。

这样,根据一个实施例,在相同的机器周期中,单个群体值同时对由第一输入矢量定义的所有分档被遮蔽(screen)。在最简单的情况下,仅一个比较器电路将识别出匹配。这样,在最简单的情况下,从比较器电路得到的输出将类似于有一个异常(exception)的具有相同逻辑值的矢量。例如,如果群体值匹配左起第三分档,那么比较器库电路505可以产生下面的矢量:0010……0。存储在rom507中的微码用零矢量将寄存器508的内容初始化,以便在第一循环中写入寄存器508的来自矢量加法器506的结果匹配来自比较器库505的输出。来自rom507的微码然后启动接下来的循环,并使复用器504从寄存器502中的第二输入矢量选择接下来的群体值。加法器506将最近的比较增加到先前的比较的累加(总和)。继续循环,直至第二输入矢量中的每个元素已在驻存在中间寄存器508中的累加的结果(rom507中的微码还用每个循环控制寄存器508的锁存)的点处被处理。中间值结果然后由加法器509增加至(来自输入操作数寄存器503的)初始矢量总和输入操作数,以生成指令结果。在实施例中,结果覆盖寄存器503中的初始中间矢量总和输入操作数。

除了2个值从寄存器501中的第一输入矢量被路由至比较器库504中其对应的分档比较电路外,对于“范围相等”模式,处理与上述相同。用于任何单个分档的比较电路可以含有2个比较器:第一个确定群体值是否高于下限,并且第二个确定群体值是否少于或者等于上限。仅当两个比较为“真”时,用于该分档的比较电路才表明对于该分档匹配。

要注意的是,任何输入寄存器501、502和输入/结果寄存器503能够对应于明确由代码或者寄存器调用的矢量寄存器空间,该代码或者寄存器在具有功能单元的流水线内部(例如,寄存器501、502可以对应于数据获取阶段或者功能单元内的寄存器,其从由程序代码调用的矢量寄存器空间的寄存器接收输入操作数)。

在替代实施例中,初始中间值不被接受为输入操作数。在这种情况下,从寄存器503到加法器电路506的输入没有布线。

图5b示出用于实现prngcmp指令的功能单元510的另一个实施例。图5b的方法不使用循环而是明确计算单个序列中指令的所有值。普通技术人员可以意识图5a的方法强调节省硅表面积而以性能为代价,而图5b的方法强调性能而以硅表面积为代价。要注意的是,图5b的方法不需要复用器,并且其加法电路级具有接受第二矢量的每个元素而非仅一个的输入的加法器。

普通技术人员还能够设计图5a与5b的混合方法,以在性能和硅表面积效率方面具有混合的强调。

图5c示出额外的替代的功能单元实施例,其不仅能够执行prngcmp指令而且能够执行pcmpxesty指令。要注意的是,这些替代的功能单元实施例含有开关电路,将数据流指引过加法器电路,或者围绕加法器电路以便绕开它。此处,当指令的操作码字段被解码来产生prngcmp指令时,开关电路被配置为强制数据流过加法器电路,而当指令的操作码字段被解码来产生pcmpxesty指令时,开关电路被配置为使数据从比较器库流动以绕开加法器电路。

尽管上述讨论针对将单个群体元素与单个操作中的第一(分档定义)输入矢量的多个元素进行比较,但能够采取替代的方法,从而多个群体元素与单个操作中的单个(分档定义)元素进行比较。图5d呈现该方法的功能单元构造的实施例。此处,来自第一输入矢量的单个分档定义元素扇出至比较电路,并且比较的结果与多输入加法器求和,来对于特定选择的分档元素将结果“扇入”至最终求和的标量。标量然后路由至结果矢量的适当的元素位置。如果要实现被微码的循环,那么复用器能够位于水平xxx,yyy,以将正确的分档元素路由至比较库,并将加法器结果路由至正确结果矢量元素位置。在额外的实施例中,加法器电路能够被绕开来执行上述说明的pcmpxesty指令。

上文详述的指令的实施例可以以“通用矢量友好指令格式”实施,其在下文中详述。在其他实施例中,不利用这样的格式,并且使用另一个指令格式,然而,下文说明的写入掩蔽寄存器、各种数据转换(拌合(swizzle)、广播等)、寻址等通常适用于说明上述指令的实施例。另外,示例性系统、架构、以及流水线在下文详述。上述指令的实施例可以执行在这样的系统、架构、以及流水线上,但是不限于详述的那些内容。

矢量友好指令格式是适合矢量指令(例如,存在对于矢量操作特定的某些领域)的指令格式。虽然说明的实施例是通过矢量友好指令格式来支持矢量和标量操作这两者,但替代实施例仅使用矢量操作矢量友好指令格式。

示例性通用矢量友好指令格式—图6a-b

图6a-b是示出根据本发明的实施例的通用矢量友好指令格式及其指令模板的框图。图6a是示出根据本发明的实施例的通用矢量友好指令格式及其a级别指令模板的框图;而图6b是示出根据本发明的实施例的通用矢量友好指令格式及其b级别指令模板的框图。具体而言,对其定义a级别和b级别指令模板的通用矢量友好指令格式600,这两者都包含没有存储器访问605指令模板和存储器访问620指令模板。矢量友好指令格式的上下文中通用的术语是指不绑定到任何特定指令集的指令格式。虽然将说明的实施例中,矢量友好指令格式的指令对矢量进行操作,该矢量来源于:要么寄存器(没有存储器访问605指令模板)要么寄存器/存储器(存储器访问620指令模板),但本发明的替代实施例可以仅支持这些中的一个。另外,虽然将说明的本发明的实施例中,有矢量指令格式的加载和存储指令,但替代实施例反而或者附加地具有不同指令格式的指令,其将矢量移动至/出寄存器(例如,从存储器到寄存器,从寄存器到存储器,在寄存器之间)。此外,虽然将说明的本发明的实施例支持2级别的指令模板,但替代实施例可以仅支持这些中的一个或者多于2个。

虽然将说明的本发明的实施例中,矢量友好指令格式支持如下:具有32位(4字节)或者64位(8字节)数据元素宽度(或者尺寸)的64字节矢量操作数长度(或者尺寸)(因此,包括16个双字长元素或者替代地8个四字长元素的64字节矢量);具有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字节)数据元素宽度)的更多、更少和/或不同矢量操作数尺寸(例如,656字节矢量操作数)。

图6a中的a级别指令模板包含:1)在没有存储器访问605指令模板内,示出没有存储器访问,完全舍入(round)控制类型操作610指令模板和没有存储器访问,数据转换类型操作615指令模板;和2)在存储器访问620指令模板内,示出存储器访问,暂存625指令模板和存储器访问,非暂存630指令模板。图6b中的b级别指令模板包含:1)在没有存储器访问605指令模板内,示出没有存储器访问,写入掩蔽控制,部分舍入控制类型操作612指令模板和没有存储器访问,写入掩蔽控制,vsize类型操作617指令模板;和2)在存储器访问620指令模板内,示出存储器访问,写入掩蔽控制627指令模板。

格式

通用矢量友好指令格式600包含图6a-b示出的顺序的、下文列出的下面的字段。结合上述讨论,在实施例中,参考下文图6a-b和7提供的格式细节,可以利用非存储器访问指令类型605或者存储器访问指令类型620。用于输入矢量操作数和目的地的地址可以在下面说明的寄存器地址字段644中识别。

格式字段640—该字段中的特定值(指令格式标识符值)唯一地识别矢量友好指令格式,因此,在指令流中发生矢量友好指令格式的指令。因此,格式字段640的内容辨别:发生的第一指令格式的指令与发生的其他指令格式的指令,因而,允许矢量友好指令格式引入到具有其他指令格式的指令集。这样,在不需要指令集仅具有通用矢量友好指令格式的意义上,该字段是可选的。

基本操作字段642—其内容将不同基本操作辨别开。如本文之后说明的那样,基本操作字段642可以包含和/或是操作码字段的部分。

寄存器索引字段644—其内容(直接或者通过地址产生)指明源和目的地操作数的位置,无论其在寄存器或者在存储器中。这些包含充分的位数来从pxq(例如,32x1012)寄存器文件选择n个寄存器。虽然在一个实施例中,n可以是高达3个源和一个目的地寄存器,但替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持高达2个源,其中这些源中的一个还作为目的地;可以支持高达3个源,其中这些源中的一个还作为目的地;可以支持高达2个源和一个目的地)。虽然在一个实施例中,p=32,但替代实施例可以支持更多或更少的寄存器(例如16个)。虽然在一个实施例中,q=1012位,但替代实施例可以支持更多或更少的位(例如128、1024)。

修改器字段646—其内容辨别:指明存储器访问的通用矢量指令格式的指令的发生与不指明的那些;即,在没有存储器访问605指令模板和存储器访问620指令模板之间。存储器访问操作读出和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指明源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段还在3个不同方式之间进行选择,来执行存储器地址计算,但替代实施例可以支持更多、更少、或者不同方式来执行存储器地址计算。

增强操作字段650—其内容辨别:除了基本操作外,要执行各种不同操作的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被分割为级别字段668、alpha字段652和beta字段654。增强操作字段允许公共组的操作在单个指令中执行,而非2、3或者4个指令。下文是使用增强字段650来减小要求的指令的数量的指令的一些示例(其命名法在本文稍后更详细说明)。

其中[rax]是用于地址产生的基本指针,并且{}表明由数据操作字段指明的转换操作(本文稍后更具体说明)。

按比例调整字段660—其内容允许按比例调整索引字段的内容,用于存储器地址产生(例如,用于使用2scale*index+base的地址产生)。

移位字段662a—其内容被用作存储器地址产生的部分(例如,用于使用2scale*index+base+displacement的地址产生)。

移位因子字段662b(要注意的是,直接在移位因子字段662b上的移位字段662a的并列表明使用一个或者另一个)—其内容被用作地址产生的部分;其指明移位因子要由存储器访问的尺寸(n)按比例调整—其中n是存储器访问中字节的数量(例如,对于使用2scale*index+base+scaleddisplacement的地址产生)。忽略了冗余的低阶位,因此,移位因子字段的内容乘以存储器操作数总尺寸(n),以产生最终移位来用于计算有效地址。n的值由处理器硬件在运行时基于全操作码字段674(本文稍后说明)和本文稍后说明的数据操纵字段654c确定。移位字段662a和移位因子字段662b是可选的(在其不用于没有存储器访问605指令模板和/或不同实施例可以仅实现2个中的1个或者0个的意义上)。

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

写入掩蔽字段670—以每数据元素位置的形式,其内容控制目的地矢量操作数中的数据元素位置是否反映基本操作和增强操作的结果。a级别指令模板支持合并写入掩蔽,而b级别指令模板支持合并和归零写入掩蔽这两者。当合并时,矢量掩蔽允许在执行任何操作(由基本操作和增强操作指明)期间保护目的地中的任何集合的元素不会更新;在其他一个实施例中,保留对应的掩蔽位具有0的目的地的每个元素的旧值。相比之下,当在任何操作的执行期间(由基本操作和增强操作指明)归零矢量掩蔽允许目的地中的任何集合的元素归零;在一个实施例中,当对应的掩蔽位具有0值时,目的地的元素被设定为0。该功能的子集是控制正被执行的操作的矢量长度的能力(即,正被修改的元素从第一到最后一个的跨度);然而,不一定修改的元素是连续的。因此,写入掩蔽字段670允许部分矢量操作,包含负载、存储、算术、逻辑等。另外,该掩蔽能够用于故障抑制(即,通过掩蔽目的地的数据元素位置来防止收到可能/将导致故障的任何操作的结果—例如,假定存储器中的矢量跨页面边界,并且第一页面而非第二页面将导致页面故障,如果处于第一页面的矢量的所有数据元素被写入掩蔽进行掩蔽,那么能够忽略页面故障)。此外,写入掩蔽允许含有某些类型的条件陈述的“矢量化循环”。虽然说明的本发明的实施例中,写入掩蔽字段670的内容选择含有要使用的写入掩蔽的多个写入掩蔽寄存器中的一个,(并且因此,写入掩蔽字段670的内容间接识别出要执行的掩蔽),替代实施例反而或者额外允许掩蔽写入字段670的内容直接指明要执行的掩蔽。此外,归零允许性能改善,当:1)寄存器重命名用于其目的地操作数也不是源(还调用非三元指令)的指令,因为在寄存器重命名流水线阶段,目的地是不再是隐含源(没有来自当前目的地寄存器的数据元素需要被拷贝到重命名的目的地寄存器、或者以某种方式继续操作,因为不是操作的结果的任何数据元素(任何掩蔽的数据元素)将归零);和2)在写回阶段期间,因为零正被写入。

即时字段672—其内容允许即时的规范。在如下的意义上,该字段是可选的:其不存在于不支持即时的通用矢量友好格式的实施方式,并且其不存在于不使用即时的指令。

指令模板级别选择

级别字段668—其内容在不同级别的指令之间进行辨别。参考图2a-b,该字段的内容在a级别与b级别指令之间选择。在图6a-b中,圆角正方形被用于表明特定值存在于字段(例如,图6a-b中对于级别字段668a分别为级别a668a和级别b668b)。

a级别的没有存储器访问指令模板

在a级别的非存储器访问605指令模板的情况下,alpha字段652被解释为rs字段652a,其内容辨别要执行不同增强操作类型中的哪一个(例如,舍入652a.1和数据转换652a.2分别对:没有存储器访问、舍入类型操作610和没有存储器访问、数据转换类型操作615指令模板被指明),而beta字段654辨别要执行指明类型的哪些操作。在图6中,圆角框被用于表明存在特定值(例如,修改器字段646中的没有存储器访问646a;对于alpha字段652/rs字段652a的舍入652a.1和数据转换652a.2)。在没有存储器访问605指令模板中,按比例调整字段660、移位字段662a、以及移位按比例调整字段662b不存在。

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

在没有存储器访问完全舍入控制类型操作610指令模板中,beta字段654被解释为舍入控制字段654a,其内容提供静态舍入。在本发明说明的实施例中,舍入控制字段654a包含抑制所有浮点异常(sae)字段656和舍入操作控制字段658,但替代实施例可以支持可以将这两个概念编码至相同的字段或者仅具有这些概念/字段的一个或者另一个(例如,可以仅具有舍入操作控制字段658)。

sae字段656—其内容辨别是否禁用异常事件报告;当sae字段656的内容表明抑制被启用时,给定的指令不报告任何类型的浮点异常标志并且不提出任何浮点异常处理程序(handler)。

舍入操作控制字段658—其内容辨别要执行一组舍入操作中的哪一个(例如向上舍入、向下舍入、向零舍入、和舍入到最近)。因此,舍入操作控制字段658允许以每指令方式来改变舍入模式,因此,当需要时特别有用。在处理器包含用于指明舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段650的内容覆盖了该寄存器值(能够选择舍入模式,而不需要对这样的控制寄存器执行节省-修改-恢复是有利的)。

没有存储器访问指令模板—数据转换类型操作

在没有存储器访问数据转换类型操作615指令模板中,beta字段654被解释为数据转换字段654b,其内容辨别要执行多个数据转换中的哪一个(例如没有数据转换、拌合、广播)。

a级别的存储器访问指令模板

在a级别的存储器访问620指令模板的情况下,alpha字段652被解释为驱逐(eviction)提示字段652b,其内容辨别要使用驱逐提示的哪一个(在图6a中,暂存652b.1和非暂存652b.2分别对:存储器访问、暂存625指令模板和存储器访问、非暂存630指令模板被指明),而beta字段654被解释为数据操纵字段654c,其内容辨别要执行多个数据操纵操作的哪一个(也称为基元(primitive))(例如,没有操纵、广播、源的上转换、以及目的地的下转换)。存储器访问620指令模板包含按比例调整字段660,并可选地包含移位字段662a或者移位按比例调整字段662b。

矢量存储器指令执行:从存储器的矢量加载和至存储器的矢量存储(带有转换支持)。正如常规矢量指令那样,矢量存储器指令以数据元素的方式将数据从/向存储器传输,带有(由被选择为写入掩蔽的矢量掩蔽的内容指示为实际传输的)元素。在图6a中,圆角正方形被用于表明特定值存在于字段(例如,修改器字段646的存储器访问646b;alpha字段652/驱逐提示字段652b的暂存652b.1和非暂存652b.2)。

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

暂存数据是可能很快被再使用而受益于缓存的数据。然而,这是提示,不同的处理器可以将其以不同方式实现,包含忽略整个提示。

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

非暂存数据是不太可能很快被再使用而受益于1级缓存的缓存的数据,并应该被给予驱逐的优先权。然而,这是提示,不同的处理器可以将其以不同方式实现,包含忽略整个提示。

b级别的指令模板

在b级别的指令模板的情况下,alpha字段652被解释为写入掩蔽控制(z)字段652c,其内容辨别由写入掩蔽字段670控制的写入掩蔽是否应该合并或者归零。

b级别的没有存储器访问指令模板

在b级别的非存储器访问605指令模板的情况下,beta字段654的部分被解释为rl字段657a,其内容辨别要执行不同增强操作类型的哪一个(例如,舍入657a.1和矢量长度(vsize)657a.2分别对于以下被指明:没有存储器访问、写入掩蔽控制、部分舍入控制类型操作612指令模板和没有存储器访问、写入掩蔽控制、vsize类型操作617指令模板),而beta字段654的其余部分辨别要执行指明的类型的哪些操作。在图6中,圆角框被用于表明存在特定值(例如,修改器字段646中的没有存储器访问646a;对于rl字段657a的舍入657a.1和vsize657a.2)。在没有存储器访问605指令模板中,按比例调整字段660、移位字段662a、以及移位按比例调整字段662b不存在。

没有存储器访问指令模板—写入掩蔽控制、部分舍入控制类型操作

在没有存储器访问、写入掩蔽控制、部分舍入控制类型操作610指令模板中,beta字段654的其余部分被解释为舍入操作字段659a,并且异常事件报告被禁用(给定的指令不报告任何类型的浮点异常标志并且不提出任何浮点异常处理程序)。

舍入操作控制字段659a—如图舍入操作控制字段658那样,其内容辨别要执行一组舍入操作中的哪一个(例如向上舍入、向下舍入、向零舍入、和舍入到最近)。因此,舍入操作控制字段659a允许以每指令方式来改变舍入模式,因此,当需要时特别有用。在处理器包含用于指明舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段650的内容覆盖了该寄存器值(能够选择舍入模式,而不需要对这样的控制寄存器执行节省-修改-恢复是有利的)。

没有存储器访问指令模板—写入掩蔽控制、vsize类型操作

在没有存储器访问、写入掩蔽控制、vsize类型操作617指令模板中,beta字段654的其余部分被解释为矢量长度字段659b,其内容辨别要执行多个数据矢量长度中的哪一个(例如128、856、或者1012字节)。

b级别的存储器访问指令模板

在a级别的存储器访问620指令模板的情况下,beta字段654的部分被解释为广播字段657b,其内容辨别是否要执行广播类型数据操纵操作,而beta字段654的其余部分被解释为矢量长度字段659b。存储器访问620指令模板包含按比例调整字段660,并可选地包含移位字段662a或者移位按比例调整字段662b。

关于字段的额外评论

关于通用矢量友好指令格式600,全操作码字段674示出为包括格式字段640、基本操作字段642、以及数据元素宽度字段664。虽然示出了全操作码字段674包含所有的这些字段的一个实施例,但在不支持所有的这些字段的实施例中,全操作码字段674包含少于所有的这些字段。全操作码字段674提供操作代码。

增强操作字段650、数据元素宽度字段664、以及写入掩蔽字段670允许这些特征在通用矢量友好指令格式中以每指令方式被指明。

写入掩蔽字段和数据元素宽度字段的组合创建类型化的(typed)指令,因其允许基于不同的数据元素宽度来应用掩蔽。

指令格式要求相对小数量的位,因为其基于其他字段的内容,对于不同目的再使用不同的字段。例如,一个观点是:修改器字段的内容在图6a-b上的没有存储器访问605指令模板与图6a-b上的存储器访问6250指令模板之间选择;而级别字段668的内容在图6a的指令模板610/615与图6b的612/617之间的那些非存储器访问605指令模板内选择;并且级别字段668的内容在图6a的指令模板625/830与图6b的627之间的那些存储器访问620指令模板内选择。从另一个观点,级别字段668的内容分别在图6a和b的a级别与b级别指令模板之间选择;而修改器字段的内容在图6a的指令模板605和620之间的那些a级别指令模板内选择;并且修改器字段的内容在图6b的指令模板605和620之间的那些b级别指令模板内选择。在级别字段的内容表明a级别指令模板的情况下,修改器字段646的内容选择alpha字段652(在rs字段652a与eh字段652b之间)的解释。在相关方式中,修改器字段646以及级别字段668的内容选择是否alpha字段被解释为rs字段652a、eh字段652b、或者写入掩蔽控制(z)字段652c。在级别和修改器字段表明a级别没有存储器访问操作的情况下,增强字段的beta字段的解释基于rs字段的内容而改变;而在级别和修改器字段表明b级别没有存储器访问操作的情况下,beta字段的解释依赖于rl字段的内容。在级别和修改器字段表明a级别存储器访问操作的情况下,增强字段的beta字段的解释基于基本操作字段的内容而改变;而在级别和修改器字段表明b级别存储器访问操作的情况下,增强字段的beta字段的广播字段657b的解释基于基本操作字段的内容而改变。因此,基本操作字段、修改器字段和增强操作字段的组合允许指明甚至更宽种类的增强操作。

a级别和b级别内发现的各种指令模板在不同情形下是有益的。当由于性能原因期望归零写入掩蔽或者更小的矢量长度时,a级别是有用的。例如,由于不再需要人为地与目的地合并,当使用重命名时归零允许避免假依赖;作为另一个示例,当用矢量掩蔽来模拟更短的矢量尺寸时,矢量长度控制缓解了存储-加载转发问题。当有如下期望时b级别是有用的:1)当同时使用舍入模式控制时允许浮点异常(即,当sae字段的内容表明否);2)能够使用上转换、拌合、互换、和/或下转换;3)在图形数据类型上操作。例如,上转换、拌合、互换、下转换、以及图形数据类型减小当与不同的格式的源工作时要求的指令的数量;作为另一个示例,允许异常的能力提供与指引的舍入模式的全ieee合规。

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

图7a-c是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。图7a-c示出特定矢量友好指令格式700,其在指明位置、尺寸、解释、以及字段的顺序、以及用于那些字段中一些的值的意义上是特定的。特定矢量友好指令格式700可以被用于扩展x86指令集,因此,一些字段类似于被用于现有x86指令集及其扩展(例如avx)的那些或者与其相同。该格式保持符合前缀编码字段、实际操作码字节字段、modr/m字段、sib字段、移位字段、以及具有扩展的现有x86指令集的即时字段。示出了来自图6的字段,其中来自图7a-c的字段映射到所述字段。

应该理解的是,尽管出于示例性目的,参考通用矢量友好指令格式600的上下文中的特定矢量友好指令格式700说明了本发明的实施例,但本发明不限于特定矢量友好指令格式700,除了当要求保护时。例如,通用矢量友好指令格式600考虑对于各种字段的各种可能的尺寸,而特定矢量友好指令格式700示出为具有特定尺寸的字段。通过特定示例的方式,虽然数据元素宽度字段664被示出为特定矢量友好指令格式700中的1位字段,但本发明不限于此(即,通用矢量友好指令格式600考虑其他尺寸的数据元素宽度字段664)。

格式—图7a-c

通用矢量友好指令格式600包含以图7a-c示出的顺序的下文列出的下面的字段。

evex前缀(字节0-3)

evex前缀702—以4字节形式编码。

格式字段640(evex字节0,位[7:0])—第一字节(evex字节0)是格式字段640,并且其含有0x62(在本发明的一个实施例中,用于辨别矢量友好指令格式的唯一值)。

第二至第四字节(evex字节1-3)包含提供特定能力的位字段的数量。

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

rex'字段710—这是rex'字段710的第一部分,并且是evex.r'位字段(evex字节1,位[4]—r'),其被用于将扩展的32寄存器集合的高16或者低16编码。在本发明一个实施例中,该位以及其他下文表明的位,存储为位反转格式,以从实际操作码字节是62的bound指令辨别(在周知x86的32位模式中),但是不在modr/m字段(下述)中接受mod字段中的11的值;本发明的替代实施例不存储该位以及其他下文表明的反转格式的位。1的值被用于编码低16个寄存器。换言之,r'rrrr是通过合成evex.r'、evex.r、以及来自其他字段的其他rrr形成的。

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

数据元素宽度字段664(evex字节2,位[7]—w)—表现为符号evex.w。evex.w被用于定义数据类型(32位数据元素或者64位数据元素)的粒度(尺寸)。

evex.vvvv720(evex字节2,位[6:3]—vvvv)—evex.vvvv的角色可以包含如下:1)evex.vvvv对以反转(1s补码)形式指明的第一源寄存器操作数进行编码,并且对于具有2或者更多的源操作数的指令有效;2)evex.vvvv对于某些矢量偏移对以1s补码形式指明的目的地寄存器操作数进行编码;或者3)evex.vvvv不编码任何操作数,该字段被保留并应该含有1111b。因此,evex.vvvv字段720对以反转(1s补码)形式存储的第一源寄存器说明符的4低阶位进行编码。根据指令,额外的不同evex位字段被用于将说明符尺寸扩展至32个寄存器。

evex.u668级别字段(evex字节2,位[2]—u)—如果evex.u=0,其表明a级别或者evex.u0;如果evex.u=1,其表明b级别或者evex.u1。

前缀编码字段725(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前缀编码,因此,不需要该扩展。

alpha字段652(evex字节3,位[7]—eh;也称为evex.eh、evex.rs、evex.rl、evex.writemaskcontrol、以及evex.n;也示出为α)—如前面描述的,该字段是上下文特定的。本文稍后提供额外的说明。

beta字段654(evex字节3,位[6:4]—sss,也称为evex.s2-0、evex.r2-0、evex.rrl、evex.ll0、evex.llb;也示出为βββ)—如前面描述的,该字段是上下文特定的。本文稍后提供额外的说明。

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

写入掩蔽字段670(evex字节3,位[2:0]—kkk)—其内容指明写入掩蔽寄存器中的寄存器的索引,如前面描述的。在本发明的一个实施例中,特定值evex.kkk=000具有特殊的行为,暗指没有写入掩蔽被用于特定指令(这可以以各种方式实现,包含使用硬连线至全一(allones)的写入掩蔽,或者绕开掩蔽硬件的硬件)。

实际操作码字段730(字节4)

这也称为操作码字节。操作码的部分在该字段中指明。

modr/m字段740(字节5)

修改器字段646(modr/m.mod,位[7-6]-mod字段742)—如前面描述的,mod字段742的内容在存储器访问和非存储器访问操作之间辨别。该字段将在本文稍后进一步说明。

modr/m.reg字段744,位[5-3]—modr/m.reg字段的角色能够总结为2个情形:modr/m.reg对目的地寄存器操作数或者源寄存器操作数进行编码,或者modr/m.reg被视为操作码扩展,并且不被用于对任何指令操作数进行编码。

modr/m.r/m字段746,位[2-0]—modr/m.r/m字段的角色可以包含如下:modr/m.r/m对参考存储器地址的指令操作数进行编码,或者modr/m.r/m对目的地寄存器操作数或者源寄存器操作数进行编码。

按比例调整、索引、基本(sib)字节(字节6)

按比例调整字段660(sib.ss,位[7-6]—如前面描述的,按比例调整字段660的内容用于存储器地址产生。该字段将在本文稍后进一步说明。

sib.xxx754(位[5-3]和sib.bbb756(位[2-0])—这些字段的内容在前面关于寄存器索引xxxx和bbbb被提及。

移位字节(字节7或者字节7-10)

移位字段662a(字节7-10)—当mod字段742含有10时,字节7-10是移位字段662a,其与旧有的32位移位(disp32)相同工作,并以字节粒度工作。

移位因子字段662b(字节7)—当mod字段742含有01时,字节7是移位因子字段662b。该字段的位置与旧有的x86指令集8位移位(disp8)相同,旧有的x86指令集8位移位(disp8)以字节粒度工作。由于disp8是签名扩展的,其仅能够在-128与127字节偏移之间处理;在64字节缓存线方面,disp8使用8位,其能够仅被设定为4个真正有用的值-128、-64、0、以及64;由于经常需要更大范围,使用disp32;然而,disp32要求4字节。与disp8和disp32相反,移位因子字段662b是disp8的重新解释;当使用移位因子字段662b时,实际的移位由移位因子字段的内容乘以存储器操作数访问的尺寸(n)来确定。这种类型的移位称作disp8*n。这减小了平均指令长度(用于移位的单个字节但是具有更大的范围)。这样的压缩的移位基于如下假定:有效移位是存储器访问的多个粒度,因此,地址偏移的冗余的低阶位不需要被编码。换言之,移位因子字段662b替换旧有的x86指令集8位移位。因此,移位因子字段662b以与x86指令集8位移位相同的方式被编码(所以modrm/sib编码规则没有改变),例外仅是disp8过载至disp8*n。换言之,编码规则或者编码长度没有改变,仅由硬件对移位值的解释改变了(其需要按照存储器操作数的尺寸,按比例调整移位以获得字节方式的地址偏移)。

即时

即时字段672如前面描述地操作。

示例性寄存器架构—图8

图8是根据本发明的一个实施例的寄存器架构800的框图。寄存器文件和寄存器架构的寄存器被列出如下:

矢量寄存器文件810—在示出的实施例中,有812位宽的32个矢量寄存器;这些寄存器称作zmm0至zmm31。较低16个的zmm寄存器的低阶656位叠加在寄存器ymm0-16上。较低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)叠加在寄存器xmm0-15上。特定矢量友好指令格式700对这些叠加的寄存器文件进行操作,如下方表格示出的那样。

换言之,矢量长度字段659b在最大长度与一个或多个其他更短的长度之间选择,每个这样的更短的长度是之前长度的一半长度;并且没有矢量长度字段659b的指令模板对最大矢量长度进行操作。此外,在一个实施例中,特定矢量友好指令格式700的b级别指令模板对打包的或者标量单/双精度浮点数据和打包的或者标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中最低阶数据元素位置执行的操作;高阶数据元素位置要么保持与在指令之前的相同,要么根据实施例被归零。

写入掩蔽寄存器815—在示出的实施例中,有8个写入掩蔽寄存器(k0至k7),每个尺寸为64位。如前面描述的,在本发明的一个实施例中,矢量掩蔽寄存器k0不能被用作写入掩蔽,当通常表明k0的编码用于写入掩蔽时,其选择硬连线写入掩蔽0xffff,有效对该指令禁用写入掩蔽。

多媒体扩展控制状态寄存器(mxcsr)820—在示出的实施例中,该32位寄存器提供被用于浮点操作的状态和控制位。

通用寄存器825—在示出的实施例中,有16个与现有x86寻址模式一起使用的64位通用寄存器,以处理存储器操作数。这些寄存器用以下的名字参考:rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp、以及r8至r15。

扩展标志(eflags)寄存器830—在示出的实施例中,该32位寄存器被用于记录很多指令的结果。

浮点控制字(fcw)寄存器835和浮点状态字(fsw)寄存器840—在示出的实施例中,这些寄存器由x87指令集扩展使用来设定舍入模式、异常掩蔽以及fcw情况下的标志,并在fsw的情况下对异常保持追踪。

标量浮点堆栈寄存器文件(x87堆栈)845在其上混杂(aliased)有mmx打包的整平寄存器文件850—在示出的实施例中,x87堆栈是被用于对32/64/80位浮点数据使用x87指令集扩展来执行标量浮点操作的8个元素堆栈;而mmx寄存器被用于对64位打包的整数数据执行操作,以及对在mmx与xmm寄存器之间执行的一些操作保持操作数。

分段寄存器855—在示出的实施例中,有6个16位寄存器被用来存储用于分段的地址产生的数据。

rip寄存器865—在示出的实施例中,该64位寄存器存储指令指针。

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

示例性按序处理器架构—图9a-9b

图9a-b示出示例性按序处理器架构的框图。这些示例性实施例围绕用宽矢量处理器(vpu)增强的按序cpu核心的多个例示而设计。核心通过高带宽互连网络与一些固定功能逻辑、存储器i/o接口、以及其他必需的i/o逻辑进行通信,根据e13t应用。例如,作为独立gpu的该实施例的实施方式将典型地包含pcie总线。

图9a是根据本发明的实施例的单个的cpu核心、连同其至管芯上互连网络902的连接以及其2级(l2)缓存904的本地子集的框图。指令解码器900支持具有包含特定矢量指令格式700的扩展的x86指令集。虽然在本发明的一个实施例中(为简化设计),标量单元908和矢量单元910使用分离的寄存器集合(分别是标量寄存器912和矢量寄存器914),并且其间传输的数据被写入至存储器,进而,从1级(l1)缓存906读回,但本发明的替代实施例可以使用不同方法(例如,使用单个的寄存器集合或者包含允许数据在2个寄存器文件之间传输而不用写入和读回的通信路径)。

l1缓存906允许低延时访问至缓存存储器至标量和矢量单元。连同矢量友好指令格式的加载操作指令,这意味着l1缓存906能够有些像扩展的寄存器文件那样被处理。这显著改善了很多算法的性能,尤其是带有驱逐提示字段652b。

l2缓存904的本地子集是全局l2缓存的部分,被分割为分离的本地子集,每个cpu核心为一个。每个cpu具有向其自身的l2缓存904的本地子集的直接存取路径。由cpu核心读出的数据存储在其l2缓存子集904,并且能够与访问其自己的本地l2缓存子集的其他cpu并行地快速访问。由cpu核心写入的数据存储在其自身的l2缓存子集904,并且如果需要的话从其他子集刷入(flushed)。环形网络保证对于共享数据的相干性。

图9b是根据本发明的实施例的图9a中的cpu核心的部分的分解图。图9b包含l1缓存904的l1数据缓存906a部分、以及关于矢量单元910和矢量寄存器914的更多细节。具体而言,矢量单元910是16宽矢量处理单元(vpu)(参见16宽alu928),其执行整数、单精度浮点、以及双精度浮点指令。vpu支持将寄存器输入用拌合单元920拌合,用数字转换单元922a-b的数字转换,以及用复制单元924复制到存储器输入。写入掩蔽寄存器926允许预测得到的矢量写入。

寄存器数据能够以各种方式拌合,例如支持矩阵乘法。来自存储器的数据能够跨vpu道被复制。这是图形和非图形并行数据处理中的通常操作,其显著增加了缓存效率。

环形网络是双向的,以允许代理(诸如cpu核心、l2缓存和其他逻辑框)在芯片内互相彼此通信。每个环数据路径在每个方向是812位宽。

示例性乱序架构—图10

图10是示出根据本发明的实施例的示例性乱序架构的框图,并能够被看作是诸如上述图1中的流水线的流水线的更具体说明。具体而言,图10示出已被修改为合并矢量友好指令格式及其执行的周知的示例性乱序架构。在图10中,箭头标注两个或更多个单元之间的耦合,并且箭头的方向表明在这些单元之间数据流的方向。图10包含耦合至执行引擎单元1010的前端单元1005和存储器单元1015;执行引擎单元1010还耦合至存储器单元1015。

前端单元1005包含耦合至2级(l2)分支预测单元1022的1级(l1)分支预测单元1020。l1和l2品牌预测单元1020和1022耦合至l1指令缓存单元1024。l1指令缓存单元1024耦合至指令翻译后备缓冲器(tlb)1026,其还耦合至指令获取和预解码单元1028。指令获取和预解码单元1028耦合至指令队列单元1030,其还耦合至解码单元1032。解码单元1032包括复杂解码器单元1034以及3个简单解码器单元1036、1038、以及1040。解码单元1032包含微码rom单元1042。解码单元1032可以如前所述,在解码阶段部分进行操作。l1指令缓存单元1024还耦合至存储器单元1015中的l2缓存单元1048。指令tlb单元1026还耦合至存储器单元1015中的第二级tlb单元1046。解码单元1032、微码rom单元1042、以及循环流检测器单元1044每个耦合至执行引擎单元1010中的重命名/分配器单元1056。

执行引擎单元1010包含重命名/分配器单元1056,其耦合至隐退单元(retirementunit)1074和统一调度器单元1058。隐退单元1074还耦合至执行单元1060并包含重新排序缓冲单元1078。统一调度器单元1058还耦合至物理寄存器文件单元1076,其耦合至执行单元1060。物理寄存器文件单元1076包括矢量寄存器单元1077a、写入掩蔽寄存器单元1077b、以及标量寄存器单元1077c;这些寄存器单元可以提供矢量寄存器810、矢量掩蔽寄存器815、以及通用寄存器825;并且物理寄存器文件单元1076可以包含额外的未示出的寄存器文件(例如,混杂在mmx打包的整平的寄存器文件850上的标量浮点堆栈寄存器文件845)。执行单元1060包含3个混合的标量和矢量单元1062、1064、以及1072;负载单元1066;存储地址单元1068;存储数据单元1070。负载单元1066、存储地址单元1068、以及存储数据单元1070每个还耦合至存储器单元1015中的数据tlb单元1052。

存储器单元1015包含耦合至数据tlb单元1052的第二级tlb单元1046。数据tlb单元1052耦合至l1数据缓存单元1054。l1数据缓存单元1054还耦合至l2缓存单元1048。在一些实施例中,l2缓存单元1048还耦合至存储器单元1015内和/或外的l3和更高的缓存单元1050。

以示例的方式,示例性乱序架构可以实现处理流水线8200如下:1)指令获取和预解码单元1028执行获取和长度解码阶段;2)解码单元1032执行解码阶段;3)重命名/分配器单元1056执行分配阶段和重命名阶段;4)统一调度器1058执行调度阶段;5)物理寄存器文件单元1076、重新排序缓冲单元1078、以及存储器单元1015执行寄存器读出/存储器读出阶段;执行单元1060执行:执行/数据转换阶段;6)存储器单元1015和重新排序缓冲单元1078执行写回/存储器写入阶段1960;7)隐退单元1074执行rob读出阶段;8)各种单元可以涉及异常处理阶段;和9)隐退单元1074和物理寄存器文件单元1076执行提交(commit)阶段。

示例性单核和多核处理器—图15

图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器1500的框图。图15的实线框示出具有单核1502a、系统代理1510、一个或多个总线控制器单元1516的集合的处理器1500,而可选的附加的虚线框示出具有系统代理单元1510中的多个核心1502a-n、一个或多个集成存储器控制器单元1514的集合、以及集成图形逻辑1508的替代处理器1500。

存储器层次包含核心内的一级或多级缓存、一个或多个共享的缓存单元1506的集合、以及耦合至集成存储器控制器单元1514的集合的外部存储器(未示出)。共享的缓存单元1506的集合可以包含一个或多个中级缓存(诸如2级(l2)、3级(l3)、4级(l4)或者其他级缓存、最后一级缓存(llc)、和/或其组合)。虽然在一个实施例中,基于环的互连单元1512将集成图形逻辑1508、共享的缓存单元1506的集合、以及系统代理单元1510互连,但替代实施例可以使用任何数量的周知技术用于将这样的单元互连。

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

在架构和/或指令集方面,核心1502a-n可以是同构或者异构的。例如,一些核心1502a-n可以按序(例如,如图9a和9b所示)而其他乱序(例如,如图10所示)。作为另一个示例,两个或更多个核心1502a-n可以能够执行相同的指令集,而其他可以能够执行该指令集的仅子集或者不同指令集。至少一个核心能够执行本文说明的矢量友好指令格式。

处理器可以是通用处理器,诸如可从加州圣克拉拉英特尔公司得到的coretmi3、i5、i7、2duo和quad、xeontm、或者itaniumtm处理器。替代地,处理器可以来自另一个公司。处理器可以是特殊用途处理器,诸如例如网络或者通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1500可以是部分和/或可以实现在一个或多个基底上,其使用任何多个处理技术(诸如例如bicmos、cmos或者nmos)。

示例性计算机系统和处理器—图11至13

图11-13是适于包含处理器1500的示例性系统,而图88是可以包含一个或多个核心1502的示例性片上系统(soc)。本领域已知的用于膝上型计算机、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、开关、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置也是适当的。一般而言,能够包含如本文公开的处理器和/或其他执行逻辑的很多种类的系统或者电子设备是通常合适的。

现在参考图11,示出的是依据本发明的一个实施例的系统1100的框图。系统1100可以包含一个或多个处理器1110、1115,其耦合至图形存储器控制器中心(gmch)1120。额外的处理器1115的可选本质在图11中用虚线表示。

每个处理器1110、1115可以是一些版本的处理器1500。然而,应该注意的是,集成图形逻辑和集成存储器控制单元不大可能存在于处理器1110、1115中。

图11示出了gmch1120可以耦合至存储器1140,其例如可以是动态随机存取存储器(dram)。对于至少一个实施例,dram可以与非易失性缓存相关联。

gmch1120可以是芯片组或者芯片组的一部分。gmch1120可以与处理器1110、1115通信,并控制在处理器1110、1115和存储器1140之间的交互。gmch1120还可以作为处理器1110、1115与系统1100的其他元素之间的加速的总线接口。对于至少一个实施例而言,gmch1120经由多点分支总线(诸如前端总线(fsb)1195)与处理器1110、1115通信。

此外,gmch1120耦合至显示器1145(诸如平板显示器)。gmch1120可以包含集成图形加速器。gmch1120还耦合至输入/输出(i/o)控制器中心(ich)1150,其可以被用于将各种外围设备耦合至系统1100。例如图11的实施例示出的是外部图形设备1160,其可以是耦合至ich1150的分立图形设备,以及另一个外围设备1170。

替代地,额外的或者不同的处理器还可以存在于系统1100中。例如,额外的处理器1115可以包含与处理器1110相同的额外的处理器、与处理器1110异构或者非对称的额外的处理器、加速器(诸如例如图形加速器或者数字信号处理(dsp)单元)、现场可编程门阵列、或者任何其他处理器。在包含架构、微架构、热、功耗特征等的优点度量谱方面,在物理资源1110、1115之间能够有各种差异。这些差异可以在处理元件1110、1115之间将其自己有效地表现为不对称性和异构性。对于至少一个实施例而言,各种处理元件1110、1115可以驻存在相同的管芯封装中。

现在参考图12,示出的是依据本发明的实施例的第二系统1200的框图。如图12所示,多处理器系统1200是点对点互连系统,并且包含第一处理器1270和经由点对点互连1250耦合的第二处理器1280。如图12所示,每个处理器1270和1280可以是一些版本的处理器1500。

替代地,一个或多个处理器1270、1280可以是除处理器外的元素,诸如加速器或者现场可编程门阵列。

虽然仅示出有2个处理器1270、1280,但要理解的是本发明的范围不限于此。在其他实施例中,一个或多个额外的处理元件可以存在于给定的处理器中。

处理器1270还可以包含集成存储器控制器中心(imc)1272和点对点(p-p)接口1276和1278。类似地,第二处理器1280可以包含imc1282和p-p接口1286和1288。处理器1270、1280可以使用点对点(p-p)接口电路1278、1288经由p-p接口1250来交换数据。如图12所示,imc的1272和1282将处理器耦合至相应存储器,即存储器1242和存储器1244,其可以是本地附接至相应处理器的主存储器的部分。

处理器1270、1280的每个可以经由单独p-p接口1252、1254,使用点对点接口电路1276、1294、1286、1298,与芯片组1290交换数据。芯片组1290还可以经由高性能图形接口1239与高性能图形电路1238交换数据。

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

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

如图12所示,各种i/o设备1214可以耦合至第一总线1216、以及将第一总线1216耦合至第二总线1220的总线桥1218。在一个实施例中,第二总线1220可以是低针数(lpc)总线。各种设备可以耦合至第二总线1220,例如在一个实施例中包含键盘/鼠标1222、通信设备1226和数据存储单元1228(诸如可以包含代码1230的盘驱动器或者其他海量存储设备)。此外,音频i/o1224可以耦合至第二总线1220。要注意的是,其他架构是可能的。例如,不是图12的点对点架构,系统可以实现多点分支总线或者其他这样的架构。

现在参考图13,示出的是依据本发明的实施例的第三系统1300的框图。图12和13中相似的元素承载了相似的附图标记,并且图12的某些方面已从图13省略,以避免模糊图13的其他方面。

图13示出了处理元件1270、1280可以分别包含集成存储器和i/o控制逻辑(“cl”)1272和1282。对于至少一个实施例,cl1272、1282可以包含存储器控制器中心逻辑(imc),诸如结合图8、9和12上述的那样。此外,cl1272、1282还可以包含i/o控制逻辑。图13示出了不仅存储器1242、1244耦合至cl1272、1282,而且i/o设备1314也耦合至控制逻辑1272、1282。旧有i/o设备1315耦合至芯片组1290。

现在参考图14,示出的是依据本发明的实施例的soc1400的框图。图15中的类似的元素承载了相似的附图标记。另外,虚线框是更高级soc的可选的特征。在图14中,互连单元1402耦合至:应用处理器1410,其包含一个或多个核心1502a-n和共享缓存单元1506的集合;系统代理单元1510;总线控制器单元1516;集成存储器控制器单元1514;一个或多个介质处理器1420的集合,其可以包含集成图形逻辑1508、用于提供静止和/或视频照相机功能的图像处理器1424、用于提供硬件音频加速的音频处理器1426、以及用于提供视频编码/解码加速的视频处理器1428;静态随机存取存储器(sram)单元1430;直接存储器存取(dma)单元1432;以及用于耦合至一个或多个的外部显示器的显示器单元1440。

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

程序代码可以适用到输入数据来执行本文说明的功能并产生输出信息。输出信息可以以已知的方式应用到一个或多个输出设备。出于本申请的目的而言,处理系统包含具有处理器(诸如例如数字信号处理器(dsp)、微控制器、特定应用集成电路(asic)、或者微处理器)的任何系统。

程序代码可以用高级过程或者面向对象编程语言实现来与处理系统通信。如果需要的话,程序代码还可以用汇编或者机器语言实现。实际上,本文说明的机构的范围不限于任何特定编程语言。在任何情况下,语言可以是编译或解释的语言。

至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令实现,其代表处理器内的各种逻辑,当由机器读出时,使机器生成执行本文说明的技术的逻辑。该代表被称为“ip核”,可以被存储在有形、机器可读介质中,并供应至各种客户或者制造设施,以载入到实际上制作逻辑或者处理器的生成机器中。

这样的机器可读存储介质可以包含但不限于:非暂时性、由机器或者设备制造或形成的物品的有形布置,包含存储介质(诸如硬盘)、任何其他类型的盘(包含软盘、光盘(压缩光盘只读存储器(cdrom)、压缩可重写光盘(cd-rw))、以及磁光盘)、半导体设备(诸如只读存储器(rom)、随机存取存储器(ram)(诸如动态随机存取存储器(dram)、静态随机存取存储器(sram))、可擦除可编程只读存储器(eprom)、闪存存储器、电可擦除可编程只读存储器(eeprom))、磁或者光卡、或者适于存储电子指令的任何其他类型的介质。

相应地,本发明的实施例还包含含有矢量友好指令格式的指令的或者含有设计数据的非暂时性、有形机器可读介质,诸如定义了本文说明的构造、电路、装置、处理器和/或系统特征的硬件描述语言(hdl)。这样的实施例还可以称作程序产品。

在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令翻译(例如使用静态二进制翻译、包含动态汇编的动态二进制翻译)、变形、模拟、或者转换至通过核心处理的一个或多个其他指令。指令转换器可以实现在软件、硬件、固件、或者其组合中。指令转换器可以在处理器上、在处理器外、或者部分在处理器上部分在处理器外。

图16是根据本发明的实施例的对比用于将源指令集中的二进制指令转换至目标指令集中的二进制指令的软件指令转换器的使用的框图。在示出的实施例中,指令转换器是软件指令转换器,尽管替代地指令转换器可以实现在软件、固件、硬件、或者各种其组合中。图16示出以高级语言1602写的程序可以使用x86编译器1604编译,以产生可以由具有至少一个x86指令集核心的处理器1616原生执行的x86二进制代码1606(假定编译的一些指令是矢量友好指令格式)。具有至少一个x86指令集核心的处理器1616代表:能够执行与具有至少一个x86指令集核心的英特尔处理器实质上相同功能的任何处理器,是通过兼容执行或者处理(1)英特尔x86指令集核心的指令集的实质部分,或者(2)目标为运行在具有至少一个x86指令集核心的英特尔处理器上的应用或者其他软件的目标代码版本,以实现与具有至少一个x86指令集核心的英特尔处理器实质上相同的结果。x86编译器1604代表可操作来产生x86二进制代码1606(例如目标代码)的编译器,无论是否有额外的链接处理,其可以在具有至少一个x86指令集核心的处理器1616上执行。类似地,图90示出以高级语言1602写的程序可以使用替代的指令集编译器1608来进行编译,以产生替代的指令集二进制代码1610,其可以由没有至少一个x86指令集核心的处理器1614原生执行(例如,具有执行mipstechnologiesofsunnyvale,ca的mips指令集的核心和/或执行armholdingsofsunnyvale,ca的arm指令集的核心的处理器)。指令转换器1612被用于将x86二进制代码1606转换为可以由没有x86指令集核心的处理器1614原生执行的代码。该转换的代码不太可能与替代的指令集二进制代码1610相同,因为难以做出能够进行该操作的指令转换器;然而,转换的代码将完成一般操作,并由来自替代的指令集的指令构成。因此,指令转换器1612代表软件、固件、硬件、或者其组合,通过模拟、仿真或者任何其他处理,允许不具有x86指令集处理器或者核心的处理器或者其他电子设备执行x86二进制代码1606。

本文公开的矢量友好指令格式中的指令的某些操作可以由硬件部件执行,并可以实施在机器可执行指令(其被用于使或者至少导致:用执行该操作的指令编程的电路或者其他硬件部件)中。电路可以包含通用或者特殊用途处理器、或者逻辑电路,仅举几个例子。操作还可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可以包含:响应于从机器指令导出的机器指令或者一个或多个控制信号来存储指明指令的结果操作数的、特定或者特别电路或者其他逻辑。例如,本文公开的指令的实施例可以在图11-16的一个或多个系统中执行,并且矢量友好指令格式中的指令的实施例可以存储在系统中要执行的程序代码中。另外,这些图的处理元件可以利用本文详述的一个详细的流水线和/或架构(例如按序和乱序架构)。例如,按序架构的解码单元可以将指令解码,将解码指令传递至矢量或者标量单元等

上述说明旨在示出本发明的优选实施例。另外从上述讨论应该显而易见的是尤其是在技术的这样的、成长快速且进一步的发展难以预料的领域中,本发明在布置中能够被修改,并由本领域的技术人员细化,而不脱离所附的权利要求和其等同物的范围内的本发明的原理。例如,方法的一个或多个操作可以合成或者进一步拆开。

替代实施例

虽然已说明的实施例将原生执行矢量友好指令格式,但本发明的替代实施例可以通过运行在执行不同指令集的处理器(例如,执行mipstechnologiesofsunnyvale,ca的mips指令集的处理器、执行armholdingsofsunnyvale,ca的arm指令集的处理器)上的模拟层来执行矢量友好指令格式。另外,虽然图中的流程图示出由本发明的某些实施例执行的操作的特定顺序,但应该理解的是这样的顺序是示例性的(例如,替代实施例可以以不同顺序执行操作,组合某些操作,重叠某些操作等)。

在上述说明中,出于解释的目的,已叙述了大量具体细节,以提供对本发明的实施例的彻底理解。然而,本领域的技术人员可以知晓的是一个或多个其他实施例可以被实践而没有这些具体细节中的一些。说明的特定实施例被提供不是限制本发明,而是示出本发明的实施例。本发明的范围不由上述特定示例确定,而仅由权利要求确定。

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