CN108292232A - 用于加载索引和分散操作的指令和逻辑 - Google Patents

用于加载索引和分散操作的指令和逻辑 Download PDF

Info

Publication number
CN108292232A
CN108292232A CN201680067772.4A CN201680067772A CN108292232A CN 108292232 A CN108292232 A CN 108292232A CN 201680067772 A CN201680067772 A CN 201680067772A CN 108292232 A CN108292232 A CN 108292232A
Authority
CN
China
Prior art keywords
memory
instruction
data element
address
logic
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.)
Pending
Application number
CN201680067772.4A
Other languages
English (en)
Inventor
I·M·戈克豪尔
C·R·扬特
A·C·瓦利斯
E·乌尔德-阿迈德-瓦尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN108292232A publication Critical patent/CN108292232A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3555Indexed addressing using scaling, e.g. multiplication of index
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Abstract

一种处理器,包括用于执行指令以便从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的位置的执行单元。所述执行单元包括用于根据需要针对有待通过所述指令被分散的每个数据元素而加载用于计算存储器中特定数据元素将被写入的地址的索引值的逻辑。可以从针对所述指令标识的索引阵列中检索所述索引值。所述执行单元包括用于在使用可选缩放的情况下基于针对所述指令指定的基地址与针对所述数据元素位置所检索的所述索引值之和来计算所述地址的逻辑。所述执行单元包括用于从针对所述指令指定的源向量寄存器中的连续位置中检索数据元素并将其存储到所计算位置的逻辑。

Description

用于加载索引和分散操作的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器和相关联的指令集架构领域,所述指令集架构当由处理器或其他处理逻辑执行时执行逻辑、数学或其他功能操作。
相关技术说明
多处理器系统正变得越来越普遍。多处理器系统的应用包括动态域分区一直延续到桌面计算。为了利用多处理器系统,可以将有待执行的代码分成多个线程以供由各种处理实体执行。可以彼此并行地执行每个线程。当指令在处理器上接收时其可以被解码为原生或更原生的词语或指令字以供在处理器上执行。处理器可以在片上系统中实施。通过存储在阵列中的索引对存储器进行间接的读访问和写访问可用于密码学、简图遍历、分类和稀疏矩阵应用。
附图说明
实施例以举例的方式被展示并且不限于附图中的图:
图1A是根据本公开的实施例的形成有可以包括用于执行指令的执行单元的处理器的示例性计算机系统的框图;
图1B展示了根据本公开的实施例的数据处理系统;
图1C展示了用于执行文本串比较操作的数据处理系统的其他实施例;
图2是根据本公开的实施例的可以包括用于执行指令的逻辑电路的处理器的微架构的框图;
图3A展示了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示;
图3B展示了根据本公开的实施例的可能的寄存器中数据存储格式(in-registerdata storage format);
图3C展示了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示;
图3D展示了操作编码格式的实施例;
图3E展示了根据本公开的实施例的具有四十个位或更多个位的另一种可能的操作编码格式;
图3F展示了根据本公开的实施例的又另一种可能的操作编码格式;
图4A是框图,展示了根据本公开的实施例的有序流水线和寄存器重命名级、乱序发布/执行流水线;
图4B是框图,展示了根据本公开的实施例的有待包括在处理器中的有序架构核和寄存器重命名逻辑、乱序发布/执行逻辑;
图5A是根据本公开的实施例的处理器的框图;
图5B是根据本公开的实施例的核的示例实施方式的框图;
图6是根据本公开的实施例的系统的框图;
图7是根据本公开的实施例的第二系统的框图;
图8是根据本公开的实施例的第三系统的框图;
图9是根据本公开的实施例的片上系统的框图;
图10展示了根据本公开的实施例的包含可以执行至少一条指令的中央处理单元和图形处理单元的处理器;
图11是框图,展示了根据本公开的实施例的IP核的开发;
图12展示了根据本公开的实施例可以如何由不同类型的处理器对第一类型的指令进行仿真;
图13展示了对照根据本公开的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更详细框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子装置的框图;
图18是根据本公开的实施例的用于向量操作的指令和逻辑的示例系统的展示,所述向量操作用于从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置;
图19是框图,展示了根据本公开的实施例的用于执行扩展向量指令的处理器核;
图20是框图,展示了根据本公开的实施例的示例扩展向量寄存器堆;
图21是根据本公开的实施例的用于执行从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的操作的展示;
图22A和图22B展示了根据本公开的实施例的对Load-Indices-and-Scatter(加载索引和分散)指令的对应形式的操作;
图23展示了根据本公开的实施例的用于从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的示例方法。
具体实施方式
以下说明描述了用于执行向量操作以便从索引阵列加载索引并且基于处理设备上的那些索引将元素分散到稀疏存储器中的一个或多个随机位置的指令和处理逻辑。这种处理设备可以包括乱序处理器。在以下具体实施方式中,阐述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等许多具体细节以便提供对本公开的实施例的更全面理解。然而,本领域技术人员应理解的是,可以在没有这些具体细节的情况下实践实施例。另外,未详细示出一些熟知的结构、电路等,从而避免不必要地模糊本公开的实施例。
虽然下面的实施例是参照处理器进行描述的,但是其他实施例适用于其他类型的集成电路和逻辑装置。本公开的实施例的类似技术和教导可以应用于可以从更高的流水线吞吐量和改进的性能受益的其他类型的电路或半导体装置。本公开的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可以应用于在其中可以执行数据的操纵或管理的任何处理器和机器。另外,以下描述提供了示例,并且附图示出了用于说明目的的各种示例。然而,这些示例不应在限制性意义上予以解释,因为它们仅旨在提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能的实施方式的详尽列表。
虽然以下示例描述了在执行单元和逻辑电路的上下文中的指令处理和分配,但是本公开的其他实施例可以通过存储在机器可读有形介质上的数据或指令来实现,所述数据或指令当由机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,在机器可执行指令中将与本公开的实施例相关联的功能具体化。指令可以用于使可利用这些指令编程的通用或专用处理器执行本公开中的步骤。本公开的实施例可以作为可包括机器或计算机可读介质的计算机程序产品或软件而提供,所述机器或计算机可读介质具有存储于其上的指令,所述指令可以用于对计算机(或其他电子装置)进行编程以便执行根据本公开的实施例的一个或多个操作。此外,本公开的实施例的步骤可以由包含用于执行所述步骤的固定功能逻辑的特定硬件组件或者由经编程的计算机组件与固定功能硬件组件的任何组合来执行。
用于对逻辑进行编程以执行本公开的实施例的指令可以存储在系统中的存储器内,例如,DRAM、高速缓存、闪存或其他存储设备。此外,指令可以经由网络或借助于其他计算机可读介质来分配。因此,机器可读介质可以包括用于存储或传输由机器(例如,计算机)可读的形式的信息的任何机制,但是不限于软磁盘、光盘、只读光盘存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于经由电、光、声音、或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息的有形机器可读存储设备。因此,计算机可读介质可以包括适用于存储或传输机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
设计可以贯穿各个不同的阶段,从产生到仿真到制造。表示设计的数据可用若干方式来表示所述设计。首先,如可以在模拟中有用的,可使用硬件描述语言或其他功能描述语言来表示硬件。另外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,设计在一些阶段处可以达到代表在硬件模型中的不同装置的物理布局的数据水平。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指示由用于产生集成电路的掩模的不同掩模层上的各种特征的存在或不存在的数据。在任何设计表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁存储设备或光存储设备(如,盘)可以是用于存储信息的机器可读介质,所述信息是经由光波或电波来传输的,所述光波或电波被调制或以其他方式被生成以传输这类信息。当传输指示或携带代码或设计的电载波时,在执行电信号的复制、缓冲或重传情况的程度上,可以制作一个新的副本。因此,通信提供者或网络提供者可以在有形机器可读介质上至少暂时地存储诸如编码到载波中的信息等制品,从而将本公开的实施例的技术具体化。
在现代处理器中,多个不同的执行单元可以用于处理和执行各种代码和指令。一些指令可能更快地完成,而其他指令则可能花费多个时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因此,尽可能快地执行尽可能多的指令将是有利的。然而,可能存在具有更大的复杂性并且需要更多的执行时间和处理器资源的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
随着更多的计算机系统被用于互联网、文本以及多媒体应用,已经随时间推移引入了附加处理器支持。在一个实施例中,指令集可以与一个或多个计算机架构相关联,包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可以由一个或多个微架构来实施,所述一个或多个微架构可以包括用于实施一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的处理器可共享公共指令集的至少一部分。例如, Pentium 4处理器、CoreTM处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(AdvancedMicroDevices,Inc.)的处理器实施几乎相同版本的x86指令集(在更新的版本中已加入了一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如ARM控股有限公司、MIPS或它们的授权方或兼容方)所设计的处理器可以共享公共指令集的至少一部分,但可以包括不同的处理器设计。例如,ISA的相同寄存器架构在不同的微架构中可以使用新的或已知的技术以不同的方式来实施,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可以包括:可以或可以不由软件程序员寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器组。
指令集可以包括一种或多种指令格式。在一个实施例中,指令格式可以指示各个字段(位的数量、位的位置等)以便在其他事物中指明待执行的操作以及在其上待执行的那个操作的操作数。在进一步的实施例中,一些指令格式可以进一步由指令模板(或子格式)所进一步限定。例如,给定指令格式的指令模板可以被定义为具有指令格式字段的不同子集和/或被定义为具有不同解释的给定字段。在一个实施例中,指令可以使用指令格式(并且,如果定义过,则以所述指令格式的一个给定指令模板)来表示,并且所述指明或指示操作以及所述操作将进行操作的操作数。
科学、财务、自动向量化通用目的、RMS(标识、挖掘和综合)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音标识算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(Single InstructionMultiple Data,SIMD)指代使处理器对多个数据元素执行运算的指令类型。SIMD技术可以用于能够在逻辑上将寄存器中的位划分成多个固定尺寸或可变尺寸的数据元素的处理器,每个数据元素代表单独的值。例如,在一个实施例中,64位寄存器中的位可以被组织为包含四个单独的16位数据元素的源操作数,其中每个数据元素代表单独的16位值。这种数据类型可以被称为紧缩数据类型或向量数据类型,并且这种数据类型的操作数可以被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器内的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是SIMD指令(或紧缩数据指令或向量指令)的源或目的地操作数。在一个实施例中,SIMD指令指定单个向量操作,所述单个向量操作有待对两个源向量操作数执行,以便生成具有相同或不同尺寸、具有相同或不同的数据元素数量、并且具有相同或不同的数据元素顺序的目的地向量操作数(也称为结果向量操作数)。
SIMD技术(如具有包括x86、MMXTM、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集的 CoreTM处理器所采用的技术)、ARM处理器(如具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM 处理器族)、以及MIPS处理器(如由中国科学院计算技术研究所(ICT)开发的龙芯族处理器)已经实现了应用性能的显著提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉的英特尔公司的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是用于表示相应的数据或操作的源和目的地的通用术语。在一些实施例中,目的地和源寄存器/数据可以通过寄存器、存储器或具有与所描绘的名称或功能不同的名称或功能的其他存储区域来实施。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一源存储寄存器和第二源存储寄存器或其他存储区域等。在其他实施例中,SRC和DEST存储区域中的两个或更多个可以与同一存储区域内的不同数据存储元件(例如,SIMD寄存器)相对应。在一个实施例中,所述源寄存器中的一个源寄存器还可以用作目的地寄存器,通过例如将对第一源数据和第二源数据执行的操作的结果写回到这两个源寄存器中的一个源寄存器中,从而用作目的地寄存器。
图1A是根据本公开的实施例的形成有可以包括用于执行指令的执行单元的处理器的示例性计算机系统的框图。根据本公开,如在本文所描述的实施例中,系统100包括如处理器102之类的组件,所述处理器用于采用包括逻辑的执行单元以执行算法来对数据进行处理。系统100可以代表基于可从加利福尼亚州圣克拉拉市的英特尔公司获得的 III、4、XeonTMXScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可以执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWSTM操作系统的一个版本,不过也可使用其他操作系统(例如,UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本公开的实施例不限于硬件和软件的任何具体组合。
实施例不限于计算机系统。本公开的实施例可用于其他装置,如手持式装置和嵌入式应用。手持式装置的一些示例包括:蜂窝电话、互联网协议装置、数码相机、个人数字助理(PDA)、手持式PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机、或可执行根据至少一个实施例的一个或多个指令的任何其他系统。
计算机系统100可以包括处理器102,所述处理器可以包括根据本公开的一个实施例用于执行算法以便执行至少一条指令的一个或多个执行单元108。可以在单处理器桌面或服务器系统的背景下描述一个实施例,但其他实施例可包括在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可以包括用于处理数据信号的处理器102。处理器102可以包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实施指令集组合的处理器或任合其他处理器装置,例如,如数字信号处理器。在一个实施例中,处理器102可以耦合至处理器总线110,所述处理器总线可以在处理器102与系统100内的其他组件之间传输数据信号。系统100的元件可以执行对熟悉本领域的人而言是众所周知的常规功能。
在一个实施例中,处理器102可以包括1级(L1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在另一实施例中,高速缓存存储器可以驻留在处理器102外部。其他实施例还可以根据特定实施方式和需求包括内部高速缓存和外部高速缓存两者的组合。寄存器堆106可以将不同类型的数据存储在各种寄存器中,包括整数寄存器、浮点寄存器、状态寄存器以及指令指针寄存器。
执行单元108(包括用于执行整数运算和浮点运算的逻辑)也驻留在处理器102中。处理器102还可以包括存储用于某些宏指令的微代码的微代码(u码)ROM。在一个实施例中,执行单元108可以包括用于处理紧缩指令集109的逻辑。通过将紧缩指令集109包括在通用处理器102的指令集内,连同用于执行所述指令的相关联的电路系统,可使用通用处理器102中的紧缩数据来执行许多多媒体应用所使用的操作。因此,通过将处理器数据总线的全带宽用于对紧缩数据进行操作,许多多媒体应用可被加速并更高效地执行。这可以潜在地消除对跨处理器数据总线传送更小数据单元以一次对一个数据元素执行一个或多个操作的需要。
执行单元108的实施例还可用于微控制器、嵌入式处理器、图形装置、DSP以及其他类型的逻辑电路。系统100可以包括存储器120。存储器120可以被实施为动态随机存取存储器(DRAM)装置、静态随机存取存储器(SRAM)装置、闪存装置或其他存储器装置。存储器120可以存储由数据信号表示的可由处理器102执行的指令119和/或数据121。
系统逻辑芯片116可以耦合到处理器总线110和存储器120。系统逻辑芯片116可以包括存储器控制器中枢(MCH)。处理器102可以经由处理器总线110与MCH 116进行通信。MCH116可以向存储器120提供高带宽存储器路径118,以用于存储指令119和数据121以及用于存储图形命令、数据和纹理。MCH 116可以在处理器102、存储器120、以及系统100中的其他组件之间引导数据信号,并且在处理器总线110、存储器120、以及系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可以提供用于耦合到图形控制器112的图形端口。MCH 116可以通过存储器接口118耦合到存储器120。图形卡112可以通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100可以使用专用中枢接口总线122将MCH 116耦合到I/O控制器中枢(ICH)130。在一个实施例中,ICH 130可以通过本地I/O总线提供到一些I/O装置的直接连接。本地I/O总线可以包括用于将外围装置连接到存储器120、芯片组和处理器102的高速I/O总线。示例可以包括音频控制器129、固件中枢(闪存BIOS)128、无线收发机126、数据存储设备124、包含用户输入界面125(其可以包括键盘接口)的传统I/O控制器123、串行扩展端口(如通用串行总线USB)127以及网络控制器134。数据存储装置124可以包括硬盘驱动器、软盘驱动器、CD-ROM装置、闪存装置、或其他大容量存储装置。
对于系统的另一个实施例,根据一个实施例的指令可以与片上系统一起使用。片上系统的一个实施例包括处理器和存储器。一个这样的系统的存储器可以包括闪存。闪存可以位于与处理器和其他系统组件相同的裸片上。另外,诸如存储器控制器或图形控制器之类的其他逻辑块也可以位于片上系统上。
图1B展示了实施本公开的实施例的原理的数据处理系统140。本领域技术人员将容易理解,在不脱离本公开的实施例的范围的情况下,本文中所描述的实施例可以利用替代处理系统来操作。
计算机系统140包括用于执行根据一个实施例的至少一条指令的处理核159。在一个实施例中,处理核159表示任何类型的架构——包括但不限于CISC、RISC或VLIW类型的架构——的处理单元。处理核159还可以适用于采用一种或多种工艺技术的制造,并且通过足够详细地在机器可读介质上表示,可以适用于促进所述制造。
处理核159包括执行单元142、一组寄存器堆145和解码器144。处理核159还可以包括附加电路系统(未示出),所述附加电路系统对于理解本公开的实施例可以是不必要的。执行单元142可以执行由处理核159接收的指令。除了执行典型的处理器指令之外,执行单元142可以执行紧缩指令集143中的指令以便对紧缩数据格式执行操作。紧缩指令集143可以包括用于执行本公开的实施例的指令以及其他紧缩指令。执行单元142可以通过内部总线耦合至寄存器堆145。寄存器堆145可以表示在处理核159上用于存储包括数据在内的信息的存储区域。如前所述,应当理解,存储区域可以存储可能不太关键的紧缩数据。执行单元142可以耦合到解码器144。解码器144可以将由处理核159接收的指令解码成控制信号和/或微代码入口点。响应于这些控制信号和/或微代码入口点,执行单元142执行适当的操作。在一个实施例中,解码器可以对指令的操作码进行解释,这将指示应对所述指令内指示的相应数据执行什么操作。
处理核159可以与总线141耦合以便与各个其他系统装置进行通信,所述系统装置可以包括但不限于例如同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、猝发闪存接口148、个人计算机存储卡国际协会(PCMCIA)/紧凑型闪存(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器存取(DMA)控制器151和替代总线主机接口152。在一个实施例中,数据处理系统140还可以包括用于经由I/O总线153与各种I/O装置进行通信的I/O桥154。这种I/O装置可以包括但不限于例如通用异步接收器/发射器(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例提供了移动通信、网络通信和/或无线通信以及可以执行包括文本串比较操作的SIMD操作的处理核159。可以用以下技术来对处理核159进行编程:各种音频、视频、成像和通信算法,包括离散变换,诸如Walsh Hadamard(沃尔什-哈达玛)变换、快速傅里叶变换(FFT)、离散余弦变换(DCT)及这些变换的对应逆变换;压缩/解压缩技术,诸如颜色空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)函数,诸如脉冲编码调制(PCM)。
图1C展示了执行SIMD文本串比较操作的数据处理系统的其他实施例。在一个实施例中,数据处理系统160可以包括主处理器166、SIMD协处理器161、高速缓存存储器167和输入/输出系统168。输入/输出系统168可以可选地耦合至无线接口169。根据一个实施例,SIMD协处理器161可以执行包括指令的操作。在一个实施例中,处理核170可以适用于采用一种或多种工艺技术的制造,并且通过在机器可读介质上足够详细地表示,可以适用于促进全部或部分的数据处理系统160包括处理核170的制造。
在一个实施例中,SIMD协处理器161包括执行单元162和一组寄存器堆164。主处理器166的一个实施例包括用于识别包括根据一个实施例的指令的指令集163的指令以便由执行单元162来执行的解码器165。在其他实施例中,SIMD协处理器161还包括解码器165的至少一部分(示出为165B)以对指令集163的指令进行解码。处理核170还可以包括附加电路系统(未示出),所述附加电路系统对于理解本公开的实施例可以是不必要的。
在操作中,主处理器166执行控制一般类型的数据处理操作的数据处理指令流,所述数据处理操作包括与高速缓存存储器167和输入输出系统168的交互。嵌入在数据处理指令流内的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为属于应由附接的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。可以由任何附接的SIMD协处理器从协处理器总线171接收这些指令。在这种情况下,SIMD协处理器161可以接受并执行任何旨在用于所述协处理器的所接收的SIMD协处理器指令。
可以经由无线接口169接收数据以供由SIMD协处理器指令进行处理。例如,可以以数字信号的形式接收语音通信,所述数字信号可以由SIMD协处理器指令进行处理以重新生成表示语音通信的数字音频样本。再例如,可以以数字比特流的形式接收压缩音频和/或视频,所述压缩音频和/或视频可以由SIMD协处理器指令进行处理以重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可以集成到包括执行单元162、一组寄存器堆164和解码器165的单处理核170中以便识别包括根据一个实施例的指令的指令集163的指令。
图2是根据本公开的实施例的可以包括用于执行指令的逻辑电路的处理器200的微架构的框图。在一些实施例中,可以实施根据一个实施例的指令来对具有字节、字、双字、四字等尺寸以及如单倍和双倍精度整数和浮点数据类型等数据类型的数据元素进行操作。在一个实施例中,有序前端201可以实施处理器200的可以取出待执行的指令并将所述指令准备于稍后在处理器流水线中使用的部分。前端201可以包括若干个单元。在一个实施例中,指令预取器226从存储器取出指令并将所述指令馈送给指令解码器228,所述指令解码器进而对所述指令进行解码或解释。例如,在一个实施例中,解码器将接收到的指令解码成机器可以执行的称为“微指令”或“微运算”(也称为微op或uop)的一个或多个运算。在其他实施例中,根据一个实施例,解码器将指令解析为运算码和相应的数据以及可由微架构用于执行运算的控制字段。在一个实施例中,跟踪高速缓存230可以将经解码的uop汇编为程序有序序列或在uop队列234中跟踪以用于执行。当跟踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成运算所需的uop。
一些指令可以被转换为单个微op,而其他指令需要若干个微op来完成完整的运算。在一个实施例中,如果完成指令需要多于四个微op,则解码器228可以访问微代码ROM232以执行指令。在一个实施例中,指令可以被解码成用于在指令解码器228处进行处理的少量的微op。在另一实施例中,如果需要多个微op来完成运算,则指令可以存储在微代码ROM 232内。跟踪高速缓存230引用入口点可编程逻辑阵列(PLA),以确定用于从微代码ROM232读取微代码序列的正确微指令指针以便根据一个实施例完成一个或多个指令。在微代码ROM 232完成用于指令的排序微op之后,机器的前端201可以从跟踪高速缓存230重新取出微op。
乱序执行引擎203可以准备用于执行的指令。乱序执行逻辑具有许多缓冲器,所述多个缓冲器用于使指令流平滑并重新排序,以在指令顺着流水线进行并被安排执行时优化性能。分配器/寄存器重命名器215中的分配器逻辑分配每个uop执行所需的机器缓冲器和资源。分配器/寄存器重命名器215中的寄存器重命名逻辑将逻辑寄存器重命名到寄存器堆中的条目上。在指令调度器:存储器调度器209、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206前面,分配器215还为两个uop队列(一个用于存储器运算(存储器uop队列207),一个用于无存储器运算(整数/浮点uop队列205))之一中的每个uop分配条目。uop调度器202、204、206基于其依赖输入寄存器操作数源的准备状态以及uop完成其运算所需的执行资源的可用性来判定这些uop是否准备好执行。一个实施例的快速调度器202可以在主时钟周期的每一半上进行调度,而其他调度器仅可以在每个主处理器时钟周期被调度一次。调度器仲裁分派端口以调度uop用于执行。
寄存器堆208、210可以被安排在调度器202、204、206与执行块211的执行单元212、214、216、218、220、222、224之间。寄存器堆208、210中的每一个分别执行整数运算和浮点运算。每个寄存器堆208、210可以包括旁路网络,所述旁路网络可以绕过或转发尚未被写入到寄存器堆中的已完成结果到新的依赖uop。整数寄存器堆208和浮点寄存器堆210可以与其他寄存器堆进行数据通信。在一个实施例中,整数寄存器堆208可以被分成两个单独的寄存器堆,一个寄存器堆用于数据的低次序三十二位,并且第二寄存器堆用于数据的高次序三十二位。浮点寄存器堆210可以包括128位宽的条目,因为浮点指令通常具有宽度为从64位至128位的操作数。
执行块211包含执行单元212、214、216、218、220、222、224。执行单元212、214、216、218、220、222、224可以执行指令。执行块211可以包括寄存器堆208、210,所述寄存器堆存储微指令执行所需的整数数据操作数值和浮点数据操作数值。在一个实施例中,处理器200可以包括多个执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU220、浮点ALU 222、浮点移动单元224。在另一实施例中,浮点执行块222、224可以执行浮点、MMX、SIMD和SSE、或其他运算。在又另一实施例中,浮点ALU 222可以包括用于执行除法、平方根和剩余微op的64位乘64位浮点除法器。在各个实施例中,涉及浮点值的指令可以用浮点硬件来处理。在一个实施例中,ALU运算可以被传递至高速ALU执行单元216、218。高速ALU216、218可以以半个时钟周期的有效等待时间执行快速运算。在一个实施例中,大多数复杂整数运算前往慢速ALU 220,因为慢速ALU 220可以包括用于长等待时间类型的运算的整数执行硬件,诸如乘法、移位、标志逻辑、以及分支处理。存储器加载/存储运算可以由AGU212、214来执行。在一个实施例中,整数ALU 216、218、220可以对64位数据操作数执行整数运算。在其他实施例中,ALU 216、218、220可以被实施为支持包括十六、三十二、128、256等的各种数据位尺寸。类似地,浮点单元222、224可以被实施为支持具有各种宽度的位的操作数范围。在一个实施例中,浮点单元222、224可以结合SIMD和多媒体指令来对128位宽度的紧缩数据操作数进行运算。
在一个实施例中,uop调度器202、204、206在父加载完成执行之前分派不独立运算。当uop可以在处理器200中推测性地调度和执行时,处理器200还可以包括用于处理存储器未命中的逻辑。如果数据高速缓存中的数据加载未命中,则可能存在流水线中飞行的已经因暂时不正确数据而离开调度器的不独立运算。回放机制跟踪并重新执行使用不正确数据的指令。仅仅不独立运算可能需要被重放,并且可以允许完成独立运算。处理器的一个实施例的调度器和回放机制还可以被设计成捕获用于文本串比较操作的指令序列。
术语“寄存器”可以指代可被用作指令的一部分以标识操作数的机载处理器存储位置。换言之,寄存器可以是可从处理器外部(从程序员的角度来看)可用的寄存器。然而,在一些实施例中,寄存器可能并不限于特定类型的电路。而是,寄存器可以存储数据、提供数据并且执行本文所描述的功能。本文所描述的寄存器可以由处理器内的电路系统使用任何数量的不同技术来实施,如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆还包含用于紧缩数据的八个多媒体SIMD寄存器。对于下面的讨论,寄存器可以被理解为被设计成保持紧缩数据的数据寄存器,比如,用来自加利福尼亚州圣克拉拉的英特尔公司的MMX技术实现的微处理器中的64位宽MMXTM寄存器(在某些情况下也称为“mm”寄存器)。以整数和浮点形式可用的这些MMX寄存器可以用伴随SIMD和SSE指令的紧缩数据元素进行操作。类似地,与SSE2、SSE3、SSE4或更高版本(通常称为“SSEx”)技术有关的128位宽XMM寄存器可以保持这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要对这两种数据类型进行区分。在一个实施例中,整数和浮点数据可以包含在同一寄存器堆或不同的寄存器堆中。此外,在一个实施例中,浮点和整数数据可以存储在不同的寄存器或同一寄存器中。
在下图的示例中,可以描述多个数据操作数。图3A展示了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。图3A展示了用于128位宽操作数的紧缩字节310、紧缩字320和紧缩双字(dword))330的数据类型。本示例的紧缩字节格式310可以为128位长,并且包含十六个紧缩字节数据元素。例如,字节可以被限定为八个数据位。每个字节数据元素的信息可以存储在字节0的位7到位0、字节1的位15到位8、字节2的位23至位16以及最后字节15的位120至位127中。因此,所有可用位都可以用于寄存器中。这种存储安排提高了处理器的存储效率。同样地,在访问了十六个数据元素的情况下,现在可以并行地对十六个数据元素执行一个操作。
通常,数据元素可以包括存储在具有相同长度的其他数据元素的单个寄存器或存储器位置中的单独的一条数据。在与SSEx技术有关的紧缩数据序列中,存储在XMM寄存器中的数据元素数量可以是128位除以单个数据元素的位长度。类似地,在与MMX和SSE技术有关的紧缩数据序列中,存储在XMM寄存器中的数据元素数量可以是64位除以单个数据元素的位长度。尽管在图3A中展示的数据类型可以是128位长,但本公开的实施例还可以用64位宽或其他尺寸的操作数进行操作。本示例的紧缩字格式320可以为128位长,并且包含八个紧缩字数据元素。每个紧缩字包含十六个信息位。图3A的紧缩双字格式330可以为128位长,并且包含四个紧缩双字数据元素。每个紧缩双字数据元素包含三十二个信息位。紧缩四字可以是128位长,并且包含两个紧缩四字数据元素。
图3B展示了根据本公开的实施例的可能的寄存器中数据存储格式。每个紧缩数据可以包括多于一个独立数据元素。展示了三种紧缩数据格式:半紧缩(packed half)341、单紧缩(packed single)342和双紧缩(packed double)343。半紧缩341、单紧缩342和双紧缩343的一个实施例包含定点数据元素。对于另一个实施例,半紧缩341、单紧缩342和双紧缩343中的一个或多个可以包含浮点数据元素。半紧缩341的一个实施例可以是包含八个16位数据元素的128位长。单紧缩342的一个实施例可以是128位长并且包含四个32位数据元素。双紧缩343的一个实施例可以是128位长并且包含两个64位数据元素。将理解的是,这种紧缩数据格式可以进一步扩展到其他寄存器长度,例如,96位、160位、192位、224位、256位或更多。
图3C展示了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示。无符号紧缩字节表示344展示了无符号紧缩字节在SIMD寄存器中的存储。每个字节数据元素的信息可以存储在字节0的位7到位0、字节1的位15到位8、字节2的位23至位16以及最后字节15的位120至位127中。因此,所有可用位都可以用于寄存器中。这种存储安排可以提高处理器的存储效率。同样地,在访问了十六个数据元素的情况下,现在可以以并行方式对十六个数据元素执行一个操作。有符号紧缩字节表示345展示了有符号紧缩字节的存储。注意,每个字节数据元素的第八个位可以是符号指示符。无符号紧缩字表示346展示了可以如何将字七到字零存储在SIMD寄存器中。有符号紧缩字表示347可以类似于无符号紧缩字寄存器中表示346。注意,每个字数据元素的第十六个位可以是符号指示符。无符号紧缩双字表示348示出如何存储双字数据元素。有符号紧缩双字表示349可以类似于无符号紧缩双字寄存器中表示348。注意,必要的符号位可以是每个双字数据元素的第三十二位。
图3D展示了操作编码(操作码)的实施例。此外,格式360可以包括与可在万维网(www)上在intel.com/design/litcentr处从加利福尼亚州圣克拉拉市英特尔公司获得的“IA-32英特尔架构软件开发者手册第2卷:指令集参考(IA-32Intel ArchitectureSoftware Developer’s Manual Volume 2:Instruction Set Reference)”中描述的操作码格式类型相对应的寄存器/存储器操作数寻址模式。在一个实施例中,指令可以由字段361和362中的一个或多个进行编码。可以标识每条指令多达两个操作数位置,包括多达两个源操作数标识符364和365。在一个实施例中,目的地操作数标识符366可以与源操作数标识符364相同,而在其他实施例中,它们可能不同。在另一实施例中,目的地操作数标识符366可以与源操作数标识符365相同,而在其他实施例中,它们可能不同。在一个实施例中,由源操作数标识符364和365标识的源操作数之一可以由文本串比较操作的结果所覆写,而在其他实施例中,标识符364对应于源寄存器元素并且标识符365对应于目的地寄存器元素。在一个实施例中,操作数标识符364和365可以标识32位或64位源操作数和目的地操作数。
图3E展示了根据本公开的实施例的具有四十个位或更多个位的另一种可能的操作编码(操作码)格式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以及由可选的比例索引基址和位移字节指定的寄存器到寄存器寻址、存储器到寄存器寻址、通过存储器的寄存器寻址、通过寄存器的寄存器寻址、即时寄存器寻址、寄存器到存储器寻址。
图3F展示了根据本公开的实施例的又另一种可能的操作编码(操作码)格式。可以通过协处理器数据处理(CDP)指令来执行64位单指令多数据(SIMD)算术运算。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一个这样的CDP指令。对于另一个实施例,这种类型的CDP指令操作可以由字段383、384、387和388中的一个或多个进行编码。可以标识每条指令多达三个操作数位置,包括多达两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可以对八位、十六位、三十二位和64位的值进行操作。在一个实施例中,可以对整数数据元素执行指令。在一些实施例中,可以使用条件字段381来有条件地执行指令。对于一些实施例,可以由字段383对源数据尺寸进行编码。在一些实施例中,可以在SIMD字段上完成零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,可以由字段384对饱和度的类型进行编码。
图4A是框图,展示了根据本公开的实施例的有序流水线和寄存器重命名级、乱序发布/执行流水线。图4B是框图,展示了根据本公开的实施例的有待包括在处理器中的有序架构核和寄存器重命名逻辑、乱序发布/执行逻辑。图4A中的实线框展示了有序流水线,而虚线框展示了寄存器重命名、乱序发布/执行流水线。类似地,图4B中的实线框展示了有序架构逻辑,而虚线框展示了寄存器重命名逻辑、乱序发布/执行逻辑。
在图4A中,处理器流水线400可以包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也称为分派或发布)级412、寄存器读/存储器读级414、执行级416、写回/存储器写级418、异常处理级422以及提交级424。
在图4B中,箭头表示两个或更多个单元之间的耦合,并且箭头的方向指示在这些单元之间的数据流动方向。图4B示出了处理器核490,所述处理器核包括耦合到执行引擎单元450的前端单元430,并且所述执行引擎单元和前端单元都可以耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代核类型。在一个实施例中,核490可以是专用核,如例如网络或通信核、压缩引擎、图形核等。
前端单元430可以包括耦合至指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可以耦合至指令转换后备缓冲器(TLB)436。TLB436可以耦合至指令取出单元438,所述指令取出单元耦合至解码单元440。解码单元440可以对指令进行解码并且生成可从原始指令中解码出的、或以其他方式反映原始指令或可从原始指令衍生出的一个或多个微运算、微代码入口点、微指令、其他指令或其他控制信号作为输出。解码器可以使用各种不同的机制来实施。合适机制的示例包括但不限于:查找表、硬件实施方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,指令高速缓存单元434可以进一步耦合到存储器单元470中的2级(L2)高速缓存单元476。解码单元440可以耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可以包括耦合至引退单元454的重命名/分配器单元452、以及一组一个或多个调度器单元456。调度器单元456表示任何数量的不同调度器,包括保留站、中央指令窗等。调度器单元456可以耦合至物理寄存器堆单元458。物理寄存器堆单元458各自表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点等、状态(例如,作为有待执行的下一指令的地址的指令指针)等。物理寄存器堆单元458被引退单元454重叠,所述引退单元用于展示可以实施寄存器重命名和乱序执行的各种方式(例如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆;使用一个或多个未来堆、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等)。通常,架构寄存器可以从处理器的外部或从程序员的角度来看是可见的。寄存器可能不限于任何已知的特定类型的电路。各种不同类型的寄存器可以是合适的,只要它们能够存储和提供如本文所描述的数据即可。合适的寄存器的示例包括但可能不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。引退单元454和物理寄存器堆单元458可以耦合到执行集群460。执行集群460可以包括一组一个或多个执行单元462和一组一个或多个存储器存取单元464。执行单元462可以执行各种运算(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于具体功能或功能集合的若干执行单元,但是其他实施例可只包括一个执行单元或包括全都执行全部功能的多个执行单元。调度器单元456、物理寄存器堆单元458、以及执行集群460被示出为可能是复数的,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器存取流水线,所述流水线各自具有其本身的调度器单元、物理寄存器堆单元、和/或执行集群,并且在单独的存储器存取流水线的情况下,可以实施其中只有所述流水线的执行集群具有存储器存取单元464的某些实施例)。还应当理解,在使用单独的流水线的情况下,这些流水线中的一者或多者可以是乱序发布/执行流水线,并且其余的是有序流水线。
所述一组存储器存取单元464可以耦合到存储器单元470,所述存储器单元可以包括耦合到数据高速缓存单元474的数据TLB单元472,所述数据高速缓存单元耦合到2级(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,但其他实施例可以具有用于指令和数据两者的单个内部高速缓存,如例如1级(L1)内部高速缓存、或多级内部高速缓存。在一些实施例中,所述系统可以包括内部高速缓存和可以在核和/或处理器外部的外部高速缓存的组合。在其他实施例中,所有高速缓存都可以在核和/或处理器的外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可以包括多核处理器。处理器500可以包括通信地耦合至一个或多个核502的系统代理510。此外,核502和系统代理510可以通信地耦合至一个或多个高速缓存506。核502、系统代理510和高速缓存506可以经由一个或多个存储器控制单元552通信地耦合。此外,核502、系统代理510和高速缓存506可以经由存储器控制单元552通信地耦合至图形模块560。
处理器500可以包括用于对核502、系统代理510和高速缓存506、以及图形模块560进行互连的任何合适的机制。在一个实施例中,处理器500可以包括用于对核502、系统代理510和高速缓存506、以及图形模块560进行互连的基于环的互连单元508。在其他实施例中,处理器500可以包括任何数量的用于互连这类单元的众所周知的技术。基于环的互连单元508可以利用存储器控制单元552来促进互连。
处理器500可以包括存储器层级结构,所述存储器层级结构包括所述核内的一个或多个层级的高速缓存、比如高速缓存506等一个或多个共享高速缓存单元、或耦合至所述一组集成存储器控制器单元552的外部存储器(未示出)。高速缓存506可以包括任何合适的高速缓存。在一个实施例中,高速缓存506可以包括诸如2级(L2)、3级(L3)、4级(L4)或其他级高速缓存等一个或多个中间级高速缓存、末级高速缓存(LLC)、和/或其组合。
在各个实施例中,核502中的一个或多个可以执行多线程化。系统代理510可以包括用于对核502进行协调和处理的组件。系统代理单元510可以包括例如功率控制单元(PCU)。PCU可以是或包括对核502的功率状态进行调节所需的逻辑和组件。系统代理510可以包括用于驱动一个或多个外部连接的显示器或图形模块560的显示引擎512。系统代理510可以包括用于图形的通信总线的接口514。在一个实施例中,接口514可以由PCIExpress(PCIe)来实施。在进一步的实施例中,接口514可以由PCI Express图形(PEG)来实施。系统代理510可以包括直接媒体接口(DMI)516。DMI 516可以在母板或计算机系统的其他部分上的不同桥之间提供链路。系统代理510可以包括用于向计算系统的其他元件提供PCIe链路的PCIe桥518。PCIe桥518可以使用存储器控制器520和一致性逻辑522来实施。
核502可以以任何合适的方式来实施。就架构和/或指令集而言,核502可以是同构或异构的。在一个实施例中,核502中的一些可以是有序的,而其他核可以是乱序的。在另一实施例中,核502中的两个或更多个核可以执行同一指令集,而其他核可以仅执行所述指令集的子集或执行不同的指令集。
处理器500可以包括通用处理器,如可从加利福尼亚州圣克拉拉市的Intel公司获得的CoreTMi3、i5、i7、2Duo和Quad、XeonTM、ItaniumTM、XScaleTM或StrongARMTM处理器。处理器500可以从另一公司提供,比如ARM控股公司、MIPS等。处理器500可以是专用处理器,如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器500可以在一个或多个芯片上实施。处理器500可以是一个或多个衬底的一部分和/或可以使用如例如BiCMOS、CMOS或NMOS的多种工艺技术中的任何一种技术在一个或多个衬底上被实施。
在一个实施例中,高速缓存506中给定高速缓存可以由核502中的多个核所共享。在另一实施例中,高速缓存506中给定高速缓存可以专用于核502中的一个核。高速缓存506到核502的分配可以由高速缓存控制器或其他适当的机制来处理。高速缓存506中的给定高速缓存可以由两个或多个核502通过对给定高速缓存506实施时间切片而共享。
图形模块560可以实施集成图形处理子系统。在一个实施例中,图形模块560可以包括图形处理器。此外,图形模块560可以包括媒体引擎565。媒体引擎565可以提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例实施方式的框图。核502可以包括通信地耦合至乱序引擎580的前端570。核502可以通过高速缓存层级结构503通信地耦合至处理器500的其他部分。
前端570可以以任何适当的方式来实施,比如如上所述的完全或部分地由前端201来实施。在一个实施例中,前端570可以通过高速缓存层级结构503与处理器500的其他部分进行通信。在进一步的实施例中,前端570可以从处理器500的一部分取出指令并且在有待稍后在处理器流水线中使用的指令被传递至乱序执行引擎580时准备所述指令。
乱序执行引擎580可以以任何适当的方式来实施,比如如上所述的完全或部分地由乱序执行引擎203来实施。乱序执行引擎580可以准备从前端570接收的指令以供执行。乱序执行引擎580可以包括分配模块582。在一个实施例中,分配模块582可以分配处理器500的资源或诸如寄存器或缓冲器等其他资源以便执行给定指令。分配模块582可以在诸如存储器调度器、快速调度器或浮点调度器等调度器中进行分配。这类调度器可以在图5B中由资源调度器584来表示。分配模块582可以完全或部分地由结合图2所描述的分配逻辑来实施。资源调度器584可以基于给定资源的源的准备状态、以及执行指令所需的执行资源的可用性来判定指令何时准备好执行。资源调度器584可以通过例如如上文讨论的调度器202、204、206来实施。资源调度器584可以对一个或多个资源调度指令的执行。在一个实施例中,这类资源可以在核502内部,并且可以展示为例如资源586。在另一实施例中,这类资源可以在核502外部,并且可以由例如高速缓存层级结构503访问。资源可以包括例如存储器、高速缓存、寄存器堆或寄存器。在核502内部的资源可以由图5B中的资源586来表示。在必要时,写入至资源586或从中读取的值可以通过例如高速缓存层级结构503与处理器500的其他部分协调。当指令被分配资源时,其可以被放置到重排序缓冲器588中。重排序缓冲器588在指令被执行时跟踪所述指令,并且可以基于处理器500的任何合适的标准来选择性地对所述指令的执行进行重新排序。在一个实施例中,重排序缓冲器588可以标识可以独立执行的指令或一系列指令。这类指令或一系列指令可以与其他的这类指令并行执行。核502中的并行执行可以由任何合适数量的单独执行块或虚拟处理器来执行。在一个实施例中,共享资源——诸如存储器、寄存器、和高速缓存——可以由给定核502内的多个虚拟处理器访问。在其他实施例中,共享资源可以由处理器500内的多个处理实体访问。
高速缓存层级结构503可以以任何合适的方式来实施。例如,高速缓存层级结构503可以包括一个或多个较低级或中级高速缓存,诸如高速缓存572、574。在一个实施例中,高速缓存层级结构503可以包括通信地耦合至高速缓存572、574的LLC 595。在另一实施例中,LLC 595可以在可由处理器500的所有处理实体访问的模块590中实施。在进一步的实施例中,模块590可以在来自英特尔公司的处理器的非核模块中实施。模块590可以包括处理器500中执行核502所必要但可能不在核502内实施的部分或子系统。除了LLC 595之外,模块590可以包括例如硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。可以通过模块590并且更具体地LLC 595来进行对可用于处理器500的RAM 599的访问。此外,核502的其他实例可以类似地访问模块590。可以部分地通过模块590来促进核502的实例的协调。
图6至图8可以展示适用于包括处理器500的示例性系统,而图9可以展示可以包括核502中的一个或多个的示例性片上系统(SoC)。本领域已知的用于膝上型计算机、台式机、手持式PC、个人数字助理、工程工作站、服务器、网络装置、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置、以及各种其他电子装置的其他系统设计和实施方式也可以是合适的。一般而言,结合如本文所公开的处理器和/或其他执行逻辑的各种各样的系统或电子装置通常可以是合适的。
图6展示了根据本公开的实施例的系统600的框图。系统600可以包括可耦合到图形存储控制器中枢(GMCH)620的一个或多个处理器610、615。图6中用虚线表示附加处理器615的可选性质。
每个处理器610、615可以是处理器500的某个版本。然而,应当注意的是,在处理器610、615中可能不存在集成图形逻辑和集成存储器控制单元。
图6展示了GMCH 620可以耦合到存储器640,所述存储器可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片组、或者芯片组的一部分。GMCH 620可以与处理器610、615通信,并且控制处理器610、615与存储器640之间的交互。GMCH620还可以用作处理器610、615与系统600的其他元件之间的加速总线接口。在一个实施例中,GMCH 620经由多点分支总线(如前端总线(FSB)695)与处理器610、615通信。
此外,GMCH 620可以耦合到显示器645(如平板显示器)。在一个实施例中,GMCH620可以包括集成图形加速器。GMCH 620可以进一步地耦合到输入/输出(I/O)控制器中枢(ICH)650,所述ICH可以用于将各种外围装置耦合到系统600。外部图形装置660可以包括与另一个外围装置670一起耦合到ICH 650的独立图形装置。
在其他实施例中,在系统600中还可以存在附加或不同的处理器。例如,附加处理器610、615可以包括可以与处理器610相同的附加处理器、可以与处理器610异构或不对称的附加处理器、加速器(如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其他处理器。在包括架构、微架构、热学、功耗特性等的指标度量范围方面,在物理资源610、615之间可以存在各种差异。这些差异可以有效地将其本身表现为处理器610、615之间的不对称性和异构性。对于至少一个实施例,各处理器610、615可以驻留在相同裸片封装体中。
图7展示了根据本公开的实施例的第二系统700的框图。如图7中所示,多处理器系统700可以包括点对点互连系统,并且可以包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某个版本,如处理器610、615中的一个或多个。
虽然图7可展示两个处理器770、780,但应当理解,本公开的范围不限于此。在其他实施例中,给定处理器中可以存在一个或多个附加处理器。
处理器770和780被示出为分别包括集成存储器控制器单元772和782。处理器770还可以包括作为其总线控制器单元的一部分的点对点(P-P)接口776和778;类似地,第二处理器780可以包括P-P接口786和788。处理器770、780可以使用点对点(P-P)接口电路778、788经由P-P接口750交换信息。如图7中所示,IMC 772和782可以将处理器耦合至对应存储器,即存储器732和存储器734,在一个实施例中,所述存储器可以是主存储器的本地附接到对应处理器的部分。
处理器770、780可以各自使用点对点接口电路776、794、786、798经由单独的P-P接口752、754来与芯片组790交换信息。在一个实施例中,芯片组790还可以经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可以包括在任一处理器中或者在两个处理器外部但经由P-P互连与所述处理器相连接,使得如果处理器被置于低功耗模式中,则任一或两个处理器的局部高速缓存信息可以被存储在所述共享高速缓存中。
芯片组790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围组件互连(PCI)总线,或诸如PCI Express总线或另一种第三代I/O互连总线的总线,但是本公开的范围不限于此。
如图7所示,不同I/O装置714可以连同总线桥718耦合到第一总线716,所述总线桥可以将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。在一个实施例中,各个装置可以耦合到第二总线720,所述装置包括例如键盘和/或鼠标722、多个通信装置727、以及可以包括指令/代码和数据730的存储单元728(如磁盘驱动器或者其他大容量存储设备)。进一步地,音频I/O 724可以耦合到第二总线720。应注意的是,其他架构可以是可能的。例如,替代图7的点对点架构,系统可以实施多点分支总线或其他这样的架构。
图8展示了根据本公开的实施例的第三系统800的框图。图7和图8中的相同元件具有相同的参考号,并且已经从图8中省略了图7的某些方面以避免使图8的其他方面模糊。
图8展示了处理器770、780可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于至少一个实施例,CL 872、882可以包括集成存储器控制器单元,比如以上结合图5和图7所描述的集成存储器控制器单元。此外,CL 872、882还可以包括I/O控制逻辑。图8展示了不但存储器732、734可以耦合至CL 872、882,而且那个I/O装置814也可以耦合至控制逻辑872、882。传统I/O装置815可以耦合至芯片组790。
图9展示了根据本公开的实施例的SoC 900的框图。图5中的相似元件具有相同的参考号。而且,虚线框可以表示关于更先进的SoC的可选特征。互连单元902可以耦合至:应用处理器910,所述应用处理器可以包括一组一个或多个核502A至502N和共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;一组或者一个或多个媒体处理器920,所述媒体处理器可以包括集成图形逻辑908、用于提供静物和/或视频相机功能的图像处理器924、用于提供硬件音频加速的音频处理器926、以及用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及显示单元940,所述显示单元用于耦合至一个或多个外部显示器。
图10展示了根据本公开的实施例的包含可以执行至少一条指令的中央处理单元(CPU)和图形处理单元(GPU)的处理器。在一个实施例中,用于执行根据至少一个实施例的操作的指令可以由CPU来执行。在另一个实施例中,所述指令可以由GPU来执行。在又另一个实施例中,所述指令可以通过GPU和CPU执行的操作的组合来执行。例如,在一个实施例中,可以接收并解码根据一个实施例的指令以供在GPU上执行。然而,经解码指令内的一个或多个操作可以由CPU来执行,并且结果返回至GPU以便最终引退所述指令。因此,在一些实施例中,CPU可以用作主处理器,并且GPU可以用作协处理器。
在一些实施例中,受益于高度并行吞吐量处理器的指令可以由GPU来执行,而从受益于深度流水线式架构的处理器的执行受益的指令可以由CPU来执行。例如,图形、科学应用、金融应用和其他并行工作负荷可以受益于GPU的执行并且被相应地执行,而诸如操作系统内核或应用代码等更多顺序应用可能更适合于CPU。
在图10中,处理器1000包括CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示装置1040、存储器接口控制器1045、MIPI控制器1050、闪存控制器1055、双数据速率(DDR)控制器1060、安全引擎1065、以及I2S/I2C控制器1070。图10的处理器中可以包括其他逻辑和电路,包括更多CPU或GPU以及其他外围接口控制器。
可以由机器可读介质上所存储的表示性数据来实施至少一个实施例的一个或多个方面,所述数据代表处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文中所描述的技术的逻辑。此类表示(称为“IP核”)可以被存储在有形的机器可读介质(“磁带”)上并提供给各顾客或制造设施以加载至实际制作所述逻辑或处理器的制作机器中。例如,IP核(诸如由ARM控股有限公司开发的处理器的CortexTM家族和中国科学院计算技术研究所(ICT)开发的龙芯IP核)可以被授权或销售给各类客户或许可证持有者(诸如德州仪器、高通、苹果或三星),并且在由这些客户或许可证持有者生产的处理器中实施。
图11展示了框图,展示了根据本公开的实施例的IP核的开发。存储设备1100可以包括模拟软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可以经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160提供至存储设备1100。然后可以将由仿真工具和模型生成的IP核信息传输到制造设施1165,在所述制造设施中,所述信息可以由第三方制造以执行根据至少一个实施例的至少一条指令。
在一些实施例中,一条或多条指令可以与第一类型或架构(例如,x86)相对应,并且在属于不同类型或架构(例如,ARM)的处理器上进行转换或仿真。根据一个实施例,指令可以因此在包括ARM、x86、MIPS、GPU或其他处理器类型或架构在内的任何处理器或处理器类型上执行。
图12展示了根据本公开的实施例可以如何由不同类型的处理器对第一类型的指令进行仿真。在图12中,程序1205包含可以执行与根据一个实施例的指令相同或基本上相同功能的一些指令。然而,程序1205的指令可以具有与处理器1215不同或不兼容的类型和/或格式,这意味着属于程序1205中的类型的指令可能无法由处理器1215本机执行。然而,在仿真逻辑1210的帮助下,程序1205的指令可以被转换成可以由处理器1215本机执行的指令。在一个实施例中,仿真逻辑可以在硬件中实施。在另一实施例中,仿真逻辑可以在包含用于将属于程序1205中的类型的指令转换成可由处理器1215本机执行的类型的软件的有形机器可读介质中实施。在其他实施例中,仿真逻辑可以是固定功能或可编程硬件和存储在有形机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其他实施例中,仿真逻辑存在于处理器外部并且可以由第三方提供。在一个实施例中,处理器可以通过执行包含在处理器中或与所述处理器相关联的微代码或固件来加载在包含软件的有形机器可读介质中实施的仿真逻辑。
图13展示了对照根据本公开的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所展示的实施例中,指令转换器可以是软件指令转换器,然而可以在软件、固件、硬件或其各种组合中实施指令转换器。图13示出了可以使用x86编译器1304来编译高级语言1302的程序以生成x86二进制代码1306,所述二进制代码可以由具有至少一个x86指令集核1316的处理器本机执行。具有至少一个x86指令集核1316的处理器表示可以通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同功能的任何处理器:(1)英特尔x86指令集核的指令集的实质部分,或(2)应用的目标代码版本或目标是在具有至少一个x86指令集核的英特尔处理器上运行的其他软件,以便实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1304表示可以可操作以生成x86二进制代码1306(例如,目标代码)的编译器,所述二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核1316的处理器上执行。类似地,图13示出了可以使用替代性指令集编译器1308来编译高级语言1302的程序以生成替代性指令集二进制代码1310,可以由不具有至少一个x86指令集核的处理器1314(例如,具有执行加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的多个核的处理器)本机执行所述替代性指令集二进制代码。指令转换器1312可以用于将x86二进制代码1306转换为可由不具有x86指令集核1314的处理器本机执行的代码。这种经转换的代码可能与替代性指令集二进制代码1310不同;然而,经转换的代码将完成一般操作,并且由来自替代性指令集的指令构成。因此,指令转换器1312表示通过仿真、模拟或任何其他进程允许不具有x86指令集处理器或核的处理器或其他电子装置执行x86二进制代码1306的软件、固件、硬件或其组合。
图14是根据本公开的实施例的处理器的指令集架构1400的框图。指令集架构1400可以包括任何合适数量或种类的组件。
例如,指令集架构1400可以包括诸如一个或多个核1406、1407以及图形处理单元1415等处理实体。核1406、1407可以通过任何适当的机制(比如通过总线或高速缓存)通信地耦合至指令集架构1400的其余部分。在一个实施例中,核1406、1407可以通过L2高速缓存控制1408通信地耦合,所述L2高速缓存控制可以包括总线接口单元1409和L2高速缓存1411。核1406、1407和图形处理单元1415可以彼此通信地耦合并且通过互连1410耦合至指令集架构1400的其余部分。在一个实施例中,图形处理单元1415可以使用视频编码1420,所述视频编码限定特定视频信号将被编码和解码以供输出的方式。
指令集架构1400还可以包括任何数量或种类的接口、控制器或用于与电子装置或系统的其他部分接口连接或通信的其他机制。这种机制可以促进例如与外围装置、通信装置、其他处理器或存储器的交互。在图14的示例中,指令集架构1400可以包括液晶显示器(LCD)视频接口1425、订户接口模块(SIM)接口1430、引导ROM接口1435、同步动态随机存取存储器(SDRAM)控制器1440、闪存控制器1445、和串行外围接口(SPI)主机单元1450。LCD视频接口1425可以将例如来自GPU 1415的视频信号的输出并且通过例如移动行业处理器接口(MIPI)1490或高清晰度多媒体接口(HDMI)1495提供至显示器。这种显示器可以包括例如LCD。SIM接口1430可以提供对SIM卡或装置的访问或来自所述SIM或装置的访问。SDRAM控制器1440可以提供对诸如SDRAM芯片或模块1460等存储器的访问或来自所述存储器的访问。闪存控制器1445可以提供对诸如闪存1465或RAM的其他实例等存储器的访问或来自所述存储器的访问。SPI主机单元1450可以提供对通信模块或来自所述通信模块的访问,诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实施诸如802.11等通信标准的无线模块1485。
图15是根据本公开的实施例的处理器的指令集架构1500的更详细框图。指令架构1500可以实施指令集架构1400的一个或多个方面。此外,指令集架构1500可以展示用于执行处理器内的指令的模块和机制。
指令架构1500可以包括通信地耦合至一个或多个执行实体1565的存储器系统1540。此外,指令架构1500可以包括高速缓存和总线接口单元,比如通信地耦合至执行实体1565和存储器系统1540的单元1510。在一个实施例中,可以通过一个或多个执行级来执行将指令加载到执行实体1565中。这类级可以包括例如指令预取级1530、双指令解码级1550、寄存器重命名级1555、发布级1560以及写回级1570。
在一个实施例中,存储器系统1540可以包括被执行的指令指针1580。被执行的指令指针1580可以存储标识一批指令中的最早的、未被分派的指令的值。最早指令可以与最低程序顺序(PO)值相对应。PO可以包括指令的唯一编号。这种指令可以是在由多个指令串(strand)表示的线程内的单条指令。PO可以用于在排序指令时确保正确执行代码的语义。PO可以通过诸如对在指令中编码的PO的增量而非绝对值进行评估的机制来重建。这种重建的PO可以被称为“RPO”。尽管本文可以引用PO,但是这种PO可以与RPO互换地使用。指令串可以包括指令序列,这些指令为取决于彼此的数据。所述指令串可以在编译时由二进制转换器来安排。执行指令串的硬件可以根据各种指令的PO有序地执行给定指令串的指令。线程可以包括多个指令串,使得不同指令串的指令可以彼此依赖。给定指令串的PO可以是所述指令串中尚未分派以从发布级开始执行的最早指令的PO。因此,给定多个指令串的线程,每个指令串包括由PO排序的指令,被执行的指令指针1580可以将最早的——由最低编号所展示的——PO存储在线程中。
在另一实施例中,存储器系统1540可以包括引退指针1582。引退指针1582可以存储标识最后引退指令的PO的值。引退指针1582可以由例如引退单元454来设置。如果尚未引退任何指令,则引退指针1582可以包括空值。
执行实体1565可以包括处理器可以借助以执行指令的任何合适数量和种类的机制。在图15的示例中,执行实体1565可以包括ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,这类实体可以使用包含在给定地址1569内的信息。执行实体1565与级1530、1550、1555、1560、1570相结合可以共同形成执行单元。
单元1510可以以任何合适的方式来实施。在一个实施例中,单元1510可以执行高速缓存控制。在这种实施例中,单元1510可以因此包括高速缓存1525。在进一步的实施例中,高速缓存1525可以被实施为具有诸如零、128k、256k、512k、1M或2M字节存储器等任何合适尺寸的L2统一高速缓存。在另一个进一步的实施例中,高速缓存1525可以在误差校正代码存储器中实施。在另一实施例中,单元1510可以执行至处理器或电子装置的其他部分的总线接口连接。在这种实施例中,单元1510可以因此包括总线接口单元1520,所述总线接口单元用于通过互连、处理器内总线、处理器间总线或其他通信总线、端口或线路进行通信。总线接口单元1520可以提供接口连接以便执行例如用于在执行实体1565与系统中在指令架构1500外部的部分之间进行数据传送的存储器和输入/输出地址的生成。
为了进一步促进其功能,总线接口单元1520可以包括中断控制和分配单元1511,所述中断控制和分配单元用于生成到处理器或电子装置的其他部分的中断和其他通信。在一个实施例中,总线接口单元1520可以包括处理多个处理核的高速缓存访问和一致性的监听控制单元1512。在进一步的实施例中,为了提供这种功能,监听控制单元1512可以包括处理不同高速缓存之间的信息交换的高速缓存间传送单元。在另一个进一步的实施例中,监听控制单元1512可以包括一个或多个监听过滤器1514,所述监听过滤器监测其他高速缓存(未示出)的一致性以使得高速缓存控制器(诸如单元1510)不必直接执行这种监测。单元1510可以包括用于对指令架构1500的动作进行同步的任何合适数量的定时器1515。而且,单元1510可以包括AC端口1516。
存储器系统1540可以包括用于对指令架构1500的处理需求的信息进行存储的任何合适数量和种类的机制。在一个实施例中,存储器系统1540可以包括用于存储信息的加载存储单元1546,比如写入存储器或寄存器或者从存储器或寄存器读回的缓冲器。在另一实施例中,存储器系统1540可以包括转换后备缓冲器(TLB)1545,所述TLB提供物理地址与虚拟地址之间的地址值的查找。在又另一个实施例中,存储器系统1540可以包括用于促进对虚拟存储器的访问的存储器管理单元(MMU)1544。在还另一个实施例中,存储器系统1540可以包括预取器1543,所述预取器用于在实际需要执行来自存储器的指令之前请求这种指令以便减少等待时间。
指令架构1500用于执行指令的操作可以通过不同级来执行。例如,使用单元1510指令预取级1530可以通过预取器1543来访问指令。所检索的指令可以存储在指令高速缓存1532中。预取级1530可以启用用于快速循环模式的选项1531,其中,形成足够小以适应在给定高速缓存内的循环的一系列指令被执行。在一个实施例中,可以在无需访问来自例如高速缓存1532的附加指令的情况下执行这种执行。可以由例如分支预测单元1535来判定将预取什么指令,所述分支预测单元可以访问全局历史1536中的执行指示、目标地址1537的指示或返回堆栈1538的内容以判定接下来将执行代码分支1557中的哪个。这种分支可能有可能作为结果来预取。分支1557可以通过如下所述的操作的其他级来产生。指令预取级1530可以向双指令解码级1550提供指令以及关于未来指令的任何预测。
双指令解码级1550可以将所接收指令转换成可以执行的基于微代码的指令。双指令解码级1550每个时钟周期可以同时解码两条指令。此外,双指令解码级1550可以将其结果传递至寄存器重命名级1555。另外,双指令解码级1550可以根据其对微代码的解码和最终执行来确定任何所产生的分支。这种结果可以被输入到分支1557中。
寄存器重命名级1555可以将对虚拟寄存器或其他资源的引用转换为对物理寄存器或资源的引用。寄存器重命名级1555可以包括对寄存器池1556中的这种映射的指示。寄存器重命名级1555可以在接收到指令时改变所述指令并且将结果发送至发布级1560。
发布级1560可以将命令发布或分派至执行实体1565。这种发布可以以乱序的方式来执行。在一个实施例中,在发布级1560,多条指令可以在被执行之前被保持。发布级1560可以包括用于保持这种多个命令的指令队列1561。可以基于诸如用于执行给定指令的资源的可用性和适用性等任何可接受的标准通过发布级1560将指令发布至特定处理实体1565。在一个实施例中,发布级1560可以对指令队列1561内的指令重新排序,从而使得第一个所接收的指令可能不是第一个被执行的指令。基于对指令队列1561的排序,可以将附加分支信息提供至分支1557。发布级1560可以将指令传递至执行实体1565以供执行。
在执行时,写回级1570可将数据写入寄存器、队列或指令集架构1500的其他结构以传达给定命令的完成。取决于在发布级1560中安排的指令顺序,写回级1570的操作可以使附加指令能够被执行。可以由跟踪单元1575对指令集架构1500的执行进行监测或调试。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600可以展示例如图15的指令架构1500的操作。
执行流水线1600可以包括步骤或操作的任何合适的组合。在1605中,可以预测接下来将被执行的分支。在一个实施例中,这种预测可以基于之前对指令的执行及其结果。在1610中,与经预测的执行分支相对应的指令可以被加载到指令高速缓存中。在1615中,可以取出指令高速缓存中的一条或多条这种指令以供执行。在1620中,已经取出的指令可以被解码成微代码或更具体的机器语言。在一个实施例中,可以同时对多条指令进行解码。在1625中,可以重分配对寄存器或经解码指令内的其他资源的引用。例如,对虚拟寄存器的引用可以用对相应物理寄存器的引用来替代。在1630中,可以将指令分派至队列以供执行。在1640处,可以执行指令。这种执行可以以任何合适的方式来进行。在1650中,可以将指令发布至合适的执行实体。执行指令的方式可以取决于执行所述指令的具体实体。例如,在1655处,ALU可以执行算术功能。ALU可以利用单个时钟周期以及两个移位器来进行其操作。在一个实施例中,可以采用两个ALU,并且因此可以在1655处执行两条指令。在1660处,可以确定所产生分支。程序计数器可以用于指定所述分支将前往的目的地。可以在单个时钟周期内执行1660。在1665处,可以由一个或多个FPU来执行浮点算术。浮点运算可能需要多个时钟周期来执行,比如两个周期到十个周期。在1670处,可以执行乘法运算和除法运算。这种运算可以在四个时钟周期内执行。在1675处,可以执行对寄存器或流水线1600的其他部分的加载和存储操作。这种操作可以包括加载和存储地址。这种运算可以在四个时钟周期内执行。在1680处,可以按照所产生操作1655至1675所要求的那样来执行写回操作。
图17是根据本公开的实施例的用于利用处理器1710的电子装置1700的框图。电子装置1700可以包括例如笔记本、超极本、计算机、塔式服务器、机架式服务器、刀片服务器、膝上型计算机、台式机、平板计算机、移动装置、电话、嵌入式计算机或任何其他合适的电子装置。
电子装置1700可以包括通信地耦合至任何合适数量或种类的组件、外围装置、模块或装置的处理器1710。这种耦合可以通过任何合适种类的总线或接口来实现,诸如I2C总线、系统管理总线(SMBus)、低引脚数(LPC)总线、SPI、高清晰度音频(HDA)总线、串行高级技术附件(SATA)总线、USB总线(版本1、2、3)或通用异步接收器/发射器(UART)总线。
这样的组件可以包括例如显示器1724、触摸屏1725、触摸板1730、近场通信(NFC)单元1745、传感器中枢1740、热传感器1746、快速芯片组(EC)1735、可信平台模块(TPM)1738、BIOS/固件/闪存1722、数字信号处理器1760、驱动器1720(诸如固态盘(SSD)或硬盘驱动器(HDD))、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)1775、诸如USB 3.0相机等相机1754或例如以LPDDR3标准实施的低功率双倍速率(LPDDR)存储器单元1715。这些组件可以各自以任何合适的方式来实施。
此外,在各个实施例中,其他组件可以通过以上所讨论的组件通信地耦合至处理器1710。例如,加速度计1741、环境光传感器(ALS)1742、罗盘1743和陀螺仪1744可以通信地耦合至传感器中枢1740。热传感器1739、风扇1737、键盘1736和触摸板1730可以通信地耦合至EC 1735。扬声器1763、耳机1764和麦克风1765可以通信地耦合至音频单元1762,所述音频单元进而可以通信地耦合至DSP 1760。音频单元1762可以包括例如音频编解码器和D类放大器。SIM卡1757可以通信地耦合到WWAN单元1756。诸如WLAN单元1750和蓝牙单元1752以及WWAN单元1756等组件可以以下一代形状因子(NGFF)来实施。
本公开的实施例涉及用于执行针对向量寄存器的一个或多个向量操作的指令和处理逻辑,向量操作中的至少一些操作用于使用从索引阵列中检索的索引值来访问存储器位置。图18是根据本公开的实施例的用于向量操作的指令和逻辑的示例系统1800的展示,所述向量操作用于从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置。
通常,分散操作可以执行对地址的一系列存储器写入访问,所述地址根据由指令指定(或编码到指令中)的基地址寄存器、索引寄存器和/或比例因子的内容而计算。例如,密码学、简图遍历、分类或稀疏矩阵应用可以包括用于加载具有一系列索引值的索引寄存器的一个或多个指令以及用于执行将数据元素分散到使用那些索引值间接寻址的位置的一个或多个其他指令。分散操作可以以不规则方式遍历存储器,从而将数据元素分散到其地址不连续并且不必遵循一致性模式的位置。例如,重复的一系列指令可以将数据元素写入到位置0,然后将数据元素写入到位置1000,然后将数据元素写入到位置723,并且然后将数据元素写入到位置50000。
本文描述的Load-Indices-and-Scatter指令可以加载分散操作所需要的索引并且还执行分散操作。对于待分散到稀疏存储器中的一个或多个随机位置的每个数据元素,这可以包括:从存储器中的索引阵列中的特定位置检索索引值、计算存储器中数据元素将被存储的位置的地址、以及将数据元素存储到存储器在所计算的位置处。可以基于针对指令指定的基地址以及从索引阵列中检索的索引值计算数据元素被存储的位置的地址,所述索引阵列的地址针对所述指令而指定。在本公开的实施例中,这些Load-Indices-and-Scatter指令可以用于将数据元素分散到应用中的存储器,在所述应用中,数据元素将以随机顺序被存储在存储器中。例如,它们可以用于存储稀疏阵列的元素。
在本公开的实施例中,对扩展向量指令的编码可以包括在存储器中间接地标识多个索引的目的地位置的比例索引基址(SIB)类型的存储器寻址操作数。在一个实施例中,SIB类型的存储器操作数可以包括标识基地址寄存器的编码。基地址寄存器的内容可以表示存储器中的基地址,根据所述基地址来计算存储器中的特定位置的地址。例如,基地址可以是数据元素可以通过分散操作存储到的一批位置中第一位置的地址。在一个实施例中,SIB类型的存储器操作数可以包括标识存储器中的索引阵列的编码。阵列的每个元素可以指定可用于根据基地址计算数据元素可以被分散到的一批位置内的对应位置的地址的索引或偏移量值。在一个实施例中,SIB类型的存储器操作数可以包括指定比例因子的编码,所述比例因子将在计算对应的目的地地址时应用于每个索引值。例如,如果比例因子值四以SIB类型存储器操作数编码,则从索引阵列的元素处获得的每个索引值可以乘以四,并且然后加到基地址以便计算数据元素将通过分散操作存储到的地址。
在一个实施例中,形式为vm32{x,y,z}的SIB类型存储器操作数可以标识使用SIB类型的存储器寻址指定的存储器操作数的向量阵列。在本示例中,存储器地址阵列是使用公共基址寄存器、恒定比例因子和包含各个元素的向量索引寄存器来指定的,所述存储器地址阵列中的每一个都是32位索引值。向量索引寄存器可以是XMM寄存器(vm32x)、YMM寄存器(vm32y)或ZMM寄存器(vm32z)。在另一实施例中,形式为vm64{x,y,z}的SIB类型的存储器操作数可以标识使用SIB类型的存储器寻址指定的存储器操作数的向量阵列。在本示例中,存储器地址阵列是使用公共基址寄存器、恒定比例因子和包含各个元素的向量索引寄存器来指定的,所述存储器地址阵列中的每一个都是64位索引值。向量索引寄存器可以是XMM寄存器(vm64x)、YMM寄存器(vm64y)或ZMM寄存器(vm64z)。
系统1800可以包括处理器、SoC、集成电路或其他机制。例如,系统1800可以包括处理器1804。尽管处理器1804在图18中作为示例示出和描述,但可以使用任何合适的机制。处理器1804可以包括用于执行针对向量寄存器的向量操作的任何合适的机制,包括操作用于使用从索引阵列中检索的索引值来访问存储器位置的那些机制。在一个实施例中,这种机制可以在硬件中实施。处理器1804可以完全或部分地由图1至图17中所描述的元件来实施。
有待在处理器1804上执行的指令可以包括在指令流1802中。指令流1802可以通过例如编译器、适时(just-in-time)解释器、或其他合适的机制(其可以或可以不包括在系统1800中)生成或者可以由产生指令流1802的代码的起草者来指定。例如,编译器可以采用应用代码并且以指令流1802的形式生成可执行代码。指令可以由处理器1804从指令流1802中接收。指令流1802可以以任何合适的方式加载到处理器1804。例如,可以从存储设备、从其他机器或从诸如存储器系统1830等其他存储器加载有待由处理器1804执行的指令。所述指令可以到达常驻存储器(比如,RAM)并在其中可用,其中,指令从存储设备中取出以便由处理器1804执行。可以由例如预取器或取出单元(比如指令取出单元1808)从常驻存储器中取出所述指令。
在一个实施例中,指令流1802可以包括用于执行向量操作以便从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的指令。例如,在一个实施例中,指令流1802可以包括一个或多个“LoadIndicesAndScatter”类型指令,所述指令用于根据需要一次一个地加载将用于计算存储器中特定数据元素将被存储到的地址的索引值。在使用或不使用缩放的情况下,地址可以被计算为针对指令指定的基地址与从针对指令标识的索引阵列中检索的索引值之和。待分散的数据元素可以存储在针对指令指定的源向量寄存器中的连续位置中。注意,指令流1802可以包括除了执行向量操作的那些指令之外的指令。
处理器1804可以包括前端1806,所述前端可以包括指令取出流水线级(比如指令取出单元1808)以及解码流水线级(比如决定单元1810)。前端1806可以接收并使用解码单元1810来解码来自指令流1802的指令。经解码指令可以被分派、分配和调度以供由流水线的分配级(诸如分配器1814)执行并且被分配给特定执行单元1816以供执行。有待由处理器1804执行的一条或多条特定指令可以包括在针对由处理器1804执行而限定的函数库中。在另一实施例中,特定指令可以由处理器1804的特定部分所针对。例如,处理器1804可以识别指令流1802中用于在软件中执行向量操作的试图,并且可以将指令发布到执行单元1816中的特定执行单元。
在执行期间,可以通过存储器子系统1820来进行对数据或附加指令(包括驻留在存储器系统1830中的数据或指令)的访问。此外,来自执行的结果可以存储在存储器子系统1820中并且随后可以转储清除至存储器系统1830。存储器子系统1820可以包括例如存储器、RAM或高速缓存层级结构,所述高速缓存层级结构可以包括一个或多个1级(L1)高速缓存1822或2级(L2)高速缓存1824,其中一些可以由多个核1812或处理器1804所共享。在由执行单元1816执行之后,指令可以由引退单元1818中的写回级或引退级来引退。可以由一个或多个核1812来执行这种执行流水线化的各个部分。
执行向量指令的执行单元1816可以以任何合适的方式来实施。在一个实施例中,执行单元1816可以包括用于存储执行一个或多个向量操作所必需的信息的存储器元件或者可以通信地耦合至所述存储器元件。在一个实施例中,执行单元1816可以包括用于执行向量操作以便从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的电路系统。例如,执行单元1816可以包括用于实施一种或多种形式的vector LoadIndicesAndScatter(向量加载索引和分散)类型指令的电路系统。以下将更详细地描述这些指令的示例实施方式。
在本公开的实施例中,处理器1804的指令集架构可以实施被限定为高级向量扩展512( AVX-512)指令的一个或多个扩展向量指令。处理器1804可以隐式地或通过特定指令的解码和执行来识别这些扩展向量操作之一将被执行。在这种情况下,扩展向量操作可以被引导至执行单元1816的特定执行单元以供执行指令。在一个实施例中,指令集架构可以包括针对512位SIMD操作的支持。例如,由执行单元1816实施的指令集架构可以包括32个向量寄存器,其中每一个都是512位宽,并且支持高达512位宽的向量。由执行单元1816实施的指令集架构可以包括用于对目的地操作数进行条件执行和高效合并的八个专用掩码寄存器。至少一些扩展向量指令可以包括针对广播的支持。至少一些扩展向量指令可以包括针对嵌入式掩码的支持以实现预测。
至少一些扩展向量指令可以同时对存储在向量寄存器中的向量的每个元素应用相同的操作。其他扩展向量指令可以对多个源向量寄存器中的相应元素应用相同的操作。例如,可以由扩展向量指令对存储在向量寄存器中的紧缩数据项的各个数据元素中的每一个应用相同的操作。在另一示例中,扩展向量指令可以指定单个向量操作,所述单个向量操作有待对两个源向量操作数的对应数据元素执行以便生成目的地向量操作数。
在本公开的实施例中,至少一些扩展向量指令可以由处理器核内的SIMD协处理器来执行。例如,核1812内的执行单元1816中的一个或多个可以实施SIMD协处理器的功能。SIMD协处理器可以完全或部分地由图1至图17中所描述的元件来实施。在一个实施例中,指令流1802内的由处理器1804接收的扩展向量指令可以被引导至实施SIMD协处理器的功能的执行单元1816。
如图18中所展示的,在一个实施例中,LoadIndicesAndScatter类型指令可以包括指示待分散的数据元素的尺寸和/或类型的{尺寸}参数。在一个实施例中,待分散的数据元素中的所有数据元素可以具有同一尺寸。
在一个实施例中,LoadIndicesAndScatter类型指令可以包括标识指令的源向量寄存器的REG参数。源向量寄存器可以将待通过指令分散的数据元素存储在连续位置中。
在一个实施例中,LoadIndicesAndScatter类型指令可以包括两个存储器地址参数,所述两个存储器地址参数之一标识存储器中的一组潜在数据元素位置的基地址,并且所述两个存储器地址参数中的另一个标识存储器中的索引阵列。在一个实施例中,这些存储器地址参数之一或两者可以编码在比例索引基址(SIB)类型的存储器寻址操作数中。在另一实施例中,这些存储器地址参数之一或两者可以是指针。
在一个实施例中,LoadIndicesAndScatter类型指令可以包括标识特定掩码寄存器的{kn}参数(如果将应用掩码的话)。如果将应用掩码,则LoadIndicesAndScatter类型指令可以包括指定掩码类型的{z}参数。在一个实施例中,如果针对指令包括{z}参数,则这可以指示当将待通过指令分散的数据元素写入存储器中其所计算的位置时将应用归零掩码。如果针对指令不包括{z}参数,则这可以指示当将待通过指令分散的数据元素写入其所计算的位置时将应用合并掩码。下文更加详细地描述了使用归零掩码和合并掩码的示例。
图18中示出的LoadIndicesAndScatter类型指令的参数中的一个或多个可以是针对指令固有的。例如,在不同实施例中,这些参数中的任意组合可以编码在指令的操作码格式的某个位或字段中。在其他实施例中,图18中示出的LoadIndicesAndScatter类型指令的参数中的一个或多个可以是针对指令可选的。例如,在不同实施例中,这些参数的任意组合可以在指令被调用时指定。
图19展示了根据本公开的实施例的执行SIMD操作的数据处理系统的示例处理器核1900。处理器1900可以完全或部分地由图1至图18中所描述的元件来实施。在一个实施例中,处理器1900可以包括主处理器1920和SIMD协处理器1910。SIMD协处理器1910可以完全或部分地由图1至图17中所描述的元件来实施。在一个实施例中,SIMD协处理器1910可以实施图18中所展示的执行单元1816之一的至少一部分。在一个实施例中,SIMD协处理器1910可以包括SIMD执行单元1912和扩展向量寄存器堆1914。SIMD协处理器1910可以执行扩展SIMD指令集1916的操作。扩展SIMD指令集1916可以包括一个或多个扩展向量指令。这些扩展向量指令可以控制数据处理操作,所述数据处理操作包括与驻留在扩展向量寄存器堆1914中的数据进行的交互。
在一个实施例中,主处理器1920可以包括解码器1922,所述解码器用于识别扩展SIMD指令集1916的指令以供由SIMD协处理器1910执行。在其他实施例中,SIMD协处理器1910可以包括解码器的至少一部分(未示出)以对扩展SIMD指令集1916的指令进行解码。处理器核1900还可以包括附加电路系统(未示出),所述附加电路系统可能对于理解本公开的实施例是不必要的。
在本公开的实施例中,主处理器1920可以执行控制一般类型的数据处理操作的数据处理指令流,所述操作包括与(多个)高速缓存1924和/或寄存器堆1926的交互。嵌入在数据处理指令流内的可以是扩展SIMD指令集1916的SIMD协处理器指令。主处理器1920的解码器1922可以将这些SIMD协处理器指令识别为属于应由附接的SIMD协处理器1910执行的类型。相应地,主处理器1920可以在协处理器总线1915上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。可以由任何附接的SIMD协处理器从协处理器总线1915接收这些指令。在图19中所展示的示例实施例中,SIMD协处理器1910可以接受并执行旨在用于在SIMD协处理器1910上执行的任何所接收SIMD协处理器指令。
在一个实施例中,主处理器1920和SIMD协处理器1920可以被集成到包括执行单元、一组寄存器堆以及用于识别扩展SIMD指令集1916的指令的解码器的单个处理器核1900中。
图18和图19中描绘的示例实施方式仅仅是说明性的并且并不旨在限制本文中所描述的用于执行扩展向量操作的机制的实施方式。
图20是框图,展示了根据本公开的实施例的示例扩展向量寄存器堆1914。扩展向量寄存器堆1914可以包括32个SIMD寄存器(ZMM0至ZMM31),其中每一个都是512位宽。ZMM寄存器中的每一个的较低256个位被别名化为对应的256位YMM寄存器。YMM寄存器中的每一个的较低128个位被别名化为对应的128位XMM寄存器。例如,寄存器ZMM0(示出为2001)的位255至位0被别名化为寄存器YMM0,并且寄存器ZMM0的位127至位0被别名化为寄存器XMM0。类似地,寄存器ZMM1(示出为2002)的位255至位0被别名化为寄存器YMM1,寄存器ZMM1的位127至位0被别名化为寄存器XMM1,寄存器ZMM2(示出为2003)的位255至位0被别名化为寄存器YMM2,寄存器ZMM2的位127至位0被别名化为寄存器XMM2,以此类推。
在一个实施例中,扩展SIMD指令集1916中的扩展向量指令可以在扩展向量寄存器堆1914中的寄存器中的任何一个上进行操作,包括寄存器ZMM0至ZMM31、寄存器YMM0至YMM15、以及寄存器XMM0至XMM7。在另一实施例中,在 AVX-512指令集架构的开发之前实施的传统SIMD指令可以在扩展向量寄存器堆1914的YMM寄存器或XMM寄存器的子集上进行操作。例如,在一些实施例中,由一些传统SIMD指令进行的访问可能限于寄存器YMM0至YMM15或限于寄存器XMM0至XMM7。
在本公开的实施例中,指令集架构可以支持访问高达四个指令操作数的扩展向量指令。例如,在至少一些实施例中,扩展向量指令可以将图20中所示的32个扩展向量寄存器ZMM0至ZMM31中的任何一个作为源操作数或目的地操作数来访问。在一些实施例中,扩展向量指令可以访问八个专用掩码寄存器中的任何一个。在一些实施例中,扩展向量指令可以访问十六个通用寄存器中的任何一个作为源操作数或目的地操作数。
在本公开的实施例中,对扩展向量指令的编码可以包括指定有待执行的特定向量操作的操作码。对扩展向量指令的编码可以包括标识八个专用掩码寄存器k0至k7中的任何一个的编码。当所标识掩码寄存器的每个位被应用于对应的源向量元素或目的地向量元素时,其可以管控向量操作的行为。例如,在一个实施例中,这些掩码寄存器中的七个(k1至k7)可以用于有条件地管控扩展向量指令的每数据元素计算操作。在本示例中,如果相应的掩码位未被置位,则针对给定向量元素不执行所述操作。在另一实施例中,掩码寄存器(k1至k7)可以用于有条件地管控对扩展向量指令的目的地操作数的每个元素的更新。在本示例中,如果相应的掩码位未被置位,则不会使用所述操作的结果更新给定目的地元素。
在一个实施例中,对扩展向量指令的编码可以包括指定有待应用于扩展向量指令的目的地(结果)向量的掩码类型的编码。例如,这种编码可以指定是否将合并掩码或零掩码应用于向量操作的执行。如果这种编码指定合并掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以保持在目的地向量中。如果这种编码指定零掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以用目的地向量中的零值来替代。在一个示例实施例中,掩码寄存器k0不被用作向量操作的预测操作数。在本示例中,在其他情况下将选择掩码k0的编码值可以替代地选择全为一的隐式掩码值,从而有效地禁用掩码。在本示例中,掩码寄存器k0可以用于将一个或多个掩码寄存器作为源操作数或目的地操作数的任何指令。
在一个实施例中,对扩展向量指令的编码可以包括指定被紧缩到源向量寄存器中或有待紧缩到目的地向量寄存器中的数据元素的尺寸的编码。例如,所述编码可以指定每个数据元素是字节、字、双字或四字等。在另一实施例中,对扩展向量指令的编码可以包括指定被紧缩到源向量寄存器中或有待紧缩到目的地向量寄存器中的数据元素的数据类型的编码。例如,所述编码可以指定数据表示单精度整数或双精度整数,或者多个所支持的浮点数据类型中的任何一种。
在一个实施例中,对扩展向量指令的编码可以包括指定用来访问源操作数或目的地操作数的存储器地址或存储器寻址模式的编码。在另一实施例中,对扩展向量指令的编码可以包括指定作为指令的操作数的标量整数或标量浮点数的编码。虽然本文中描述了具体的扩展向量指令及其编码,但这些仅仅是可以在本公开的实施例中实施的扩展向量指令的示例。在其他实施例中,可以在指令集架构中实施更多、更少或不同的扩展向量指令并且其编码可以包括更多、更少或不同的信息以控制其执行。
在一个实施例中,当相比于用于执行分散的其他指令序列时,使用LoadIndicesAndScatter指令可以改善使用通过存储在阵列中的索引对存储器的间接写入访问的密码学、简图遍历、分类和稀疏矩阵应用(等等)的性能。在一个实施例中,代替指定从中加载索引向量的一组地址,那些地址可以替代地作为索引阵列被提供给LoadIndicesAndScatter指令,所述LoadIndicesAndScatter指令将加载阵列的每个元素并且然后使用其作为用于分散操作的索引。将在分散操作中使用的索引向量可以存储在存储器中的连续位置中。例如,在一个实施例中,在阵列中的第一位置开始,可以存在包含第一索引值的四个字节,然后是包含第二索引值的四个字节,以此类推。在一个实施例中,(存储器中的)索引阵列的起始地址可以提供给LoadIndicesAndScatter指令,并且索引值可以以那个地址开始连续地存储在存储器中。在一个实施例中,LoadIndicesAndScatter指令可以加载从那个位置开始的64字节并且使用它们(一次四个)来执行分散。
如下文更加详细描述的,在一个实施例中,LoadIndicesAndScatter指令的语义可以如下:
LoadIndicesAndScatterD kn(地址A,地址B,ZMMn)
在此示例中,分散操作是将32位双字元素分散到存储器中的位置,源向量寄存器被指定为ZMMn,存储器中的索引阵列的起始地址是地址A,存储器中的潜在数据元素位置的起始地址(基地址)是地址B,并且针对指令指定的掩码是掩码寄存器kn。这条指令的操作可以通过以下示例伪代码来展示。在此示例中,VLEN(或向量长度)可以表示索引向量的长度,即,存储在索引阵列中用于分散操作的索引值的数量。
在一个实施例中,合并掩码可以是针对LoadIndicesAndScatter指令可选的。在另一个实施例中,归零掩码可以是针对LoadIndicesAndScatter指令可选的。在一个实施例中,LoadIndicesAndScatter指令可以支持VLEN的多个可能值,如8、16、32或64。在一个实施例中,LoadIndicesAndScatter指令可以支持索引阵列B[i]中的元素的多个可能尺寸,如32位或64位值,所述多个可能尺寸中的每一个可以表示一个或多个索引值。在一个实施例中,LoadIndicesAndScatter指令可以支持源向量寄存器ZMMn中的数据元素的多个可能类型和尺寸,包括单精度或双精度浮点、64位整数等等。在一个实施例中,LoadIndicesAndScatter指令可以支持将存储在存储器位置A[i]中的数据元素的多个可能类型和尺寸,包括单精度或双精度浮点、64位整数等等。在一个实施例中,因为索引加载和分散被组合成一个指令,所以如果硬件预取单元识别到来自阵列B的索引可以被预取,则其可以自动预取所述索引。在一个实施例中,预取单元还可以从通过B间接访问的阵列A中自动预取值。
在本公开的实施例中,用于执行由处理器核(如系统1800中的核1812)或者由SIMD协处理器(如SIMD协处理器1910)实施的经扩展的向量操作的指令可以包括用于执行向量操作以便从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的指令。例如,这些指令可以包括一个或多个“LoadIndicesAndScatter”指令。在本公开的实施例中,这些LoadIndicesAndScatter指令可以用于根据需要一次一个地加载将用于计算特定数据元素将被存储到的存储器中的地址的索引值中的每一个。在使用或不使用缩放的情况下,地址可以被计算为针对指令指定的基地址与从针对指令标识的索引阵列中检索的索引值之和。待分散的数据元素可以存储在针对指令指定的源向量寄存器中的连续位置中。
图21是根据本公开的实施例的用于执行从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的操作的展示。在一个实施例中,系统1800可以执行用于执行操作以便从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的指令。例如,可以执行LoadIndicesAndScatter指令。这条指令可以包括任何合适数量和种类的操作数、位、标志、参数或其他元素。在一个实施例中,对LoadIndicesAndScatter指令的调用可以引用源向量寄存器。源向量寄存器可以是经扩展的向量寄存器,所述经扩展的向量寄存器存储将通过LoadIndicesAndScatter指令分散到稀疏存储器中的一个或多个随机位置的数据元素。对LoadIndicesAndScatter指令的调用可以引用存储器中的基地址,根据所述基地址计算存储器中数据元素将被存储到的特定位置的地址。例如,LoadIndicesAndScatter指令可以引用指向一组潜在数据元素位置中的第一位置的指针,所述潜在数据元素位置中的一些可以是数据元素将通过指令存储到的位置。对LoadIndicesAndScatter指令的调用可以引用存储器中的索引阵列,所述索引中的每一个可以指定可用于计算数据元素将通过指令存储到的位置的地址的索引值或离基地址的偏移量。在一个实施例中,对LoadIndicesAndScatter指令的调用可以以scale-index-base(比例-索引-基址)(SIB)类型存储器寻址操作数引用存储器和基地址寄存器中的索引阵列。基地址寄存器可以标识存储器中的基地址,根据所述基地址计算存储器中数据元素将被存储到的特定位置的地址。存储器中的索引阵列可以指定可用于计算每个数据元素将通过指令存储到的地址的索引或离基地址的偏移量。例如,对于索引阵列中存储在索引阵列中的连续位置中的每个索引值,执行LoadIndicesAndScatter指令可以使得从索引阵列中检索索引值、基于索引值和基地址计算存储器中的潜在数据元素位置的地址、从源向量寄存器中检索数据元素、并且将检索到的数据元素存储在存储器中在所计算的地址处。
在一个实施例中,对LoadIndicesAndScatter指令的调用可以指定当计算数据元素将通过指令存储到的对应地址时将应用于每个索引值的比例因子。在一个实施例中,比例因子可以编码在SIB类型的存储器寻址操作数中。在一个实施例中,比例因子可以是一、二、四或八。所指定的比例因子可以取决于将通过指令存储的单独数据元素的尺寸。在一个实施例中,对LoadIndicesAndScatter指令的调用可以指定将通过指令分散的数据元素的尺寸。例如,尺寸参数可以指示数据元素是字节、字、双字或四字。在另一个实施例中,尺寸参数可以指示数据元素表示有符号或无符号浮点值。在另一个实施例中,对LoadIndicesAndScatter指令的调用可以指定将通过指令分散的最大数据元素数量。在一个实施例中,对LoadIndicesAndScatter指令的调用可以指定当将操作结果写入到存储器中的位置时将应用于指令的单独操作的掩码寄存器。例如,掩码寄存器可以包括每个潜在分散的数据元素的对应位,所述潜在分散的数据元素与索引阵列中包含那个数据元素的索引值的位置相对应。在此示例中,如果给定数据元素的对应位被置位,则其索引值可以被检索,其将写入到的地址可以被计算,并且给定数据元素可以从源向量寄存器中检索并且存储在存储器中在所计算的地址处。如果给定数据元素的对应位未被置位,则可以针对给定数据元素省略这些操作。在一个实施例中,如果将应用掩码,则对LoadIndicesAndScatter指令的调用可以指定将应用于所述结果的掩码的类型,如合并掩码或归零掩码。例如,如果应用合并掩码并且给定数据元素的掩码位未被置位,则可以保持存储在存储器中给定数据元素(如果其已经被分散)在执行LoadIndicesAndScatter指令之前在其他情况下会被存储到的位置中的值。在另一个示例中,如果应用归零掩码并且给定数据元素的掩码位未被置位,则空值(如所有零)可以被写入到存储器中给定数据元素(如果其已经被分散)在其他情况下会被存储到的位置。在其他实施例中,在对LoadIndicesAndScatter指令的调用中可以引用更多、更少或不同的参数。
在图21中展示的示例实施例中,在(1)处,LoadIndicesAndScatter指令及其参数(所述参数可以包括以下各项中的任何或所有:以上描述的寄存器和存储器地址操作数、比例因子、对待分散的数据元素的尺寸的指示、对待分散的最大数据元素数量的指示、标识特定掩码寄存器的参数、或指定掩码类型的参数)可以通过SIMD执行单元1912接收。例如,在一个实施例中,可以由核1812内的分配器1814向SIMD协处理器1910内的SIMD执行单元1912发出LoadIndicesAndScatter指令。在另一个实施例中,可以由主处理器1920的解码器1922向SIMD协处理器1910内的SIMD执行单元1912发出LoadIndicesAndScatter指令。LoadIndicesAndScatter指令可以由SIMD执行单元1912逻辑地执行。
在此示例中,LoadIndicesAndScatter指令的参数可以将经扩展的向量寄存器堆1914内的经扩展的向量寄存器ZMMn(2101)标识为指令的源向量寄存器。在此示例中,可以被潜在地分散到存储器的数据元素存储在向量寄存器ZMMn(2101)中用于随后分散。存储在向量寄存器ZMMn(2101)中的数据元素可以都具有同一尺寸,并且所述尺寸可以由LoadIndicesAndScatter指令的参数指定。可以通过执行指令而被潜在地分散的数据元素可以以任何随机顺序存储在向量寄存器ZMMn(2101)内。在此示例中,数据元素位置2103内数据元素可以通过指令被分散(存储)到的第一可能位置在图21中被示出为基地址位置2104。基地址位置2104的地址可以由LoadIndicesAndScatter指令的参数标识。在本示例中,如果指定的话,在SIMD执行单元1912内的掩码寄存器2102可以被标识为其内容将被用于被应用于所述指令的掩码操作的掩码寄存器。在此示例中,将在LoadIndicesAndScatter指令的分散操作中使用的索引值被存储在存储器系统1830中的索引阵列2105中。索引阵列2105包括例如在索引阵列内的第一(最低顺序)位置(位置0)中的第一索引值2106、在索引阵列内的第二位置(位置1)中的第二索引值2107等等。最后一个索引值2108存储在索引阵列2105内的最后(最高顺序位置)。
由SIMD执行单元1912执行LoadIndicesAndScatter指令可以包括:在(2)处,判定与下一个潜在分散相对应的掩码位是否为假,并且如果是,则跳过下一个潜在load-index-and-scatter。例如,如果位0为假,则SIMD执行单元可以抑制执行步骤(3)至(7)中的一些或所有以便存储可以使用第一索引值2106计算其目标目的地地址的数据元素。然而,如果与下一个潜在分散相对应的掩码位为真,则可以执行下一个潜在load-index-and-scatter。例如,如果位1为真,或者如果掩码并未应用于指令,则SIMD执行单元可以执行步骤(3)至(7)中的所有以便存储可以使用第二索引值2107和基地址位置2104的地址计算其目标目的地地址的数据元素。
对于其相应掩码位为真的潜在load-index-and-scatter,或者当并未应用任何掩码时,在(3)处,可以检索下一个索引值。例如,在第一潜在load-index-and-scatter期间,可以检索第一索引值2106,在第二潜在load-index-and-scatter期间,可以检索第二索引值2106,等等。在(4)处,可以基于检索到的索引值和基地址位置2104的地址来计算针对下一个分散的地址。例如,针对下一个分散的地址在使用或不使用缩放的情况下可以被计算为基地址与检索到的索引值之和。在(5)处,可以从经扩展的向量寄存器堆1914中的源向量寄存器ZMMn(2101)中检索将分散(存储)到存储器中在所计算的地址处的位置的数据元素。在(6)处,检索到的数据元素可以存储到使用所计算的地址访问的存储器中的位置。
在一个实施例中,执行LoadIndicesAndScatter指令可以包括重复在图21中展示的针对将通过指令分散到数据元素位置2103中的任何位置的数据元素中的每一个的操作步骤中的任何或所有。例如,步骤(2)或者步骤(2)至(6)可以针对每个潜在load-index-and-scatter而执行,取决于相应掩码位(如果应用掩码),在这之后可以引退指令。例如,如果合并掩码应用于指令,并且如果由于此数据元素的掩码位为假因此使用第一索引值2106间接访问其目标目的地地址的数据元素未被写入到存储器,则可以保持在执行LoadIndicesAndScatter指令之前包含在存储器中的相应目标目的地位置中的值。在另一个示例中,如果归零掩码应用于指令,并且如果由于此数据元素的掩码位为假因此使用第一索引值2106间接访问其目标目的地地址的数据元素未被写入到存储器,则空值(如所有零)可以写入到存储器中的目标目的地位置。在一个实施例中,待分散的每个数据元素可以存储在源向量寄存器ZMMn(2101)中与数据元素的索引值的位置相对应的位置中。例如,使用第二索引值2107间接访问其目标目的地地址的数据元素可以存储在源向量寄存器ZMMn(2101)内的第二位置(位置1)中。
在此示例中,掩码寄存器2102在图21中被展示为SIMD执行单元1912内的专用寄存器。在另一实施例中,掩码寄存器2102可以由在处理器中但在SIMD执行单元1912外部的通用或专用寄存器来实施。在又另一个实施例中,掩码寄存器2102可以由扩展向量寄存器堆1914中的向量寄存器来实施。
在一个实施例中,经扩展的SIMD指令集架构可以实施多种版本或形式的向量操作以便从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置。这些指令形式可以包括例如以下示出的这些:
LoadIndicesAndScatter{size}{kn}{z}(PTR,PTR,REG)
LoadIndicesAndScatter{size}{kn}{z}([vm32],[vm32],REG)
在以上示出的LoadIndicesAndScatter指令的示例形式中,REG参数可以标识充当指令的源向量寄存器的经扩展的向量寄存器。在这些示例中,第一PTR值或存储器地址操作数可以标识存储器中的基地址位置。第二PTR或存储器地址操作数可以标识存储器中的索引阵列。在LoadIndicesAndScatter指令的这些示例形式中,“尺寸”修饰符可以指定存储在源向量寄存器中和/或待分散到存储器中的位置的数据元素的尺寸和/或类型。在一个实施例中,所指定的尺寸/类型可以是{B/W/D/Q/PS/PD}之一。在这些示例中,可选指令参数“kn”可以标识多个掩码寄存器中的特定掩码寄存器。当掩码将应用于LoadIndicesAndScatter指令时可以指定此参数。在掩码将被应用的实施例中(例如,如果针对指令指定了掩码寄存器),可选指令参数“z”可以指示是否应当应用归零掩码。在一个实施例中,如果这个可选参数被置位,则可以应用零掩码,并且如果这个可选参数未被置位或如果这个可选参数被省略,则可以应用合并掩码。在其他实施例(未示出)中,LoadIndicesAndScatter指令可以包括指示待分散的最大数据元素数量的参数。在另一个实施例中,待分散的最大数据元素数量可以由SIMD执行单元基于存储在索引值阵列中的索引值的数量来确定。在又另一个实施例中,待分散的最大数据元素数量可以由SIMD执行单元基于源向量寄存器的容量来确定。
图22A和图22B展示了根据本公开的实施例的对Load-Indices-and-Scatter指令的对应形式的操作。更具体地,图22A展示了对未指定可选掩码寄存器的Load-Indices-and-Scatter指令的操作,并且图22B展示了对指定可选掩码寄存器的类似Load-Indices-and-Scatter指令的操作。
图22A和图22B都展示了索引阵列2105。在本示例中,存储在索引阵列2105中的索引被组织成行。在此示例中,与可以通过分散操作潜在地存储到存储器的第一数据元素S0相对应的索引值存储在索引阵列2105内的最低顺序地址中,在行2210中的地址B(2106)处示出。在此示例中,与可以通过分散操作潜在地存储到存储器的第二数据元素S1相对应的索引值存储在索引阵列2105内的第二最低顺序地址中,在行2210中的地址(2107)处示出。在此示例中,索引阵列2105的所有四行2210、2211、2212和2213各自包含相继顺序的四个索引值。在行2213中的地址2108处示出了最高顺序索引值(与数据元素S15相对应的索引值)。如图22A和图22B中所展示的,尽管存储在索引阵列2205中的索引值以相继顺序存储,但是由那些索引值间接访问其目标目的地位置的数据元素可以以任何顺序通过分散操作存储在存储器中。
图22A和图22B都展示了一组数据元素位置2103。数据元素位置2103中的任何位置可以是将数据元素存储到稀疏存储器(例如,稀疏阵列)中的一个或多个随机位置的分散操作的潜在目标。在此示例中,数据元素位置2103内的位置按行组织。例如,数据元素位置2103包括行2201至2206,所述行中的每一行包括数据元素可以被分散到的八个潜在目标位置。在此示例中,数据元素位置2103内的一些位置可以包括通过一个或多个先前指令存储到存储器的数据,所述先前指令中的一些可以包括向量指令。例如,行2201中的数据元素S4790(在基地址2104处)和S39、行2203中的数据元素S3218和S687、以及行2204中的数据元素S32和S289可能已经存储在通过一个或多个先前分散操作示出的位置中。多个行2202(在行2201与行2203之间)或行2206(超过行2204)还可以包括通过先前指令存储到这些行内的位置的数据元素。在图22A和图22B中,可能未使用其内容被指定为“U”的数据元素位置。在图22A和图22B中展示的示例中,它们也可能不受执行在附图中描绘其操作的Load-Indices-and-Scatter指令的示例形式的影响。在一个示例中,它们可以包含空值。在另一个示例中,它们可能是稀疏阵列内的未填充位置。
图22A和图22B还都展示了源向量寄存器ZMMn(2101),在所述源向量寄存器中,数据元素可以通过分散操作潜在地存储到数据元素位置2103中的各位置。在一个实施例中,存储在源向量寄存器ZMMn(2101)中的源数据元素可以以其相应索引值的顺序存储在源向量寄存器ZMMn(2101)内的连续位置中。
在图22A中展示的示例中,执行向量指令LoadIndicesAndScatterD(地址A,地址B,ZMMn)可以产生图22A的底部处示出的结果。在此示例中,在执行此指令之后,从源向量寄存器ZMMn(2101)中检索的十六个数据元素(S0至S15)通过指令被分散到数据元素位置2103内的各位置。数据元素中的每一个被存储到数据元素位置2103内的对应目标目的地位置,所述对应目标目的地位置的地址基于基地址2104和从那个数据元素的索引阵列2105中检索的对应索引值而计算。例如,存储在源向量寄存器ZMMn(2101)内的第一位置(位置0)中的数据元素S0被存储在地址2207处,所述地址基于第一索引值2106和基地址2104针对此数据元素而计算。在另一个示例中,存储在源向量寄存器ZMMn(2101)内的第二位置(位置1)中的数据元素S1被存储在地址2209处,所述地址基于第二索引值2107和基地址2104针对此数据元素而计算。类似地,存储在源向量寄存器ZMMn(2101)内的最后位置(位置15)中的数据元素S15被存储在地址2208处,所述地址基于索引值2108和基地址2104针对此数据元素而计算。附图中未示出数据元素中被分散到存储器的其他数据元素的特定位置。
图22B展示了对类似于图22A中展示的但是包括合并掩码的指令的操作。在此示例中,掩码寄存器kn(2220)包括十六位,每一位与索引阵列2105中的索引值以及源向量寄存器ZMMn(2101)中的位置相对应。在本示例中,位置5、10、11和16中的位(位4、9、10和15)为假,而其余位为真。在图22B中展示的示例中,执行向量指令LoadIndicesAndScatterD kn(地址A,地址B,ZMMn)可以产生图22B的底部处示出的结果。在此示例中,在执行此指令之后,存储在源向量寄存器ZMMn((2101)中的十六个数据元素(S0至S15)中的十二个通过指令被分散到数据元素位置2103内的各位置。数据元素中的每一个被存储到数据元素位置2103内的对应目标目的地位置,所述对应目标目的地位置的地址基于基地址2104和从那个数据元素的索引阵列2105中检索的对应索引值而计算。例如,存储在源向量寄存器ZMMn(2101)内的第一位置(位置0)中的数据元素S0被存储在地址2207处,所述地址基于第一索引值2106和基地址2104针对此数据元素而计算。在另一个示例中,存储在源向量寄存器ZMMn(2101)内的第二位置(位置1)中的数据元素S1被存储在地址2209处,所述地址基于第二索引值2107和基地址2104针对此数据元素而计算。
在此示例中,存储在ZMMn寄存器2101中与掩码位4、9、10和15相对应的位置中的四个源数据元素未通过LoadIndicesAndScatter指令被分散到存储器。在此示例中,之前存储在源数据元素S15(所述源数据元素被存储在源向量寄存器ZMMn(2101)内的最后位置(位置15)中)在其他情况下会存储到的位置中的数据通过在执行指令期间应用的合并掩码被保持。这在图22B中通过位置2208处的“D”示出,所述位置基于索引值2108和基地址2104针对潜在源数据元素S15而计算。附图中未示出数据元素中被分散到存储器的其他数据元素的特定位置。在另一个实施例中,在执行LoadIndicesAndScatter指令之后,如果图22B中展示的操作应用归零掩码而不是合并掩码,则数据元素位置2103内与数据元素(所述数据元素与掩码位4、9、10和15相关联)的目标目的地位置相对应的四个位置将包含空值,如零。
图23展示了根据本公开的实施例的用于从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的示例方法2300。方法2300可以由图1至图22中所示的元件中的任何一个来实施。方法2300可以由任何合适的标准来发起并且可以在任何合适的点来发起操作。在一个实施例中,方法2300可以在2305处发起操作。方法2300可以包括比所展示的这些步骤更多或更少的步骤。此外,方法2300可以按照与下文所展示的那些顺序不同的顺序来执行其步骤。方法2300可以在任何合适的步骤处终止。此外,方法2300可以在任何合适的步骤处重复操作。方法2300可以采用与方法2300中的其他步骤并行的方式或与其他方法的步骤并行的方式来执行其步骤中的任何一个。此外,方法2300可以被执行多次以便执行从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置。
在2305处,在一个实施例中,用于执行从索引阵列加载索引并且基于那些索引将元素分散到稀疏存储器中的一个或多个随机位置的指令可以被接收和解码。例如,可以接收和解码LoadIndicesAndScatter指令。在2310处,指令以及所述指令的一个或多个参数可以被引导至SIMD执行单元以供执行。在一些实施例中,指令参数可以包括:存储器中的索引阵列的标识符或指向其的指针、存储器中的一组潜在数据元素位置的基地址的标识符或指向其的指针、包含待分散数据元素的源寄存器(所述源寄存器可以是经扩展的向量寄存器)的标识符、对待分散数据元素的尺寸的指示、对待分散最大数据元素数量的指示、标识特定掩码寄存器的参数、或者指定掩码类型的参数。
在2315处,在一个实施例中,可以开始处理第一潜在load-index-and-scatter。例如,可以开始在2320至2355中所示的步骤中的第一次迭代,所述第一次迭代与存储器中的索引阵列中针对所述指令标识的第一位置(位置i=0)相对应。如果(在2320处)确定与索引阵列中的第一位置(位置0)相对应的掩码位未被置位,则可以针对这次迭代省略2330至2355中所示的步骤。在这种情况下,在2325处,包含在源寄存器中的位置i(位置0)中的数据元素可能不存储到存储器。在一个实施例中,可以保持存储在存储器中的位置(源寄存器中的位置i中的数据元素在执行LoadIndicesAndScatter指令之前在其他情况下会被存储到所述位置)中的任何数据。
如果(在2320处)确定与索引阵列中的第一位置相对应的掩码位被置位或者还没有为LoadIndicesAndScatter操作指定掩码,则在2330处,可以从索引阵列中的位置i(位置0)中检索待分散的第一数据元素的索引值。在2335处,可以基于针对指令指定的基地址与针对第一数据元素获得的索引值之和计算第一数据元素将被分散到的地址。在2340处,可以从针对指令标识的源寄存器的位置i(位置0)中检索第一数据元素,在这之后其可以被存储到存储器中所计算的地址处的位置。
如果(在2350处),确定存在更多待分散的潜在数据元素,则在2355处,可以开始处理下一个潜在load-index-and-scatter。例如,可以开始在2320至2355中所示的步骤中的第二次迭代,所述第二次迭代与索引阵列中的第二位置(位置i=2)相对应。可以针对具有下一个i值的每次附加迭代来重复2320至2355中所示的步骤,直到已经执行了最大迭代次数(i)。对于每次附加迭代,如果(在2320处)确定与索引阵列中的下一位置(位置i)相对应的掩码位未被置位,则可以针对这次迭代省略2330至2355中所示的步骤。在这种情况下,在2325处,包含在源寄存器中的位置i中的数据元素可以不存储到存储器。在一个实施例中,可以保持存储在存储器中的位置(源寄存器中的位置i中的数据元素在执行LoadIndicesAndScatter指令之前在其他情况下会被存储到所述位置)中的任何数据。
如果(在2320处)确定与索引阵列中的下一个位置相对应的掩码位被置位或者还没有为LoadIndicesAndScatter操作指定掩码,则在2330处,可以从索引阵列中的位置i中检索待分散的下一个数据元素的索引值。在2335处,可以基于针对指令指定的基地址与针对下一个数据元素获得的索引值之和计算下一个数据元素将被分散到的地址。在2340处,可以从针对指令标识的源寄存器的位置i中检索下一个数据元素,在这之后其可以被存储到存储器中针对下一个数据元素计算的地址处的位置。
在一个实施例中,迭代次数可以取决于指令的参数。例如,指令的参数可以指定索引阵列中的索引值的数量。这可以表示指令的最大循环索引值以及因此可以通过指令分散的最大数据元素数量。一旦已经执行了最大迭代次数(i),就可以引退指令(在2360处)。
尽管若干示例描述了分散存储在经扩展的向量寄存器(ZMM寄存器)中的数据元素的LoadIndicesAndScatter指令的形式,但是在其他实施例中,这些指令可以分散存储在具有少于512位的向量寄存器中的数据元素。例如,如果待分散的最大数据元素数量可以基于其尺寸以256位或更少位存储,则LoadIndicesAndScatter指令可以将待分散的数据元素存储在YMM源寄存器或XMM源寄存器中。在以上描述的示例中的若干示例中,待分散的数据元素相当小(例如,32位),并且存在足够少的数据元素使得它们中的所有可以存储在单一ZMM寄存器中。在其他实施例中,可能存在足够的待分散的潜在数据元素以使得(取决于数据元素的尺寸)其可以填充多个ZMM源寄存器。例如,可能存在通过指令分散的数据元素的多于512位价值。
本文中公开的机制的实施例可以以硬件、软件、固件或这些实施途径的组合来实施。本公开的实施例可以被实施为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置、以及至少一个输出装置。
可以将程序代码应用于输入指令以执行在此描述的功能并生成输出信息。所述输出信息可以以已知的方式应用于一个或多个输出装置。为了本申请的目的,处理系统可以包括具有处理器的任何系统,如例如;数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序代码可以以高级程序或面向对象的编程语言来实施,以与处理系统通信。如果需要,程序代码还可以以汇编或机器语言实施。事实上,在此描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。
可以由机器可读介质上所存储的表示性指令来实施至少一个实施例的一个或多个方面,所述指令代表处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文中所描述的技术的逻辑。这种表示(被称为“IP核”)可以被存储在有形的机器可读介质上并提供给各顾客或制造设施以加载至实际制作所述逻辑或处理器的制作机器中。
这种机器可读存储介质可以包括但不限于:由机器或装置制造或形成的制品的非暂态有形安排,包括如硬盘的存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁光盘;半导体装置,比如,只读存储器(ROM);随机存取存储器(RAM),比如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM);可擦除可编程只读存储器(EPROM);闪存;电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还可以包括包含指令或包含设计数据(比如硬件描述语言(HDL))的非暂态有形机器可读介质,所述非暂态有形机器可读介质限定本文中描述的结构、电路、设备、处理器和/或系统特征。这类实施例也可以被称为程序产品。
在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为有待由核处理的一个或多个其他指令。可以在软件、硬件、固件或其组合中实施指令转换器。指令转换器可以处于处理器上、处理器外、或者部分地处于处理器上并且部分地处于处理器外。
因此,公开了用于执行根据至少一个实施例的一条或多条指令的技术。虽然已经描述并在附图中示出了某些示例性实施例,但应当理解的是,此类实施例仅是说明性的并且不限制其他实施例,并且这类实施例不限于所示和所描述的特定构造和安排,因为在研究本公开时本领域普通技术人员将想到各种其他修改。在发展迅速且无法轻易预见进一步改进的此技术领域中,在不违背本公开的原理或所附权利要求书的范围的情况下,在技术进步的帮助下,所公开的实施例在安排和细节上可轻易更改。
本公开的一些实施例包括一种处理器。在这些实施例的至少一些实施例中,所述处理器可以包括:前端,用于接收指令;解码器,用于对所述指令进行解码;核,用于执行所述指令;以及引退单元,用于引退所述指令。为了执行所述指令,所述核可以包括:第一逻辑,用于从索引阵列中检索第一索引值,所述索引阵列位于存储器中的基于所述指令的第一参数的第一地址处,并且所述第一索引值位于所述索引阵列内的最低顺序位置处;第二逻辑,用于基于以下各项计算在所述存储器中将第一数据元素分散到的位置的地址:所述第一索引值,以及所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;第三逻辑,用于从由所述指令的第三参数标识的源向量寄存器中检索所述第一数据元素,所述第一数据元素将从所述源向量寄存器中的最低顺序位置中检索;以及第四逻辑,用于将所述第一数据元素存储到所述存储器中可使用针对将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于从所述索引阵列中检索第二索引值,所述第二索引值与所述阵列内的所述第一索引值相邻;第六逻辑,用于基于以下各项计算在所述存储器中将第二数据元素分散到的位置的地址:所述第二索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;第七逻辑,用于从所述源向量寄存器中检索所述第二数据元素,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及第八逻辑,用于将所述第二数据元素存储到所述存储器中可使用针对将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置,所述第二数据元素将被存储到所述存储器中与所述第一数据元素不相邻的位置。在以上实施例中的任何实施例中,针对将所述第一数据元素分散到的所述位置计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于针对将通过执行所述指令分散到所述存储器的每个附加数据元素从所述索引阵列内的下一个连续位置中检索对应索引值;第六逻辑,用于针对所述附加数据元素中的每一个基于以下各项计算将所述附加数据元素分散到的对应地址:所述对应索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;第七逻辑,用于从所述源向量寄存器中的下一个连续位置中检索每个附加数据元素;以及第八逻辑,用于将每个附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置,所述附加数据元素被存储到的所述位置中的至少两个将是不相邻位置。在以上实施例中的任何实施例中,待分散的最大数据元素数量可以基于所述指令的第四参数。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于确定掩码寄存器中用于附加索引值的位未被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略以下操作:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及第七逻辑,用于基于确定所述掩码中所述位未被置位来保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值。结合以上实施例中的任何实施例,所述核可以进一步包括:高速缓存;第五逻辑,用于将附加索引值从所述索引阵列预取到所述高速缓存中;第六逻辑,用于基于所述附加索引值计算所述存储器中的附加位置的地址;以及第七逻辑,用于将所述存储器中的所述附加位置的内容预取到所述高速缓存中。结合以上实施例中的任何实施例,所述核可以包括:第五逻辑,用于将所述存储器中待分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组潜在数据元素位置的所述基地址之和。结合以上实施例中的任何实施例,所述核可以包括:第五逻辑,用于在已经判定了所述位是否已经被置位之后清除所述掩码寄存器中的每一位。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于确定掩码寄存器中用于附加索引值的位被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略以下操作:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及第七逻辑,用于基于确定所述掩码中所述位未被置位来将空值存储在所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中。在上述实施例中的任何实施例中,所述核可以包括:第五逻辑,用于基于所述指令的参数来确定所述数据元素的尺寸。在上述实施例中的任何实施例中,所述核可以包括:第五逻辑,用于基于所述指令的参数来确定所述数据元素的类型。在上述实施例中的任何实施例中,所述指令的所述第一参数可以是指针。在上述实施例中的任何实施例中,所述指令的所述第二参数可以是指针。在上述实施例中的任何实施例中,所述核可以包括:单指令多数据(SIMD)协处理器,用于实施所述指令的执行。在上述实施例中的任何实施例中,所述处理器可以包括向量寄存器堆,所述向量寄存器堆包括所述目的地向量寄存器。
本公开的一些实施例包括一种方法。在这些实施例中的至少一些实施例中,所述方法可以包括在处理器中:接收第一指令;对所述第一指令进行解码;执行所述第一指令;以及引退所述第一指令。执行所述第一指令可以包括:从索引阵列中检索第一索引值,所述索引阵列位于存储器中的基于所述指令的第一参数的索引基地址处,并且所述第一索引值位于所述索引阵列内的最低顺序位置处;基于以下各项计算在所述存储器中将第一数据元素分散到的位置的地址:所述第一索引值,以及所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;以及从由所述指令的第三参数标识的源向量寄存器中检索所述第一数据元素;以及将所述第一数据元素存储到所述存储器中可使用针对将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置。结合以上实施例中的任何实施例,所述方法可以进一步包括:从所述索引阵列中检索第二索引值,所述第二索引值与所述阵列内的所述第一索引值相邻;基于以下各项计算在所述存储器中将第二数据元素分散到的位置的地址:所述第二索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;从所述源向量寄存器中检索所述第二数据元素,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及将所述第二数据元素存储到所述存储器中可使用针对将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置,所述第二数据元素被存储到所述存储器中与所述第一数据元素不相邻的位置。在以上组合中的任何组合中,针对将所述第一数据元素分散到的所述位置计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。结合以上实施例中的任何实施例,执行所述指令可以包括:针对至少两个附加数据元素,从所述索引阵列内的下一个连续位置中检索对应索引值;基于以下各项计算所述附加数据元素的对应地址:所述对应索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;从所述源向量寄存器中的下一个连续位置中检索所述附加数据元素;以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置。在以上实施例中的任何实施例中,所述附加数据元素被存储到的所述位置中的至少两个是不相邻位置,并且在执行所述指令时被分散的最大数据元素数量可以基于所述指令的第四参数。结合以上实施例中的任何实施例,所述方法可以进一步包括:确定掩码寄存器中用于附加索引值的位未被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;响应于确定所述掩码中的所述位未被置位而省略以下操作:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及响应于确定所述掩码中所述位未被置位来保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值。结合以上实施例中的任何实施例,所述方法可以进一步包括:将附加索引值从所述索引阵列预取到高速缓存中;基于所述附加索引值计算所述存储器中的附加位置的地址;以及将所述存储器中的所述附加位置的内容预取到所述高速缓存中。结合以上实施例中的任何实施例,所述方法可以包括:将从所述存储器中分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组潜在数据元素位置的所述基地址之和。结合上述实施例中的任何实施例,所述方法可以包括:在已经确定所述掩码寄存器中的每个位是否被置位之后清除所述位。结合以上实施例中的任何实施例,所述方法可以进一步包括:确定掩码寄存器中用于附加索引值的位被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;响应于确定所述掩码中的所述位未被置位而省略以下操作:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及将空值存储在所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中。在上述实施例中的任何实施例中,所述方法可以包括:基于所述指令的参数来确定所述数据元素的尺寸。在上述实施例中的任何实施例中,所述方法可以包括:基于所述指令的参数来确定所述数据元素的类型。在上述实施例中的任何实施例中,所述指令的所述第一参数可以是指针。在上述实施例中的任何实施例中,所述指令的所述第二参数可以是指针。
本公开的一些实施例包括一种系统。在这些实施例的至少一些实施例中,所述系统可以包括:前端,用于接收指令;解码器,用于对所述指令进行解码;核,用于执行所述指令;以及引退单元,用于引退所述指令。为了执行所述指令,所述核可以包括:第一逻辑,用于从索引阵列中检索第一索引值,所述索引阵列位于存储器中的基于所述指令的第一参数的第一地址处,并且所述第一索引值位于所述索引阵列内的最低顺序位置处;第二逻辑,用于基于以下各项计算在所述存储器中将第一数据元素分散到的位置的地址:所述第一索引值,以及所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;第三逻辑,用于从由所述指令的第三参数标识的源向量寄存器中检索所述第一数据元素,所述第一数据元素将从所述源向量寄存器中的最低顺序位置中检索;以及第四逻辑,用于将所述第一数据元素存储到所述存储器中可使用针对将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于从所述索引阵列中检索第二索引值,所述第二索引值与所述阵列内的所述第一索引值相邻;第六逻辑,用于基于以下各项计算在所述存储器中将第二数据元素分散到的位置的地址:所述第二索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;第七逻辑,用于从所述源向量寄存器中检索所述第二数据元素,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及第八逻辑,用于将所述第二数据元素存储到所述存储器中可使用针对将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置,所述第二数据元素将被存储到所述存储器中与所述第一数据元素不相邻的位置。在以上实施例中的任何实施例中,针对将所述第一数据元素分散到的所述位置计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于针对将通过执行所述指令分散到所述存储器的每个附加数据元素从所述索引阵列内的下一个连续位置中检索对应索引值;第六逻辑,用于针对所述附加数据元素中的每一个基于以下各项计算将所述附加数据元素分散到的对应地址:所述对应索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;第七逻辑,用于从所述源向量寄存器中的下一个连续位置中检索每个附加数据元素;以及第八逻辑,用于将每个附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置,所述附加数据元素被存储到的所述位置中的至少两个将是不相邻位置。在以上实施例中的任何实施例中,待分散的最大数据元素数量可以基于所述指令的第四参数。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于确定掩码寄存器中用于附加索引值的位未被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略以下操作:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及第七逻辑,用于基于确定所述掩码中所述位未被置位来保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值。结合以上实施例中的任何实施例,所述核可以进一步包括:高速缓存;第五逻辑,用于将附加索引值从所述索引阵列预取到所述高速缓存中;第六逻辑,用于基于所述附加索引值计算所述存储器中的附加位置的地址;以及第七逻辑,用于将所述存储器中的所述附加位置的内容预取到所述高速缓存中。结合以上实施例中的任何实施例,所述核可以包括:第五逻辑,用于将所述存储器中待分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组潜在数据元素位置的所述基地址之和。结合以上实施例中的任何实施例,所述核可以包括:第五逻辑,用于在已经判定了所述位是否已经被置位之后清除所述掩码寄存器中的每一位。结合以上实施例中的任何实施例,所述核可以进一步包括:第五逻辑,用于确定掩码寄存器中用于附加索引值的位被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略以下操作:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及第七逻辑,用于基于确定所述掩码中所述位未被置位来将空值存储在所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中。在上述实施例中的任何实施例中,所述核可以包括:第五逻辑,用于基于所述指令的参数来确定所述数据元素的尺寸。在上述实施例中的任何实施例中,所述核可以包括:第五逻辑,用于基于所述指令的参数来确定所述数据元素的类型。在上述实施例中的任何实施例中,所述指令的所述第一参数可以是指针。在上述实施例中的任何实施例中,所述指令的所述第二参数可以是指针。在上述实施例中的任何实施例中,所述核可以包括:单指令多数据(SIMD)协处理器,用于实施所述指令的执行。在上述实施例中的任何实施例中,所述处理器可以包括向量寄存器堆,所述向量寄存器堆包括所述目的地向量寄存器。
本公开的一些实施例包括一种用于执行指令的系统。在这些实施例中的至少一些实施例中,所述系统可以包括用于执行以下各项操作的装置:接收第一指令;对所述第一指令进行解码;执行所述第一指令;以及引退所述第一指令。用于执行所述第一指令的装置可以包括:用于从索引阵列中检索第一索引值的装置,所述索引阵列位于存储器中的基于所述指令的第一参数的索引基地址处,并且所述第一索引值位于所述索引阵列内的最低顺序位置处;用于基于以下各项计算在所述存储器中将第一数据元素分散到的位置的地址的装置:所述第一索引值,以及所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;以及用于从由所述指令的第三参数标识的源向量寄存器中检索所述第一数据元素的装置;以及用于将所述第一数据元素存储到所述存储器中可使用针对将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于从所述索引阵列中检索第二索引值的装置,所述第二索引值与所述阵列内的所述第一索引值相邻;用于基于以下各项计算在所述存储器中将第二数据元素分散到的位置的地址的装置:所述第二索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;用于从所述源向量寄存器中检索所述第二数据元素的装置,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及用于将所述第二数据元素存储到所述存储器中可使用针对将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置的装置,所述第二数据元素被存储到所述存储器中与所述第一数据元素不相邻的位置。在以上组合中的任何组合中,针对将所述第一数据元素分散到的所述位置计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。结合以上实施例中的任何实施例,并且对于至少两个附加数据元素,用于执行所述指令的装置可以包括:用于从所述索引阵列内的下一个连续位置中检索对应索引值的装置;用于基于以下各项计算所述附加数据元素的对应地址的装置:所述对应索引值,以及所述存储器中的所述一组潜在数据元素位置的所述基地址;用于从所述源向量寄存器中的下一个连续位置中检索所述附加数据元素的装置;以及用于将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置的装置。在以上实施例中的任何实施例中,所述附加数据元素被存储到的所述位置中的至少两个是不相邻位置,并且在执行所述指令时被分散的最大数据元素数量可以基于所述指令的第四参数。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于确定掩码寄存器中用于附加索引值的位未被置位的装置,所述掩码寄存器是基于所述指令的第四参数而被标识的;响应于确定所述掩码中的所述位未被置位而省略以下各项:检索所述附加索引值,用于基于所述附加索引值计算有待将附加数据元素分散到的位置的地址的装置,用于从所述源向量寄存器中检索所述附加数据元素的装置,以及用于将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置的装置;以及用于响应于确定所述掩码中所述位未被置位来保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于将附加索引值从所述索引阵列预取到高速缓存中的装置;用于基于所述附加索引值计算所述存储器中的附加位置的地址的装置;以及用于将所述存储器中的所述附加位置的内容预取到所述高速缓存中的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于将从所述存储器中分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组潜在数据元素位置的所述基地址之和的装置。结合上述实施例中的任何实施例,所述系统可以包括:用于在已经确定所述掩码寄存器中的每个位是否被置位之后清除所述位的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于确定掩码寄存器中用于附加索引值的位被置位的装置,所述掩码寄存器是基于所述指令的第四参数而被标识的;用于响应于确定所述掩码中的所述位未被置位而省略以下各项操作的装置:检索所述附加索引值,基于所述附加索引值计算有待将附加数据元素分散到的位置的地址,从所述源向量寄存器中检索所述附加数据元素,以及将所述附加数据元素存储到所述存储器中可使用针对将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及用于将空值存储在所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的装置。在上述实施例中的任何实施例中,所述系统可以包括:用于基于所述指令的参数来确定所述数据元素的尺寸的装置。在上述实施例中的任何实施例中,所述系统可以包括:用于基于所述指令的参数来确定所述数据元素的类型的装置。在上述实施例中的任何实施例中,所述指令的所述第一参数可以是指针。在上述实施例中的任何实施例中,所述指令的所述第二参数可以是指针。

Claims (25)

1.一种处理器,包括:
前端,用于接收指令;
解码器,用于对所述指令进行解码;
核,用于执行所述指令,所述核包括:
第一逻辑,用于从索引阵列中检索第一索引值,其中:
所述索引阵列位于存储器中基于所述指令的第一参数的第一地址处;并且
所述第一索引值位于所述索引阵列内的最低顺序位置处;
第二逻辑,用于基于以下各项计算在所述存储器中有待将第一数据元素分散到的位置的地址:
所述第一索引值;以及
所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;
第三逻辑,用于从由所述指令的第三参数标识的源向量寄存器中检索所述第一数据元素,其中,所述第一数据元素将从所述源向量寄存器中的最低顺序位置中被检索;以及
第四逻辑,用于将所述第一数据元素存储到所述存储器中可使用针对有待将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
引退单元,用于引退所述指令。
2.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
第五逻辑,用于从所述索引阵列中检索第二索引值,所述第二索引值将在所述阵列内与所述第一索引值相邻;
第六逻辑,用于基于以下各项计算在所述存储器中有待将第二数据元素分散到的位置的地址:
所述第二索引值;以及
所述存储器中的所述一组潜在数据元素位置的所述基地址;
第七逻辑,用于从所述源向量寄存器中检索所述第二数据元素,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及
第八逻辑,用于将所述第二数据元素存储到所述存储器中可使用针对有待将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置,其中,所述第二数据元素被存储到所述存储器中与所述第一数据元素不相邻的位置。
3.如权利要求1所述的处理器,其特征在于,针对有待将所述第一数据元素分散到的所述位置所计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。
4.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
第五逻辑,用于针对通过执行所述指令被分散到所述存储器的每个附加数据元素来从所述索引阵列内的下一个连续位置中检索对应索引值;
第六逻辑,用于针对所述附加数据元素中的每一个基于以下各项来计算将所述附加数据元素分散到的对应地址:
所述对应索引值;以及
所述存储器中的所述一组潜在数据元素位置的所述基地址;
第七逻辑,用于从所述源向量寄存器中的下一个连续位置中检索每个附加数据元素;以及
第八逻辑,用于将每个附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置,所述附加数据元素将被存储到的所述位置中的至少两个是不相邻的位置;
其中,待分散的最大数据元素数量基于所述指令的第四参数。
5.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
第五逻辑,用于确定掩码寄存器中用于附加索引值的位未被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;
第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略以下操作:
检索所述附加索引值;
基于所述附加索引值计算有待将附加数据元素分散到的位置的地址;
从所述源向量寄存器中检索所述附加数据元素;以及
将所述附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
第七逻辑,用于基于确定所述掩码中所述位未被置位而保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值。
6.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
高速缓存;
第五逻辑,用于将附加索引值从所述索引阵列预取到所述高速缓存中;
第六逻辑,用于基于所述附加索引值来计算所述存储器中的附加位置的地址;以及
第七逻辑,用于将所述存储器中的所述附加位置的内容预取到所述高速缓存中。
7.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
第五逻辑,用于将所述存储器中待分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组潜在数据元素位置的所述基地址之和。
8.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
第五逻辑,用于判定掩码寄存器中用于附加索引值的位是否被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;
第六逻辑,用于在已经判定了所述位是否已经被置位之后清除所述掩码寄存器中的每一位。
9.如权利要求1所述的处理器,其特征在于,所述核进一步包括:
第五逻辑,用于确定掩码寄存器中用于附加索引值的位被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;
第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略检索所述附加索引值:
基于所述附加索引值计算有待将附加数据元素分散到的位置的地址;以及
从所述源向量寄存器中检索所述附加数据元素,并且将所述附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
第七逻辑,用于基于确定所述掩码中所述位未被置位来将空值存储在所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中。
10.如权利要求1所述的处理器,其特征在于,所述处理器包括:单指令多数据(SIMD)协处理器,用于实施对所述指令的执行。
11.一种方法,所述方法包括在处理器中:
接收指令;
对所述指令进行解码;
执行所述指令,包括:
从索引阵列中检索第一索引值,其中:
所述索引阵列位于存储器中基于所述指令的第一参数的地址处;并且
所述第一索引值位于所述索引阵列内的最低顺序位置处;
基于以下各项计算在所述存储器中有待将第一数据元素分散到的位置的地址:
所述第一索引值;以及
所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;以及
从由所述指令的第三参数标识的源向量寄存器中的最低顺序位置中检索所述第一数据元素;以及
将所述第一数据元素存储到所述存储器中可使用针对有待将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
引退所述指令。
12.如权利要求11所述的方法,其特征在于,进一步包括:
从所述索引阵列中检索第二索引值,所述第二索引值在所述阵列内与所述第一索引值相邻;
基于以下各项计算在所述存储器中有待将第二数据元素分散到的位置的地址:
所述第二索引值;以及
所述存储器中的所述一组潜在数据元素位置的所述基地址;
从所述源向量寄存器中检索所述第二数据元素,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及
将所述第二数据元素存储到所述存储器中可使用针对有待将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置,所述第二数据元素被存储到所述存储器中与所述第一数据元素不相邻的位置。
13.如权利要求11所述的方法,其特征在于,针对有待将所述第一数据元素分散到的所述位置计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。
14.如权利要求11所述的方法,其特征在于:
执行所述指令包括针对至少两个附加数据元素:
从所述索引阵列内的下一个连续位置中检索对应索引值;
基于以下各项计算所述附加数据元素的对应地址:
所述对应索引值;以及
所述存储器中的所述一组潜在数据元素位置的所述基地址;
从所述源向量寄存器中的下一个连续位置中检索所述附加数据元素;以及
将所述附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置;
所述附加数据元素被存储到的所述位置中的至少两个是不相邻位置;并且
在执行所述指令时分散的最大数据元素数量基于所述指令的第四参数。
15.如权利要求11所述的方法,其特征在于,进一步包括:
确定掩码寄存器中用于附加索引值的位未被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;
响应于确定所述掩码中的所述位未被置位而省略以下操作:
检索所述附加索引值;
基于所述附加索引值计算有待将附加数据元素分散到的位置的地址;
从所述源向量寄存器中检索所述附加数据元素;以及
将所述附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
响应于确定所述掩码中所述位未被置位来保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值。
16.如权利要求11所述的方法,其特征在于,进一步包括:
将附加索引值从所述索引阵列预取到高速缓存中;
基于所述附加索引值计算所述存储器中的附加位置的地址;以及
将所述存储器中的所述附加位置的内容预取到所述高速缓存中。
17.如权利要求11所述的方法,其特征在于,进一步包括:
将待从所述存储器中被分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组数据元素位置的所述基地址之和。
18.一种系统,包括:
前端,用于接收指令;
解码器,用于对所述指令进行解码;
核,用于执行所述指令,所述核包括:
第一逻辑,用于从索引阵列中检索第一索引值,其中:
所述索引阵列位于存储器中基于所述指令的第一参数的第一地址处;并且
所述第一索引值位于所述索引阵列内的最低顺序位置处;
第二逻辑,用于基于以下各项计算在所述存储器中有待将第一数据元素分散到的位置的地址:
所述第一索引值;以及
所述存储器中的一组潜在数据元素位置的基地址,所述基地址基于所述指令的第二参数;
第三逻辑,用于从由所述指令的第三参数标识的源向量寄存器中检索所述第一数据元素,其中,所述第一数据元素将从所述源向量寄存器中的最低顺序位置中被检索;以及
第四逻辑,用于将所述第一数据元素存储到所述存储器中可使用针对有待将所述第一数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
引退单元,用于引退所述指令。
19.如权利要求18所述的系统,其特征在于,所述核进一步包括:
第五逻辑,用于从所述索引阵列中检索第二索引值,所述第二索引值将在所述阵列内与所述第一索引值相邻;
第六逻辑,用于基于以下各项计算在所述存储器中有待将第二数据元素分散到的位置的地址:
所述第二索引值;以及
所述存储器中的所述一组潜在数据元素位置的所述基地址;
第七逻辑,用于从所述源向量寄存器中检索所述第二数据元素,所述第二数据元素在所述源向量寄存器中与所述第一数据元素相邻;以及
第八逻辑,用于将所述第二数据元素存储到所述存储器中可使用针对有待将所述第二数据元素分散到的所述位置所计算的所述地址来访问的位置,其中,所述第二数据元素被存储到所述存储器中与所述第一数据元素不相邻的位置。
20.如权利要求18所述的系统,其特征在于,针对有待将所述第一数据元素分散到的所述位置所计算的所述地址与所述存储器中的所述一组潜在数据元素位置的所述基地址不同。
21.如权利要求18所述的系统,其特征在于,所述核进一步包括:
第五逻辑,用于针对通过执行所述指令被分散到所述存储器的每个附加数据元素来从所述索引阵列内的下一个连续位置中检索对应索引值;
第六逻辑,用于针对所述附加数据元素中的每一个基于以下各项来计算将所述附加数据元素分散到的对应地址:
所述对应索引值;以及
所述存储器中的所述一组潜在数据元素位置的所述基地址;
第七逻辑,用于从所述源向量寄存器中的下一个连续位置中检索每个附加数据元素;以及
第八逻辑,用于将每个附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的对应位置,所述附加数据元素将被存储到的所述位置中的至少两个是不相邻的位置;
其中,待分散的最大数据元素数量基于所述指令的第四参数。
22.如权利要求18所述的系统,其特征在于,所述核进一步包括:
第五逻辑,用于确定掩码寄存器中用于附加索引值的位未被置位,所述掩码寄存器是基于所述指令的第四参数而被标识的;
第六逻辑,用于基于确定所述掩码中的所述位未被置位而省略以下操作:
检索所述附加索引值;
基于所述附加索引值计算有待将附加数据元素分散到的位置的地址;
从所述源向量寄存器中检索所述附加数据元素;以及
将所述附加数据元素存储到所述存储器中可使用针对有待将所述附加数据元素分散到的所述位置所计算的所述地址来访问的位置;以及
第七逻辑,用于基于确定所述掩码中所述位未被置位而保持所述存储器中所述附加数据元素在其他情况下会被存储到的所述位置中的所述值。
23.如权利要求18所述的系统,其特征在于,所述核进一步包括:
高速缓存;
第五逻辑,用于将附加索引值从所述索引阵列预取到所述高速缓存中;
第六逻辑,用于基于所述附加索引值来计算所述存储器中的附加位置的地址;以及
第七逻辑,用于将所述存储器中的所述附加位置的内容预取到所述高速缓存中。
24.如权利要求18所述的系统,其特征在于,所述核进一步包括:
第五逻辑,用于将所述存储器中待分散的所述第一数据元素的所述地址计算为所述第一索引值与所述存储器中的所述一组潜在数据元素位置的所述基地址之和。
25.一种设备,包括用于执行如权利要求11至17所述的方法中任一种方法的装置。
CN201680067772.4A 2015-12-21 2016-11-18 用于加载索引和分散操作的指令和逻辑 Pending CN108292232A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/977,445 2015-12-21
US14/977,445 US20170177360A1 (en) 2015-12-21 2015-12-21 Instructions and Logic for Load-Indices-and-Scatter Operations
PCT/US2016/062705 WO2017112175A1 (en) 2015-12-21 2016-11-18 Instructions and logic for load-indices-and-scatter operations

Publications (1)

Publication Number Publication Date
CN108292232A true CN108292232A (zh) 2018-07-17

Family

ID=59065092

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680067772.4A Pending CN108292232A (zh) 2015-12-21 2016-11-18 用于加载索引和分散操作的指令和逻辑

Country Status (5)

Country Link
US (1) US20170177360A1 (zh)
EP (1) EP3394742A4 (zh)
CN (1) CN108292232A (zh)
TW (1) TWI738682B (zh)
WO (1) WO2017112175A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109062611A (zh) * 2018-02-05 2018-12-21 上海寒武纪信息科技有限公司 神经网络处理装置及其执行向量缩放指令的方法
CN113626079A (zh) * 2020-05-08 2021-11-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
CN114385538A (zh) * 2020-10-20 2022-04-22 美光科技公司 电路中的管线合并
WO2023060833A1 (zh) * 2021-10-12 2023-04-20 深圳市中兴微电子技术有限公司 数据交互方法、电子设备、存储介质
CN117312330A (zh) * 2023-11-29 2023-12-29 中国人民解放军国防科技大学 基于便签式存储的向量数据聚集方法、装置及计算机设备

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10509726B2 (en) 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US11360771B2 (en) * 2017-06-30 2022-06-14 Intel Corporation Method and apparatus for data-ready memory operations
US10521207B2 (en) * 2018-05-30 2019-12-31 International Business Machines Corporation Compiler optimization for indirect array access operations
US11126575B1 (en) * 2019-03-05 2021-09-21 Amazon Technologies, Inc. Interrupt recovery management
US11232533B2 (en) * 2019-03-15 2022-01-25 Intel Corporation Memory prefetching in multiple GPU environment
CN116360859B (zh) * 2023-03-31 2024-01-26 摩尔线程智能科技(北京)有限责任公司 电源域的访问方法、装置、设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070011442A1 (en) * 2005-07-06 2007-01-11 Via Technologies, Inc. Systems and methods of providing indexed load and store operations in a dual-mode computer processing environment
US20080092125A1 (en) * 2006-10-13 2008-04-17 Roch Georges Archambault Sparse vectorization without hardware gather / scatter
US20090172364A1 (en) * 2007-12-31 2009-07-02 Eric Sprangle Device, system, and method for gathering elements from memory
US20090300324A1 (en) * 2007-01-19 2009-12-03 Nec Corporation Array type processor and data processing system
CN102103483A (zh) * 2009-12-22 2011-06-22 英特尔公司 汇聚和散布多个数据元素
US20140181464A1 (en) * 2012-12-26 2014-06-26 Andrew T. Forsyth Coalescing adjacent gather/scatter operations
CN104303142A (zh) * 2012-06-02 2015-01-21 英特尔公司 使用索引阵列和有限状态机的分散
US20150052333A1 (en) * 2011-04-01 2015-02-19 Christopher J. Hughes Systems, Apparatuses, and Methods for Stride Pattern Gathering of Data Elements and Stride Pattern Scattering of Data Elements

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI227468B (en) * 2002-04-01 2005-02-01 Sony Corp Recording method, and storage medium driving apparatus
US8688894B2 (en) * 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
WO2013095563A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions
WO2013095616A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for selecting elements of a vector computation

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070011442A1 (en) * 2005-07-06 2007-01-11 Via Technologies, Inc. Systems and methods of providing indexed load and store operations in a dual-mode computer processing environment
US20080092125A1 (en) * 2006-10-13 2008-04-17 Roch Georges Archambault Sparse vectorization without hardware gather / scatter
US20090300324A1 (en) * 2007-01-19 2009-12-03 Nec Corporation Array type processor and data processing system
US20090172364A1 (en) * 2007-12-31 2009-07-02 Eric Sprangle Device, system, and method for gathering elements from memory
CN102103483A (zh) * 2009-12-22 2011-06-22 英特尔公司 汇聚和散布多个数据元素
US20150052333A1 (en) * 2011-04-01 2015-02-19 Christopher J. Hughes Systems, Apparatuses, and Methods for Stride Pattern Gathering of Data Elements and Stride Pattern Scattering of Data Elements
CN104303142A (zh) * 2012-06-02 2015-01-21 英特尔公司 使用索引阵列和有限状态机的分散
US20140181464A1 (en) * 2012-12-26 2014-06-26 Andrew T. Forsyth Coalescing adjacent gather/scatter operations

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109062611A (zh) * 2018-02-05 2018-12-21 上海寒武纪信息科技有限公司 神经网络处理装置及其执行向量缩放指令的方法
CN109062611B (zh) * 2018-02-05 2023-05-23 上海寒武纪信息科技有限公司 神经网络处理装置及其执行向量缩放指令的方法
CN113626079A (zh) * 2020-05-08 2021-11-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
WO2021223642A1 (zh) * 2020-05-08 2021-11-11 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
CN114385538A (zh) * 2020-10-20 2022-04-22 美光科技公司 电路中的管线合并
CN114385538B (zh) * 2020-10-20 2023-02-28 美光科技公司 电路中的管线合并
US11714655B2 (en) 2020-10-20 2023-08-01 Micron Technology, Inc. Pipeline merging in a circuit
WO2023060833A1 (zh) * 2021-10-12 2023-04-20 深圳市中兴微电子技术有限公司 数据交互方法、电子设备、存储介质
CN117312330A (zh) * 2023-11-29 2023-12-29 中国人民解放军国防科技大学 基于便签式存储的向量数据聚集方法、装置及计算机设备
CN117312330B (zh) * 2023-11-29 2024-02-09 中国人民解放军国防科技大学 基于便签式存储的向量数据聚集方法、装置及计算机设备

Also Published As

Publication number Publication date
TW201732550A (zh) 2017-09-16
WO2017112175A1 (en) 2017-06-29
US20170177360A1 (en) 2017-06-22
EP3394742A1 (en) 2018-10-31
EP3394742A4 (en) 2019-12-11
TWI738682B (zh) 2021-09-11

Similar Documents

Publication Publication Date Title
CN108292215A (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369516A (zh) 用于加载-索引和预取-分散操作的指令和逻辑
CN108292232A (zh) 用于加载索引和分散操作的指令和逻辑
CN108369509A (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN108351779A (zh) 用于安全指令执行流水线的指令和逻辑
TWI731892B (zh) 用於以通道為基礎的跨步儲存操作之指令及邏輯
TWI733710B (zh) 用於重複發生相鄰聚集的處理器、方法和單元
CN108369513A (zh) 用于加载-索引-和-收集操作的指令和逻辑
CN108139905A (zh) 用于从持久存储器预取信息的指令和逻辑
CN108351863A (zh) 用于可编程结构层级结构和高速缓存的指令和逻辑
CN107209722A (zh) 用于在安全飞地页面高速缓存中使安全飞地的进程分叉和建立子飞地的指令和逻辑
CN105745630B (zh) 用于在集群宽执行机器中的存储器访问的指令和逻辑
CN108351835A (zh) 用于高速缓存控制操作的指令和逻辑
CN107003921A (zh) 具有有限状态机控制的可重配置测试访问端口
CN109791513A (zh) 用于检测数值累加误差的指令和逻辑
CN108351784A (zh) 用于在乱序处理器中进行有序处理的指令和逻辑
TWI720056B (zh) 用於設置多重向量元素操作之指令及邏輯
CN108369571A (zh) 用于偶数和奇数向量get操作的指令和逻辑
TW201723817A (zh) 用於取得多重向量元素操作之指令及邏輯
CN108369518A (zh) 用于位字段寻址和插入的指令和逻辑
CN108351785A (zh) 用于部分减少操作的指令和逻辑
CN108431770A (zh) 用于加速集合运算的硬件内容关联数据结构
CN109791493A (zh) 用于乱序集群化解码中的负载平衡的系统和方法
CN108292294A (zh) 用于混合和置换操作序列的指令和逻辑
CN107077421A (zh) 用于页表游走改变位的指令和逻辑

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20180717

RJ01 Rejection of invention patent application after publication