CN104303142B - 使用索引阵列和有限状态机的分散 - Google Patents
使用索引阵列和有限状态机的分散 Download PDFInfo
- Publication number
- CN104303142B CN104303142B CN201280072904.4A CN201280072904A CN104303142B CN 104303142 B CN104303142 B CN 104303142B CN 201280072904 A CN201280072904 A CN 201280072904A CN 104303142 B CN104303142 B CN 104303142B
- Authority
- CN
- China
- Prior art keywords
- group
- data
- register
- instruction
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7839—Architectures of general purpose stored program computers comprising a single central processing unit with memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开了使用索引阵列和有限状态机进行分散/聚集操作的方法和装置。装置的实施例可包括:解码逻辑,用于解码分散/聚集指令并生成微操作。索引阵列保持一组索引和相应的一组掩码元素。有限状态机促成分散操作。地址生成逻辑至少针对具有第一值的每个相应掩码元素从该组索引中的索引生成地址。在缓冲器中为所生成的该组地址中的每个地址分配存储。将对应于所生成的该组地址的数据元素复制到缓冲器。如果相应的掩码元素具有所述第一值,则访问该组中的地址以存储数据元素,并且响应于其相应存储的完成,掩码元素被改变为第二值。
Description
技术领域
本公开一般涉及计算和/或通信领域。具体而言,本公开涉及响应于和/或为了支持分散/聚集操作而使用索引阵列和有限状态机。
背景技术
目前的诸多处理器通常包括用于提供计算密集型操作但提供高度数据并行性的指令,这些指令可通过使用多种数据存储设备的高效实现来使用,这些数据存储设备诸如:单指令多数据(SIMD)向量寄存器。
对于一些应用,例如针对诸如三维(3D)图像渲染之类的操作,存储器访问可能是复杂的、不一致的、或不连续的。向量化过程所使用的存储器可能并非总是连续的或者处于毗邻存储器位置。多种架构可能需要额外的指令来在执行任何算术运算之前对寄存器中的数据进行排序,这最小化了指令吞吐量并显著增加了所需时钟周期的数量。
用于改善存储器访问和对往来于更宽向量的数据进行排序的机制可包括实现聚集和分散操作,以针对来自其他非本地和/或不连续的存储器位置的数据产生本地连续存储器访问。聚集操作可从存储装置中的一组不连续或随机的存储器位置收集数据,并将不同的数据组合到打包结构中。分散操作可将打包结构中的元素散开至一组不连续或随机的存储器位置。
另外,这些存储器位置中的一些可能未被高速缓存,或可能已经被移出物理存储器的页。如果聚集操作由于页故障或一些其他原因而中断,在一些架构下,机器的状态可能未保存,从而需要重复整个聚集操作,而不是在聚集操作中断之处重新开始。由于在任一聚集操作上可能需要多次存储器访问,所以可能需要许多时钟周期来完成,任何后续的依赖算术运算必须等待该聚集操作完成。这样的延迟代表瓶颈,该瓶颈会限制例如从宽或大宽度向量架构原本预期的性能优势。
用于改进存储器访问并对往来于较宽向量的数据进行排序的替换机制可包括使用计算机中的不同存储器芯片向或从数据向量并行地加载或存储分开的字。再次,这些存储器位置中的一些可能已经被移出物理存储器的页,且因此重启因页故障或其他某些原因而中断的操作仍然存在问题,但这次,加载或存储可并行地执行。于是,按正确次序解决此类故障可能是困难的或者要求串行化,并且所有加载或存储可能需要在解决此类故障之前完成。
一些机制可包括使用完成掩码来实现聚集和分散以分别跟踪个体加载和存储的完成,但用于向量寄存器和完成掩码的物理寄存器存储可能更靠近具有用于执行SIMD类型算术的宽数据路径的执行单元而非例如用于访问存储器的地址生成逻辑。在此类情形中,从向量寄存器中的个体数据元素生成用于访问非本地和/或不连续的存储器位置的地址并跟踪个体完成掩码也会减少执行宽SIMD类型聚集或分散操作所期望的益处。
到目前为止,尚未充分探索针对这样的性能受限问题和瓶颈的潜在解决方案。
附图说明
在附图的各图中通过示例而非限制地示出本发明。
图1示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态机的计算系统的一个实施例。
图2示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态机的处理器的一个实施例。
图3A示出根据一个实施例的用于提供向量分散和/或聚集功能的指令编码。
图3B示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
图3C示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
图3D示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
图3E示出根据另一个实施例的用于提供向量分散和/或聚集功能的指令编码。
图4A示出用于执行提供向量分散和/或聚集功能的指令的处理器微架构中的各级的一个实施例的框图。
图4B示出用于执行提供向量分散和/或聚集功能的指令的处理器微架构的一个实施例的要素。
图5示出有条件地将一组元素加载到目的地SIMD寄存器中的聚集指令的一个实施例。
图6示出有条件地存储来自源SIMD寄存器的一组元素的分散指令的一个实施例。
图7是支持分散和/或聚集操作的系统中的数据流的示意说明。
图8A示出响应于和/或为了支持聚集操作而使用索引阵列和有限状态机的装置的一个实施例。
图8B示出响应于和/或为了支持分散操作而使用索引阵列和有限状态机的装置的一个实施例。
图9是用于执行提供向量分散和/或聚集功能的指令的系统的实施例的框图。
图10是用于执行提供向量分散和/或聚集功能的指令的片上系统的一个实施例的框图。
图11示出用于转换提供向量分散和/或聚集功能的指令的系统的一个实施例。
图12示出用于支持聚集操作的过程的一个实施例的流程图。
图13示出用于支持聚集操作的过程的替换实施例的流程图。
图14示出用于支持聚集操作的过程的另一替换实施例的流程图。
图15示出用于支持分散操作的过程的一个实施例的流程图。
图16示出用于支持分散操作的过程的替换实施例的流程图。
图17示出用于支持分散操作的过程的另一替换实施例的流程图。
具体实施方式
聚集和分散操作重排所存储的数据元素以供SIMD硬件使用。聚集操作从存储器读取一组数据元素并将它们打包在一起,通常打包至单个寄存器或高速缓存线中。分散操作通过将打包数据结构中的数据元素散开至一组不连续或随机的存储器位置来执行相反操作。除了与访问一级或多级存储器相关联的延迟以外,在聚集或分散操作期间的中断(例如,由于重复的页故障)可显著地增大与这些操作相关联的开销,因为由该操作所作的任何进展通常在返回至该操作的开始之前被丢弃。美国专利申请No.2009/0172364(其一部分已被纳入于此)公开了聚集、分散和预取实现,其在被中断时可保存操作状态。因此,当操作重启时,可能不需要重复整个操作。
使用完成掩码来实现聚集和分散操作以分别跟踪个体加载和存储的完成可能要求从向量寄存器中的个体数据元素生成用于访问个体非本地和/或不连续的存储器位置的地址并在其完成之际跟踪个体完成掩码元素。但用于向量寄存器和完成掩码的物理寄存器存储可能更靠近具有用于执行SIMD类型算术的宽数据路径的执行单元而非例如用于访问个体非本地和/或不连续的存储器位置的地址生成逻辑。在此类情形中,分开地生成用于针对向量寄存器中的个体数据元素中的每一者例如使用多个个体微操作(uop)来访问个体存储器位置以及用于跟踪个体完成掩码的地址会减少执行宽SIMD类型聚集或分散操作所期望的益处。另外,向地址生成逻辑、以及向(或从)存储器访问单元传达向量寄存器中的个体数据元素和完成掩码是需要解决的另一个技术问题。
本文公开了对分散和/或聚集操作使用索引阵列和有限状态机而无需调度多个单独微操作来为向量寄存器中的各个数据元素中的每一者生成地址或者跟踪各个完成掩码的新颖方法和装置。一种装置的实施例可包括索引阵列,用于存储从SIMD向量寄存器传输来的一组索引以及相应的一组掩码元素。与索引阵列耦合的有限状态机(FSM)可通过地址生成逻辑使用该组索引和相应的掩码元素来促成分散/聚集操作,该地址生成逻辑响应于FSM至少针对每个相应的未被掩码的元素从索引阵列中的索引生成地址。与地址生成逻辑耦合的存储器访问单元访问所生成的相应存储器位置以存储或加载相应数据。一些实施例可使用索引阵列和地址生成逻辑来分开地为每个元素生成地址。在一些实施例中,可通过微操作的引退来跟踪(例如,在重排序缓冲器中)分散/聚集操作的完成。
在分散操作的情形中,在缓冲器中分配存储以保持对应于所生成的地址的数据元素,用于由存储器访问单元存储至相应的存储器位置。在一些实施例中,所有数据元素可一次性地(例如,使用单个微操作)被写入缓冲器以用于分散操作。在成功完成相应存储之际,FSM改变相应的掩码元素。在一些实施例中,分散操作的成功完成可通过微操作的执行来进行。在一些实施例中,此类微操作可在FSM成功完成相应存储之际引退。
在聚集操作的情形中,可操作地与存储器访问单元和SIMD向量寄存器耦合的数据合并逻辑将相应的数据元素根据在其相应索引中的相应位置来写入寄存器内位置处。例如,在一个实施例中,数据可被广播至所有位置,且单独的相应索引可被用作掩码以仅改变单个位置。在替换实施例中,多个位置可并发地被改变。在成功完成相应加载之际,FSM改变相应的掩码元素。
将领会,通过调度仅少数微操作以将来自SIMD向量寄存器的一组索引和相应的一组掩码元素传输至索引阵列并初始化有限状态机以与其他指令的执行并行地或并发地并且响应于和/或为了支持分散和/或聚集操作而存储或加载数据,指令吞吐量可得以改进。
在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构状况、事件、启用机制等多种特定细节,以提供对本发明实施例的更透彻理解。然而,本领域技术人员应当领会,没有这些具体细节也可实践本发明。此外,没有详细示出一些公知的结构、电路等等,以避免不必要地模糊本发明的实施例。
本发明的这些和其他实施例可根据以下教示来实现,并且应当明显的是,可在以下教示中作出各种修改和改变而不脱离本发明的较宽泛精神和范围。因此,说明书和附图应当以说明性而非限制性的意义来对待,并且本发明仅根据权利要求及其等效技术方案来衡量。
图1示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态机的计算系统100的一个实施例。根据本发明,诸如根据在此所描述的实施例,系统100包括诸如处理器102之类的组件,以采用包括逻辑的执行单元来执行算法以处理数据。系统100代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的XeonTM、XScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWSTM操作系统的一个版本,不过也可使用其它操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本发明的各实施例不限于硬件电路和软件的任何具体组合。
实施例不限于计算机系统。本发明的替换实施例可被用于其他设备,诸如手持式设备和嵌入式应用。手持式设备的一些示例包括:蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)、以及手持式PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机、或可执行根据至少一个实施例的一个或多个指令的任何其他系统。
图1是计算机系统100的框图,计算机系统100被形成为具有处理器102,处理器102包括一个或多个执行单元108以执行算法,从而执行根据本发明的一个实施例的至少一个指令。可能在单处理器桌面或服务器系统的上下文中描述了一个实施例,但替代实施例可被包括在多处理器系统中。系统100是“中枢”系统架构的示例。计算机系统100包括处理器102以处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任意其它处理器设备(诸如数字信号处理器)。处理器102耦合至处理器总线110,处理器总线110可在处理器102与系统100内的其他组件之间传输数据信号。系统100的各元素执行本领域所熟知的常规功能。
在一个实施例中,处理器102包括第一级(L1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。或者,在另一个实施例中,高速缓存存储器可位于处理器102的外部。其他实施例也可包括内部高速缓存和外部高速缓存的组合,这取决于特定实现和需求。寄存器组106可在多个寄存器(包括整数寄存器、浮点寄存器、状态寄存器、指令指针寄存器)中存储不同类型的数据。
执行单元108(包括执行整数和浮点操作的逻辑)也位于处理器102中。处理器102还包括微代码(ucode)ROM,其存储用于特定宏指令的微代码。对于一个实施例,执行单元108包括处理打包指令集109的逻辑。通过将打包指令集109包括在通用处理器102的指令集内并包括相关的电路以执行这些指令,可使用通用处理器102中的打包数据来执行许多多媒体应用所使用的操作。因此,通过将处理器数据总线的全带宽用于对打包数据进行操作,许多多媒体应用可获得加速,并更为高效地执行。这能消除在处理器数据总线上传输更小数据单元以在一个时间对一个数据元素执行一个或多个操作的需要。
执行单元108的替换实施例也可被用于微控制器、嵌入式处理器、图形设备、DSP以及其他类型的逻辑电路。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存储器120可存储可由处理器102执行的由数据信号表示的指令和/或数据。
系统逻辑芯片116耦合至处理器总线110和存储器120。在所示出的实施例中的系统逻辑芯片116是存储器控制器中枢(MCH)。处理器102可经由处理器总线110与MCH 116通信。MCH 116提供至存储器120的高带宽存储器路径118,用于指令和数据存储,以及用于存储图形命令、数据和纹理。MCH 116用于引导处理器102、存储器120以及系统100内的其他组件之间的数据信号,并在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供图形端口以用于耦合至图形控制器112。MCH 116经由存储器接口118耦合至存储器120。图形卡112通过加速图形端口(AGP)互连114耦合至MCH116。
系统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设备、闪存设备、或其他大容量存储设备。
对于系统的另一个实施例,根据一个实施例的指令可被用于片上系统。片上系统的一个实施例包括处理器和存储器。用于这样一个系统的存储器是闪存存储器。闪存存储器可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可位于片上系统上。
图2示出响应于和/或为了支持分散和/或聚集操作而使用索引阵列和有限状态机的处理器200的一个实施例。在一些实施例中,根据一个实施例的指令可被实现为对具有字节大小、字大小、双字大小、四字大小等并具有诸多数据类型(诸如单精度和双精度整数和浮点数据类型)的数据元素执行操作。在一个实施例中,有序前端201是处理器200的一部分,其获取将要被执行的指令,并准备这些指令以在稍后供处理器流水线使用。前端201可包括若干单元。在一个实施例中,指令预取器226从存储器获取指令,并将指令馈送至指令解码器228,指令解码器228随后解码或解释指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微操作数或uop)的一个或多个操作。在其他实施例中,解码器将指令解析为操作码和对应的数据及控制字段,它们被微架构用于执行根据一个实施例的操作。在包括追踪高速缓存230的一个实施例中,追踪高速缓存230接受经解码的微操作,并将它们组装为微操作队列234中的程序有序序列或踪迹,以用于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需的微操作。
一些指令被转换为单个微操作,而其他指令需要若干个微操作以完成整个操作。在一个实施例中,如果需要4个以上微操作来完成指令,则解码器228访问微代码ROM 232来进行该指令。对于一个实施例,指令可被解码为少量的微操作以用于在指令解码器228处进行处理。在另一个实施例中,如果需要若干微操作来完成操作,则可将指令存储在微代码ROM 232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以从微代码ROM 232读取微代码序列以完成根据一个实施例的一个或多个指令。在微代码ROM 232完成对于指令的微操作序列化之后,机器的前端201恢复从追踪高速缓存230获取微操作。将领会,包含追踪高速缓存230不是针对所有实施例所必需的。
无序执行引擎203是将指令准备好用于执行的单元。无序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以在指令进入流水线并被调度以供执行时优化性能。分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器组中的条目。在指令调度器(存储器调度器、快速调度器202、慢速/通用浮点调度器204、和简单浮点调度器206)之前,分配器也将每个微操作的条目分配入两个微操作队列中的一个,一个队列用于存储器操作,另一个队列用于非存储器操作。微操作调度器202、204、206基于对它们的依赖输入寄存器操作数源的准备就绪以及微操作完成它们的操作所需的执行资源的可用性来确定微操作何时准备好用于执行。一个实施例的快速调度器202可在主时钟周期的每半个上进行调度,而其他调度器可仅仅在每个主处理器时钟周期上调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。
寄存器组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位等的边界处被写入。
执行块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位×64位浮点除法器,用于执行除法、平方根、以及余数微操作。对于本发明的诸个实施例,涉及浮点值的指令可使用浮点硬件来处理。在一个实施例中,ALU操作进入高速ALU执行单元216、218。一个实施例的高速ALU 216、218可执行高速操作,有效等待时间为半个时钟周期。对于一个实施例,大多数复杂整数操作进入慢速ALU220,因为慢速ALU 220包括用于长等待时间类型操作的整数执行硬件,诸如,乘法器、移位器、标记逻辑和分支处理。存储器加载/存储操作由AGU 212、214来执行。对于一个实施例,整数ALU 216、218、220在对64位数据操作数执行整数操作的上下文中进行描述。在替换实施例中,ALU 216、218、220可被实现为支持大范围的数据位,包括16、32、128、256等等。类似地,浮点单元222、224可被实现为支持具有多种宽度的位的操作数范围。对于一个实施例,浮点单元222、224可结合SIMD和多媒体指令对128位宽度打包数据操作数进行操作。
在一个实施例中,在父加载完成执行之前,微操作调度器202、204、206就分派依赖操作。因为在处理器200中微操作被投机地调度和执行,所以处理器200也包括处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可能存在带有临时错误数据离开调度器并运行在流水线中的依赖操作。在一些实施例中,重放机制可跟踪使用错误数据的指令,并重新执行这些指令。仅仅依赖操作需要被重放,而允许独立操作完成。处理器的一个实施例的调度器和重放机制也被设计为捕捉提供向量分散和/或聚集功能的指令。在没有重放机制的一些替换实施例中,可阻止微操作的投机式执行并且依赖微操作可驻留在调度器202、204、206中,直至所述依赖微操作被取消、或者直至所述依赖微操作不能被取消。
术语“寄存器”可指代被用作为指令的一部分以标识操作数的板上处理器存储位置。换句话说,寄存器是那些处理器外部(从编程者的角度来看)可用的处理器存储位置。然而,一实施例的寄存器不限于表示特定类型的电路。相反,一实施例的寄存器能够存储并提供数据,并且能够执行在此所述的功能。在此所述的寄存器可由处理器中的电路使用任何数量不同技术来实现,诸如,专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合,等等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器组也包含八个多媒体SIMD寄存器,用于打包数据。对于以下讨论,寄存器应被理解为设计成保存打包数据的数据寄存器,诸如来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了MMX技术的微处理器的64位宽MMXTM寄存器(在一些实例中也称为“mm”寄存器)。这些MMX寄存器(可用在整数和浮点形式中)可与伴随SIMD和SSE指令的打包数据元素一起操作。涉及SSE2、SSE3、SSE4(统称为“SSEx”)技术的128位宽XMM寄存器也可被用于保持这样的打包数据操作数。类似地,涉及AVX、AVX2、AVX3技术(或更高级技术)的256位宽YMM寄存器和512位宽ZMM寄存器可与XMM寄存器重叠并且可被用于保持这样的较宽打包数据操作数。在一个实施例中,在存储打包数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点可被包括在相同的寄存器组中,或被包括在不同的寄存器组中。进一步的,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。
图3A是与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/products/processor/manuals/上获得的“64和IA-32英特尔架构软件开发者手册组合卷2A和2B:指令集参考A-Z(64and IA-32Intel ArchitectureSoftware Developer's Manual Combined Volumes 2A and 2B:Instruction SetReference A-Z)”中描述的操作码格式类型相对应的具有32或更多位的操作编码(操作码)格式360以及寄存器/存储器操作数寻址模式的一个实施例的描述。在一个实施例中,可通过一个或更多个字段361和362来编码指令。可以标识每个指令高达两个操作数位置,包括高达两个源操作数标识符364和365。对于一个实施例,目的地操作数标识符366与源操作数标识符364相同,而在其他实施例中它们不相同。对于替代实施例,目的地操作数标识符366与源操作数标识符365相同,而在其他实施例中它们不相同。在一个实施例中,由源操作数标识符364和365所标识的源操作数中的一个被指令的结果所覆写,而在其他实施例中,标识符364对应于源寄存器元素,而标识符365对应于目的地寄存器元素。对于一个实施例,操作数标识符364和365可被用于标识32位或64位的源和目的地操作数。
图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)字节所部分指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器至存储器寻址。
接下来转到图3C,在一些替换实施例中,64位(或128位、或256位、或512位或更多)单指令多数据(SIMD)算术操作可经由协处理器数据处理(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来编码。
现在转到图3D,其描绘了根据另一实施例的与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/products/processor/manuals/上获得的“高级向量扩展编程参考(Advanced Vector Extensions Programming Reference)中描述的操作码格式类型相对应的用于提供向量分散和/或聚集功能的另一替代操作编码(操作码)格式397。
原始x86指令集向1字节操作码提供多种地址字节(syllable)格式以及包含在附加字节中的立即操作数,其中可从第一个“操作码”字节中获知附加字节的存在。此外,特定字节值被预留给操作码作为修改符(称为前缀prefix,因为它们被放置在指令之前)。当256个操作码字节的原始配置(包括这些特殊前缀值)耗尽时,指定单个字节以跳出(escape)到新的256个操作码集合。因为添加了向量指令(诸如,SIMD),即便通过使用前缀进行了扩展以后,也需要产生更多的操作码,并且“两字节”操作码映射也已经不够。为此,将新指令加入附加的映射中,附加的映射使用两字节加上可选的前缀作为标识符。
除此外,为了便于在64位模式中实现额外的寄存器,在前缀和操作码(以及任何的用于确定操作码所需的跳出字节)之间使用额外的前缀(被称为“REX”)。在一个实施例中,REX具有4个“有效载荷”位,以指示在64位模式中使用附加的寄存器。在其他实施例中,可具有比4位更少或更多的位。至少一个指令集的通用格式(一般对应于格式360和/或格式370)被一般地示出如下:
[prefixes][rex]escape[escape2]opcode modrm(等等)
操作码格式397对应于操作码格式370,并包括可选的VEX前缀字节391(在一个实施例中,以十六进制的C4或C5开始)以替换大部分的其他常用的传统指令前缀字节和跳出代码。例如,以下示出了使用两个字段来编码指令的实施例,其可在原始指令中不存在第二跳出代码时使用。在以下所示的实施例中,传统跳出由新的跳出值所表示,传统前缀被完全压缩为“有效载荷(payload)”字节的一部分,传统前缀被重新申明并可用于未来的扩展,并且加入新的特征(诸如,增加的向量长度以及额外的源寄存器区分符)。
当原始指令中存在第二跳出代码时,或当需要使用REX字段中的额外的位(例如XB和W字段)时。在下文示出的替代实施例中,将第一传统跳出和传统前缀按照上述类似地压缩,并且将第二跳出代码压缩在“映射”字段中,在未来映射或特征空间可用的情况下,重新添加新的特征(例如增加的向量长度和附加的源寄存器区分符)。
根据一个实施例的指令可通过字段391和392中的一个或多个来编码。通过字段391与源操作码标识符374和375以及可选的比例-索引-基址(scale-index-base,SIB)标识符393、可选位移标识符394以及可选立即数字节395相结合,可以为每个指令标识高达四个操作数位置。对于一个实施例,VEX前缀字节391可被用于标识32位或64位的源和目的地操作数和/或128位或256位SIMD寄存器或存储器操作数。对于一个实施例,由操作码格式397所提供的功能可与操作码格式370形成冗余,而在其他实施例中它们不同。操作码格式370和397允许由MOD字段373以及由可选的SIB标识符393、可选的位移标识符394以及可选的直接字节395所部分指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器至存储器寻址。
现在转到图3E,其描绘了根据另一实施例的用于提供向量分散和/或聚集功能的另一替代操作编码(操作码)格式398。操作码格式398对应于操作码格式370和397,并包括可选的EVEX前缀字节396(在一个实施例中,以十六进制的62开始)以替换大部分的其他常用的传统指令前缀字节和跳出代码,并提供附加的功能。根据一个实施例的指令可通过字段396和392中的一个或多个来编码。通过字段396与源操作码标识符374和375以及可选的比例-索引-基址(scale-index-base,SIB)标识符393、可选的位移标识符394以及可选的立即数字节395相结合,可以标识每个指令高达四个操作数位置和掩码。对于一个实施例,EVEX前缀字节396可被用于标识32位或64位的源和目的地操作数和/或128位、256位或512位SIMD寄存器或存储器操作数。对于一个实施例,由操作码格式398所提供的功能可与操作码格式370或397形成冗余,而在其他实施例中它们不同。操作码格式398允许由MOD字段373以及由可选的(SIB)标识符393、可选的位移标识符394以及可选的立即数字节395所部分指定的利用掩码的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器至存储器寻址。至少一个指令集的通用格式(一般对应于格式360和/或格式370)被一般地示出如下:
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib][disp][imm]
对于一个实施例,根据EVEX格式398编码的指令可具有附加的“有效载荷”位,这些附加的“有效载荷”位可利用附加的新特征来提供向量分散和/或聚集功能,附加的新特征诸如例如用户可配置的掩码寄存器、或附加的操作数、或来自于128位、256位或512位向量寄存器或备选的更多寄存器的选择等等。
例如,在VEX格式397可用于利用隐式掩码并且利用或不利用附加一元操作(诸如类型转换)来提供向量分散和/或聚集功能的场合,EVEX格式398可被用于利用显式用户可配置掩码并且利用或不利用附加二元操作(诸如需要附加操作数的加法或乘法)来提供向量分散和/或聚集功能。EVEX格式398的一些实施例还可用于在该附加操作是三元操作的场合时提供向量分散和/或聚集功能以及隐式完成掩码。附加地,在VEX格式397可用于在128位或256位向量寄存器上提供向量分散和/或聚集功能的场合,EVEX格式398可用于在128位、256位、512位或更大(或更小)的向量寄存器上提供向量分散和/或聚集功能。将领会,分散和/或聚集指令的一些实施例也可实现为分散和/或聚集预取以将所需的存储器位置预取至高速缓存存储器中。通过以下示例说明用于提供向量分散和/或聚集功能的示例指令:
图4A是示出根据本发明的至少一个实施例的有序流水线以及寄存器重命名级、无序发布/执行流水线的框图。图4B是示出根据本发明的至少一个实施例的要被包括在处理器中的有序架构核以及寄存器重命名逻辑、无序发布/执行逻辑的框图。图4A中的实线框示出了有序流水线,虚线框示出了寄存器重命名、无序发布/执行流水线。类似地,图4B中的实线框示出了有序架构逻辑,而虚线框示出了寄存器重命名逻辑以及无序发布/执行逻辑。
在图4A中,处理器流水线400包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为指派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处理级422、以及提交级424。
在图4B中,箭头指示两个或更多个单元之间的耦合,且箭头的方向指示那些单元之间的数据流的方向。图4B示出了包括耦合到执行引擎单元450的前端单元430的处理器核490,且执行引擎单元和前端单元两者都耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替代核类型。作为另一个选项,核490可以是专用核,诸如网络或通信核、压缩引擎、图形核或类似物。
前端单元430包括耦合到指令高速缓存单元434的分支预测单元432,该指令高速缓存单元耦合到指令转换后备缓冲器(TLB)436,该指令转换后备缓冲器耦合到指令取出单元438,指令取出单元耦合到解码单元440。解码单元或解码器可解码指令,并生成一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出,这些输出是从原始指令中解码出、或以其他方式反映原始指令、或是从原始指令中推导而出的。解码器可以使用各种不同的机制来实现。合适的机制的示例包括但不限于:查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。指令高速缓存单元434进一步耦合至存储器单元470中的第二级(L2)高速缓存单元476。解码单元440耦合至执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括重命名/分配器单元452,该重命名/分配器单元耦合至引退单元454和一个或多个调度器单元456的集合。调度器单元456表示任何数目的不同调度器,包括预留站、中央指令窗等。调度器单元456耦合到物理寄存器组单元458。物理寄存器组单元458中的每一个表示一个或多个物理寄存器组,其中不同的物理寄存器组存储一个或多个不同的数据类型(诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、等等)、状态(诸如,指令指针是将要被执行的下一个指令的地址)等等。物理寄存器组单元458被引退单元454所覆盖,以示出可实现寄存器重命名和无序执行的多种方式(诸如,使用重排序缓冲器和引退寄存器组、使用未来文件(future file)、历史缓冲器、引退寄存器组、使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看是可见的。这些寄存器不限于任何已知的特定电路类型。多种不同类型的寄存器可适用,只要它们能够存储并提供在此所述的数据。合适的寄存器的示例包括但不限于:专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用物理寄存器和动态分配物理寄存器的组合等等。引退单元454和物理寄存器组单元458耦合至执行群集460。执行群集460包括一个或多个执行单元462的集合和一个或多个存储器访问单元464的集合。执行单元462可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整型、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。调度器单元456、物理寄存器组单元458、执行群集460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了诸个单独流水线(例如,均具有各自调度器单元、物理寄存器组单元和/或执行群集的标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,以及在单独的存储器访问流水线的情况下特定实施例被实现为仅仅该流水线的执行群集具有存储器访问单元464)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为无序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元464的集合耦合到存储器单元470,该存储器单元包括耦合到数据高速缓存单元474的数据TLB单元472,其中数据高速缓存单元耦合到二级(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元470中的数据TLB单元472。L2高速缓存单元476耦合到一个或多个其他级的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的、无序发布/执行核架构可以如下实现流水线400:1)指令取出438执行取出和长度解码级402和404;2)解码单元440执行解码级406;3)重命名/分配器单元452执行分配级408和重命名级410;4)调度器单元456执行调度级412;5)物理寄存器组单元458和存储器单元470执行寄存器读取/存储器读取级414;执行群集460执行执行级416;6)存储器单元470和物理寄存器组单元458执行写回/存储器写入级418;7)各单元可牵涉到异常处理级422;以及8)引退单元454和物理寄存器组单元458执行提交级424。
核490可支持一个或多个指令集(诸如,x86指令集(具有增加有更新版本的一些扩展)、加利福尼亚州桑尼威尔的MIPS技术公司的MIPS指令集、加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集(具有可选附加扩展,诸如NEON))。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。
尽管在无序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。虽然处理器的所示出的实施例也包括单独的指令和数据高速缓存单元434/474以及共享的L2高速缓存单元476,但替代的实施例也可具有用于指令和数据的单个内部高速缓存,诸如例如第一级(L1)内部高速缓存、或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
图5示出其中聚集指令有条件地加载一组数据元素(例如,对于512位SIMD而言最多达十六个32位或八个64位浮点数据元素)并将它们打包至目的地寄存器515中的一个实施例。这些元素经由在通用寄存器525中传递的基址520、作为立即数传递的比例530、作为SIMD寄存器(保持打包索引)传递的索引寄存器510、以及可选的位移(未示出)来指定。数据元素将仅在它们对应的掩码位为1的情况下才被加载。该实现中的掩码寄存器是专用掩码寄存器,替换地,掩码寄存器可以是SIMD寄存器,并且用于一元素的掩码位是来自掩码寄存器的相应元素的符号位。掩码元素被当作与索引元素有相同大小。如果元素的掩码位未被置位,则目的地寄存器(例如,SIMD寄存器)的相应元素保持不变。一旦聚集操作完成,整个掩码寄存器就被聚集指令设为0,除非其执行因异常而中断。
在一个实施例中,当用于聚集预定数据集的聚集操作在完成之前被终止时,目的地寄存器515临时存储或保留已收集的数据(例如,预定数据集的部分子集)。
图6示出其中分散指令有条件地存储来自源SIMD寄存器615的一组元素,从源的LSB至MSB按次序写入任何重叠目的地存储器位置的一个实施例。目的地存储器位置616、618、620和622如以上关于聚集指令所描述地被指定。元素将仅在它们对应的掩码位为1的情况下才被存储。整个掩码寄存器可通过分散指令的执行而被设为0,除非分散指令触发了异常。如果至少一个元素已被分散,该指令可因异常而被挂起(正如上面的聚集指令那样)。在一些实现中,仅对重叠目的地位置的写入被保证相对于彼此被排序(从源寄存器的LSB至MSB)。重叠可如下确定。每个元素对应于一组字节大小的位置:[(索引*比例):(索引*比例+数据元素大小-1)]。如果来自两个不同元素的任何两个位置相同,则这些元素重叠。不重叠的写入可按任何次序发生。在一些实施例中,如果两个或更多个目的地位置完全重叠,则“较早的”写入可被跳过。在一些实现中,元素可按任何次序被分散(如果没有重叠),但故障必须按从右到左的次序或其他特定的预定次序来递送。
图7是支持分散和/或聚集操作的系统中的数据流的示意说明。数据可被存储在系统(例如,如本文参照图1和2所描述的系统)中的高速缓存存储器716和/或外部存储器735中。可从(例如,外部存储器735中的)连续位置718和720和/或不连续的或非毗邻的位置722和724聚集数据。高速缓存存储器716通常在处理器内部,而外部存储器735通常在处理器(例如,处理器140、160、270和/或280,各自参照图1和2之一作了描述)外部。然而,在各种实施例中,高速缓存存储器716和/或外部存储器735中的每一者可以在处理器内部或外部。外部存储器735可包括或者类似于例如202、204、110或其他存储器。
高速缓存存储器716和/或外部存储器735可包括例如随机存取存储器(RAM)、只读存储器(ROM)、动态RAM(DRAM)、同步DRAM(SD-RAM)、闪存、易失性存储器、非易失性存储器、高速缓存存储器、缓冲器、短期存储器单元、长期存储器单元、或其他合适的存储器单元或存储单元。高速缓存存储器716可包括重复别处存储的或早先计算出的原始值的数据,其中与读取高速缓存存储器716的成本相比,获取(例如,由于较长的访问时间)或者计算原始数据可能是相对较昂贵的。高速缓存存储器716可包括页、存储器行、或其他合适的结构。可使用附加或其他合适的存储器。
聚集操作可从(例如,外部存储器735中的)两个或更多个不连续的存储器位置722和724读取数据并将该数据连续地写入寄存器存储器(诸如目的地寄存器715)。将数据聚集到目的地寄存器715的状态可被记录或写入到掩码寄存器710。寄存器存储器(例如,目的地、掩码和/或其他寄存器存储器)可以是通常在处理器内的相对较小的存储空间。寄存器存储器的内容可比放在别处的存储更快地被访问。目的地寄存器715(例如,加载寄存器)可以是例如计数机、指针机、随机存取机(RAM)、随机存取存储程序机模型(RASP)或其他存储器。掩码寄存器710(例如,影子寄存器)可具有数据字段、元素、或占位符,用于保持例如‘0’和‘1’标志或值,投影或跟踪目的地寄存器715的状态或存储容量。
可实现聚集和分散操作以访问数据元素,尤其是在具有广泛散布的数据元素的应用中。这些散布的数据元素可被聚集以按连续方式存储或存储在单个位置(例如,目的地寄存器715)中和/或被分散到两个或更多个不连续的存储器位置。在一个实施例中,聚集指令将来自(例如,高速缓存存储器716和/或外部存储器735中的)两个或更多个不连续的存储器位置722和724的每个数据元素读取、拷贝、复制、传递或连续地写入目的地寄存器715,以及关于分散指令执行相反操作。此类聚集过程被称为“打包”数据元素和/或“打包”目的地寄存器715。通过将数据元素打包至单个位置(例如,目的地寄存器715)中,处理器(例如,图1和2)可共同地、同时、一致地、和/或按顺序加载、处理、监视或以其他方式使用该数据,以在最小数目的周期(例如,一个周期)中对该数据执行操作。
聚集和/或分散操作可能中断,这可能是由于非连续的数据延迟了操作进度。在一些实施例中,聚集操作的状态可被保存。因此,当聚集操作重启时,可能不需要重复整个聚集操作。存储哪些数据元素已经和尚未被聚集到例如寄存器710中的记录可允许在聚集指令被中断的地方重启该聚集指令。
在一些实施例中,聚集操作可聚集(例如,读取或访问)来自高速缓存存储器716和/或外部存储器735中的两个或更多个连续或不连续的存储器位置的一组(例如,16个)数据元素中的每一个。聚集操作可将指向高速缓存存储器716中的存储器页的指针用作输入或者可包括这样的指针。当数据跨存储器页的边界扩展、或者没有提供存储器页地址时,聚集操作可从外部存储器735检索数据,这可能花费相对较长的时间。在一个实施例中,对于每个数据元素,聚集操作可首先指向高速缓存存储器716,并且如果聚集不成功,则可前进至从外部存储器735访问数据。
聚集操作可将数据元素存储或打包至目的地寄存器715(例如,加载寄存器)中。在一个实施例中,目的地寄存器715可包括多个(例如,16个)单独的数据元素,例如用于单个聚集操作。目的地寄存器715中的数据元素或向量可包括从自其检索数据元素的存储器和/或指向自其检索数据元素的存储器位置的指针拷贝的数据。在一些实施例中,聚集操作可在访问外部存储器735之前访问高速缓存存储器716、本地存储器或处理器内部的存储器以读取或检索每个数据元素。数据元素可被安排在高速缓存存储器716中(例如,在存储器页或其他存储器单元中)。数据元素可被打包在存储器中(例如,在连续的存储器位置718和720中),或者替换地,它们可被存储在不连续的或非毗邻的位置中(例如,在不连续的存储器位置722和724中)。通常情况下,当两个或更多个数据元素被存储在不连续的或非毗邻的存储器位置722和724中时,使用聚集操作。数据元素可以为字节(例如,8位)、字(例如,2字节)、双字(例如,32位)或其他大小或数据单位。
聚集(或分散)操作的速率可部分地取决于被聚集(或分散)的元素的一致性水平。例如,被聚集(或分散)的元素的一致性水平可以是关于数据元素被存储在例如高速缓存存储器716中的多少不同的高速缓存线中的度量。以较大一致性来存储的(例如,使用高速缓存存储器716中的较少高速缓存线来存储的)元素可在较少时间中或在较少工作周期中被聚集(或分散)或者检索(或存储)。例如,当所有数据元素完全一致(例如,在同一高速缓存线上)时,聚集(或分散)操作可在单个周期中或至少在单次高速缓存访问中检索(或存储)该数据。然而,被聚集(或分散)的元素可能不是完全一致的。例如,各元素可散布在若干个(例如,2个或3个)高速缓存线上,且因此可能要在若干次(例如,2次或3次)对(例如,一级(L1)或中央处理单元(CPU))高速缓存存储器416的访问中被聚集(或分散)。
在高速缓存存储器716的一些实施例中,其中存储有数据元素的高速缓存线可包括多个排或块,例如分别对于64字节或128字节高速缓存线,8排或16排可各自存储64位数据。当然,每一排可存储更少(例如,32位)或更多(128位)数据,并且每一高速缓存线可具有更少或更多排或块(例如4、12、20、32、48个等)。聚集(或分散)操作的速率还可部分地取决于被聚集(或分散)的元素被存储在高速缓存存储器716的非冲突排中的程度。对于高速缓存存储器716的一些实施例,多个高速缓存线可同时被访问。具体而言,当来自两个或更多个高速缓存线的数据被存储在高速缓存存储器716的非冲突排或块中时,则来自两个或更多个高速缓存线的数据元素也可在较少时间中或在较少工作周期中被聚集或检索。因此,如果所有数据元素是一致的(例如,在同一高速缓存线上)和/或被存储在非冲突排中,则聚集操作可以可信地在单个周期中或至少在单次高速缓存访问中检索该数据。
将领会,在不预调度多个单独微操作以生成关于各个数据元素各自的地址的情况下向地址生成逻辑以及向(或从)存储器访问单元传达向量寄存器中的各个数据元素和完成掩码是需要解决的技术问题。因此,对分散和/或聚集操作使用索引阵列和有限状态机而无需调度众多的多个单独微操作来为向量寄存器中的各个数据元素中的每一者生成地址或者跟踪各个完成掩码提供了对该问题的解决方案。
目的地寄存器715可以是向量寄存器、加载寄存器或用于临时存储或打包从两个或更多个非毗邻的存储器位置访问或聚集的数据的其他寄存器存储器。例如,对于一组数据(例如,16个向量),目的地寄存器715可以是聚集操作的目的地,并且高速缓存存储器716和/或外部存储器735可以是源(例如,其可以是连续的源718和720或不连续的源722和724)。
在一个实施例中,当用于聚集预定数据集的聚集操作在完成之前被终止时,目的地寄存器715可临时存储或保存已收集的数据(例如,预定数据集的部分子集)。
聚集操作可出于各种各样的原因而停止或中断。例如,上下文切换设备可切换寄存器上下文、任务上下文、或过程上下文(例如,用于在多个任务中的两个或更多个任务之间改变处理器的状态或上下文)。在另一实施例中,聚集操作可在一个或多个精确异常充分地阻止或减慢聚集操作(例如,可能遭遇最大数目或极限的可允许页故障或对于操作系统(OS)的高速缓存页未命中)和/或分配给聚集操作的时间期满时停止或中断。在另一实施例中,聚集操作可在该聚集操作被更高优先级操作代替时停止或中断。
聚集操作可例如在尝试从系统中导致页故障的有问题存储器位置检索数据时被阻止。一些故障状况(诸如页故障)必须被处置,从而程序流能够恢复发生故障的指令(例如,检索数据)同时保证相应指令集的前进。在一个实施例中,存储器页可包括高速缓存存储器716的固定长度块,其被用作目的地寄存器715与其他存储器(诸如外部存储器735、硬驱动器或盘)之间的传输单位。页故障可包括中断(例如,或者异常),例如当聚集操作访问可能在地址空间中被映射但在高速缓存存储器716中未物理地加载或不可用的存储器页时。例如,从高速缓存存储器716聚集的每个数据元素可导致页故障,并且跨越存储器页边界的每个元素可导致两个页故障。
在一个实施例中,系统可停止或中断聚集操作,例如在遭遇最大数目的可允许异常(诸如(例如>16个)页故障)时。例如,OS针对一操作可具有关于高速缓存和/或页未命中或故障的极限。OS可包括异常处置软件以处置页故障,并且处理器可包括存储器管理单元以检测页故障。可以使用其他异常处置机制。
在一个实施例中,当遭遇页故障时,系统可中途停止聚集操作以处置页故障。例如,如果重复遭遇页故障,则聚集操作可能无法前进。常规情况下,当聚集操作被停止或中断时,已聚集的部分数据元素子集可能丢失,并且该过程可能回退或返回至聚集操作的开始。
在目的地寄存器715中存储从高速缓存存储器716和/或外部存储器735聚集的数据可保留该数据,例如以防完整聚集操作(例如,聚集所有16个向量)被中断、失败或在完成前终止。根据本发明的实施例,通过在目的地寄存器715中存储已聚集的数据元素,先前由被中断或停止的聚集操作所聚集的数据可被保留,并且聚集操作可在中途重启。被中断的聚集操作(例如,已聚集一个或多个数据元素)可从中途开始,例如聚集目的地寄存器715中缺失的其余元素。
高效的聚集操作可在系统中使用软件和/或硬件机制的组合来实现。在一个实施例中,处理器可重复地执行“聚集_步骤”指令,例如直至预定数据集已完全被聚集到目的地向量寄存器存储器715中。
在一些实施例中,可实现掩码寄存器710以监视和/或控制对预定数据元素集的聚集以及其与目的地寄存器715的打包。掩码寄存器710可以是影子寄存器、控制寄存器、标志寄存器或其他合适的寄存器。掩码寄存器710可通过监视存储在目的地寄存器715中的数据来跟踪聚集操作的完成。在一个实施例中,存储在目的地寄存器715中的数据元素与存储在掩码寄存器710中的相应状态元素之间存在一一对应关系。状态元素或值可包括标志、标记、标签、指示符、信号和/或其他数字、位、和/或代码,用于指示(例如,对应的或被指向的寄存器位置中的)相应数据元素是否被存储在目的地寄存器715中。例如,掩码寄存器710中的“1”可指示相应数据元素未被写入目的地寄存器715;否则,可使用“0”。可使用其他数字或标志。
在一个实施例中,处理器可调用或执行聚集步骤指令,例如在‘while’循环中或重复‘if’语句,直至掩码寄存器710可完全被清除(例如,其中的所有状态元素都保持‘0’值并且掩码寄存器710的总值可变为0),这可指示基本上所有元素都成功地从存储器被聚集并被加载到目的地寄存器715中。在一个实施例中,聚集步骤指令可执行或运行,直至寄存器状态元素的总值为0。
由于任何大小的(例如,针对任何数目的被聚集元素或指令的)被填充或打包的目的地寄存器715可对应于空的或零掩码寄存器710(例如,无论目的地寄存器715的大小如何),因此掩码寄存器710可被用于监视任何大小的目的地寄存器715(例如,与任何数目的被聚集元素)的打包。例如,任何数目的“0”状态元素的总和将总是为0。因此,掩码寄存器710可被用于监视任何数目、可变数目、和/或变化数目的数据元素至目的地寄存器715的打包或聚集。可使用其他值。
例如,在替换实施例中,掩码寄存器710中的“1”可指示相应数据元素被写入目的地寄存器415;否则,可使用“0。”在此类实施例中,聚集指令可执行,直至掩码寄存器710中的状态元素的值的总和等于预定阈值(例如要聚集的数据元素的数目),其可针对每个聚集指令而变化。
在一个实施例中,聚集步骤指令可执行或运行,直至标志指示掩码寄存器710被清除、为零、或为另一预定值(例如,针对该聚集指令要聚集的元素数目)。在一个实施例中,完成掩码可信令或标志聚集操作何时完成。
在一个实施例中,在每个工作周期中,“聚集_步骤”指令可从(例如L1)高速缓存存储器716读取高速缓存线中不同的一个高速缓存线,并且可在目的地寄存器715中填充对应于被读取的高速缓存线的最大数目的元素。例如,如果被读取的高速缓存线具有一个要聚集的元素,则一个元素可被写入目的地寄存器715,并且掩码寄存器710中相应的一位状态元素可被设为“0”。在一些实施例中,当使用双端口或多端口高速缓存存储器716和/或外部存储器735时,处理器可在每个周期分散和/或聚集一个以上数据元素,在这种情形中,用于分散和/或聚集预定数据元素集的分散和/或聚集操作可在几个周期或迭代中执行。
以下伪代码包括本文描述的操作的演示例子。可以使用其他伪代码、语言、操作、操作次序、和/或数字。
以下伪代码说明了聚集指令(例如,编写的‘vgatherd’)可如何操作的示例。
将vgatherd指令定义如下:
vgatherd vector_dest{mask},vector_offset,[base_address]
vector_dest是包含结果的向量寄存器
mask是用于跟踪向量-聚集操作的进度的16位掩码寄存器
base_address是基存储器地址
vector_offset是包含与base_address的偏移向量的向量寄存器
//初始化地址阵列
以下汇编代码说明了根据一个实施例如何使用迭代聚集-步骤指令(vgatherd)来实现完整向量-聚集功能的示例。
(vkxnor kl,k2)指令实现以下函数:
kl=kl XNOR k2
(vkortest kl,k2)指令如下写入整数标志:
置零_标志=((kl OR k2)==0)//为kl和k2的“或”等于0
进位_标志=((kl OR k2)==OxFFFF)//为kl和k2的“或”等于全1
“jnz”指令是标准的x86jump-if-not-zero(若非零则跳转)分支。
以下伪代码说明了分散指令(此处编写的‘vscatterd’)的一个实施例。将vscatterd指令定义如下:
vscatterd[base_address]{mask},vector_offset,vector_scatter_data
base_address是基存储器地址
mask是用于跟踪向量-聚集操作的进度的16位掩码寄存器
vector_offset是包含与base_address的偏移向量的向量寄存器
vector_scatter_dest是包含要分散至存储器的数据的向量寄存器
//初始化地址阵列
以下汇编代码说明了迭代分散-步骤指令(vscatterd)实现完整向量-分散功能的一个示例。
再次参考图7,可与vgatherd指令类似地定义分散/聚集预取指令,但取而代之将数据加载到目的地寄存器715中,具有该数据的高速缓存线可被预取至高速缓存存储器716中。在一个实施例中,数据可例如在聚集之前首先被预取至高速缓存存储器716中,以避免付出高速缓存未命中惩罚。例如可通过执行以下指令来达成此类操作次序:
vgatherpfd vector_offset{mask},[base_address]
mask可以是用于跟踪向量-聚集操作的进度的16位掩码寄存器
base_address可以是基存储器地址
vector_offset可以是包含与base_address的偏移向量的寄存器
下面是预取循环的伪代码的一个示例或样本:
Vgatherpfd可在每次迭代将数据预取至L1高速缓存中。
本发明的实施例可包括利用掩码寄存器710作为写掩码(例如,选择对哪些数据元素进行操作)和完成掩码(例如,信令或标志操作何时可完成)的聚集和/或分散操作。在一个实施例中,写掩码和/或向量完成掩码可以是寄存器组中的(例如,16位)寄存器。此类实施例可在不同架构上以可针对目标应用定制的不同性能水平来启用变化的和/或灵活的实现。例如,一些宽向量架构可实现其中所有元素在单个周期中被聚集和/或分散的聚集和/或分散操作。在其他实现中,每周期可聚集和/或分散仅一个元素。执行聚集和/或分散操作的指令次序可影响用于访问高速缓存存储器716以分散和/或聚集元素的周期数。本发明的实施例可使用可利用比例化索引偏置寻址来构建的地址,这可允许例如从具有32位偏移的向量生成64位地址。与使用完全形成的地址向量的一些常规架构相比,该比例化寻址可使用减少的编程开销来生成。寻址模式可使用(例如,64位)存储器指针利用来自两个向量寄存器的元素和/或一个向量寄存器中的相邻元素来形成。可使用其他或不同的存储器指向或寻址机制。
本发明的实施例可包括支持各种各样的数据类型转换的聚集和/或分散操作。此类支持在考虑数据的空间一致性以及用于完成分散和/或聚集操作的高速缓存查找总数时可能是有价值的。可达成其他或不同益处。
图8A示出响应于和/或为了支持聚集操作而使用索引阵列888和有限状态机890的装置810的一个实施例。装置810包括用于解码聚集指令的解码单元840、执行引擎单元850和存储器单元870。解码单元840耦合至执行引擎单元850中的重命名/分配器单元852。执行引擎单元850包括重命名/分配器单元852,该重命名/分配器单元耦合至引退单元854和一个或多个调度器单元856的集合。调度器单元856表示任何数量的不同调度器,包括:预约站、中央指令窗口等等。调度器单元856耦合至物理寄存器组,物理寄存器组包括向量物理寄存器884、掩码物理寄存器882以及整数物理寄存器886。每个物理寄存器组表示一个或多个物理寄存器组,其中不同的物理寄存器组保存一个或多个不同的数据类型(诸如:标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点,等等)、状态(诸如,指令指针是将要执行的下一个指令的地址)等等。
装置810的执行引擎单元850包括索引阵列888,用于存储来自向量物理寄存器884的SIMD向量寄存器的一组索引801、以及来自掩码物理寄存器882的一组相应掩码802元素。对于一个实施例,宽向量存储通道(例如,128位或256位或512位或更宽)和64位整数堆栈通道可被改变用途以促成索引801和掩码802元素至索引阵列888的传输(例如,使用单个微操作)。有限状态机890可操作地耦合于索引阵列888,以使用该组索引801和相应掩码802元素来促成聚集操作。地址生成逻辑894响应于有限状态机890,至少根据由整数物理寄存器886所提供的基址804以及索引阵列888中的该组索引801中的索引805,至少为具有第一值的每个相应掩码802元素生成有效地址806。存储器访问单元864可操作地耦合于地址生成逻辑894,以针对具有第一值的相应掩码807元素通过存储器单元870访问存储器位置以加载数据元素808,该存储器位置对应于由地址生成逻辑894响应于有限状态机890所生成的有效地址806。合并数据逻辑898可操作地耦合于存储器访问单元864和向量物理寄存器884的目的地SIMD寄存器,以根据与所生成的有效地址806相对应的索引元素在第一SIMD向量寄存器中的相应寄存器内位置来在目的地SIMD向量寄存器中的寄存器内位置处写入数据元素808。例如,在一个实施例中,数据可被广播至所有位置,且与相应索引相关联的单独掩码可被用于仅改变单个寄存器内位置。在替换实施例中,多个寄存器内位置可并发地被改变。在一个实施例中,个体掩码807可被发送给存储器访问单元864并且数据808被返回至合并数据逻辑898以促成该数据元素的被掩码混合。在另一替换实施例中,可生成微操作以促成数据元素的合并。当成功地从存储器聚集数据元素808时,有限状态机890随后将相应掩码802元素从第一值改变为第二值。
将领会,通过调度仅少数微操作以将来自SIMD向量寄存器884的一组索引和相应的一组掩码802元素传输至索引阵列888并初始化有限状态机890以扩展那少数微操作以与其他指令的执行并行地或并发地并且响应于和/或为了支持聚集操作而加载数据,指令吞吐量可得以改进。
图8B示出响应于和/或为了支持分散操作而使用索引阵列888和有限状态机892的装置820的一个实施例。装置820包括用于解码分散指令的解码单元840、执行引擎单元850和存储器单元870。图8B中的类似要素具有类似参考标记。解码单元840耦合至执行引擎单元850中的重命名/分配器单元852。执行引擎单元850包括重命名/分配器单元852,该重命名/分配器单元耦合至引退单元854和一个或多个调度器单元856的集合。调度器单元856表示任何数量的不同调度器,包括:预约站、中央指令窗口等等。调度器单元856耦合至物理寄存器组,物理寄存器组包括向量物理寄存器884、掩码物理寄存器882以及整数物理寄存器886。每个物理寄存器组表示一个或多个物理寄存器组,其中不同的物理寄存器组保存一个或多个不同的数据类型(诸如:标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点,等等)、状态(诸如,指令指针是将要执行的下一个指令的地址)等等。
装置810的执行引擎单元850包括索引阵列888,用于存储来自向量物理寄存器884的SIMD向量寄存器的一组索引801、以及来自掩码物理寄存器882的一组相应掩码802元素。对于一个实施例,宽向量存储通道(例如,128位或256位或512位或更宽)和64位整数堆栈通道可被改变用途以促成索引801和掩码802元素至索引阵列888的传输(例如,使用单个微操作)。执行引擎单元850的一些实施例也包括存储数据缓冲器899,其中针对分散操作来自SIMD向量寄存器的所有数据元素可一次性地(例如,使用单个微操作)被写入存储数据缓冲器899的多个单独的元素存储位置。将领会,在存储数据缓冲器899的这些多个单独的存储位置中存储的数据元素可随后被转发以满足更新的加载操作,而不访问外部存储器。有限状态机892可操作地耦合于索引阵列888,以促成使用该组索引801和相应掩码802元素来促成分散操作。
地址生成逻辑894响应于有限状态机892,至少根据由整数物理寄存器886所提供的基址804以及索引阵列888中的该组索引801中的索引805,至少为具有第一值的每个相应掩码802元素生成有效地址806。在存储数据缓冲器899中分配存储以保持对应于所生成的有效地址806的数据803元素,用于由存储器访问单元864存储至相应的存储器位置。对应于所生成的有效地址806的数据803元素被复制到缓冲器存储数据缓冲器899中。存储器访问单元864可操作地耦合于地址生成逻辑894,以针对具有第一值的相应掩码807元素通过存储器单元870访问存储器位置以存储数据元素809,该存储器位置对应于由地址生成逻辑894响应于有限状态机892所生成的有效地址806。在一个实施例中,存储在存储数据缓冲器899中的数据803元素可被访问以满足顺序指令次序外的更新的加载指令——如果它们的有效地址806对应于更新的加载指令的有效地址。当成功地将数据元素809分散到存储器时,有限状态机892随后将相应掩码802元素从第一值改变为第二值。在一些实施例中,成功完成分散操作可通过微操作的执行来实现。在一些实施例中,在有限状态机892成功完成相应存储(例如,没有失败)之后,这些微操作可随即引退。
可以理解到,在一些实施例中,早在存储数据缓冲器899中分配对应于所生成的有效地址806的存储时,就可以判断存储在存储数据缓冲器899中的数据803元素是否最终可被用于满足顺序指令次序外的更新的加载指令。还将领会,通过调度仅少数微操作以将来自向量物理寄存器884的SIMD向量寄存器的一组索引801和来自掩码物理寄存器882的相应的一组掩码802元素传输至索引阵列888并初始化有限状态机892以扩展那少数微操作以与其他指令的执行并行地或并发地并且响应于和/或为了支持分散操作而存储数据,指令吞吐量可得以改进。
现在参照图9,所示出的是根据本发明一个实施例的系统900的框图。如图9所示,多处理器系统900是点对点互连系统,且包括经由点对点互连950耦合的第一处理器970和第二处理器980。
虽然仅以两个处理器970、980来示出,但应理解本发明的范围不限于此。在其它实施例中,在给定处理器中可存在一个或多个附加处理器。
处理器970和980被示为分别包括集成存储器控制器单元972和982。处理器970还包括作为其总线控制器单元的一部分的点对点(P-P)接口976和978;类似地,第二处理器980包括点对点接口986和988。处理器970、980可以使用点对点(P-P)接口电路978、988经由P-P接口950来交换信息。如图9所示,IMC 972和982将处理器耦合到相应的存储器,即存储器932和存储器934,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器970、980可各自使用点对点接口电路976、994、986、998经由各个P-P接口952、954与芯片组990交换信息。芯片组990还可经由高性能图形接口939与高性能图形电路938交换信息。
共享高速缓存(未示出)可以被包括在任一处理器中或者两个处理器的外面,但经由P-P互连与处理器相连接,以便如果处理器被置于低功率模式下,处理器中的任何一个或两者的本地高速缓存信息可被存储在共享高速缓存中。
芯片组990可经由接口996耦合至第一总线916。在一个实施例中,第一总线916可以是外围组件互连(PCI)总线,或诸如PCI Express总线或其它第三代I/O互连总线之类的总线,但本发明的范围并不受此限制。
如图9所示,各种I/O设备914可以连同总线桥918耦合到第一总线916,总线桥将第一总线916耦合至第二总线920。在一个实施例中,第二总线920可以是低引脚数(LPC)总线。在一个实施例中,多个设备可以耦合到第二总线920,包括例如键盘和/或鼠标922、通信设备927以及可以包括指令/代码和数据930的存储单元928(诸如盘驱动器或其它海量存储设备)。进一步地,音频I/O 924可以耦合到第二总线920。注意,其它架构是可能的。例如,代替图9的点对点架构,系统可实现多点总线或者其他此类架构。
现在参照图10,所示出的是根据本发明一个实施例的SoC 1000的框图。虚线框是更先进的SoC上的可选特征。在图10中,互连单元1022被耦合至:应用处理器1010,包括一个或多个核1002A-N的集合(每个核分别具有高速缓存单元1004A-N)和共享高速缓存单元1006;系统代理单元1015;总线控制器单元1016;集成存储器控制器单元1014;一个或多个媒体处理器1020的集合,可包括集成图形逻辑1008、用于提供静态和/或视频照相机功能的图像处理器1024、用于提供硬件音频加速的音频处理器1026、以及用于提供视频编码/解码加速的视频处理器1028;静态随机存取存储器(SRAM)单元1030;直接存储器存取(DMA)单元1032;以及显示单元1040,用于耦合至一个或多个外部显示器。
图11是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图11示出可以使用x86编译器1104来编译利用高级语言1102的程序,以生成可以由具有至少一个x86指令集核的处理器1116原生执行的x86二进制代码1106。具有至少一个x86指令集核1116的处理器表示任何处理器,该处理器能够通过兼容地执行或以其它方式处理(1)英特尔x86指令集核的指令集的大部分或(2)旨在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它软件的目标代码版本来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能,以实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1104表示用于生成x86二进制代码1106(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器1116上执行。类似地,图11示出可以使用替代的指令集编译器1108来编译利用高级语言1102的程序,以生成可以由不具有至少一个x86指令集核的处理器1114(例如具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代指令集二进制代码1110。指令转换器1112被用来将x86二进制代码1106转换成可以由不具有x86指令集核的处理器1114原生执行的代码。该转换后的代码不大可能与替代性指令集二进制代码1110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作并由来自替代指令集的指令构成。因此,指令转换器1112通过仿真、模拟或任何其它过程来表示允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码1106的软件、固件、硬件或其组合。
图12示出用于提供向量聚集功能的过程1201的一个实施例的流程图。过程1201和本文中公开的其他过程通过处理块来执行,处理块可包括专用硬件或可由通用机器或专用机器或其某种组合执行的软件或固件操作码。
在过程1201的处理块1210中,将来自向量操作数寄存器的索引以及来自掩码寄存器的相应掩码元素复制到索引阵列中。然后处理前进至处理块1226,在此从掩码寄存器中的多个掩码字段中的每个字段读取下一值。将理解,虽然过程1201被示为迭代性的,但优选在可能的时候并行地执行这些操作中的许多操作。来自掩码寄存器的多个掩码字段中的每一个可对应于存储器中的数据元素的偏移,并且对于掩码寄存器中的每个字段,一个值指示相应的元素尚未从存储器中被聚集,而第二值指示相应的数据元素无需被聚集或已经从存储器中被聚集。在一个实施例中,掩码寄存器是在架构上可见的寄存器。在另一实施例中,掩码寄存器可以是隐式的,例如其中所有字段最初指示相应的元素尚未从存储器中被聚集。在处理块1234,将掩码寄存器的字段与第一值作比较,该第一值指示相应元素尚未从存储器被聚集。如果不等于第一值,则处理前进至处理块1274,在处理块1274重复聚集操作直到完成。在一些实施例中,即使掩码寄存器的字段不等于第一值也可执行附加处理(例如,保存掩码字段的值以用于合并被聚集的数据),但此类处理对于本发明的其他实施例而言不是必不可少的。否则,在处理块1250,从存储器聚集相应的数据元素并在处理块1258将其存储到具有多个数据字段的向量寄存器中,这多个数据字段的一部分被用于存储被聚集的数据元素。一旦成功完成处理块1258,就在处理块1266中将相应掩码字段改变为第二值,该第二值指示相应的数据元素已经从存储器中被聚集。
在处理块1274,判断聚集操作是否完成(即,掩码寄存器中的多个掩码字段中的每个字段均具有第二值)。如果未完成,则处理重复在处理块1226中开始。否则,处理前进至处理块1282,在此存储结果,例如,SIMD聚集指令的结果可被存储在物理向量寄存器中,并且结果所得的掩码字段可被存储在物理掩码寄存器中。随后在处理块1290,SIMD聚集指令引退。
图13示出用于提供向量聚集功能的过程1301的另一个实施例的流程图。在过程1301的处理块1310中,将来自向量操作数寄存器的索引以及来自掩码寄存器的相应掩码元素复制到索引阵列中。处理随后前进至处理块1318,在此初始化有限状态机以执行加载聚集操作。然后处理前进至处理块1326,在此从掩码寄存器中的多个掩码字段中的每个字段读取下一值。将理解,虽然过程1301被示为迭代性的,但优选在可能的时候并行地执行这些操作中的许多操作。来自掩码寄存器的多个掩码字段中的每一个可对应于存储器中的数据元素的偏移,并且对于掩码寄存器中的每个字段,一个值指示相应的元素尚未从存储器中被聚集,而第二值指示相应的数据元素无需被聚集或已经从存储器中被聚集。
在一个实施例中,掩码寄存器是在架构上可见的寄存器。在另一实施例中,掩码寄存器可以是隐式的,例如其中所有字段最初指示相应的元素尚未从存储器中被聚集。在一些实施例中,处理器可向掩码寄存器中的元素指派值,掩码寄存器可在一些情形中监视第二寄存器的存储容量。在一些实施例中,掩码寄存器中的每个元素可对应于要写入第二(例如,加载)寄存器的数据元素中相应的一个数据元素。掩码寄存器中的有效数据字段与第二寄存器中的数据元素之间可存在一一对应关系。例如,在具有32、或64、或128个潜在数据字段的掩码寄存器中,可存在仅两个、或四个、或八个、或十六个等有效数据字段。第二值可指示相应的数据元素已被写入第二寄存器,而第一值可指示相应的元素尚未被写入第二寄存器。第二值可为零(0),而第一值可为一(1)。在另一实施例中,第二值可为一(1),而第一值可为零(0)。也可使用其它或不同值。
因此,在一些实施例中,掩码寄存器中的元素(例如,状态元素)的每个零(例如,第二值)可指示相应的数据元素已被写入加载寄存器,而掩码寄存器中的状态元素的每个非零(例如,第一值)可指示相应的数据元素尚未被写入加载寄存器。相应地,在处理块1334,将掩码寄存器的字段与第一值作比较,该第一值指示相应元素尚未从存储器被聚集。如果不等于第一值,则处理前进至处理块1374,在此重复聚集操作直到完成。否则,在处理块1342,相应索引被用于生成有效地址,并且处理随后前进至处理块1350,其中在该有效地址处访问数据元素以从存储器(例如,潜在地高速缓存存储器)加载相应的数据元素。由此,从存储器聚集相应的数据元素,并且在处理块1358中将其存储或合并到具有多个数据字段的向量寄存器中,这多个数据字段的一部分被用于存储所聚集的数据元素。再次将领会,虽然过程1301被示为迭代和顺序的,例如处理块1342、1350和1358,但优选在可能的时候并行地执行处理块1342、1350或1358的多个操作。一旦成功完成处理块1358,就在处理块1366中将一个或多个相应掩码字段改变为第二值,该第二值指示相应的数据元素已经从存储器中被聚集。
在处理块1374,判断聚集操作是否完成(即,掩码寄存器中的多个掩码字段中的每个字段均具有第二值)。如果未完成,则处理重复在处理块1326中开始。否则,处理前进至处理块1382,在此存储结果,例如,SIMD聚集指令的结果可被存储在物理向量寄存器中,并且结果所得的掩码字段可被存储在物理掩码寄存器中。随后在处理块1390,SIMD聚集指令引退。
图14示出用于提供向量聚集功能的过程1401的另一个实施例的流程图。在过程1401的处理块1410中,将来自向量操作数寄存器的索引以及来自掩码寄存器的相应掩码元素复制到索引阵列中。处理随后前进至处理块1418,在此初始化有限状态机以执行加载聚集操作,并且在处理块1422中,初始化合并逻辑以执行聚集合并操作。然后处理前进至处理块1426,其中从掩码寄存器中的多个掩码字段中的每个字段并且从多个索引中的每个索引读取下一值。在处理块1434,从相应索引生成有效地址。来自掩码寄存器的多个掩码字段中的每一个可对应于存储器中的数据元素的偏移,并且对于掩码寄存器中的每个字段,一个值指示相应的元素尚未从存储器中被聚集,而第二值指示相应的数据元素无需被聚集或已经从存储器中被聚集。
在一个实施例中,掩码寄存器是在架构上可见的寄存器。在另一实施例中,掩码寄存器可以是隐式的,例如其中所有字段最初指示相应的元素尚未从存储器中被聚集。掩码寄存器中的有效数据字段与第二寄存器中的数据元素之间可存在一一对应关系。例如,在具有32、或64、或128个潜在数据字段的掩码寄存器中,可存在仅两个、或四个、或八个、或十六个等有效数据字段。第二值可指示相应的数据元素已被写入第二寄存器,而第一值可指示相应的元素尚未被写入第二寄存器。相应地,在处理块1442,将掩码寄存器的字段与第一值作比较,该第一值指示相应元素尚未从存储器被聚集。如果不等于第一值,则处理前进至处理块1474,在此重复聚集操作直到完成。否则,在处理块1450,在该有效地址处访问数据元素以从存储器(例如,潜在地高速缓存存储器)加载相应的数据元素。由此,从存储器聚集相应的数据元素,并且在处理块1458将其存储或合并到具有多个数据字段的向量寄存器中,这多个数据字段的一部分被用于存储被聚集的数据元素。再次将领会,虽然过程1401被示为迭代和顺序的,例如处理块1426、1434、1442、1450和1458,但优选在可能的时候并行地执行处理块1426、1434、1442、1450和1458的多个操作。一旦成功完成处理块1458,就在处理块1466中将一个或多个相应掩码字段改变为第二值,该第二值指示相应的数据元素已经从存储器中被聚集。
在处理块1474,判断聚集操作是否完成(即,掩码寄存器中的多个掩码字段中的每个字段均具有第二值)。如果未完成,则处理重复在处理块1426中开始。否则,处理前进至处理块1482,在此存储结果,例如,SIMD聚集指令的结果可被存储在物理向量寄存器中,并且结果所得的掩码字段可被存储在物理掩码寄存器中。随后在处理块1490,SIMD聚集指令引退。
将领会,在用于提供向量聚集功能的过程1201、1301和/或1401中,数据合并逻辑(例如,数据合并逻辑898)可操作性地耦合于存储器访问单元(例如,存储器访问单元864)和SIMD向量寄存器以根据其相应掩码(例如,掩码802)的相应位置和索引(例如,索引801)在寄存器内位置处写入相应数据元素。例如,在一个实施例中,数据(例如,数据808)可被广播至所有位置,且个体的相应掩码(例如,掩码807)可被用于仅改变单个位置。在替换实施例中,多个位置可并发地被改变。在成功完成相应加载之际,FSM(例如,FSM 890)改变(例如,索引阵列888中的掩码802的)相应掩码元素。
将领会,通过调度仅少数微操作以将来自(例如,向量物理寄存器884的)SIMD向量寄存器的一组索引(例如,索引801)和相应的一组掩码元素(例如,掩码802)传输至索引阵列(例如,索引阵列888)并初始化有限状态机(例如,FSM 890)以扩展那少数微操作(例如,扩展成处理块1326、1334、1342、1350和1358的操作,或扩展成处理块1426、1434、1442、1450和1458的操作)以与其他指令的执行并行地或并发地并且响应于和/或为了支持聚集操作而加载和聚集数据,指令吞吐量可得以改进。
图15示出用于提供向量分散功能的过程1501的一个实施例的流程图。在过程1501的处理块1510中,将来自向量操作数寄存器的索引以及来自掩码寄存器的相应掩码元素复制到索引阵列中。然后处理前进至处理块1526,在此从索引阵列中的多个掩码字段中的字段读取下一值。将理解,虽然过程1501被示为迭代性的,但优选在可能的时候并行地执行这些操作中的许多操作。来自掩码寄存器的多个掩码字段中的每一个可对应于存储器中的数据元素的偏移,并且对于每个掩码字段,一个值指示相应的元素尚未被分散至存储器,而第二值指示相应的数据元素无需被分散或已经被分散至存储器。在一个实施例中,掩码寄存器是在架构上可见的寄存器。在另一实施例中,掩码寄存器可以是隐式的,例如其中所有字段最初指示相应的元素尚未被分散至存储器。在处理块1534,将掩码寄存器的字段与第一值作比较,该第一值指示相应元素尚未被分散至存储器。如果不等于第一值,则处理前进至处理块1574,其中重复分散操作直到完成。否则在处理块1550,将相应的数据元素分散至存储器。一旦成功完成处理块1550,就在处理块1566中将相应掩码字段改变为第二值,该第二值指示相应的数据元素已经被分散到存储器。
在处理块1574,判断分散操作是否完成(即,掩码寄存器中的多个掩码字段中的每个字段均具有第二值)。如果未完成,则处理重复在处理块1526中开始。否则,处理前进至处理块1590,其中SIMD分散指令引退,并且使得对掩码寄存器的任何改变在架构上可见。
图16示出用于支持分散操作的过程的替换实施例1601的流程图。在过程1601的处理块1610中,将来自向量操作数寄存器的索引以及来自掩码寄存器的相应掩码元素复制到索引阵列中。处理随后前进至处理块1658,在此初始化有限状态机以执行存储分散操作,并且为对应于这些索引的地址分配缓冲器存储。在处理块1618,数据向量元素被复制到所分配的存储中。然后处理前进至处理块1626,其中从索引阵列中的多个掩码字段中的字段读取下一值。将理解,虽然过程1601被示为迭代性的,但优选在可能的时候并行地执行这些操作中的许多操作。来自掩码寄存器的多个掩码字段中的每一个可对应于存储器中的数据元素的偏移,并且对于每个掩码字段,一个值指示相应的元素尚未被分散至存储器,而第二值指示相应的数据元素无需被分散或已经被分散至存储器。
在一个实施例中,掩码寄存器是在架构上可见的寄存器。在另一实施例中,掩码寄存器可以是隐式的,例如其中所有字段最初指示相应的元素尚未被分散至存储器。在一些实施例中,处理器可向掩码寄存器中的元素指派值,掩码寄存器可在一些情形中监视来自第二寄存器的存储进度。在一些实施例中,掩码寄存器中的每个元素可对应于要从第二(例如,存储-数据)寄存器存储的数据元素中相应的一个数据元素。掩码寄存器中的有效数据字段与第二寄存器中的数据元素之间可存在一一对应关系。例如,在具有32、或64、或128个潜在数据字段的掩码寄存器中,可存在仅两个、或四个、或八个、或十六个等有效数据字段。第二值可指示来自第二寄存器的相应数据元素已被存储至存储器,而第一值可指示来自第二寄存器的相应元素尚未被存储在存储器中。第二值可为零(0),而第一值可为一(1)。在另一实施例中,第二值可为一(1),而第一值可为零(0)。也可使用其它或不同值。
因此,在一些实施例中,掩码寄存器中的元素(例如,状态元素)的每个零(例如,第二值)可指示来自存储-数据寄存器的相应数据元素已被写入或分散至存储器,并且掩码寄存器中的状态元素的每个非零(例如,第一值)可指示来自存储-数据寄存器的相应数据元素尚未被写入存储器。相应地,在处理块1634,将掩码寄存器的字段与第一值作比较,该第一值指示相应元素尚未被分散至存储器。如果不等于第一值,则处理前进至处理块1674,其中重复分散操作直到完成。否则,在处理块1642,从相应索引生成有效地址,并且随后在处理块1650,相应的数据元素被分散至存储器。再次将领会,虽然过程1601被示为迭代和顺序的,例如处理块1642和1650,但优选在可能的时候并行地执行处理块1642和1650的多个操作。一旦成功完成处理块1650,就在处理块1666中将一个或多个相应掩码字段改变为第二值,该第二值指示相应的数据元素已经被分散到存储器。
在处理块1674,判断分散操作是否完成(即,掩码寄存器中的多个掩码字段中的每个字段均具有第二值)。如果未完成,则处理重复在处理块1626中开始。否则,处理前进至处理块1690,其中SIMD分散指令引退,并且使得对掩码寄存器的任何改变在架构上可见。
图17示出用于支持分散操作的过程的替换实施例1701的流程图。在过程1701的处理块1710中,将来自向量操作数寄存器的索引以及来自掩码寄存器的相应掩码元素复制到索引阵列中。处理随后前进至处理块1758,在此初始化有限状态机以执行存储分散操作,并且为对应于这些索引的地址分配缓冲器存储。在处理块1718,数据向量元素被复制到所分配的存储中。然后处理前进至处理块1726,其中从索引阵列中的多个掩码字段中的字段读取下一值,以及在处理块1734,从相应的索引生成有效地址。来自掩码寄存器的多个掩码字段中的每一个可对应于存储器中的数据元素的偏移,并且对于每个掩码字段,一个值指示相应的元素尚未被分散至存储器,而第二值指示相应的数据元素无需被分散或已经被分散至存储器。在一个实施例中,掩码寄存器是在架构上可见的寄存器。在另一实施例中,掩码寄存器可以是隐式的,例如其中所有字段最初指示相应的元素尚未被分散至存储器。在一些实施例中,掩码寄存器中的有效数据字段与第二寄存器中的数据元素之间可存在一一对应关系。例如,在具有32、或64、或128个潜在数据字段的掩码寄存器中,可存在仅两个、或四个、或八个、或十六个等有效数据字段。第二值可指示来自第二寄存器的相应数据元素已被存储至存储器,而第一值可指示来自第二寄存器的相应元素尚未被存储在存储器中。相应地,在处理块1742,将掩码寄存器的字段与第一值作比较,第一值指示相应的元素尚未被分散至存储器。如果不等于第一值,则处理前进至处理块1674,其中重复分散操作直到完成。否则在处理块1750,访问该有效地址并且将相应的数据元素写入或分散至存储器。再次将领会,虽然过程1701被示为迭代和顺序的,例如处理块1726、1734、1742和1750,但优选在可能的时候并行地执行处理块1726、1734、1742和1750的多个操作。一旦成功完成处理块1750,就在处理块1766中将一个或多个相应掩码字段改变为第二值,该第二值指示相应的数据元素已经被分散至存储器。
在处理块1774,判断分散操作是否完成(即,掩码寄存器中的多个掩码字段中的每个字段均具有第二值)。如果未完成,则处理重复在处理块1726中开始。否则,处理前进至处理块1790,其中SIMD分散指令引退,并且使得对掩码寄存器的任何改变在架构上可见。
将领会,在用于提供向量分散功能的过程1501、1601和/或1701中,在寄存器或缓冲器(例如,存储数据缓冲器899)中分配存储以保持对应于所生成的地址(例如,有效地址806)的数据元素(例如,数据803)以由存储器访问单元(例如,存储器访问单元864)将这些数据元素存储至相应的存储器位置。在成功完成相应存储之际,FSM(例如,FSM 892)改变(例如,索引阵列888中的掩码802的)相应掩码元素。
还可以理解到,在一些实施例中,早在存储缓冲器(例如,存储数据缓冲器899)中分配对应于所生成的地址(例如,有效地址806)的存储时,就可以判断存储在存储缓冲器(例如,存储数据缓冲器899)中的数据元素(例如,数据803)是否最终可被用于满足顺序指令次序外的更新的加载指令。还将再次领会,通过调度仅少数微操作以将来自(例如,向量物理寄存器884的)SIMD向量寄存器的一组索引(例如,索引801)和相应的一组掩码元素(例如,来自掩码物理寄存器882的掩码802)传输至索引阵列(例如,索引阵列888)并初始化有限状态机(例如,FSM 892)以扩展那少数微操作以与其他指令的执行并行地或并发地并且响应于和/或为了支持分散操作而存储数据(例如,数据809),指令吞吐量可得以改进。
上述描述旨在说明本发明的优选实施例。根据上述讨论,还应当显而易见的是,在发展迅速且进一步的进展难以预见的此技术领域中,本领域技术人员可在安排和细节上对本发明进行修改,而不背离落在所附权利要求及其等价方案的范围内的本发明的原理。
Claims (25)
1.一种用于聚集和分散的计算机实现的方法,包括:
从一个或多个寄存器将一组索引和相应的一组掩码元素复制到索引阵列;
至少针对具有第一值的每个相应掩码元素根据所述索引阵列中的该组索引生成一组地址;
在缓冲器中为所生成的该组地址中的每个地址分配存储;
将对应于所生成的该组地址的一组数据元素复制到所述缓冲器;以及
如果相应的掩码元素具有所述第一值,则访问该组地址中的地址以存储相应的数据元素;以及
响应于其相应存储的完成而将相应掩码元素的值从所述第一值改变为第二值。
2.如权利要求1所述的计算机实现的方法,其响应于单指令多数据SIMD分散指令而被执行。
3.如权利要求2所述的计算机实现的方法,所述将该组索引和相应的该组掩码元素复制到所述索引阵列的步骤是响应于通过解码所述单指令多数据SIMD分散指令生成的第一微操作而执行的。
4.如权利要求3所述的计算机实现的方法,所述将该组数据元素复制到所述缓冲器的步骤是响应于通过解码所述单指令多数据SIMD分散指令生成的一组微操作中的第二微操作而执行的。
5.如权利要求4所述的计算机实现的方法,还包括:
响应于所述单指令多数据SIMD分散指令,初始化有限状态机以扩展该组微操作来与其他指令的执行并发地分散-存储数据。
6.如权利要求5所述的计算机实现的方法,所述初始化有限状态机以扩展该组微操作来与其他指令的执行并发地分散-存储数据的步骤是响应于通过解码所述单指令多数据SIMD分散指令生成的一组微操作中的第三微操作而执行的。
7.如权利要求5所述的计算机实现的方法,所述根据所述索引阵列中的该组索引生成一组地址的步骤是响应于通过解码所述单指令多数据SIMD分散指令生成的一组微操作中的第三微操作而执行的。
8.如权利要求7所述的计算机实现的方法,所述响应于其相应加载的完成而将相应掩码元素的值从所述第一值改变为所述第二值的步骤是响应于通过解码所述单指令多数据SIMD聚集指令生成的该组微操作中的第四微操作而执行的。
9.一种用于聚集和分散的装置,包括:
索引阵列,用于存储来自第一单指令多数据SIMD寄存器的一组索引以及相应的一组掩码元素;
有限状态机FSM,其操作地耦合于所述索引阵列以使用该组索引和相应的掩码元素来促成分散操作;
地址生成逻辑,其响应于所述有限状态机FSM至少针对具有第一值的每个相应掩码元素根据所述索引阵列中的该组索引中的索引生成地址;
缓冲器,其用于存储与所生成的地址相对应的一组数据元素;
存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址相对应的第一存储器位置以从所述缓冲器存储与所生成的所述第一地址相对应的第一数据元素;以及
所述有限状态机FSM将相应掩码元素的值从所述第一值改变为第二值。
10.如权利要求9所述的装置,其对单指令多数据SIMD分散指令做出响应。
11.如权利要求10所述的装置,还包括:
解码逻辑,用于解码所述单指令多数据SIMD分散指令并响应于解码所述单指令多数据SIMD分散指令而生成一组微操作。
12.如权利要求11所述的装置,响应于所述单指令多数据SIMD分散指令,所述有限状态机FSM扩展该组微操作以与其他指令的执行并发地分散-存储数据。
13.如权利要求12所述的装置,其中初始化所述索引阵列以存储该组索引和相应的该组掩码元素是响应于通过解码所述单指令多数据SIMD分散指令生成的该组微操作中的第一微操作而执行的。
14.如权利要求13所述的装置,其中将对应于所生成的地址的该组数据元素复制到所述缓冲器是响应于通过解码所述单指令多数据SIMD分散指令生成的该组微操作中的第二微操作而执行的。
15.如权利要求13所述的装置,其中初始化所述有限状态机FSM以扩展该组微操作来与其他指令的执行并发地分散-存储数据是响应于通过解码所述单指令多数据SIMD分散指令生成的该组微操作中的第三微操作而执行的。
16.一种用于聚集和分散的装置,包括:
解码逻辑,用于解码分散指令并生成一组微操作;
索引阵列,用于保持一组索引和相应的一组掩码元素;
有限状态机,用于响应于通过解码所述分散指令生成的一组微操作来促成分散操作;
地址生成逻辑,其响应于所述有限状态机至少针对具有第一值的每个相应掩码元素根据所述索引阵列中的该组索引中的索引生成地址;
缓冲器,其用于存储与所生成的地址相对应的一组数据元素;
存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址相对应的第一存储器位置以从所述缓冲器存储与所生成的所述第一地址相对应的第一数据元素;以及
所述有限状态机将相应掩码元素的值从所述第一值改变为第二值。
17.一种处理器,包括:
第一寄存器,包括多个掩码元素,其中所述第一寄存器中的所述多个掩码元素对应于第二寄存器中的将使用第三寄存器中的多个相应索引来有条件地存储的多个数据元素,其中对于第一寄存器中的每个掩码元素,第一值指示相应的数据元素尚未被存储,并且第二值指示相应的数据元素无需被存储或者已经使用来自所述第三寄存器的相应索引被存储;
解码器级,用于解码第一指令以生成一组微操作;以及
对该组微操作做出响应的一个或多个执行单元,包括:
索引阵列,用于存储来自所述第三寄存器的所述多个索引和相应的所述多个掩码元素;
有限状态机FSM,其操作地耦合于所述索引阵列以使用所述多个索引和相应的掩码元素来促成分散操作。
18.如权利要求17所述的处理器,还包括:
地址生成逻辑,其响应于所述有限状态机FSM至少针对具有第一值的每个相应掩码元素根据所述索引阵列中的所述多个索引中的索引生成地址。
19.如权利要求18所述的处理器,还包括:
缓冲器,用于存储所述第二寄存器中的所述多个数据元素中与由所述地址生成逻辑所生成的地址相对应的一组数据元素。
20.如权利要求19所述的处理器,还包括:
存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址相对应的第一存储器位置以存储该组数据元素中与所述第一地址相对应的第一数据元素。
21.如权利要求20所述的处理器,其中所述有限状态机FSM将相应掩码元素的值从所述第一值改变为第二值。
22.一种用于聚集和分散的系统,包括:
存储器,用于存储指定单指令多数据SIMD索引寄存器、第二单指令多数据SIMD寄存器和掩码寄存器的第一指令;以及
处理器,包括:
索引阵列,用于存储来自所述单指令多数据SIMD索引寄存器的一组索引以及来自所述掩码寄存器的相应的一组掩码元素;
有限状态机FSM,其操作地耦合于所述索引阵列以使用该组索引和相应的掩码元素来促成分散操作;
地址生成逻辑,其响应于所述有限状态机FSM至少针对具有第一值的每个相应掩码元素根据所述索引阵列中的该组索引中的索引生成地址;
缓冲器,用于存储来自所述第二单指令多数据SIMD寄存器的与由所述地址生成逻辑所生成的地址相对应的一组数据元素;
存储器访问单元,其操作地耦合于所述地址生成逻辑,用于访问与所生成的第一地址相对应的第一存储器位置以存储该组数据元素中与所述第一地址相对应的第一数据元素;以及
所述有限状态机FSM,用于将相应掩码元素的值从所述第一值改变为第二值。
23.如权利要求22所述的系统,所述处理器还包括:
引退级,用于在发生故障之际或在所述掩码寄存器中的所有元素皆为所述第二值时引退所述第一指令。
24.一种或多种其上存储有指令的计算机可读介质,所述指令当由计算机处理器执行时使所述处理器执行如权利要求1至8中任一项所述的方法。
25.一种用于聚集和分散的设备,包括用于执行如权利要求1至8中任一项所述的方法的装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2012/040628 WO2013180738A1 (en) | 2012-06-02 | 2012-06-02 | Scatter using index array and finite state machine |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104303142A CN104303142A (zh) | 2015-01-21 |
CN104303142B true CN104303142B (zh) | 2019-03-08 |
Family
ID=49673783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280072904.4A Expired - Fee Related CN104303142B (zh) | 2012-06-02 | 2012-06-02 | 使用索引阵列和有限状态机的分散 |
Country Status (3)
Country | Link |
---|---|
US (2) | US9626333B2 (zh) |
CN (1) | CN104303142B (zh) |
WO (1) | WO2013180738A1 (zh) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9626333B2 (en) | 2012-06-02 | 2017-04-18 | Intel Corporation | Scatter using index array and finite state machine |
US8972697B2 (en) | 2012-06-02 | 2015-03-03 | Intel Corporation | Gather using index array and finite state machine |
JP6187478B2 (ja) * | 2013-01-11 | 2017-08-30 | 日本電気株式会社 | インデックスキー生成装置及びインデックスキー生成方法並びに検索方法 |
US10474652B2 (en) * | 2013-03-14 | 2019-11-12 | Inpixon | Optimizing wide data-type storage and analysis of data in a column store database |
US9720667B2 (en) * | 2014-03-21 | 2017-08-01 | Intel Corporation | Automatic loop vectorization using hardware transactional memory |
WO2016126472A1 (en) * | 2015-02-06 | 2016-08-11 | Micron Technology, Inc. | Apparatuses and methods for scatter and gather |
US9891914B2 (en) * | 2015-04-10 | 2018-02-13 | Intel Corporation | Method and apparatus for performing an efficient scatter |
US9875214B2 (en) | 2015-07-31 | 2018-01-23 | Arm Limited | Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers |
JP6493088B2 (ja) | 2015-08-24 | 2019-04-03 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10503502B2 (en) | 2015-09-25 | 2019-12-10 | Intel Corporation | Data element rearrangement, processors, methods, systems, and instructions |
US10169391B2 (en) * | 2015-10-21 | 2019-01-01 | International Business Machines Corporation | Index management |
US10338920B2 (en) * | 2015-12-18 | 2019-07-02 | Intel Corporation | Instructions and logic for get-multiple-vector-elements operations |
US10509726B2 (en) * | 2015-12-20 | 2019-12-17 | Intel Corporation | Instructions and logic for load-indices-and-prefetch-scatters operations |
US20170177360A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Scatter Operations |
US20170177349A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Prefetch-Gathers Operations |
US20170177363A1 (en) * | 2015-12-22 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Gather Operations |
US10248419B2 (en) * | 2016-03-09 | 2019-04-02 | International Business Machines Corporation | In-memory/register vector radix sort |
US10817802B2 (en) * | 2016-05-07 | 2020-10-27 | Intel Corporation | Apparatus for hardware accelerated machine learning |
US20170371657A1 (en) * | 2016-06-24 | 2017-12-28 | Qualcomm Incorporated | Scatter to gather operation |
US10528518B2 (en) | 2016-08-21 | 2020-01-07 | Mellanox Technologies, Ltd. | Using hardware gather-scatter capabilities to optimize MPI all-to-all |
US10402413B2 (en) * | 2017-03-31 | 2019-09-03 | Intel Corporation | Hardware accelerator for selecting data elements |
US11360771B2 (en) | 2017-06-30 | 2022-06-14 | Intel Corporation | Method and apparatus for data-ready memory operations |
US11042375B2 (en) * | 2017-08-01 | 2021-06-22 | Arm Limited | Counting elements in data items in a data processing apparatus |
US10887252B2 (en) | 2017-11-14 | 2021-01-05 | Mellanox Technologies, Ltd. | Efficient scatter-gather over an uplink |
US10942847B2 (en) * | 2018-12-18 | 2021-03-09 | Intel Corporation | Technologies for efficiently performing scatter-gather operations |
US10580481B1 (en) * | 2019-01-14 | 2020-03-03 | University Of Virginia Patent Foundation | Methods, circuits, systems, and articles of manufacture for state machine interconnect architecture using embedded DRAM |
EP3699770A1 (en) | 2019-02-25 | 2020-08-26 | Mellanox Technologies TLV Ltd. | Collective communication system and methods |
US11232533B2 (en) * | 2019-03-15 | 2022-01-25 | Intel Corporation | Memory prefetching in multiple GPU environment |
US11750699B2 (en) | 2020-01-15 | 2023-09-05 | Mellanox Technologies, Ltd. | Small message aggregation |
KR20210112949A (ko) | 2020-03-06 | 2021-09-15 | 삼성전자주식회사 | 데이터 버스, 그것의 데이터 처리 방법 및 데이터 처리 장치 |
US11876885B2 (en) | 2020-07-02 | 2024-01-16 | Mellanox Technologies, Ltd. | Clock queue with arming and/or self-arming features |
US11567767B2 (en) | 2020-07-30 | 2023-01-31 | Marvell Asia Pte, Ltd. | Method and apparatus for front end gather/scatter memory coalescing |
US11567771B2 (en) * | 2020-07-30 | 2023-01-31 | Marvell Asia Pte, Ltd. | Method and apparatus for back end gather/scatter memory coalescing |
US11556378B2 (en) | 2020-12-14 | 2023-01-17 | Mellanox Technologies, Ltd. | Offloading execution of a multi-task parameter-dependent operation to a network device |
US11922237B1 (en) | 2022-09-12 | 2024-03-05 | Mellanox Technologies, Ltd. | Single-step collective operations |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200300904A (en) * | 2001-12-13 | 2003-06-16 | Quicksilver Tech Inc | Computer processor architecture selectively using finite-state-machine for control code execution |
CN102103483A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 汇聚和散布多个数据元素 |
CN102377493A (zh) * | 2010-08-13 | 2012-03-14 | 英特尔移动通信技术有限公司 | 带有干扰控制的收发器 |
Family Cites Families (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4589065A (en) | 1983-06-30 | 1986-05-13 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable trap instructions in a primitive instruction set computing system |
US5182811A (en) | 1987-10-02 | 1993-01-26 | Mitsubishi Denki Kabushiki Kaisha | Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt |
JPH0769783B2 (ja) | 1987-11-16 | 1995-07-31 | 日本電気株式会社 | 例外処理方式 |
US5615349A (en) | 1990-09-04 | 1997-03-25 | Mitsubishi Denki Kabushiki Kaisha | Data processing system capable of execution of plural instructions in parallel |
CA2105806C (en) | 1992-09-18 | 2001-11-20 | Paul V. Jeffs | Apparatus for implementing interrupts in pipelined processors |
US5745770A (en) | 1993-12-27 | 1998-04-28 | Intel Corporation | Method and apparatus for servicing simultaneous I/O trap and debug traps in a microprocessor |
US5655115A (en) | 1995-02-14 | 1997-08-05 | Hal Computer Systems, Inc. | Processor structure and method for watchpoint of plural simultaneous unresolved branch evaluation |
US6006030A (en) | 1995-02-17 | 1999-12-21 | Vlsi Technology, Inc. | Microprocessor with programmable instruction trap for deimplementing instructions |
US5632028A (en) | 1995-03-03 | 1997-05-20 | Hal Computer Systems, Inc. | Hardware support for fast software emulation of unimplemented instructions |
US5966529A (en) | 1995-05-15 | 1999-10-12 | Zsp Corporation | Processor having auxiliary operand register file and complementary arrangements for non-disruptively performing adjunct execution |
US5680620A (en) | 1995-06-30 | 1997-10-21 | Dell Usa, L.P. | System and method for detecting access to a peripheral device using a debug register |
US5812439A (en) | 1995-10-10 | 1998-09-22 | Microunity Systems Engineering, Inc. | Technique of incorporating floating point information into processor instructions |
US5933618A (en) | 1995-10-30 | 1999-08-03 | Advanced Micro Devices, Inc. | Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction |
US20030074530A1 (en) | 1997-12-11 | 2003-04-17 | Rupaka Mahalingaiah | Load/store unit with fast memory data access mechanism |
US6049876A (en) | 1998-02-09 | 2000-04-11 | Motorola, Inc. | Data processing system and method which detect unauthorized memory accesses |
US6044454A (en) | 1998-02-19 | 2000-03-28 | International Business Machines Corporation | IEEE compliant floating point unit |
JP2000339177A (ja) | 1999-05-31 | 2000-12-08 | Mitsubishi Electric Corp | Eit処理機能を備えるマイクロプロセッサ及びeit処理方法 |
US6408379B1 (en) | 1999-06-10 | 2002-06-18 | Advanced Micro Devices, Inc. | Apparatus and method for executing floating-point store instructions in a microprocessor |
US6374345B1 (en) | 1999-07-22 | 2002-04-16 | Advanced Micro Devices, Inc. | Apparatus and method for handling tiny numbers using a super sticky bit in a microprocessor |
US6675292B2 (en) | 1999-08-13 | 2004-01-06 | Sun Microsystems, Inc. | Exception handling for SIMD floating point-instructions using a floating point status register to report exceptions |
US6542988B1 (en) | 1999-10-01 | 2003-04-01 | Sun Microsystems, Inc. | Sending both a load instruction and retrieved data from a load buffer to an annex prior to forwarding the load data to register file |
US6704862B1 (en) | 2000-03-06 | 2004-03-09 | Sun Microsystems, Inc. | Method and apparatus for facilitating exception handling using a conditional trap instruction |
US6665746B1 (en) | 2000-03-31 | 2003-12-16 | International Business Machine Corporation | System and method for prioritized context switching for streaming data memory transfers |
US6615343B1 (en) | 2000-06-22 | 2003-09-02 | Sun Microsystems, Inc. | Mechanism for delivering precise exceptions in an out-of-order processor with speculative execution |
GB2367648B (en) | 2000-10-03 | 2002-08-28 | Sun Microsystems Inc | Multiple trap avoidance mechanism |
US6549987B1 (en) | 2000-11-16 | 2003-04-15 | Intel Corporation | Cache structure for storing variable length data |
US20020184566A1 (en) | 2001-06-01 | 2002-12-05 | Michael Catherwood | Register pointer trap |
US20040236920A1 (en) | 2003-05-20 | 2004-11-25 | Sheaffer Gad S. | Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data (SIMD) operation |
GB2410097B (en) * | 2004-01-13 | 2006-11-01 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing data processing operations on floating point data elements |
JP3988144B2 (ja) | 2004-02-23 | 2007-10-10 | 日本電気株式会社 | ベクトル処理装置、及び、追い越し制御回路 |
US7216218B2 (en) | 2004-06-02 | 2007-05-08 | Broadcom Corporation | Microprocessor with high speed memory integrated in load/store unit to efficiently perform scatter and gather operations |
JP2006039874A (ja) | 2004-07-26 | 2006-02-09 | Fujitsu Ltd | 情報処理装置 |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
US7502277B2 (en) | 2006-11-15 | 2009-03-10 | Taiwan Semiconductor Manufacturing Co., Ltd. | Word-line driver design for pseudo two-port memories |
US20090300324A1 (en) * | 2007-01-19 | 2009-12-03 | Nec Corporation | Array type processor and data processing system |
US20080235461A1 (en) | 2007-03-22 | 2008-09-25 | Sin Tan | Technique and apparatus for combining partial write transactions |
US7984273B2 (en) | 2007-12-31 | 2011-07-19 | Intel Corporation | System and method for using a mask register to track progress of gathering elements from memory |
US10387151B2 (en) * | 2007-12-31 | 2019-08-20 | Intel Corporation | Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks |
US20100199067A1 (en) | 2009-02-02 | 2010-08-05 | International Business Machines Corporation | Split Vector Loads and Stores with Stride Separated Words |
WO2013048368A1 (en) * | 2011-09-26 | 2013-04-04 | Intel Corporation | Instruction and logic to provide vector scatter-op and gather-op functionality |
WO2013095563A1 (en) | 2011-12-22 | 2013-06-27 | Intel Corporation | Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions |
US9626333B2 (en) | 2012-06-02 | 2017-04-18 | Intel Corporation | Scatter using index array and finite state machine |
US8972697B2 (en) * | 2012-06-02 | 2015-03-03 | Intel Corporation | Gather using index array and finite state machine |
-
2012
- 2012-06-02 US US13/977,727 patent/US9626333B2/en active Active
- 2012-06-02 WO PCT/US2012/040628 patent/WO2013180738A1/en active Application Filing
- 2012-06-02 CN CN201280072904.4A patent/CN104303142B/zh not_active Expired - Fee Related
-
2017
- 2017-04-18 US US15/490,743 patent/US10152451B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200300904A (en) * | 2001-12-13 | 2003-06-16 | Quicksilver Tech Inc | Computer processor architecture selectively using finite-state-machine for control code execution |
CN102103483A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 汇聚和散布多个数据元素 |
CN102377493A (zh) * | 2010-08-13 | 2012-03-14 | 英特尔移动通信技术有限公司 | 带有干扰控制的收发器 |
Also Published As
Publication number | Publication date |
---|---|
US10152451B2 (en) | 2018-12-11 |
US9626333B2 (en) | 2017-04-18 |
CN104303142A (zh) | 2015-01-21 |
US20150074373A1 (en) | 2015-03-12 |
WO2013180738A1 (en) | 2013-12-05 |
US20170351641A1 (en) | 2017-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104303142B (zh) | 使用索引阵列和有限状态机的分散 | |
CN104915181B (zh) | 用于条件存储器错误帮助抑制的方法、处理器和处理系统 | |
CN103827813B (zh) | 用于提供向量分散操作和聚集操作功能的指令和逻辑 | |
CN104781803B (zh) | 用于架构不同核的线程迁移支持 | |
CN106951214B (zh) | 用于向量加载/存储操作的处理器、系统、介质和方法 | |
CN104937539B (zh) | 用于提供推入缓冲器复制和存储功能的指令和逻辑 | |
CN105760265B (zh) | 用于测试事务性执行状态的指令和逻辑 | |
CN104011662B (zh) | 用于提供向量混合和置换功能的指令和逻辑 | |
CN104049945B (zh) | 用于融合指令以在多个测试源上提供或(or)测试和与(and)测试功能的方法和装置 | |
CN105955704B (zh) | 用于提供向量横向比较功能的指令和逻辑 | |
EP3391195B1 (en) | Instructions and logic for lane-based strided store operations | |
CN108292215B (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN103827815B (zh) | 用于提供利用跨越和掩码功能的向量加载和存储的指令和逻辑 | |
CN108369509B (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN103959236B (zh) | 用于提供向量横向多数表决功能的处理器、设备和处理系统 | |
CN104903867B (zh) | 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法 | |
CN107209722A (zh) | 用于在安全飞地页面高速缓存中使安全飞地的进程分叉和建立子飞地的指令和逻辑 | |
TWI528291B (zh) | 用於在移動消除操作中旗標追蹤之系統與方法 | |
ES2934513T3 (es) | Sistemas y métodos para omitir operaciones matriciales intrascendentes | |
CN107810483A (zh) | 验证基于块的处理器中的跳转目标 | |
TWI720056B (zh) | 用於設置多重向量元素操作之指令及邏輯 | |
CN108351781A (zh) | 用于利用monitor和mwait架构的用户级线程同步的方法和设备 | |
CN109791493A (zh) | 用于乱序集群化解码中的负载平衡的系统和方法 | |
CN107918546A (zh) | 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统 | |
CN107003853A (zh) | 用于数据推测执行的系统、装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190308 |
|
CF01 | Termination of patent right due to non-payment of annual fee |