使用索引阵列和有限状态机的分散的制作方法

文档序号:6498593阅读:204来源:国知局
使用索引阵列和有限状态机的分散的制作方法
【专利摘要】公开了使用索引阵列和有限状态机进行分散/聚集操作的方法和装置。装置的实施例可包括:解码逻辑,用于解码分散/聚集指令并生成微操作。索引阵列保持一组索引和相应的一组掩码元素。有限状态机促成分散操作。地址生成逻辑至少针对具有第一值的每个相应掩码元素从该组索引中的索引生成地址。在缓冲器中为所生成的该组地址中的每个地址分配存储。将对应于所生成的该组地址的数据元素复制到缓冲器。如果相应的掩码元素具有所述第一值,则访问该组中的地址以存储数据元素,并且响应于其相应存储的完成,掩码元素被改变为第二值。
【专利说明】使用索引阵列和有限状态机的分散

【技术领域】
[0001] 本公开一般涉及计算和/或通信领域。具体而言,本公开涉及响应于和/或为了 支持分散/聚集操作而使用索引阵列和有限状态机。

【背景技术】
[0002] 目前的诸多处理器通常包括用于提供计算密集型操作但提供高度数据并行性的 指令,这些指令可通过使用多种数据存储设备的高效实现来使用,这些数据存储设备诸如: 单指令多数据(SIMD)向量寄存器。
[0003] 对于一些应用,例如针对诸如三维(3D)图像渲染之类的操作,存储器访问可能是 复杂的、不一致的、或不连续的。向量化过程所使用的存储器可能并非总是连续的或者处于 毗邻存储器位置。多种架构可能需要额外的指令来在执行任何算术运算之前对寄存器中的 数据进行排序,这最小化了指令吞吐量并显著增加了所需时钟周期的数量。
[0004] 用于改善存储器访问和对往来于更宽向量的数据进行排序的机制可包括实现聚 集和分散操作,以针对来自其他非本地和/或不连续的存储器位置的数据产生本地连续存 储器访问。聚集操作可从存储装置中的一组不连续或随机的存储器位置收集数据,并将不 同的数据组合到打包结构中。分散操作可将打包结构中的元素散开至一组不连续或随机的 存储器位置。
[0005] 另外,这些存储器位置中的一些可能未被高速缓存,或可能已经被移出物理存储 器的页。如果聚集操作由于页故障或一些其他原因而中断,在一些架构下,机器的状态可能 未保存,从而需要重复整个聚集操作,而不是在聚集操作中断之处重新开始。由于在任一聚 集操作上可能需要多次存储器访问,所以可能需要许多时钟周期来完成,任何后续的依赖 算术运算必须等待该聚集操作完成。这样的延迟代表瓶颈,该瓶颈会限制例如从宽或大宽 度向量架构原本预期的性能优势。
[0006] 用于改进存储器访问并对往来于较宽向量的数据进行排序的替换机制可包括使 用计算机中的不同存储器芯片向或从数据向量并行地加载或存储分开的字。再次,这些存 储器位置中的一些可能已经被移出物理存储器的页,且因此重启因页故障或其他某些原因 而中断的操作仍然存在问题,但这次,加载或存储可并行地执行。于是,按正确次序解决此 类故障可能是困难的或者要求串行化,并且所有加载或存储可能需要在解决此类故障之前 完成。
[0007] -些机制可包括使用完成掩码来实现聚集和分散以分别跟踪个体加载和存储的 完成,但用于向量寄存器和完成掩码的物理寄存器存储可能更靠近具有用于执行SMD类 型算术的宽数据路径的执行单元而非例如用于访问存储器的地址生成逻辑。在此类情形 中,从向量寄存器中的个体数据元素生成用于访问非本地和/或不连续的存储器位置的地 址并跟踪个体完成掩码也会减少执行宽SMD类型聚集或分散操作所期望的益处。
[0008] 到目前为止,尚未充分探索针对这样的性能受限问题和瓶颈的潜在解决方案。

【专利附图】

【附图说明】
[0009] 在附图的各图中通过示例而非限制地示出本发明。
[0010] 图1示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态 机的计算系统的一个实施例。
[0011] 图2示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态 机的处理器的一个实施例。
[0012] 图3A示出根据一个实施例的用于提供向量分散和/或聚集功能的指令编码。
[0013] 图3B示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
[0014] 图3C示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
[0015] 图3D示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
[0016] 图3E示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
[0017] 图4A示出用于执行提供向量分散和/或聚集功能的指令的处理器微架构中的各 级的一个实施例的框图。
[0018] 图4B示出用于执行提供向量分散和/或聚集功能的指令的处理器微架构的一个 实施例的要素。
[0019] 图5示出有条件地将一组元素加载到目的地SIMD寄存器中的聚集指令的一个实 施例。
[0020] 图6示出有条件地存储来自源SMD寄存器的一组元素的分散指令的一个实施例。
[0021] 图7是支持分散和/或聚集操作的系统中的数据流的示意说明。
[0022] 图8A示出响应于和/或为了支持聚集操作而使用索引阵列和有限状态机的装置 的一个实施例。
[0023] 图8B示出响应于和/或为了支持分散操作而使用索引阵列和有限状态机的装置 的一个实施例。
[0024] 图9是用于执行提供向量分散和/或聚集功能的指令的系统的实施例的框图。
[0025] 图10是用于执行提供向量分散和/或聚集功能的指令的片上系统的一个实施例 的框图。
[0026] 图11示出用于转换提供向量分散和/或聚集功能的指令的系统的一个实施例。
[0027] 图12示出用于支持聚集操作的过程的一个实施例的流程图。
[0028] 图13示出用于支持聚集操作的过程的替换实施例的流程图。
[0029] 图14示出用于支持聚集操作的过程的另一替换实施例的流程图。
[0030] 图15示出用于支持分散操作的过程的一个实施例的流程图。
[0031] 图16示出用于支持分散操作的过程的替换实施例的流程图。
[0032] 图17示出用于支持分散操作的过程的另一替换实施例的流程图。

【具体实施方式】
[0033] 聚集和分散操作重排所存储的数据元素以供SIMD硬件使用。聚集操作从存储器 读取一组数据元素并将它们打包在一起,通常打包至单个寄存器或高速缓存线中。分散操 作通过将打包数据结构中的数据元素散开至一组不连续或随机的存储器位置来执行相反 操作。除了与访问一级或多级存储器相关联的延迟以外,在聚集或分散操作期间的中断 (例如,由于重复的页故障)可显著地增大与这些操作相关联的开销,因为由该操作所作的 任何进展通常在返回至该操作的开始之前被丢弃。美国专利申请No. 2009/0172364 (其一 部分已被纳入于此)公开了聚集、分散和预取实现,其在被中断时可保存操作状态。因此, 当操作重启时,可能不需要重复整个操作。
[0034] 使用完成掩码来实现聚集和分散操作以分别跟踪个体加载和存储的完成可能要 求从向量寄存器中的个体数据元素生成用于访问个体非本地和/或不连续的存储器位置 的地址并在其完成之际跟踪个体完成掩码元素。但用于向量寄存器和完成掩码的物理寄存 器存储可能更靠近具有用于执行SIMD类型算术的宽数据路径的执行单元而非例如用于访 问个体非本地和/或不连续的存储器位置的地址生成逻辑。在此类情形中,分开地生成用 于针对向量寄存器中的个体数据元素中的每一者例如使用多个个体微操作(uop)来访问 个体存储器位置以及用于跟踪个体完成掩码的地址会减少执行宽SMD类型聚集或分散操 作所期望的益处。另外,向地址生成逻辑、以及向(或从)存储器访问单元传达向量寄存器 中的个体数据元素和完成掩码是需要解决的另一个技术问题。
[0035] 本文公开了对分散和/或聚集操作使用索引阵列和有限状态机而无需调度多个 单独微操作来为向量寄存器中的各个数据元素中的每一者生成地址或者跟踪各个完成掩 码的新颖方法和装置。一种装置的实施例可包括索引阵列,用于存储从SIMD向量寄存器传 输来的一组索引以及相应的一组掩码元素。与索引阵列耦合的有限状态机(FSM)可通过地 址生成逻辑使用该组索引和相应的掩码元素来促成分散/聚集操作,该地址生成逻辑响应 于FSM至少针对每个相应的未被掩码的元素从索引阵列中的索引生成地址。与地址生成逻 辑耦合的存储器访问单元访问所生成的相应存储器位置以存储或加载相应数据。一些实施 例可使用索引阵列和地址生成逻辑来分开地为每个元素生成地址。在一些实施例中,可通 过微操作的引退来跟踪(例如,在重排序缓冲器中)分散/聚集操作的完成。
[0036] 在分散操作的情形中,在缓冲器中分配存储以保持对应于所生成的地址的数据元 素,用于由存储器访问单元存储至相应的存储器位置。在一些实施例中,所有数据元素可一 次性地(例如,使用单个微操作)被写入缓冲器以用于分散操作。在成功完成相应存储之 际,FSM改变相应的掩码元素。在一些实施例中,分散操作的成功完成可通过微操作的执行 来进行。在一些实施例中,此类微操作可在FSM成功完成相应存储之际引退。
[0037] 在聚集操作的情形中,可操作地与存储器访问单元和SIMD向量寄存器耦合的数 据合并逻辑将相应的数据元素根据在其相应索引中的相应位置来写入寄存器内位置处。例 如,在一个实施例中,数据可被广播至所有位置,且单独的相应索引可被用作掩码以仅改变 单个位置。在替换实施例中,多个位置可并发地被改变。在成功完成相应加载之际,FSM改 变相应的掩码元素。
[0038] 将领会,通过调度仅少数微操作以将来自SIMD向量寄存器的一组索引和相应的 一组掩码元素传输至索引阵列并初始化有限状态机以与其他指令的执行并行地或并发地 并且响应于和/或为了支持分散和/或聚集操作而存储或加载数据,指令吞吐量可得以改 进。
[0039] 在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构状况、事件、启用机制等 多种特定细节,以提供对本发明实施例的更透彻理解。然而,本领域技术人员应当领会,没 有这些具体细节也可实践本发明。此外,没有详细示出一些公知的结构、电路等等,以避免 不必要地模糊本发明的实施例。
[0040] 本发明的这些和其他实施例可根据以下教示来实现,并且应当明显的是,可在以 下教示中作出各种修改和改变而不脱离本发明的较宽泛精神和范围。因此,说明书和附图 应当以说明性而非限制性的意义来对待,并且本发明仅根据权利要求及其等效技术方案来 衡量。
[0041] 图1示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限 状态机的计算系统100的一个实施例。根据本发明,诸如根据在此所描述的实施例,系 统100包括诸如处理器102之类的组件,以采用包括逻辑的执行单元来执行算法以处 理数据。系统100代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的 PENTIUMK ΙΙΙ、ΡΕΝΤ?υΜκ 4、Xeon?、|taniumK、XScale? 和 / 或 StrongARM? 微处理器 的处理系统,不过也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒 等)。在一个实施例中,样本系统1〇〇可执行可从美国华盛顿州雷蒙德市的微软公司获得的 WINDOWS?操作系统的一个版本,不过也可使用其它操作系统(例如UNIX和Linux)、嵌入式 软件、和/或图形用户界面。因此,本发明的各实施例不限于硬件电路和软件的任何具体组 合。
[0042] 实施例不限于计算机系统。本发明的替换实施例可被用于其他设备,诸如手持式 设备和嵌入式应用。手持式设备的一些示例包括:蜂窝电话、互联网协议设备、数码相机、个 人数字助理(PDA)、以及手持式PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、 片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机、或可执行根据至 少一个实施例的一个或多个指令的任何其他系统。
[0043] 图1是计算机系统100的框图,计算机系统100被形成为具有处理器102,处理器 102包括一个或多个执行单元108以执行算法,从而执行根据本发明的一个实施例的至少 一个指令。可能在单处理器桌面或服务器系统的上下文中描述了一个实施例,但替代实施 例可被包括在多处理器系统中。系统100是"中枢"系统架构的示例。计算机系统100包 括处理器102以处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精 简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或 任意其它处理器设备(诸如数字信号处理器)。处理器102耦合至处理器总线110,处理器 总线110可在处理器102与系统100内的其他组件之间传输数据信号。系统100的各元素 执行本领域所熟知的常规功能。
[0044] 在一个实施例中,处理器102包括第一级(L1)内部高速缓存存储器104。取决于 架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。或者,在另一个实施例 中,高速缓存存储器可位于处理器102的外部。其他实施例也可包括内部高速缓存和外部 高速缓存的组合,这取决于特定实现和需求。寄存器组106可在多个寄存器(包括整数寄 存器、浮点寄存器、状态寄存器、指令指针寄存器)中存储不同类型的数据。
[0045] 执行单元108 (包括执行整数和浮点操作的逻辑)也位于处理器102中。处理器 102还包括微代码(ucode) R0M,其存储用于特定宏指令的微代码。对于一个实施例,执行单 元108包括处理打包指令集109的逻辑。通过将打包指令集109包括在通用处理器102的 指令集内并包括相关的电路以执行这些指令,可使用通用处理器102中的打包数据来执行 许多多媒体应用所使用的操作。因此,通过将处理器数据总线的全带宽用于对打包数据进 行操作,许多多媒体应用可获得加速,并更为高效地执行。这能消除在处理器数据总线上传 输更小数据单元以在一个时间对一个数据元素执行一个或多个操作的需要。
[0046] 执行单元108的替换实施例也可被用于微控制器、嵌入式处理器、图形设备、DSP 以及其他类型的逻辑电路。系统1〇〇包括存储器120。存储器120可以是动态随机存取存 储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存储器 120可存储可由处理器102执行的由数据信号表示的指令和/或数据。
[0047] 系统逻辑芯片116耦合至处理器总线110和存储器120。在所示出的实施例中的 系统逻辑芯片116是存储器控制器中枢(MCH)。处理器102可经由处理器总线110与MCH 116通信。MCH 116提供至存储器120的高带宽存储器路径118,用于指令和数据存储,以及 用于存储图形命令、数据和纹理。MCH 116用于引导处理器102、存储器120以及系统100 内的其他组件之间的数据信号,并在处理器总线110、存储器120和系统I/O 122之间桥接 数据信号。在一些实施例中,系统逻辑芯片116可提供图形端口以用于耦合至图形控制器 1120MCH 116经由存储器接口 118耦合至存储器120。图形卡112通过加速图形端口(AGP) 互连114耦合至MCH 116。
[0048] 系统100使用外围设备中枢接口总线122以将MCH 116耦合至I/O控制器中枢 (ICH) 130。ICH 130经由局部I/O总线提供至一些I/O设备的直接连接。局部I/O总线是 高速I/O总线,用于将外围设备连接至存储器120、芯片组以及处理器102。一些示例是音 频控制器、固件中枢(闪存BIOS) 128、无线收发机126、数据存储器124、包括用户输入和键 盘接口的传统I/O控制器、串行扩展端口(诸如通用串行总线USB)以及网络控制器134。 数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容 量存储设备。
[0049] 对于系统的另一个实施例,根据一个实施例的指令可被用于片上系统。片上系统 的一个实施例包括处理器和存储器。用于这样一个系统的存储器是闪存存储器。闪存存储 器可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器 之类的其他逻辑块也可位于片上系统上。
[0050] 图2示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态 机的处理器200的一个实施例。在一些实施例中,根据一个实施例的指令可被实现为对具 有字节大小、字大小、双字大小、四字大小等并具有诸多数据类型(诸如单精度和双精度整 数和浮点数据类型)的数据元素执行操作。在一个实施例中,有序前端201是处理器200 的一部分,其获取将要被执行的指令,并准备这些指令以在稍后供处理器流水线使用。前端 201可包括若干单元。在一个实施例中,指令预取器226从存储器获取指令,并将指令馈送 至指令解码器228,指令解码器228随后解码或解释指令。例如,在一个实施例中,解码器 将所接收到的指令解码为机器可执行的被称为"微指令"或"微操作"(也称为微操作数或 uop)的一个或多个操作。在其他实施例中,解码器将指令解析为操作码和对应的数据及控 制字段,它们被微架构用于执行根据一个实施例的操作。在包括追踪高速缓存230的一个 实施例中,追踪高速缓存230接受经解码的微操作,并将它们组装为微操作队列234中的程 序有序序列或踪迹,以用于执行。当追踪商速缓存230遇到复杂指令时,微代码ROM 232提 供完成操作所需的微操作。
[0051] 一些指令被转换为单个微操作,而其他指令需要若干个微操作以完成整个操作。 在一个实施例中,如果需要4个以上微操作来完成指令,则解码器228访问微代码ROM 232 来进行该指令。对于一个实施例,指令可被解码为少量的微操作以用于在指令解码器228 处进行处理。在另一个实施例中,如果需要若干微操作来完成操作,则可将指令存储在微代 码ROM 232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令 指针,以从微代码ROM 232读取微代码序列以完成根据一个实施例的一个或多个指令。在 微代码ROM 232完成对于指令的微操作序列化之后,机器的前端201恢复从追踪高速缓存 230获取微操作。将领会,包含追踪高速缓存230不是针对所有实施例所必需的。
[0052] 无序执行引擎203是将指令准备好用于执行的单元。无序执行逻辑具有若干个缓 冲器,用于将指令流平滑并且重排序,以在指令进入流水线并被调度以供执行时优化性能。 分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将 诸个逻辑寄存器重命名为寄存器组中的条目。在指令调度器(存储器调度器、快速调度器 202、慢速/通用浮点调度器204、和简单浮点调度器206)之前,分配器也将每个微操作的条 目分配入两个微操作队列中的一个,一个队列用于存储器操作,另一个队列用于非存储器 操作。微操作调度器202、204、206基于对它们的依赖输入寄存器操作数源的准备就绪以及 微操作完成它们的操作所需的执行资源的可用性来确定微操作何时准备好用于执行。一个 实施例的快速调度器202可在主时钟周期的每半个上进行调度,而其他调度器可仅仅在每 个主处理器时钟周期上调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。
[0053] 寄存器组208、210位于调度器202、204、206和执行块211中的执行单元212、214、 216、218、220、222、224之间。也存在单独的寄存器组208、210,分别用于整数和浮点操作。 一个实施例的每个寄存器组208、210也包括旁路网络,旁路网络可将刚完成的还没有被写 入寄存器组的结果旁路或转发给新的依赖微操作。整数寄存器组208和浮点寄存器组210 也能够彼此通信数据。对于一个实施例,整数寄存器组208被划分为两个单独的寄存器组, 一个寄存器组用于低阶的32位数据,第二个寄存器组用于高阶的32位数据。一个实施例 的浮点寄存器组210具有128位宽度的条目,因为浮点指令通常具有从64至128位宽度的 操作数。浮点寄存器组210的一些实施例可具有256位宽或512位宽、或某些其他宽度条 目。对于一些实施例,在浮点寄存器组210中,每个元素可分开地在64位、32位、16位等的 边界处被写入。
[0054] 执行块211包括执行单元212、214、216、218、220、222、224,在这些执行单元中实 际执行指令。该区块包括寄存器组208、210,寄存器组208、210存储微指令需要执行的整 数和浮点数据操作数值。一个实施例的处理器200包括有若干个执行单元:地址生成单元 (AGU)212、AGU 214、快速 ALU 216、快速 ALU 218、慢速 ALU 220、浮点 ALU 222、浮点移动单 元224。对于一个实施例,浮点执行块222、224执行浮点、MMX、SIMD、SSE和AVX、以及其他 操作。一个实施例的浮点ALU 222包括64位X64位浮点除法器,用于执行除法、平方根、 以及余数微操作。对于本发明的诸个实施例,涉及浮点值的指令可使用浮点硬件来处理。 在一个实施例中,ALU操作进入高速ALU执行单元216、218。一个实施例的高速ALU 216、 218可执行高速操作,有效等待时间为半个时钟周期。对于一个实施例,大多数复杂整数操 作进入慢速ALU 220,因为慢速ALU 220包括用于长等待时间类型操作的整数执行硬件,诸 如,乘法器、移位器、标记逻辑和分支处理。存储器加载/存储操作由AGU 212、214来执行。 对于一个实施例,整数ALU 216、218、220在对64位数据操作数执行整数操作的上下文中进 行描述。在替换实施例中,ALU 216、218、220可被实现为支持大范围的数据位,包括16、32、 128、256等等。类似地,浮点单元222、224可被实现为支持具有多种宽度的位的操作数范 围。对于一个实施例,浮点单元222、224可结合SMD和多媒体指令对128位宽度打包数据 操作数进行操作。
[0055] 在一个实施例中,在父加载完成执行之前,微操作调度器202、204、206就分派依 赖操作。因为在处理器200中微操作被投机地调度和执行,所以处理器200也包括处理存储 器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可能存在带有临时错误数据 离开调度器并运行在流水线中的依赖操作。在一些实施例中,重放机制可跟踪使用错误数 据的指令,并重新执行这些指令。仅仅依赖操作需要被重放,而允许独立操作完成。处理器 的一个实施例的调度器和重放机制也被设计为捕捉提供向量分散和/或聚集功能的指令。 在没有重放机制的一些替换实施例中,可阻止微操作的投机式执行并且依赖微操作可驻留 在调度器202、204、206中,直至所述依赖微操作被取消、或者直至所述依赖微操作不能被 取消。
[0056] 术语"寄存器"可指代被用作为指令的一部分以标识操作数的板上处理器存储位 置。换句话说,寄存器是那些处理器外部(从编程者的角度来看)可用的处理器存储位置。 然而,一实施例的寄存器不限于表示特定类型的电路。相反,一实施例的寄存器能够存储 并提供数据,并且能够执行在此所述的功能。在此所述的寄存器可由处理器中的电路使用 任何数量不同技术来实现,诸如,专用物理寄存器、使用寄存器重命名的动态分配物理寄存 器、专用和动态分配物理寄存器的组合,等等。在一个实施例中,整数寄存器存储32位整数 数据。一个实施例的寄存器组也包含八个多媒体SIMD寄存器,用于打包数据。对于以下讨 论,寄存器应被理解为设计成保存打包数据的数据寄存器,诸如来自美国加利福尼亚州圣 克拉拉市的英特尔公司的启用了 MMX技术的微处理器的64位宽MMX?寄存器(在一些实例 中也称为"mm"寄存器)。这些MMX寄存器(可用在整数和浮点形式中)可与伴随SMD和 SSE指令的打包数据元素一起操作。涉及SSE2、SSE3、SSE4(统称为"SSEx")技术的128位 宽XMM寄存器也可被用于保持这样的打包数据操作数。类似地,涉及AVX、AVX2、AVX3技术 (或更高级技术)的256位宽YMM寄存器和512位宽ZMM寄存器可与XMM寄存器重叠并且 可被用于保持这样的较宽打包数据操作数。在一个实施例中,在存储打包数据和整数数据 时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点可被包括在相同的寄 存器组中,或被包括在不同的寄存器组中。进一步的,在一个实施例中,浮点和整数数据可 被存储在不同的寄存器中,或被存储在相同的寄存器中。
[0057] 图3A是与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www) intel. com/products/processor/manuals/ 上获得的"丨ntel? 64 和 IA-32 英特尔架构软 件开发者手册组合卷2A和2B :指令集参考A-Z (Intel? 64and IA_32Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B:Instruction Set Reference A-Z)"中描述的操作码格式类型相对应的具有32或更多位的操作编码(操作 码)格式360以及寄存器/存储器操作数寻址模式的一个实施例的描述。在一个实施例中, 可通过一个或更多个字段361和362来编码指令。可以标识每个指令高达两个操作数位置, 包括高达两个源操作数标识符364和365。对于一个实施例,目的地操作数标识符366与源 操作数标识符364相同,而在其他实施例中它们不相同。对于替代实施例,目的地操作数标 识符366与源操作数标识符365相同,而在其他实施例中它们不相同。在一个实施例中,由 源操作数标识符364和365所标识的源操作数中的一个被指令的结果所覆写,而在其他实 施例中,标识符364对应于源寄存器元素,而标识符365对应于目的地寄存器元素。对于一 个实施例,操作数标识符364和365可被用于标识32位或64位的源和目的地操作数。
[0058] 图3B示出了具有40或更多位的另一个替代操作编码(操作码)格式370。操作 码格式370对应于操作码格式360,并包括可选的前缀字节378。根据一个实施例的指令 可通过字段378、371和372中的一个或多个来编码。通过源操作数标识符374和375以 及通过前缀字节378,可标识每个指令中高达两个操作数位置。对于一个实施例,前缀字节 378可被用于标识32位或64位的源和目的地操作数。对于一个实施例,目的地操作数标 识符376与源操作数标识符374相同,而在其他实施例中它们不相同。对于替代实施例,目 的地操作数标识符376与源操作数标识符375相同,而在其他实施例中它们不相同。在一 个实施例中,指令对由操作数标识符374和375所标识的一个或多个操作数进行操作,并且 由操作数标识符374和375所标识的一个或多个操作数被指令的结果所覆写,然而在其他 实施例中,由标识符374和375所标识的操作数被写入另一个寄存器中的另一个数据元素 中。操作码格式360和370允许由MOD字段363和373以及由可选的比例-索引-基址 (scale-index-base)和位移(displacement)字节所部分指定的寄存器到寄存器寻址、存 储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻 址、寄存器至存储器寻址。
[0059] 接下来转到图3C,在一些替换实施例中,64位(或128位、或256位、或512位或 更多)单指令多数据(SMD)算术操作可经由协处理器数据处理(CDP)指令来执行。操作 编码(操作码)格式380示出了一个这样的CDP指令,其具有CDP操作码字段382和389。 对于替代实施例,该类型CDP指令操作可由字段383、384、387和388中的一个或多个来编 码。可以对每个指令标识高达三个操作数位置,包括高达两个源操作数标识符385和390 以及一个目的地操作数标识符386。协处理器的一个实施例可对8、16、32和64位值操作。 对于一个实施例,对整数数据元素执行指令。在一些实施例中,使用条件字段381,可有条 件地执行指令。对于一些实施例,源数据大小可通过字段383来编码。在一些实施例中,可 对SIMD字段执行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和类型可通 过字段384来编码。
[0060] 现在转到图3D,其描绘了根据另一实施例的与可从美国加利福尼亚州圣克拉拉市 的英特尔公司的万维网(www)intel. com/products/processor/manuals/上获得的"Intel? 高级向量扩展编程参考(]ntel? Advanced Vector Extensions Programming Reference) 中描述的操作码格式类型相对应的用于提供向量分散和/或聚集功能的另一替代操作编 码(操作码)格式397。
[0061] 原始X86指令集向1字节操作码提供多种地址字节(syllable)格式以及包含在 附加字节中的立即操作数,其中可从第一个"操作码"字节中获知附加字节的存在。此外, 特定字节值被预留给操作码作为修改符(称为前缀prefix,因为它们被放置在指令之前)。 当256个操作码字节的原始配置(包括这些特殊前缀值)耗尽时,指定单个字节以跳出 (escape)到新的256个操作码集合。因为添加了向量指令(诸如,SMD),即便通过使用前 缀进行了扩展以后,也需要产生更多的操作码,并且"两字节"操作码映射也已经不够。为 此,将新指令加入附加的映射中,附加的映射使用两字节加上可选的前缀作为标识符。
[0062] 除此外,为了便于在64位模式中实现额外的寄存器,在前缀和操作码(以及任何 的用于确定操作码所需的跳出字节)之间使用额外的前缀(被称为"REX")。在一个实施 例中,REX具有4个"有效载荷"位,以指示在64位模式中使用附加的寄存器。在其他实施 例中,可具有比4位更少或更多的位。至少一个指令集的通用格式(一般对应于格式360 和/或格式370)被一般地不出如下:
[0063] [prefixes] [rex] escape [escape2] opcode modrm (等等)
[0064] 操作码格式397对应于操作码格式370,并包括可选的VEX前缀字节391 (在一个 实施例中,以十六进制的C4或C5开始)以替换大部分的其他常用的传统指令前缀字节和 跳出代码。例如,以下示出了使用两个字段来编码指令的实施例,其可在原始指令中不存在 第二跳出代码时使用。在以下所示的实施例中,传统跳出由新的跳出值所表示,传统前缀被 完全压缩为"有效载荷(payload) "字节的一部分,传统前缀被重新申明并可用于未来的扩 展,并且加入新的特征(诸如,增加的向量长度以及额外的源寄存器区分符)。
[0065]

【权利要求】
1. 一种计算机实现的方法,包括: 从一个或多个寄存器将一组索引和相应的一组掩码元素复制到索引阵列; 至少针对具有第一值的每个相应掩码元素根据所述索引阵列中的该组索引生成一组 地址; 在缓冲器中为所生成的该组地址中的每个地址分配存储; 将对应于所生成的该组地址的一组数据元素复制到所述缓冲器;以及 如果相应的掩码元素具有所述第一值,则访问该组地址中的地址以存储相应的数据元 素;以及 响应于其相应存储的完成而将相应掩码元素的值从所述第一值改变为第二值。
2. 如权利要求1所述的计算机实现的方法,其响应于单指令多数据(SIMD)分散指令而 被执行。
3. 如权利要求2所述的计算机实现的方法,所述将该组索引和相应的该组掩码元素复 制到所述索引阵列的步骤是响应于通过解码所述SMD分散指令生成的第一微操作而执行 的。
4. 如权利要求3所述的计算机实现的方法,所述将该组数据元素复制到所述缓冲器的 步骤是响应于通过解码所述SMD分散指令生成的一组微操作中的第二微操作而执行的。
5. 如权利要求4所述的计算机实现的方法,还包括: 响应于所述SIMD分散指令,初始化有限状态机以扩展该组微操作来与其他指令的执 行并发地分散-存储数据。
6. 如权利要求5所述的计算机实现的方法,所述初始化有限状态机以扩展该组微操作 来与其他指令的执行并发地分散-存储数据的步骤是响应于通过解码所述SIMD分散指令 生成的一组微操作中的第三微操作而执行的。
7. 如权利要求5所述的计算机实现的方法,所述根据所述索引阵列中的该组索引生成 一组地址的步骤是响应于通过解码所述SMD分散指令生成的一组微操作中的第三微操作 而执行的。
8. 如权利要求7所述的计算机实现的方法,所述响应于其相应加载的完成而将相应掩 码元素的值从所述第一值改变为所述第二值的步骤是响应于通过解码所述SIMD聚集指令 生成的该组微操作中的第四微操作而执行的。
9. 一种装置,包括: 索引阵列,用于存储来自第一单指令多数据(SIMD)寄存器的一组索引以及相应的一 组掩码元素; 有限状态机(FSM),其操作地耦合于所述索引阵列以使用该组索引和相应的掩码元素 来促成分散操作; 地址生成逻辑,其响应于所述FSM至少针对具有第一值的每个相应掩码元素根据所述 索引阵列中的该组索引中的索引生成地址; 缓冲器,其用于存储与所生成的地址相对应的一组数据元素; 存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址 相对应的第一存储器位置以从所述缓冲器存储与所生成的所述第一地址相对应的第一数 据元素;以及 所述FSM将相应掩码元素的值从所述第一值改变为第二值。
10. 如权利要求9所述的装置,其对SIMD分散指令做出响应。
11. 如权利要求10所述的装置,还包括: 解码逻辑,用于解码所述SMD分散指令并响应于解码所述SMD分散指令而生成一组 微操作。
12. 如权利要求11所述的装置,响应于所述SIMD分散指令,所述FSM扩展该组微操作 以与其他指令的执行并发地分散-存储数据。
13. 如权利要求12所述的装置,其中初始化所述索引阵列以存储该组索引和相应的该 组掩码元素是响应于通过解码所述SMD分散指令生成的该组微操作中的第一微操作而执 行的。
14. 如权利要求13所述的装置,其中将对应于所生成的地址的该组数据元素复制到所 述缓冲器是响应于通过解码所述SMD分散指令生成的该组微操作中的第二微操作而执行 的。
15. 如权利要求13所述的装置,其中初始化所述FSM以扩展该组微操作来与其他指令 的执行并发地分散-存储数据是响应于通过解码所述SMD分散指令生成的该组微操作中 的第三微操作而执行的。
16. -种装置,包括: 解码逻辑,用于解码分散指令并生成一组微操作;以及 索引阵列,用于保持一组索引和相应的一组掩码元素。
17. 如权利要求16所述的装置,包括: 有限状态机,用于响应于通过解码所述分散指令生成的一组微操作来促成分散操作。
18. -种处理器,包括: 第一寄存器,包括多个掩码元素,其中所述第一寄存器中的所述多个掩码元素对应于 第二寄存器中的将使用第三寄存器中的多个相应索引来有条件地存储的多个数据元素, 其中对于第一寄存器中的每个掩码元素,第一值指示相应的数据元素尚未被存储,并且第 二值指示相应的数据元素无需被存储或者已经使用来自所述第三寄存器的相应索引被存 储; 解码器级,用于解码第一指令以生成一组微操作;以及 对该组微操作做出响应的一个或多个执行单元,包括: 索引阵列,用于存储来自所述第三寄存器的所述多个索引和相应的所述多个掩码元 素; 有限状态机(FSM),其操作地耦合于所述索引阵列以使用所述多个索引和相应的掩码 元素来促成分散操作。
19. 如权利要求18所述的处理器,还包括: 地址生成逻辑,其响应于所述FSM至少针对具有第一值的每个相应掩码元素根据所述 索引阵列中的所述多个索引中的索引生成地址。
20. 如权利要求19所述的处理器,还包括: 缓冲器,用于存储所述第二寄存器中的所述多个数据元素中与由所述地址生成逻辑所 生成的地址相对应的一组数据元素。
21. 如权利要求20所述的处理器,还包括: 存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址 相对应的第一存储器位置以存储该组数据元素中与所述第一地址相对应的第一数据元素。
22. 如权利要求21所述的处理器,其中所述FSM将相应掩码元素的值从所述第一值改 变为第二值。
23. -种系统,包括: 存储器,用于存储指定单指令多数据(SIMD)索引寄存器、第二SIMD寄存器和掩码寄存 器的第一指令;以及 处理器,包括: 索引阵列,用于存储来自所述SIMD索引寄存器的一组索引以及来自所述掩码寄存器 的相应的一组掩码元素; 有限状态机(FSM),其操作地耦合于所述索引阵列以使用该组索引和相应的掩码元素 来促成分散操作; 地址生成逻辑,其响应于所述FSM至少针对具有第一值的每个相应掩码元素根据所述 索引阵列中的该组索引中的索引生成地址; 缓冲器,用于存储来自所述第二寄存器的与由所述地址生成逻辑所生成的地址相对应 的一组数据元素; 存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址 相对应的第一存储器位置以存储该组数据元素中与所述第一地址相对应的第一数据元素; 以及 所述FSM,用于将相应掩码元素的值从所述第一值改变为第二值。
24. 如权利要求23所述的系统,所述处理器还包括: 引退级,用于在发生故障之际或在所述掩码寄存器中的所有元素皆为所述第二值时引 退所述第一指令。
【文档编号】G06F9/305GK104303142SQ201280072904
【公开日】2015年1月21日 申请日期:2012年6月2日 优先权日:2012年6月2日
【发明者】Z·斯波伯, R·凡伦天, S·赖肯, S·什沃茨曼, G·奥菲尔, I·亚诺弗, G·帕特金, O·利维 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1