异构处理器装置和方法_5

文档序号:9383059阅读:来源:国知局
w*索引 +基址+按比例缩放的位移的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的 内容乘以存储器操作数总尺寸(N)以生成在计算有效地址中使用的最终位移。N的值由处 理器硬件在运行时基于完整操作码字段1574(在本文中描述的)和数据操纵字段1554C确 定。位移字段1562A和位移因数字段1562B可以不用于无存储器访问1505的指令模板,并 且/或者不同的实施例可实现两者中的仅一个或不实现两者中的任一个,在这个意义上, 位移字段1562A和位移因数字段1562B是可选的。
[0154] 数据元素宽度字段1564 -其内容区分将使用多个数据元素宽度中的哪一个(在 一些实施例中用于所有指令,在其他实施例中仅用于指令中的一些)。如果支持仅一个数据 元素宽度,并且/或者使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的, 在这个意义上该字段是可选的。
[0155] 写掩码字段1570 -其内容在每一数据元素位置的基础上控制目的地向量操作数 中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码 操作,而B类指令模板支持合并写掩码操作和归零写掩码操作两者。当合并时,向量掩码允 许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于 更新;在其他实施例中,保持其中对应掩码位具有〇的目的地的每一元素的旧值。相反,当 归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间,使目的地中 的任何元素集归零;在一个实施例中,当对应掩码位具有O值时,将目的地的元素设置为0。 该功能的子集是控制正在被执行的操作的向量长度的能力(即,从第一个到最后一个被修 改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段1570允许部 分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段1570的内容选 择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此写掩码 字段1570的内容间接地标识了要执行的掩码操作)的本发明的实施例,但是替代实施例相 反或另外允许掩码写字段1570的内容直接地指定要执行的掩码操作。
[0156] 立即数字段1572 -其内容允许对立即数的指定。该字段在不支持立即数的通用 向量友好格式的实现中不存在,并且在不使用立即数的指令中不存在,在这个意义上该字 段是可选的。
[0157] 类字段1568 -其内容在不同类的指令之间进行区分。参考图15A-B,该字段的内 容在A类和B类指令之间进行选择。在图15A-B中,圆角方形用于指示专用值存在于字段 中(例如,在图15A-B中分别用于类字段1568的A类1568A和B类1568B)。
[0158] A类指令模板
[0159] 在A类非存储器访问1505的指令模板的情况下,α字段1552被解释为其内容 区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作1510 和无存储器访问的数据变换型操作1515的指令模板,分别指定舍入1552Α. 1和数据变换 1552Α. 2)的RS字段1552Α,而β字段1554区分要执行指定类型的操作中的哪一种。在无 存储器访问1505指令模板中,比例字段1560、位移字段1562Α以及位移比例字段1562Β不 存在。
[0160] 无存储器访问的指令模板一完全舍入控制型操作
[0161] 在无存储器访问的完全舍入控制型操作1510的指令模板中,β字段1554被解释 为其内容提供静态舍入的舍入控制字段1554Α。尽管在本发明的所述实施例中,舍入控制字 段1554Α包括抑制所有浮点异常(SAE)字段1556和舍入操作控制字段1558,但是替代实 施例可支持这两个概念,并且可将这两个概念都编码成相同的字段,或者仅具有这些概念/ 字段中的一个或另一个(例如,可仅具有舍入操作控制字段1558)。
[0162] SAE字段1556 -其内容区分是否禁用异常事件报告;当SAE字段1556的内容指 示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处 理程序。
[0163] 舍入操作控制字段1558 -其内容区分执行一组舍入操作中的哪一个(例如,向上 舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段1558允许逐指令地 改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例 中,舍入操作控制字段1550的内容覆盖该寄存器值。
[0164] 无存储器访尚的指令樽板一数据夺换铟橾作
[0165] 在无存储器访问的数据变换型操作1515的指令模板中,β字段1554被解释为数 据变换字段1554Β,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、 广播)。
[0166] 在A类存储器访问1520的指令模板的情况下,α字段1552被解释为驱逐提示 字段1552B,其内容区分要使用驱逐提示中的哪一个(在图16A中,对于存储器访问时效性 1525的指令模板和存储器访问非时效性1530的指令模板分别指定时效性的1552B. 1和非 时效性的1552B. 2),而β字段1554被解释为数据操纵字段1554C,其内容区分要执行多个 数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换 以及目的地的向下转换)。存储器访问1520的指令模板包括比例字段1560,并可选地包括 位移字段1562A或位移比例字段1562B。
[0167] 向量存储器指令使用转换支持来执行来自存储器的向量加载和去往存储器的向 量存储。如同寻常的向量指令,向量存储器指令以数据元素式的方式往返于存储器传输数 据,其中,实际传输的元素由被选为写掩码的向量掩码的内容规定。
[0168] 存储器访问的指令模板一时效性的
[0169] 时效性的数据是可能足够快地被重新使用以从高速缓存操作中受益的数据。然 而,这是提示,且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
[0170] 存储器访问的指令樽板一非时效件的
[0171] 非时效性的数据是不可能被足够快地重新使用以从第一级高速缓存中的高速缓 存操作中受益且应当被给予驱逐优先级的数据。然而,这是提示,且不同的处理器可以不同 的方式实现它,包括完全忽略该提示。
[0172] B类指令模板
[0173] 在B类指令模板的情况下,α字段1552被解释为写掩码控制(Z)字段1552C,其 内容区分由写掩码字段1570控制的写掩码操作应当是合并还是归零。
[0174] 在B类非存储器访问1505的指令模板的情况下,β字段1554的部分被解释为RL 字段1557Α,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的 写掩码控制部分舍入控制类型操作1516的指令模板和无存储器访问的写掩码控制VSIZE 型操作1517的指令模板,分别指定舍入1557Α. 1和向量长度(VSIZE) 1557Α. 2),而β字段 1554的其余部分区分要执行指定类型的操作中的哪一种。在无存储器访问1505指令模板 中,比例字段1560、位移字段1562Α以及位移比例字段1562Β不存在。
[0175] 在无存储器访问的写掩码控制的部分舍入控制型操作1510的指令模板中,β字 段1554的其余部分被解释为舍入操作字段1559Α,并且禁用异常事件报告(给定的指令不 报告任何种类的浮点异常标志,并且不唤起任何浮点异常处理程序)。
[0176] 舍入操作控制字段1559Α -就如同舍入操作控制字段1558,其内容区分一组舍入 操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)要执行。由此,舍 入操作控制字段1559Α允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式 的控制寄存器的本发明的一个实施例中,舍入操作控制字段1550的内容覆盖该寄存器值。
[0177] 在无存储器访问的写掩码控制VSIZE型操作1517的指令模板中,β字段1554的 其余部分被解释为向量长度字段1559Β,其内容区分要执行多个数据向量长度中的哪一个 (例如,168字节、256字节或516字节)。
[0178] 在B类存储器访问1520的指令模板的情况下,β字段1554的部分被解释为广播 字段1557Β,其内容区分是否要执行广播型数据操纵操作,而β字段1554的其余部分被解 释为向量长度字段1559Β。存储器访问1520的指令模板包括比例字段1560,并可选地包括 位移字段1562Α或位移比例字段1562Β。
[0179] 针对通用向量友好指令格式1500,示出完整操作码字段1574包括格式字段1540、 基础操作字段1542以及数据元素宽度字段1564。尽管示出了其中完整操作码字段1574包 括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段 1574包括少于所有这些字段的字段。完整操作码字段1574提供操作码(opcode)。
[0180] 扩充操作字段1550、数据元素宽度字段1564以及写掩码字段1570允许以通用向 量友好指令格式逐指令地指定这些特征。
[0181] 写掩码字段和数据元素宽度字段的组合创建类型化的指令,因为它们允许基于不 同的数据元素宽度应用该掩码。
[0182] 在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些 实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类或者可支持两类。举例 而言,旨在用于通用计算的高性能通用无序核可仅支持B类,旨在主要用于图形和/或科 学(吞吐量)计算的核可仅支持A类,并且旨在用于两者的核可支持两者(当然,具有来自 两类的模板和指令的一些混合、但是并非来自两类的所有模板和指令的核在本发明的范围 内)。同样,单一处理器可包括多个核,所有核支持相同的类或者其中不同的核支持不同的 类。举例而言,在具有单独的图形和通用核的处理器中,旨在主要用于图形和/或科学计算 的图形核中的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计 算的、仅支持B类的无序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另 一处理器可包括既支持A类又支持B类的一个或多个通用有序或无序核。当然,在本发明 的不同实施例中,来自一类的特征也可在其他类中实现。可使以高级语言撰写的程序成为 (例如,恰被及时编译或静态编译)各种不同的可执行形式,包括:1)仅具有由用于执行的 目标处理器支持的类的指令的形式;或者2)具有使用所有类的指令的不同组合而编写的 替代例程且具有选择这些例程以基于由当前正在执行代码的处理器支持的指令而执行的 控制流代码的形式。
[0183] 图16A-D是示出根据本发明的多个实施例的示例性专用向量友好指令格式的框 图。图16A-D示出专用向量友好指令格式1600,其指定位置、尺寸、解释和字段的次序以及 那些字段中的一些字段的值,在这个意义上向量友好指令格式1600是专用的。专用向量友 好指令格式1600可用于扩展x86指令集,并且由此这些字段中的一些与现有x86指令集及 其扩展(例如,AVX)中使用的那些字段类似或相同。该格式保持与具有扩展的现有x86指 令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段、以及立即数字 段一致。示出来自图15的、将来自图16的字段映射到其的字段。
[0184] 应当理解,虽然出于说明的目的,在通用向量友好指令格式1500的上下文中参考 专用向量友好指令格式1600描述了本发明的多个实施例,但是本发明不限于专用向量友 好指令格式1600,除非另有声明。例如,通用向量友好指令格式1500构想各种字段的各种 可能的尺寸,而专用向量友好指令格式1600被示出为具有特定尺寸的字段。作为具体示 例,尽管在专用向量友好指令格式1600中,数据元素宽度字段1564被示出为一位的字段, 但是本发明不限于此(也就是说,通用向量友好指令格式1500构想数据元素宽度字段1564 的其他尺寸)。
[0185] 通用向量友好指令格式1500包括以下按照图16A中示出的顺序列出的下列字段。
[0186] EVEX前缀(字节0-3) 1602 -以四字节形式进行编码。
[0187] 格式字段1640(EVEX字节0,位[7:0]) -第一字节(EVEX字节0)是格式字段 1640,并且它包含0x62 (在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
[0188] 第二一第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
[0189] REX 字段 1605 (EVEX 字节 1,位[7-5]) -由 EVEX. R 位字段(EVEX 字节 1,位[7]-R)、EVEX. X 位字段(EVEX 字节 1,位[6] -X)以及(1557BEX 字节 1,位[5] -B)组成。EVEX. R、EVEX. X和EVEX. B位字段提供与对应VEX位字段相同的功能,并且使用1补码的形式进行 编码,即ZMMO被编码为1611B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域 中已知的寄存器索引的较低三个位(rrr、XXX以及bbb)进行编码,由此可通过增加 EVEX. R、EVEX. X 以及 EVEX. B 来形成 Rrrr、Xxxx 以及 Bbbb。
[0190] REX'字段1605 -这是REX'字段1510的第一部分,并且是用于对扩展的32个 寄存器集合的较高16个或较低16个寄存器进行编码的EVEX. R'位字段(EVEX字节1,位 [4] -R')。在本发明的一个实施例中,该位与以下指示的其他位一起以位反转的格式被存 储以(在公知x86的32位模式下)与实操作码字节是62的BOUND指令进行区分,但是在 MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;本发明的替代实施例不以反 转的格式存储该以下其他被指示的位。值1用于对较低16个寄存器进行编码。换句话说, 通过组合EVEX. R'、EVEX. R、以及来自其他字段的其他RRR来形成R' Rrrr。
[0191] 操作码映射字段1615(EVEX字节1,位[3:0] -_m)-其内容对隐含的前导操作 码字节(0F、0F 38、或OF 3)进行编码。
[0192] 数据元素宽度字段1664 (EVEX字节2,位[7] -W) -由记号EVEX. W表示。EVEX. W 用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
[0193] EVEX. WVV 1620 (EVEX 字节 2,位[6:3]-vvvv) - EVEX. WVV 的作用可包括如下: 1)以反转(1补码)形式被指定并且对具有2个或更多源操作数的指令有效VEX. VVVV对第 一源寄存器操作数进行编码;2)针对某些向量偏移以1补码形式被指定的VEX. VVVV对目 的地寄存器操作数进行编码;或者3) VEX. VVVV不对任何操作数进行编码,保留该字段。由 此,EVEX. VVVV字段1620对以反转(1补码)的形式存储的第一源寄存器指定符的4个低 阶位进行编码。取决于该指令,附加的不同的EVEX位字段用于将指定符尺寸扩展到32个 寄存器。
[0194] EVEX. U 1668类字段(EVEX字节2,位[2]-U) -如果EVEX. U = 0,则它指示A类或 EVEX. UO ;如果 EVEX. U = 1,则它指示 B 类或 EVEX. Ul。
[0195] 前缀编码字段1625(EVEX字节2,位[1:0]-ρρ) -提供了用于基础操作字段的附加 位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SHffi前缀的益 处(EVEX前缀只需要2位,而不是需要字节来表达SHffi前缀)。在一个实施例中,为了支持 使用以传统格式和以EVEX前缀格式两者的S頂D前缀(66H、F2H、F3H)的传统SSE指令,将 这些传统S頂D前缀编码为S頂D前缀编码字段;在提供给解码器的PLA之前,在运行时可被 扩展为传统S頂D前缀(因此,PLA可执行传统和EVEX格式的这些传统指令,而无需修改)。 虽然较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是为了一致性,某 些实施例以类似的方式扩展,但允许由这些传统SHffi前缀指定不同的含义。替代实施例可 重新设计PLA以支持2位SHffi前缀编码,并且因此不需要扩展。
[0196] α 字段 1652 (EVEX 字节 3,位[7] - H1,也称为 EVEX. HI、EVEX. rs、EVEX. RU EVEX. 写掩码控制、以及EVEX. N ;也以α示出)一如先前所述,该字段是针对上下文的。
[0197] β 字段 1654 (EVEX 字节 3,位[6:4]-SSS,也称为 EVEX. S
当前第5页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1