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

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

Info

Publication number
CN108369516B
CN108369516B CN201680070838.5A CN201680070838A CN108369516B CN 108369516 B CN108369516 B CN 108369516B CN 201680070838 A CN201680070838 A CN 201680070838A CN 108369516 B CN108369516 B CN 108369516B
Authority
CN
China
Prior art keywords
instruction
index value
memory
location
address
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.)
Active
Application number
CN201680070838.5A
Other languages
English (en)
Other versions
CN108369516A (zh
Inventor
I·M·戈克豪尔
E·乌尔德-阿迈德-瓦尔
C·R·扬特
A·C·瓦利斯
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 CN108369516A publication Critical patent/CN108369516A/zh
Application granted granted Critical
Publication of CN108369516B publication Critical patent/CN108369516B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions
    • 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/35Indirect addressing

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是框图,展示了根据本公开的实施例的示例扩展向量寄存器堆;
图21A是根据本公开的实施例的操作的图示,所述操作用于执行从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散;
图21B是根据本公开的实施例的操作的图示,所述操作用于执行从索引阵列中加载索引、基于这些索引将元素分散到稀疏存储器中的各个位置、以及从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散;
图22A展示了根据本公开的实施例的示例LoadIndicesandPrefetchScatter(加载索引及预取分散)指令的操作;
图22B展示了根据本公开的实施例的示例LoadIndicesScatterandPrefetch(加载索引分散及预取)指令的操作;
图23展示了根据本公开的实施例的示例方法,所述方法用于从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散;
图24展示了根据本公开的实施例的示例方法,所述方法用于从索引阵列中加载索引、基于这些索引将元素分散到稀疏存储器中的各个位置、以及从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散。
具体实施方式
以下说明描述了指令和处理逻辑,用于在处理设备上执行从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散。这种处理设备可以包括乱序处理器。在以下具体实施方式中,阐述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等许多具体细节以便提供对本公开的实施例的更全面理解。然而,本领域技术人员应理解的是,可以在没有这些具体细节的情况下实践实施例。另外,未详细示出一些熟知的结构、电路等,从而避免不必要地模糊本公开的实施例。
虽然下面的实施例是参照处理器进行描述的,但是其他实施例适用于其他类型的集成电路和逻辑装置。本公开的实施例的类似技术和教导可以应用于可以从更高的流水线吞吐量和改进的性能受益的其他类型的电路或半导体装置。本公开的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可以应用于在其中可以执行数据的操纵或管理的任何处理器和机器。另外,以下描述提供了示例,并且附图示出了用于说明目的的各种示例。然而,这些示例不应在限制性意义上予以解释,因为它们仅旨在提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能的实施方式的详尽列表。
虽然以下示例描述了在执行单元和逻辑电路的上下文中的指令处理和分配,但是本公开的其他实施例可以通过存储在机器可读有形介质上的数据或指令来实现,所述数据或指令当由机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,在机器可执行指令中将与本公开的实施例相关联的功能具体化。指令可以用于使可利用这些指令编程的通用或专用处理器执行本公开中的步骤。本公开的实施例可以作为可包括机器或计算机可读介质的计算机程序产品或软件而提供,所述机器或计算机可读介质具有存储于其上的指令,所述指令可以用于对计算机(或其他电子装置)进行编程以便执行根据本公开的实施例的一个或多个操作。此外,本公开的实施例的步骤可以由包含用于执行所述步骤的固定功能逻辑的特定硬件组件或者由经编程的计算机组件与固定功能硬件组件的任何组合来执行。
用于对逻辑进行编程以执行本公开的实施例的指令可以存储在系统中的存储器内,例如,DRAM、高速缓存、闪存或其他存储设备。此外,指令可以经由网络或借助于其他计算机可读介质来分配。因此,机器可读介质可以包括用于存储或传输由机器(例如,计算机)可读的形式的信息的任何机制,但是不限于软磁盘、光盘、只读光盘存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于经由电、光、声音、或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息的有形机器可读存储设备。因此,计算机可读介质可以包括适用于存储或传输机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
设计可以贯穿各个不同的阶段,从产生到仿真到制造。表示设计的数据可用若干方式来表示所述设计。首先,如可以在模拟中有用的,可使用硬件描述语言或其他功能描述语言来表示硬件。另外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,设计在一些阶段处可以达到代表在硬件模型中的不同装置的物理布局的数据水平。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指示由用于产生集成电路的掩模的不同掩模层上的各种特征的存在或不存在的数据。在任何设计表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁存储设备或光存储设备(如,盘)可以是用于存储信息的机器可读介质,所述信息是经由光波或电波来传输的,所述光波或电波被调制或以其他方式被生成以传输这类信息。当传输指示或携带代码或设计的电载波时,在执行电信号的复制、缓冲或重传情况的程度上,可以制作一个新的副本。因此,通信提供者或网络提供者可以在有形机器可读介质上至少暂时地存储诸如编码到载波中的信息等制品,从而将本公开的实施例的技术具体化。
在现代处理器中,多个不同的执行单元可以用于处理和执行各种代码和指令。一些指令可能更快地完成,而其他指令则可能花费多个时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因此,尽可能快地执行尽可能多的指令将是有利的。然而,可能存在具有更大的复杂性并且需要更多的执行时间和处理器资源的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
随着更多的计算机系统被用于互联网、文本以及多媒体应用,已经随时间推移引入了附加处理器支持。在一个实施例中,指令集可以与一个或多个计算机架构相关联,包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可以由一个或多个微架构来实施,所述一个或多个微架构可以包括用于实施一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的处理器可共享公共指令集的至少一部分。例如,
Figure BDA0001682548980000061
Pentium 4处理器、/>
Figure BDA0001682548980000062
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指令的指令集的
Figure BDA0001682548980000071
CoreTM处理器所采用的技术)、ARM处理器(如具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM />
Figure BDA0001682548980000072
处理器族)、以及MIPS处理器(如由中国科学院计算技术研究所(ICT)开发的龙芯族处理器)已经实现了应用性能的显著提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉的英特尔公司的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是用于表示相应的数据或操作的源和目的地的通用术语。在一些实施例中,目的地和源寄存器/数据可以通过寄存器、存储器或具有与所描绘的名称或功能不同的名称或功能的其他存储区域来实施。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一源存储寄存器和第二源存储寄存器或其他存储区域等。在其他实施例中,SRC和DEST存储区域中的两个或更多个可以与同一存储区域内的不同数据存储元件(例如,SIMD寄存器)相对应。在一个实施例中,所述源寄存器中的一个源寄存器还可以用作目的地寄存器,通过例如将对第一源数据和第二源数据执行的操作的结果写回到这两个源寄存器中的一个源寄存器中,从而用作目的地寄存器。
图1A是根据本公开的实施例的形成有可以包括用于执行指令的执行单元的处理器的示例性计算机系统的框图。根据本公开,如在本文所描述的实施例中,系统100包括如处理器102之类的组件,所述处理器用于采用包括逻辑的执行单元以执行算法来对数据进行处理。系统100可以代表基于可从加利福尼亚州圣克拉拉市的英特尔公司获得的
Figure BDA0001682548980000081
III、/>
Figure BDA0001682548980000082
4、XeonTM、/>
Figure BDA0001682548980000083
XScaleTM和/或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、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一实施例中,浮点执行块222、224可以执行浮点、MMX、SIMD和SSE、或其他运算。在又另一实施例中,浮点ALU 222可以包括用于执行除法、平方根和剩余微op的64位乘64位浮点除法器。在各个实施例中,涉及浮点值的指令可以用浮点硬件来处理。在一个实施例中,ALU运算可以被传递至高速ALU执行单元216、218。高速ALU 216、218可以以半个时钟周期的有效等待时间执行快速运算。在一个实施例中,大多数复杂整数运算前往慢速ALU 220,因为慢速ALU 220可以包括用于长等待时间类型的运算的整数执行硬件,诸如乘法、移位、标志逻辑、以及分支处理。存储器加载/存储运算可以由AGU 212、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。TLB 436可以耦合至指令取出单元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)。
应当理解,核可以以各种方式来支持多线程化(执行两个或更多个并行操作或线程集)。多线程化支持可以通过例如包括时分多线程化、同步多线程化(其中,单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)或其组合来执行。这种组合可以包括例如诸如
Figure BDA0001682548980000221
超线程化技术中的时分取出并解码以及此后的同步多线程化。
尽管可以在乱序执行的上下文中描述寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。虽然处理器的所示实施例还可以包括单独的指令和数据高速缓存单元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之间的交互。GMCH 620还可以用作处理器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的图示,所述向量操作用于在处理设备上从索引阵列中加载索引并且基于这些索引从存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散。在一个实施例中,单个向量操作可以从索引阵列加载索引,基于这些索引将一个或多个元素分散至存储器中的各个位置,并且基于这些索引从存储器中的其他位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散。
一般而言,分散操作可以对根据由指令指定(或编码在所述指令中的)基址寄存器、索引寄存器和/或缩放因子(scaling factor)的内容所计算的地址执行一系列存储器写访问。例如,密码学、简图遍历、分类或稀疏矩阵应用可以包括用于加载具有索引值序列的索引寄存器的一条或多条指令以及用于执行将数据元素分散至使用这些索引值间接寻址的位置的一条或多条其他指令。分散操作可以以无规律的方式遍历存储器,从而将数据元素分散至地址不连续并且不必遵循一致性模式的那些位置。例如,重复指令序列可以向位置0写入数据元素,然后向位置1000写入数据元素,然后向位置723写入数据元素,并且然后向位置50000写入数据元素。在这种类型的应用中,以下存储器位置到其被指令序列访问时(如果其被访问的话)可能在高速缓存中不再被保持具有所有权:所述存储器位置的内容由传统硬件预取器预取以便取得这些位置的所有权。
在本公开的实施例中,本文中所描述的Load-Indices-and-Prefetch-Scatters(加载-索引和预取-分散)类型的指令可以加载后续操作所需的索引并且针对后续分散操作预取数据元素。对于有待从存储器中的某一位置预取的每个数据元素,这可以包括:从存储器中的索引阵列中其基址是针对所述指令指定的特定位置中检索索引值;计算存储器中有待从中预取数据元素的地址;预取所计算地址处的位置的内容;以及将所预取内容写入至在所述指令中使用高速缓存提示标识的高速缓存。所述预取可以使用读取所有权访问(read-for-ownership access)来执行。可以基于针对所述指令指定的基址以及从索引阵列中所检索的索引值来计算有待预取的数据元素的地址。一些Load-Indices-and-Prefetch-Scatter类型的指令还可以针对当前分散操作从针对所述指令标识的源向量寄存器中检索数据元素并且将所述数据元素存储至存储器中基于从索引阵列检索的不同索引值的位置。例如,LoadIndicesScatterAndPrefetch指令可以——除了针对后续分散操作预取数据元素之外——基于在索引阵列中顺序地存储的索引值针对当前分散操作加载索引、检索有待从源向量寄存器分散的数据元素、并且将数据元素存储至存储器中使用这些索引值间接寻址的位置。可以由索引阵列中距对用于当前分散操作的数据元素进行间接寻址的索引元素一段固定距离的索引值来间接地访问针对后续分散操作预取的数据元素。在本公开的实施例中,各种形式的Load-Indices-and-Prefetch-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可以包括一条或多条“LoadIndicesAndPrefetchScatter”类型的指令,所述指令用于针对可能在后续分散操作期间潜在地被分散的每个数据元素来加载有待在计算在存储器中所述数据元素将被分散的地址时所使用的索引值并且使用读取所有权访问将在所计算地址处的内容预取到高速缓存中。可以在使用或不使用缩放的情况下基于针对所述指令指定的基址与从针对所述指令标识的索引阵列中检索的索引值之和来计算所述地址。
在一个实施例中,指令流1802可以包括一个或多个“LoadIndicesScatterAndPrefetch”类型的指令,所述指令用于针对有待分散的每个数据元素来加载有待在计算在存储器中所述数据元素将被分散的地址时所使用的索引值、从针对所述指令标识的源向量寄存器中检索数据元素、并且将数据元素存储在存储器中的所计算地址处。可以在使用或不使用缩放的情况下基于针对所述指令指定的基址与从针对所述指令标识的索引阵列中检索的索引值之和来计算所述地址。有待由所述指令分散的数据元素可以存储在源向量寄存器中的连续位置中。在一个实施例中,每个“LoadIndicesScatterAndPrefetch”类型的指令还可以用于针对可能在后续分散操作期间潜在地被分散的每个数据元素来加载有待在计算在存储器中所述数据元素有待预取的地址时所使用的索引值并且使用读取所有权访问将在所计算地址处的内容预取到高速缓存中。可以在使用或不使用缩放的情况下基于针对所述指令指定的基址与针对有待预取的数据元素检索的索引值之和来计算所述地址。注意,指令流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可以包括用于执行向量操作的电路系统,所述向量操作用于从索引阵列中加载索引、基于这些索引将元素分散至存储器中的各个位置、并且从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散。例如,执行单元1816可以包括用于实施一种或多种形式的向量LoadIndicesAndPrefetchScatter类型指令的电路系统。在另一示例中,执行单元1816可以包括用于实施一种或多种形式的向量LoadIndicesScatterAndPrefetch类型指令的电路系统。以下将更详细地描述这些指令的示例实施方式。
在本公开的实施例中,处理器1804的指令集架构可以实施被限定为
Figure BDA0001682548980000431
高级向量扩展512(/>
Figure BDA0001682548980000432
AVX-512)指令的一个或多个扩展向量指令。处理器1804可以隐式地或通过特定指令的解码和执行来识别这些扩展向量操作之一将被执行。在这种情况下,扩展向量操作可以被引导至执行单元1816的特定执行单元以供执行指令。在一个实施例中,指令集架构可以包括针对512位SIMD操作的支持。例如,由执行单元1816实施的指令集架构可以包括32个向量寄存器,其中每一个都是512位宽,并且支持高达512位宽的向量。由执行单元1816实施的指令集架构可以包括用于对目的地操作数进行条件执行和高效合并的八个专用掩码寄存器。至少一些扩展向量指令可以包括针对广播的支持。至少一些扩展向量指令可以包括针对嵌入式掩码的支持以实现预测。
至少一些扩展向量指令可以同时对存储在向量寄存器中的向量的每个元素应用相同的操作。其他扩展向量指令可以对多个源向量寄存器中的相应元素应用相同的操作。例如,可以由扩展向量指令对存储在向量寄存器中的紧缩数据项的各个数据元素中的每一个应用相同的操作。在另一示例中,扩展向量指令可以指定单个向量操作,所述单个向量操作有待对两个源向量操作数的对应数据元素执行以便生成目的地向量操作数。
在本公开的实施例中,至少一些扩展向量指令可以由处理器核内的SIMD协处理器来执行。例如,核1812内的执行单元1816中的一个或多个可以实施SIMD协处理器的功能。SIMD协处理器可以完全或部分地由图1至图17中所描述的元件来实施。在一个实施例中,指令流1802内的由处理器1804接收的扩展向量指令可以被引导至实施SIMD协处理器的功能的执行单元1816。
如在图18中所展示的,在一个实施例中,LoadIndicesAndPrefetchScatter指令可以包括指示有待预取的数据元素的大小和/或类型的{大小}参数。在一个实施例中,所有有待预取的数据元素可以具有相同的大小和类型。
在一个实施例中,LoadIndicesAndPrefetchScatter指令可以包括两个存储器地址参数,其中一个标识存储器中的一组数据元素位置的基址,并且其中另一个标识存储器中的索引阵列。在一个实施例中,这些存储器地址参数之一或两者可以编码在比例索引基址(SIB)类型的存储器寻址操作数中。在另一实施例中,这些存储器地址参数之一或两者可以是指针。
在一个实施例中,LoadIndicesAndPrefetchScatter指令可以包括高速缓存提示,所述高速缓存提示标识数据元素将被预取到的高速缓存层级结构中的层级。
在一个实施例中,如果将应用掩码,则LoadIndicesAndPrefetchScatter类型的指令可以包括标识特定掩码寄存器的{kn}参数。
图18中所示的LoadIndicesAndPrefetchScatter指令的参数中的一个或多个可以是所述指令所固有的。例如,在不同实施例中,这些参数中的任意组合可以编码在指令的操作码格式的某个位或字段中。在其他实施例中,图18中所示的LoadIndicesAndPrefetchScatter类型的指令的参数中的一个或多个对于指令而言可以是可选的。例如,在不同实施例中,这些参数的任意组合可以在指令被调用时指定。
如在图18中所展示的,在一个实施例中,LoadIndicesScatterAndPrefetch指令可以包括指示有待由所述指令分散和预取的数据元素的大小和/或类型的{大小}参数。在一个实施例中,所有有待分散和预取的数据元素可以具有相同的大小和类型。
在一个实施例中,LoadIndicesScatterAndPrefetch指令可以包括标识有待分散的数据元素被存储在的源向量寄存器的REG参数。
在一个实施例中,LoadIndicesScatterAndPrefetch指令可以包括两个存储器地址参数,其中一个标识存储器中的一组数据元素位置的基址,并且其中另一个标识存储器中的索引阵列。在一个实施例中,这些存储器地址参数之一或两者可以编码在比例索引基址(SIB)类型的存储器寻址操作数中。在另一实施例中,这些存储器地址参数之一或两者可以是指针。
在一个实施例中,LoadIndicesScatterAndPrefetch指令可以包括高速缓存提示,所述高速缓存提示标识数据元素将被预取到的高速缓存层级结构中的层级。
在一个实施例中,LoadIndicesScatterAndPrefetch指令可以包括即时参数,所述即时参数的值表示索引阵列中存储有待由所述指令分散的数据元素的索引值的位置与存储有待由指令预取的数据元素的索引值的位置之间的距离。
在一个实施例中,如果将应用掩码,则LoadIndicesScatterAndPrefetch类型的指令可以包括标识特定掩码寄存器的{kn}参数。如果将应用掩码,则LoadIndicesScatterAndPrefetch类型的指令可以包括指定掩码类型的{z}参数。在一个实施例中,如果针对所述指令包括了{z}参数,则这可以指示在将数据元素存储到存储器时将应用零掩码。如果针对所述指令不包括{z}参数,则这可以指示在将数据元素存储到存储器时将应用合并掩码。以下更加详细地描述了使用零掩码和合并掩码的示例
图18中所示的LoadIndicesScatterAndPrefetch类型的指令的参数中的一个或多个可以是指令所固有的。例如,在不同实施例中,这些参数中的任意组合可以编码在指令的操作码格式的某个位或字段中。在其他实施例中,图18中所示的LoadIndicesScatterAndPrefetch类型的指令的参数中的一个或多个对于指令而言可以是可选的。例如,在不同实施例中,这些参数的任意组合可以在指令被调用时指定。
图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。在另一实施例中,在
Figure BDA0001682548980000471
AVX-512指令集架构的开发之前实施的传统SIMD指令可以在扩展向量寄存器堆1914的YMM寄存器或XMM寄存器的子集上进行操作。例如,在一些实施例中,由一些传统SIMD指令进行的访问可能限于寄存器YMM0至YMM15或限于寄存器XMM0至XMM7。
在本公开的实施例中,指令集架构可以支持访问高达四个指令操作数的扩展向量指令。例如,在至少一些实施例中,扩展向量指令可以将图20中所示的32个扩展向量寄存器ZMM0至ZMM31中的任何一个作为源操作数或目的地操作数来访问。在一些实施例中,扩展向量指令可以访问八个专用掩码寄存器中的任何一个。在一些实施例中,扩展向量指令可以访问十六个通用寄存器中的任何一个作为源操作数或目的地操作数。
在本公开的实施例中,对扩展向量指令的编码可以包括指定有待执行的特定向量操作的操作码。对扩展向量指令的编码可以包括标识八个专用掩码寄存器k0至k7中的任何一个的编码。当所标识掩码寄存器的每个位被应用于对应的源向量元素或目的地向量元素时,其可以管控向量操作的行为。例如,在一个实施例中,这些掩码寄存器中的七个(k1至k7)可以用于有条件地管控扩展向量指令的每数据元素计算操作。在本示例中,如果相应的掩码位未被置位,则针对给定向量元素不执行所述操作。在另一实施例中,掩码寄存器(k1至k7)可以用于有条件地管控对扩展向量指令的目的地操作数的每个元素的更新。在本示例中,如果相应的掩码位未被置位,则不会使用所述操作的结果更新给定目的地元素。
在一个实施例中,对扩展向量指令的编码可以包括指定有待应用于扩展向量指令的目的地(结果)向量的掩码类型的编码。例如,这种编码可以指定是否将合并掩码或零掩码应用于向量操作的执行。如果这种编码指定合并掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以保持在目的地向量中。如果这种编码指定零掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以用目的地向量中的零值来替代。在一个示例实施例中,掩码寄存器k0不被用作向量操作的预测操作数。在本示例中,否则将选择掩码k0的编码值可以替代地选择全为一的隐式掩码值,从而有效地禁用掩码。在本示例中,掩码寄存器k0可以用于将一个或多个掩码寄存器作为源操作数或目的地操作数的任何指令。
在一个实施例中,对扩展向量指令的编码可以包括指定被紧缩到源向量寄存器中或有待紧缩到目的地向量寄存器中的数据元素的大小的编码。例如,所述编码可以指定每个数据元素是字节、字、双字或四字等。在另一实施例中,对扩展向量指令的编码可以包括指定被紧缩到源向量寄存器中或有待紧缩到目的地向量寄存器中的数据元素的数据类型的编码。例如,所述编码可以指定数据表示单精度整数或双精度整数,或者多个所支持的浮点数据类型中的任何一种。
在一个实施例中,对扩展向量指令的编码可以包括指定用来访问源操作数或目的地操作数的存储器地址或存储器寻址模式的编码。在另一实施例中,对扩展向量指令的编码可以包括指定作为指令的操作数的标量整数或标量浮点数的编码。虽然本文中描述了具体的扩展向量指令及其编码,但这些仅仅是可以在本公开的实施例中实施的扩展向量指令的示例。在其他实施例中,可以在指令集架构中实施更多、更少或不同的扩展向量指令并且其编码可以包括更多、更少或不同的信息以控制其执行。
在一个实施例中,当与用于执行分散的其他指令序列相比时,使用LoadIndicesAndPrefetchScatter指令或LoadIndicesScatterAndPrefetch可以提高通过存储在阵列中的索引使用对存储器的间接写访问的密码学、简图遍历、分类、和稀疏矩阵应用(以及其他)的性能。
在一个实施例中,代替指定从其中加载索引向量的一组地址,这些地址可以替代地作为索引阵列被提供至LoadIndicesAndPrefetchScatter指令,所述指令将既加载阵列的每个元素然后又将其用作用于预取操作的索引。有待在预取操作中使用的索引向量可以存储在存储器中的连续位置中。例如,在一个实施例中,在阵列中的第一位置开始,可以存在包含第一索引值的四个字节,然后是包含第二索引值的四个字节,以此类推。在一个实施例中,(存储器中)索引阵列内预取应当开始的起始地址可以被提供至LoadIndicesAndPrefetchScatter指令,并且对有待预取的数据元素间接寻址的索引值可以从所述地址开始连续地存储在存储器中。在一个实施例中,LoadIndicesAndPrefetchScatter指令可以加载从所述位置开始的64个字节并使用其(一次四个)来执行预取。
如以下更详细描述的,在一个实施例中,LoadIndicesAndPrefetchScatter指令的语义可以如下:
LoadIndicesAndPrefetchScatterD kn(Addr A,Addr B,hint)(加载索引及预取分散D kn(地址A,地址B,提示))
在本示例中,所述操作用于将32位双字元素预取到由提示标识的高速缓存中,开始从存储器中的索引阵列中检索索引值的地址为Addr B(地址B),存储器中的一组数据元素位置的起始地址(基址)为Addr A(地址A),并且针对所述指令指定的掩码为掩码寄存器kn。这条指令的操作可以通过以下示例伪代码来展示。在本示例中,VLEN(或向量长度)可以表示索引向量的长度,也就是,存储在索引阵列中用于预取操作的索引值数量。
Figure BDA0001682548980000491
Figure BDA0001682548980000501
在本示例中,对于每次迭代,索引值从索引阵列中的位置i处被检索并被加载到索引寄存器中,并且使用此索引值在存储器中所间接寻址的位置的内容被预取到由提示指定的高速缓存中。例如,提示可以指示数据元素将被预取到一级(L1)高速缓存中或到二级(L2)高速缓存中。在一些实施例中,数据元素可以使用读取所有权来预取。例如,将所预取数据元素引导至高速缓存的写请求可以包括请求独占所有权。
在本公开的实施例中,LoadIndicesAndPrefetchScatter指令可以用于在调用针对将存储器中的特定位置的内容的分散操作之前预取这些数据元素到指定高速缓存中,从而取得存储器中的所述位置的所有权,希望在分散操作被调用时独占所有权将仍然被保持。例如,执行分散的重复向量指令序列可以在每次迭代中包括用于将数据元素从源向量寄存器分散(存储)到存储器中基于索引阵列的一部分中的连续位置中的索引值计算的那些位置处的一条向量指令、以及用于预取地址是基于距在计算所分散数据元素的地址时所使用的索引值固定距离d的索引值计算的那些数据元素的另一条指令。一个这种序列可以由以下示例伪代码来展示。
Figure BDA0001682548980000502
在上文所示的指令序列中,预取指令可以由LoadIndicesAndPrefetchScatter操作来实施,如在以下示例伪代码中所示的。在本示例中,未针对所述指令指定掩码。
Figure BDA0001682548980000511
在一个实施例中,LoadIndicesAndPrefetchScatter指令可以支持多个可能的VLEN值,诸如8、16、32或64。在一个实施例中,LoadIndicesAndPrefetchScatter指令可以支持索引阵列B[i]中的多个可能的元素大小,诸如32位或64位值,其中每一个可以表示一个或多个索引值。在一个实施例中,LoadIndicesAndPrefetchScatter指令可以支持存储器位置A[i]中的多个可能的数据元素类型和大小,包括单精度浮点或双精度浮点、64位整数等。在一个实施例中,这条指令可以有条件地将存储器中一个或多个位置的内容预取到所标识高速缓存中,直到达到所述指令的最大预取位置数量。例如,如果针对所述指令指定了掩码(如果针对所述指令标识了掩码寄存器),则存储器中潜在的分散目标位置的内容仅可以在相应的掩码位被置位时被预取。从其中预取所述内容的最大位置数量可以取决于一个或多个指令参数,诸如有待预取的数据元素的大小或类型、或索引向量的长度。
在一个实施例中,针对存储器中的特定位置的预取可以使多个相邻位置中的数据连同目标位置的内容一起被预取和高速缓存。例如,取决于所述预取的目标的大小和位置以及高速缓存行的长度,可以一次将4、8、16或32个数据元素预取到所标识高速缓存中。在各个实施例中,由指令限定的预取可以以任何顺序发生,或者根本不发生。例如,指令可能被视为到处理器的提示,并且可能无法保证完成。在一个实施例中,如果在存储器与目标高速缓存之间存在高带宽利用率,则处理器硬件可以确定指令根本不应该被执行。在另一实施例中,由于任何数量种原因,处理器可以在指令完成之前(例如,在预取存储器中的目标位置的一些但非全部内容之前)终止所述指令的执行。
在一个实施例中,索引阵列可以被提供至LoadIndicesScatterAndPrefetch指令,所述指令将加载阵列的每个元素(索引值)、将所述值用作分散操作的索引、并且还提前进行预取以用于后续的分散操作。在一个实施例中,有待在分散操作中使用的索引向量可以存储在存储器中的连续位置中。例如,在一个实施例中,在阵列中的第一位置开始,可以存在包含第一索引值的四个字节,然后是包含第二索引值的四个字节,以此类推。在一个实施例中,有待在预取操作中使用的索引向量可以存储在存储器中距用于分散操作的索引向量被存储的位置一段固定距离的连续位置中。例如,(存储器中)索引阵列内预取应当开始的起始地址可以被提供至LoadIndicesScatterAndPrefetch指令,并且对有待预取的数据元素间接寻址的索引值可以从所述地址开始连续地存储在存储器中。在一个实施例中,LoadIndicesScatterAndPrefetch指令可以加载从所述位置开始的64个字节并使用这些字节(一次四个)来执行预取。
如以下更详细描述的,在一个实施例中,LoadIndicesScatterAndPrefetch指令的语义可以如下:
LoadIndicesScatterAndPrefetchD kn(Addr A,Addr B,ZMMn,prefetch_distance,hint)(加载索引分散及预取D kn(地址A,地址B,ZMMn,预取_距离,提示))
在本示例中,所述操作用于将存储在被标识为ZMMn的源向量寄存器中的32位双字元素分散到存储器中的各个位置并且将32位双字元素预取到由提示标识的高速缓存中。在本示例中,开始从存储器中的索引阵列中检索索引值的地址为Addr B(地址B),存储器中的一组数据元素位置的起始地址(基址)为Addr A(地址A),用于分散的索引值与用于预取的索引值之间的距离由整数“prefetch_distance(预取_距离)”来指定,并且针对所述指令指定的掩码为掩码寄存器kn。这条指令的操作可以通过以下示例伪代码来展示。在本示例中,VLEN(或向量长度)可以表示索引向量的长度,也就是,存储在索引阵列中用于所述操作的索引值数量。
Figure BDA0001682548980000521
Figure BDA0001682548980000531
在本示例中,对于每次迭代,索引值从索引阵列中的位置i处被检索并被加载到索引寄存器中,并且源向量寄存器中的位置i中的数据元素被存储到存储器中使用此索引值所间接寻址的位置。另外,第二索引值从索引阵列中的位置(i+d)被检索并且被加载到索引寄存器中,并且在存储器中使用此索引值所间接寻址的位置的内容被预取到由提示指定的高速缓存中。例如,提示可以指示所述内容将被预取到一级(L1)高速缓存中或到二级(L2)高速缓存中。在一些实施例中,所述内容可以使用读取所有权来预取。例如,将所预取数据元素引导至高速缓存的写请求可以包括请求独占所有权。
在一个实施例中,当LoadIndicesScatterAndPrefetch指令将存储在源向量寄存器中的数据元素分散到存储器中时,可以应用可选的合并掩码。在另一个实施例中,当LoadIndicesScatterAndPrefetch指令将存储在源向量寄存器中的数据元素分散到存储器中时,可以应用可选的零掩码。在一个实施例中,LoadIndicesScatterAndPrefetch指令可以支持多个可能的VLEN值,诸如8、16、32或64。在一个实施例中,所述指令可以支持索引阵列B[i]中的多个可能的元素大小,诸如32位或64位值,其中每一个可以表示一个或多个索引值。在一个实施例中,LoadIndicesScatterAndPrefetch指令可以支持存储器位置A[i]中的多个可能的数据元素类型和大小,包括单精度浮点或双精度浮点、64位整数等。在一个实施例中,这条指令可以有条件地分散一个或多个数据元素,直到达到所述指令的最大数据元素数量。例如,如果针对所述指令指定了掩码(如果针对所述指令标识了掩码寄存器),则数据元素仅可以在其相应的掩码位被置位时被分散。有待分散的最大数据元素数量可以取决于一个或多个指令参数,诸如有待分散的数据元素的大小或类型、索引向量的长度、或源向量寄存器的容量。在一个实施例中,这条指令可以有条件地预取存储器中一个或多个位置的内容,直到达到所述指令的最大位置数量。例如,如果针对所述指令指定了掩码(如果针对所述指令标识了掩码寄存器),则给定位置的内容仅可以在其相应的掩码位被置位时被预取。有待从其中预取数据的最大位置数量可以取决于一个或多个指令参数,诸如有待预取的数据元素的大小或类型、或索引向量的长度。
在一个实施例中,针对存储器中的特定位置的预取可以使多个相邻位置的内容连同目标位置的内容一起被预取和高速缓存。例如,取决于所述预取的目标的大小和位置以及高速缓存行的长度,可以一次将4、8、16或32个数据元素预取到所标识高速缓存中。在各个实施例中,由指令限定的预取可以以任何顺序发生,或者根本不发生。例如,指令可能被视为到处理器的提示,并且可能无法保证完成。在一个实施例中,如果在存储器与目标高速缓存之间存在高带宽利用率,则处理器硬件可以确定指令根本不应该被执行。在另一实施例中,由于任何数量种原因,处理器可以在指令完成之前(例如,在预取存储器中的一些但非全部目标位置的内容之前)终止所述指令的执行。
在以上示例伪代码中,存在用于所述指令标识的单个掩码寄存器,并且如由掩码寄存器所控制的,掩码仅应用于每次迭代的load-index-and-scatter(加载-索引和分散)部分。例如,如果特定掩码位未被置位,则将省略这些分散中的相应一项。然而,每次迭代都需要进行预取操作。在另一实施例中,掩码可以应用于所述迭代的分散部分和预取部分,以使得两者在相应的掩码位上都是有条件的。在这种情况下,或者在给定迭代期间执行这两种操作,或者都不执行。在又另一个实施例中,可以针对LoadIndicesScatterAndPrefetch指令指定两个单独的掩码寄存器,一个用于调节分散操作并且一个用于调节预取操作。在其他实施例中,用于控制这些分散和预取中的哪一个(如果存在的话)被执行的参数的其他变化和组合是可能的。
在本公开的实施例中,用于执行由处理器核(比如系统1800中的核1812)或由SIMD协处理器(比如SIMD协处理器1910)实施的扩展向量操作的指令可以包括用于执行用于从索引阵列加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取从而取得存储器中的所述位置的所有权以用于后续分散的向量操作的指令。例如,这些指令可以包括一个或多个“LoadIndicesAndPrefetchScatter”指令。在本公开的实施例中,LoadIndicesAndPrefetchScatter指令可以用于加载有待在计算在存储器中要执行预取的特定位置的地址时所使用的索引值中的每一个,并且用于将所述位置的内容预取到指定高速缓存。可以在使用或不使用缩放的情况下基于针对所述指令指定的基址与从针对所述指令标识的索引阵列中检索的索引值之和来计算所述地址。在另一示例中,用于执行由处理器核实施的扩展向量操作的指令可以包括一个或多个“LoadIndicesScatterAndPrefetch”指令。在本公开的实施例中,这些LoadIndicesScatterAndPrefetch指令可以用于加载有待在计算有待分散的特定数据元素在存储器中的地址时所使用的索引值中的每一个,用于从指定源向量寄存器检索数据元素,用于将数据元素存储在存储器中的所计算地址处,用于加载有待在计算要执行预取的另一位置的地址时所使用的索引值,并且用于将其他位置的内容预取到指定高速缓存。可以在使用或不使用缩放的情况下基于针对所述指令指定的基址与从针对所述指令标识的索引阵列中检索的索引值之和来计算所述地址中的每一个。用于由指令执行的分散的索引值可以在索引阵列中与用于由所述指令执行的预取的索引值分隔开由所述指令指定的预取距离。
图21A是根据本公开的实施例的用于执行从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散的操作的图示。在一个实施例中,系统1800可以执行用于执行以下操作的指令:从索引阵列中加载索引并且基于这些索引从存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散。例如,可以执行LoadIndicesAndPrefetchScatter指令。这条指令可以包括任何合适数量和种类的操作数、位、标志、参数或其他元素。对LoadIndicesAndPrefetchScatter指令的调用可以引用存储器中的基址,根据所述基址来计算存储器中要执行预取的特定位置的地址。例如,LoadIndicesAndPrefetchScatter指令可以引用指向一组数据元素位置中的第一位置的指针,所述一组数据元素位置中的一些存储有待由所述指令预取的内容。对LoadIndicesAndPrefetchScatter指令的调用可以引用存储器中的索引阵列,所述索引阵列中的每一个可以指定可用于计算有待由所述指令预取其内容的位置的地址的相对于基址的索引值或偏移量。在一个实施例中,对LoadIndicesAndPrefetchScatter指令的调用可以在比例索引基址(SIB)类型的存储器寻址操作数中引用存储器中的索引阵列、以及基址寄存器。基址寄存器可以标识存储器中的基址,根据所述基址来计算存储器中所述内容将从其中被预取的特定位置的地址。存储器中的索引阵列可以指定可用于计算有待由所述指令预取所针对的每个位置的地址的相对于基址的索引或偏移量。例如,对于索引阵列中存储在索引阵列中的连续位置中的每个索引值,LoadIndicesAndPrefetchScatter指令的执行可以使得:从索引阵列中检索所述索引值,基于索引值和基址来计算存储器中的特定数据元素位置的地址,从存储器中在所计算地址处预取所述位置的内容,并且使用读取所有权访问将所预取内容元素写入高速缓存。
在一个实施例中,对LoadIndicesAndPrefetchScatter指令的调用可以指定有待在计算由所述指令所针对的预取位置的对应地址时应用于每个索引值的缩放因子。在一个实施例中,缩放因子可以编码在SIB类型的存储器寻址操作数中。在一个实施例中,缩放因子可以是一、二、四或八。所指定的缩放因子可以取决于有待由所述指令预取的各个数据元素的大小。在一个实施例中,对LoadIndicesAndPrefetchScatter指令的调用可以包括高速缓存提示参数,所述高速缓存提示参数的值指示数据应当由指令预取到的高速缓存层级结构中的层级。例如,高速缓存提示“T0”可以指示应当将元素预取到一级(L1)高速缓存中,并且高速缓存提示“T1”可以指示应当将元素预取到二级(L2)高速缓存中。
在一个实施例中,对LoadIndicesAndPrefetchScatter指令的调用可以指定有待由所述指令预取的数据元素的大小。例如,大小参数可以指示数据元素是字节、字、双字或四字。在另一示例中,大小参数可以指示数据元素表示有符号或无符号浮点值,比如单精度浮点值或双精度浮点值。在另一实施例中,对LoadIndicesAndPrefetchScatter指令的调用可以指定有待由所述指令从其中预取内容的最大位置数量。在一个实施例中,对LoadIndicesAndPrefetchScatter指令的调用可以指定有待应用以有条件地执行指令的各个操作的掩码寄存器。例如,掩码寄存器可以包括每个潜在预取的位置的、与索引阵列中包含此位置的索引值的位置相对应的对应位。在本示例中,如果给定位置的对应位被置位,则其索引值可以被检索,其地址可以被计算,并且其内容可以被预取到高速缓存层级结构的所标识层级中。如果给定数据元素的对应位未被置位,则可以针对给定数据元素省略这些操作。在其他实施例中,在对LoadIndicesAndPrefetchScatter指令的调用中可以引用更多、更少或不同的参数。
在图21A中展示的示例实施例中,在(1)处,可以由SIMD执行单元1912接收LoadIndicesAndPrefetchScatter指令及其参数(所述参数可以包括上文所述的存储器地址操作数、缩放因子、对预取目标位置中的数据元素大小的指示、对执行预取的最大位置数量的指示、高速缓存提示、标识特定掩码寄存器的参数、或指定掩码类型的参数中的任何一项或全部)。例如,在一个实施例中,可以由核1812内的分配器1814将LoadIndicesAndPrefetchScatter指令发布至SIMD协处理器1910内的SIMD执行单元1912。在另一实施例中,可以由主处理器1920的解码器1922将LoadIndicesAndPrefetchScatter指令发布至SIMD协处理器1910内的SIMD执行单元1912。可以由SIMD执行单元1912逻辑地执行LoadIndicesAndPrefetchScatter指令。
在本示例中,LoadIndicesAndPrefetchScatter指令可以有条件地预取存储器系统1803中的数据元素位置2103中的不同数据元素位置的当前内容。存储在数据元素位置2103中的数据元素可以全部具有相同大小,并且所述大小可以由LoadIndicesAndPrefetchScatter指令的参数指定。可能潜在地被预取的数据元素可以以任何随机或任意顺序存储在数据元素位置2103内。在本示例中,数据元素位置2103内可以预取数据元素的第一可能位置在图21A中示出为基址位置2104。可以由LoadIndicesAndPrefetchScatter指令的参数来标识基址位置2104的地址。在本示例中,如果指定的话,在SIMD执行单元1912内的掩码寄存器2102可以被标识为其内容将被用于被应用于所述指令的掩码操作的掩码寄存器。在本示例中,当预取时,有待由LoadIndicesAndPrefetchScatter指令使用的索引值被存储在存储器系统1830中的索引阵列2105中。索引阵列2105包括例如在索引阵列内的第一(最低阶)位置(位置0)中的第一索引值2106、在索引阵列内的第二位置(位置1)中的第二索引值2107等等。最后一个索引值2108存储在索引阵列2105内的最后(最高阶位置)。
由SIMD执行单元1912对LoadIndicesAndPrefetchScatter指令的执行可以包括:在(2)处判定与下一个潜在的load-index-and-prefetch(加载-索引和预取)相对应的掩码位是否为假,并且若是,则跳过下一个潜在的load-index-and-prefetch。例如,如果位0为假,则SIMD执行单元可以禁止执行步骤(3)至步骤(7)中的一些或全部以便预取数据元素位置2103内的地址可以使用下一个索引值来计算的那些位置处的当前内容。然而,如果与第一潜在的load-index-and-prefetch相对应的掩码位为真,则可以执行下一个潜在的load-index-and-prefetch。例如,如果位1为真,或如果掩码未被应用于所述指令,则SIMD执行单元可以执行全部的步骤(3)至步骤(7)以预取数据元素位置2103内的地址可以使用第二索引值2107以及基址位置2104的地址来计算的那些位置的当前内容。
对于相应掩码位为真的潜在的load-index-and-prefetch,或当不应用掩码时,在(3)处,可以检索所述预取的下一个索引值。例如,在第一潜在的load-index-and-prefetch期间,可以检索第一索引值2106,在第二潜在的load-index-and-prefetch期间,可以检索第二索引值2106,以此类推。在(4)处,可以基于所检索索引值以及基址位置2104的地址来计算下一个预取的地址。例如,下一个预取的地址可以在使用或不使用缩放的情况下被计算为基址与所检索索引值之和。在(5)处,可以使用所计算地址在存储器中访问下一个预取位置,并且在(6)处,可以从此位置预取所述预取位置的当前内容。在(7)处,取决于针对所述指令包括的高速缓存提示,所预取内容可以被写入L1高速缓存1822或L2高速缓存1824。
在一个实施例中,LoadIndicesAndPrefetchScatter指令的执行可以包括针对数据元素位置2103内的内容有待由所述指令预取的位置中的每一个位置来重复图21A中所展示的操作的步骤中的任何一个或全部。例如,取决于相应的掩码位(如果应用掩码的话),可以针对每个潜在的load-index-and-prefetch来执行步骤(2)或步骤(2)至步骤(7),这之后可以引退指令。在一个实施例中,当所述指令从数据元素位置2103内的特定位置处预取当前内容时,所述预取可以使得多个相邻位置中的内容连同目标位置的内容一起被预取并高速缓存在L1高速缓存1822或L2高速缓存1824中。在本示例中,掩码寄存器2102在图21A中被展示为SIMD执行单元1912内的专用寄存器。在另一实施例中,掩码寄存器2102可以由在处理器中但在SIMD执行单元1912外部的通用或专用寄存器来实施。在又另一个实施例中,掩码寄存器2102可以由扩展向量寄存器堆1914中的向量寄存器来实施。
在本公开的实施例中,一些形式的Load-Indices-and-Prefetch-Scatter类型的操作可以从索引阵列加载索引,基于这些索引将数据元素分散到稀疏存储器中的各个位置,并且预取存储器中数据元素稍后将被分散的其他位置的内容。图21B是根据本公开的实施例的用于执行从索引阵列中加载索引、基于这些索引将元素分散到稀疏存储器中的各个位置、以及从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散的操作的图示。在一个实施例中,根据本公开的实施例,系统1800可以包括用于执行以下操作的指令:从索引阵列中加载索引、基于这些索引将元素分散至稀疏存储器中的各个位置、并且从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散。例如,可以执行向量LoadIndicesScatterAndPrefetch形式的指令。这条指令可以包括任何合适数量和种类的操作数、位、标志、参数或其他元素。
在一个实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以引用源向量寄存器。源向量寄存器可以是有待由LoadIndicesScatterAndPrefetch指令分散到稀疏存储器中的各个位置的数据元素被存储在的扩展向量寄存器。对LoadIndicesScatterAndPrefetch指令的调用可以引用存储器中的基址,根据所述基址来计算存储器中要执行预取的特定位置以及存储器中要分散数据元素的特定位置的地址。例如,LoadIndicesScatterAndPrefetch指令可以引用指向一组数据元素位置中的第一位置的指针。所述数据元素位置中的一些可以存储有待由所述指令预取的内容。所述数据元素位置中的一些可以是由所述指令执行的分散的目标。对LoadIndicesScatterAndPrefetch指令的调用可以引用存储器中的索引阵列,所述索引阵列中的一些可以指定可用于计算潜在的分散目标位置的地址的相对于基址的索引值或偏移量。索引值中的一些可以用于计算内容将由所述指令预取以便取得位置的所有权的位置的地址。索引值中的一些可以用于计算作为当前分散操作的一部分所述指令将存储数据元素的位置的地址。。
在一个实施例中,对LoadIndicesScatterrAndPrefetch指令的调用可以在比例索引基址(SIB)类型的存储器寻址操作数中引用存储器中的索引阵列、以及基址寄存器。基址寄存器可以标识存储器中的基址,根据所述基址来计算存储器中数据元素将被分散到或内容将从中由所述指令预取的特定位置的地址。存储器中的索引阵列可以指定可用于计算存储器中有待由所述指令从中预取内容的特定位置的地址的相对于基址的索引或偏移量。例如,对于索引阵列中存储在索引阵列中的连续位置中的每个索引值,LoadIndicesScatterAndPrefetch指令的执行可以使得:从索引阵列中检索所述索引值,基于索引值和基址来计算存储器中的特定数据元素位置的地址,在预期针对特定数据元素位置的后续分散操作时使用读取所有权访问将特定数据元素位置的内容预取到指定高速缓存中。在一个实施例中,对于索引阵列中存储在索引阵列中的连续位置中的每个索引值,LoadIndicesScatterAndPrefetch指令的执行还可以(或替代地)使得:从索引阵列中距有待分散的元素的索引值被检索的位置一段固定距离的位置处检索第二索引值、基于第二索引值和基址而计算存储器中的第二数据元素位置的地址、从针对所述指令标识的源向量寄存器检索数据元素、并且作为当前分散操作的一部分将数据元素存储至所计算地址。
在一个实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以指定有待在由所述指令计算数据元素位置的对应地址时应用于每个索引值的缩放因子。在一个实施例中,缩放因子可以编码在SIB类型的存储器寻址操作数中。在一个实施例中,缩放因子可以是一、二、四或八。所指定的缩放因子可以取决于有待由所述指令分散或预取的各个数据元素的大小。在一个实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以包括高速缓存提示参数,所述高速缓存提示参数的值指示数据元素应当由所述指令预取到的高速缓存层级结构中的层级。例如,高速缓存提示“T0”可以指示应当将元素预取到一级(L1)高速缓存中,并且高速缓存提示“T1”可以指示应当将元素预取到二级(L2)高速缓存中。
在一个实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以指定有待由所述指令分散或预取的数据元素的大小。例如,大小参数可以指示数据元素是字节、字、双字或四字。在另一示例中,大小参数可以指示数据元素表示有符号或无符号浮点值,比如单精度浮点值或双精度浮点值。在另一实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以指定有待由所述指令分散或预取的最大数据元素数量。在一个实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以基于用于计算用于分散操作和预取操作的目标地址所使用的索引值的相对位置来指定发生预取的位置相对于分散操作的固定偏移距离。例如,在地址是使用索引阵列的第十位置中的索引值计算的那个数据元素是由一个等于20的预取偏移量被指定用于的LoadIndicesScatterAndPrefetch指令分散的迭代期间,所述指令可以预取地址是使用索引阵列的第三十位置中的索引值计算的那些数据元素。
在一个实施例中,对LoadIndicesScatterAndPrefetch指令的调用可以指定有待应用以有条件地执行指令的各个操作的掩码寄存器。例如,掩码寄存器可以包括每个潜在地分散的数据元素的、与索引阵列中包含此数据元素的索引值的位置相对应的对应位。在本示例中,如果给定数据元素的对应位被置位,则其索引值可以被检索,其被分散到的地址可以被计算,给定数据元素可以从源向量寄存器检索,并且所述数据元素可以存储在存储器中所计算地址处。如果给定数据元素的对应位未被置位,则可以针对给定数据元素省略这些操作中的任何一项或全部,并且给定数据元素将不被存储在存储器中。在一个实施例中,如果给定数据元素的对应位被置位,则可以预取存储器中另一位置的内容,所述另一位置是基于距由指令分散的数据元素的索引值一段固定距离的索引值计算的。如果有待分散的给定数据元素的对应位未被置位,则可以针对当前迭代省略这些操作。在另一实施例中,LoadIndicesScatterAndPrefetch指令的每次迭代可以预取基于距取决于相应掩码位可能已经或可能尚未由所述指令分散的数据元素的索引值一段固定距离处的索引值计算的存储器中的位置处的内容。
在一个实施例中,如果对LoadIndicesScatterAndPrefetch指令的调用指定有待在将操作的分散部分的结果写入存储器时所应用的掩码寄存器,则所述指令还可以指定有待应用于所述结果的掩码类型,比如合并掩码或零掩码。例如,如果应用合并掩码并且给定数据元素的掩码位未被置位,则可以保持存储在存储器中否则给定数据元素将已经在执行LoadIndicesScatterAndPrefetch指令之前被存储到的位置中的值。在另一示例中,如果应用零掩码并且给定数据元素的掩码位未被置位,则可以将空值(比如全部为零)写入存储器中否则给定数据元素(如果其已经被分散)将已经被存储到的位置。在其他实施例中,在对LoadIndicesScatterAndPrefetch指令的调用中可以引用更多、更少或不同的参数。
在图21B中展示的示例实施方式中,在(1)处,可以由SIMD执行单元1912接收LoadIndicesScatterAndPrefetch指令及其参数(所述参数可以包括上文所述的寄存器和存储器地址操作数、缩放因子、对有待分散和/或预取的数据元素大小的指示、对有待分散和/或预取的最大数据元素数量的指示、高速缓存提示、指定将发生预取的固定偏移距离的参数、标识特定掩码寄存器的参数、或指定掩码类型的参数中的任何一项或全部)。例如,在一个实施例中,可以由核1812内的分配器1814将LoadIndicesScatterAndPrefetch指令发布至SIMD协处理器1910内的SIMD执行单元1912。在另一实施例中,可以由主处理器1920的解码器1922将LoadIndicesScatterAndPrefetch指令发布至SIMD协处理器1910内的SIMD执行单元1912。可以由SIMD执行单元1912逻辑地执行LoadIndicesScatterAndPrefetch指令。
在本示例中,LoadIndicesScatterAndPrefetch指令的参数可以将扩展向量寄存器堆1914内的扩展向量寄存器ZMMn(2101)标识为用于由指令执行的分散的源向量寄存器。在本示例中,可能潜在地被分散到存储器系统1803中的数据元素位置2103的不同数据元素位置的数据元素可以存储在源向量寄存器ZMMn(2101)中。另外,可能潜在地被预取的数据元素被存储在存储器系统1803中的数据元素位置2103中的不同数据元素位置中。存储在源向量寄存器ZMMn(2101)和数据元素位置2103中的数据元素可以全部具有相同大小,并且所述大小可以由LoadIndicesScatterAndPrefetch指令的参数指定。可能通过执行所述指令而潜在地被预取的数据元素可以以任何随机或任意顺序存储在数据元素位置2103内。可能通过执行所述指令而潜在地被分散的数据元素可以以任何随机或任意顺序分散到数据元素位置2103内的各个位置。在本示例中,在数据元素位置2103内数据元素可以被分散到或内容可以从中被预取的第一可能的位置在图21B中示出为基址位置2104。可以由LoadIndicesScatterAndPrefetch指令的参数标识基址位置2104的地址。在本示例中,如果指定的话,在SIMD执行单元1912内的掩码寄存器2102可以被标识为其内容将被用于被应用于所述指令的掩码操作的掩码寄存器。
在本示例中,有待在计算有待由LoadIndicesScatterAndPrefetch指令分散的元素的地址时所使用的索引值被存储在存储器系统1830中的索引阵列2105中。另外,有待在计算有待由LoadIndicesScatterAndPrefetch指令预取的元素地址时所使用的索引值被存储在存储器系统1830中的索引阵列2105中。索引阵列2105包括例如在索引阵列内的第一(最低阶)位置(位置0)中的第一索引值2106、在索引阵列内的第二位置(位置1)中的第二索引值2107等等。最后一个索引值2108存储在索引阵列2105内的最后(最高阶位置)。在本示例中,LoadIndicesScatterAndPrefetch指令可以包括高速缓存提示参数,所述高速缓存提示参数将存储器子系统1830中的L1高速缓存1822或L2高速缓存1824标识为元素被指令预取到的高速缓存。例如,高速缓存提示“T0”可以指示元素应当被预取到L1高速缓存1822中,并且高速缓存提示“T1”可以指示元素应当被预取到L2高速缓存1824中。
由SIMD执行单元1912对LoadIndicesScatterAndPrefetch指令的执行可以包括:在(2)处判定与有待被分散的下一个潜在的数据元素相对应的掩码位是否为假,并且若是,则跳过下一个潜在的load-index-and-scatter。例如,如果位0为假,则SIMD执行单元可以禁止执行步骤(3)至步骤(6)中的一些或全部以便分散地址可以是使用第一索引值2106来计算的那些数据元素。然而,如果与下一个潜在的分散相对应的掩码位为真,则可以执行下一个潜在的load-index-and-scatter。例如,如果位1为真,或如果掩码未被应用于指令,则SIMD执行单元可以执行全部的步骤(3)至步骤(6)以将数据元素分散至数据元素位置2103内的地址是使用第二索引值2107以及基址位置2104的地址来计算的位置。
对于其相应的掩码位为真的潜在的load-index-and-scatter,或当不应用掩码时,在(3)处,可以检索下一个分散的索引值。例如,在第一潜在的load-index-and-scatter期间,可以检索第一索引值2106,在第二潜在的load-index-and-scatter期间,可以检索第二索引值2106,以此类推。在(4)处,可以基于所检索索引值以及基址位置2104的地址来计算用于下一个分散的地址。例如,下一个分散的地址可以在使用或不使用缩放的情况下被计算为基址与所检索索引值之和。在(5)处,可以从源向量寄存器ZMMn(2101)中检索下一个数据元素,并且在(6)处,可以使用所计算地址将数据元素存储至数据元素位置2103内的位置。
由SIMD执行单元1912对LoadIndicesScatterAndPrefetch指令的执行还可以包括:在(7)处检索用于预取的下一个索引值。例如,可以从索引阵列2015中与所述分散的索引值被检索的位置分隔开由所述指令指定的固定偏移距离d的位置处检索预取的下一个索引值。例如,在第一次迭代期间,可以针对分散操作检索第一索引值2106,并且可以针对预取操作检索在位置(0+d)处的索引值。在(8)处,可以基于所检索索引值以及基址位置2104的地址来计算下一个预取的地址。例如,下一个预取的地址可以在使用或不使用缩放的情况下被计算为基址与所述预取的所检索索引值之和。在(9)处,可以使用所述预取的所计算地址在存储器中访问下一个预取位置,并且在(10)处,可以使用读取所有权访问预取此位置处的内容。在(11)处,取决于针对所述指令指定的高速缓存提示,所预取数据元素可以被写入L1高速缓存1822或L2高速缓存1824。
在一个实施例中,LoadIndicesScatterAndPrefetch指令的执行可以包括针对有待由所述指令潜在地分散到数据元素位置2103中的任何一个数据元素位置的数据元素中的每一个和/或针对在同一次迭代期间发生的相应预取来重复图21B中所展示的操作的步骤中的任何一个或全部。例如,取决于相应的掩码位(如果应用掩码的话),可以针对潜在的load-index-and-scatter来执行步骤(2)或步骤(2)至步骤(6)。例如,如果合并掩码应用于指令,并且如果与第一索引值2106相对应的数据元素由于此数据元素的掩码位为假而未被写入数据元素位置2103内的位置,则可以保持在执行LoadIndicesScatterAndPrefetch指令之前数据元素将已经被存储的位置中的值。在另一示例中,如果零掩码应用于指令,并且如果与第一索引值2106相对应的数据元素由于此数据元素的掩码位为假而未被写入数据元素位置2103内的位置,则可以将空值(比如全部为零)写入数据元素否则将已经被存储到的那个位置。在一个实施例中,有待由所述指令分散的每个数据元素可以存储在源向量寄存器ZMMn(2101)中与所述数据元素的索引值的位置相对应的位置。例如,有待使用第二索引值2107计算的目标分散位置所用于的数据元素可以存储在源向量寄存器ZMMn(2101)内的第二位置(位置1)中。
在一个实施例中,可以在每次迭代期间执行步骤(7)至步骤(11)以便从最大数量的数据元素位置2103进行预取,而不管迭代的load-index-and-scatter部分是否导致将数据元素分散到数据元素位置2103内的位置。在另一实施例中,当相应的潜在分散元素的掩码位未被置位时还可以省略步骤(7)至步骤(11)。在又另一个实施例中,第二掩码寄存器可以在每次迭代中的步骤(7)至步骤(11)中调节指令的预取部分的操作。例如,第二寄存器中的每个位可以调节步骤(7)至步骤(11)的一次迭代的操作,以使得:对于被置位的每个位,可以从使用在索引阵列中与所述迭代的分散部分的索引值分隔开一段固定距离d的索引值间接寻址的位置处预取数据元素。在一个实施例中,当从数据元素位置2103内的特定位置处预取数据元素时,所述预取可以使得相邻位置中的多个元素连同目标数据元素一起被预取并高速缓存在L1高速缓存1822或L2高速缓存1824中。例如,取决于所述预取的目标的大小和位置以及高速缓存行的长度,可以一次将4、8、16或32个数据元素预取到所标识高速缓存中。
在本示例中,掩码寄存器2102在图21B中被展示为SIMD执行单元1912内的专用寄存器。在另一实施例中,掩码寄存器2102可以由在处理器中但在SIMD执行单元1912外部的通用或专用寄存器来实施。在又另一个实施例中,掩码寄存器2102可以由扩展向量寄存器堆1914中的向量寄存器来实施。
在一个实施例中,扩展SIMD指令集架构可以实施多个版本或形式的向量操作,所述向量操作用于从索引阵列中加载索引并且基于这些索引从稀疏存储器中数据元素将随后被分散的各个位置预取元素。这些指令形式可以包括例如以下示出的这些:
LoadIndicesAndPrefetchScatter{size}{kn}(PTR,PTR,hint)(加载索引及预取分散{大小}{kn}(PTR,PTR,提示))
LoadIndicesAndPrefetchScatter{size}{kn}([vm32],[vm32],hint)(加载索引及预取分散{大小}{kn}([vm32],[vm32],提示))
在以上所示的LoadIndicesAndPrefetchScatter指令的示例形式中,第一PTR值或存储器地址操作数可以标识存储器中的基址位置。第二PTR或存储器地址操作数可以标识存储器中的索引阵列。在LoadIndicesAndPrefetchScatter指令的这些示例形式中,“大小”修饰符可以指定有待从存储器中的各个位置预取的数据元素的大小和/或类型。在一个实施例中,所指定的大小/类型可以是{B/W/D/Q/PS/PD}之一。在以上所示的LoadIndicesAndPrefetchScatter指令的示例形式中,提示参数可以指示数据元素将被预取到的高速缓存。例如,提示“T0”可以指示数据元素将由所述指令预取到一级(L1)高速缓存中,而提示“T1”可以指示数据元素将被预取到二级(L2)高速缓存中。
在这些示例中,可选指令参数“kn”可以标识多个掩码寄存器中的特定掩码寄存器。这个参数可以在当掩码将被应用于LoadIndicesAndPrefetchScatter指令时被指定。在掩码将被应用的实施例中(例如,如果针对指令指定了掩码寄存器),可选指令参数“z”可以指示是否应当应用归零掩码。在一个实施例中,如果这个可选参数被置位,则可以应用零掩码,并且如果这个可选参数未被置位或如果这个可选参数被省略,则可以应用合并掩码。在其他实施例(未示出)中,LoadIndicesAndPrefetchScatter指令可以包括指示有待预取的最大数据元素数量的参数。在另一实施例中,可以基于存储在索引值阵列中的索引值数量由SIMD执行单元确定有待预取的最大数据元素数量。
在一个实施例中,扩展SIMD指令集架构可以实施多个版本或形式的向量操作,所述向量操作用于从索引阵列中加载索引、基于这些索引将一个或多个元素分散到存储器中的各个位置、并且预取存储器中有待在稍后时间分散的数据元素的其他位置的内容。这些指令形式可以包括例如以下示出的这些:
LoadIndicesScatterAndPrefetch{size}{kn}{z}(PTR,PTR,REG,hint,imm.)(加载索引分散及预取{大小}{kn}{z}(PTR,PTR,REG,提示,即时))
LoadIndicesScatterAndPrefetch{size}{kn}{z}([vm32],[vm32],REG,hint,imm.)(加载索引分散及预取{大小}{kn}{z}([vm32],[vm32],REG,提示,即时))
在以上所示的LoadIndicesScatterAndPrefetch指令的示例形式中,REG参数可以标识用作所述指令的源向量寄存器的扩展向量寄存器。在这些示例中,第一PTR值或存储器地址操作数可以标识存储器中的基址位置。第二PTR或存储器地址操作数可以标识存储器中的索引阵列。在LoadIndicesScatterAndPrefetch指令的这些示例形式中,“大小”修饰符可以指定存储在源向量寄存器中有待分散到存储器中的各个位置的数据元素的大小和/或类型以及有待由指令预取到所标识高速缓存中的数据元素的大小。在以上所示的LoadIndicesScatterAndPrefetch指令的示例形式中,提示参数可以指示数据元素将被预取到的高速缓存。例如,提示“T0”可以指示数据元素将由所述指令预取到一级(L1)高速缓存中,而提示“T1”可以指示数据元素将被预取到二级(L2)高速缓存中。在以上所示的LoadIndicesScatterAndPrefetch指令的示例形式中,即时参数值可以指示提前多久发生预取。
在一个实施例中,所指定的大小/类型可以是{B/W/D/Q/PS/PD}之一。在这些示例中,可选指令参数“kn”可以标识多个掩码寄存器中的特定掩码寄存器。当掩码将被应用于LoadIndicesScatterAndPrefetch指令时,可以指定这个参数。在掩码将被应用的实施例中(例如,如果针对指令指定了掩码寄存器),可选指令参数“z”可以指示是否应当应用归零掩码。在一个实施例中,如果这个可选参数被置位,则可以应用零掩码,并且如果这个可选参数未被置位或如果这个可选参数被省略,则可以应用合并掩码。在其他实施例(未示出)中,LoadIndicesScatterAndPrefetch指令可以包括指示有待分散的最大数据元素数量或从其中预取的最大位置数量的参数。在一个实施例中,可以基于存储在索引值阵列中的索引值数量由SIMD执行单元确定有待分散或预取的最大数据元素数量。在又另一个实施例中,可以基于源向量寄存器的容量由SIMD执行单元确定有待分散的最大数据元素数量。
图22A和图22B展示了根据本公开的实施例的Load-Indices-and-Prefetch-Scatter类型的指令的对应形式的操作。更具体地,图22A展示了指定可选掩码寄存器的示例LoadIndicesandPrefetchScatter指令的操作,并且图22B展示了未指定可选掩码寄存器的示例LoadIndicesScatterandPrefetch指令的操作。
图22A和图22B都展示了索引阵列2105。在这些示例中,存储在索引阵列2105中的索引被组织成行。虽然图22A和图22B未描绘所有相同的行和索引值,但可以假设在两个图中具有相同参考号的行和索引值是类似的。在这些示例中,与可能潜在地通过分散操作被存储至存储器的第一数据元素S0相对应的索引值被存储在索引阵列2105内的最低阶地址中,示出为行2210中的地址B(2106)。在这些示例中,与可能潜在地通过分散操作被存储至存储器的第二数据元素S1相对应的索引值被存储在索引阵列2105内的次低顺序地址中,示出为行2210中的地址(2107)。与可能潜在地通过分散操作被存储至存储器的第十六个数据元素S15相对应的索引值被存储在行2212中的最高阶位置中,在地址2108处。在这些示例中,索引阵列2105的所有行(包括图22A中描绘的行2210至2214和图22B中描绘的行2210至2215)各自包含按相继顺序的八个索引值。
图22A和图22B两者还展示了源向量寄存器ZMMn(2101),在所述源向量寄存器中,数据元素可能通过分散操作潜在地存储至数据元素位置2103中的不同数据元素位置。在一个实施例中,存储在源向量寄存器ZMMn(2101)中的源数据元素可以以其相应的索引值的顺序存储在源向量寄存器ZMMn(2101)内的连续位置中。
图22A展示了指定掩码寄存器的“LoadIndicesAndPrefetchScatterD kn(Addr A,Addr B,ZMMn,T0)(加载索引及预取分散D kn(地址A,地址B,ZMMn,T0))指令”。在本示例中,掩码寄存器kn(2220)包括十六个位,每一个与索引阵列2105中的索引值相对应。在本示例中,位置5、10、11和16中的位(位4、9、10和15)为假,而其余位为真。因此,可能无法针对所述指令中的这些操作的第五、第十、第十一或第十六次迭代执行如在图21A中步骤(3)至步骤(7)展示的操作。
在图22A中所展示的示例中,对向量指令“LoadIndicesAndPrefetchScatterD kn(Addr A,Addr B,ZMMn,T0)(加载索引及预取分散D kn(地址A,地址B,ZMMn,T0))”的执行可以使索引阵列2105中的第一组十六个索引值(从位置0开始)中的十二个被加载到索引寄存器(未示出)中并用于在预期即将到来的分散操作时假设这些位置的所有权的情况下计算执行预取的位置的地址。在一个实施例中,这些预取可以并行执行或同时执行。在本示例中,将不会加载第五、第十、第十一和第十六个索引值,也不会预取基于这些索引值间接寻址的这些位置的内容。在本示例中,发生预取的固定偏移距离为24。
对这条指令的执行可以使得存储器中使用索引阵列2105中从位置24处开始的这十六个索引值中的十二个所间接寻址的位置的当前内容被预取到一级(L1)高速缓存1822(其由高速缓存提示“T0”标识)。在一个实施例中,这些可以并行执行或同时执行。在一个实施例中,可以由系统自动确定这个固定偏移距离。例如,可以由SIMD执行单元来计算固定偏移量。固定偏移量可以基于当元素被预取时与当这些元素可供使用时之间的等待时间。固定偏移量可以基于当值被预取时与当这些值被预测有可能是分散操作的目标时之间的预期时间。
对这条指令的执行可以产生在图22A的底部所示的结果。在本示例中,在对这条指令的执行之后,L1高速缓存1822(其由高速缓存提示“T0”标识)包含作为由所述指令执行的预取操作的目标的那十二个位置的内容。数据元素位置2103内的这十二个位置的地址是基于基址2104和针对从索引阵列2105进行的预取操作检索的对应索引值计算的。数据元素位置2103内执行预取的特定位置(其是任意的)未在图中示出。在本示例中,预取到L1高速缓存1822的数据是恰好存储在作为后续分散操作的潜在目标的数据元素位置中的任意数据(表示为“Dn”)。例如,预取到L1高速缓存1822中的数据包括任意数据元素D24至D27(其在数据元素位置2103中的地址是基于索引值24至27来计算的)、D29至32(其在数据元素位置2103中的地址是基于索引值29至32来计算的)、以及数据元素D35至D38(其在数据元素位置2103中的地址是基于索引值35至38来计算的)。
在一个实施例中,当从数据元素位置2103内的特定位置处预取数据元素时,所述预取可以使得相邻位置中的多个元素连同目标数据元素一起被预取并高速缓存在L1高速缓存1822中。例如,取决于所述预取的目标的大小和位置以及高速缓存行的长度,可以一次将4、8、16或32个数据元素预取到所标识高速缓存中。这在图22A中由L1高速缓存1822内的子块示出。在本示例中,取出到高速缓存中的每个子块包括由预取针对的位置的内容以及连同目标元素一起被预取的其他元素。在本示例中,由于索引值28、33、34和39与未被置位的掩码位相对应,因此数据元素位置2103中可使用这些索引值间接寻址的位置的当前内容不会被预取到L1高速缓存1822中。
图22B展示了未指定可选掩码寄存器的示例Load-Indices-Scatter-and-Prefetch指令的操作。这条指令包括指示任何所预取元素将被存储至二级(L2)高速缓存的高速缓存提示“T1”。这条指令还显式地指定预取将发生的固定偏移距离(32)。在本示例中,所述指令可以对存储在源向量寄存器ZMMn(2101)中的相同数据元素进行操作并且可以使用与其操作在图22A中展示的指令相同的索引阵列2105,但是并非包括在两个图中的所有的各个元素、索引值、或这些结构的行都是相同的。
图22B还展示了一组数据元素位置2103。数据元素位置2103的任何位置都可能是将数据元素存储至随机位置或存储至稀疏存储器(例如,稀疏阵列)中的各个位置的分散操作的潜在目标。在本示例中,数据元素位置2103内的各个位置被组织成行。例如,数据元素位置2103包括行2201至2206,其中每一行包括数据元素可以被分散到的八个潜在的目标位置。如图22B中所展示的,虽然存储在索引阵列2105中的索引值是按相继顺序存储的,但目标目的地位置通过这些索引值间接访问的数据元素可以通过分散操作以任意顺序存储在存储器中。
在本示例中,数据元素位置2103内的一些位置可以包括由一个或多个先前指令存储至存储器的数据,所述先前指令中的一些可以包括向量指令。例如,行2201中的数据元素S4790(在基址2104处)和S39、行2203中的数据元素S3218和S687、行2204中的数据元素S32和S289可以已经被存储在通过一个或多个先前的分散操作示出的位置中。多个行2202(行2201与行2203之间)或行2206(在行2204之外)也可以包括通过先前指令存储在这些行内的位置的数据元素。在一个实施例中,其内容在图22B中用“U”表示的数据元素位置可能未使用。在本示例中,这些数据元素位置还可不受其操作在这些图中描绘的示例形式的Load-Indices-and-Scatter指令的执行的影响。在一个示例中,这些数据元素位置可以包含空值。在另一示例中,这些数据元素位置可以是稀疏阵列内未填充的位置。
向量指令“LoadIndicesScatterAndPrefetchD(Addr A,Addr B,ZMMn,T1,32)(加载索引分散及预取D(地址A,地址B,ZMMn,T1,32))”可以使得在索引阵列2105中从位置0开始的十六个索引值被加载到索引寄存器(未示出)中以用于即将到来的分散操作。在本示例中,未针对所述指令指定任何掩码。这条指令的执行还可以使源向量寄存器ZMMn(2101)中的这十六个数据元素被存储至数据元素位置2103中使用索引阵列2105中从位置0开始的这十六个索引值所间接寻址的位置。在一个实施例中,这些可以并行执行或同时执行。这条指令的执行还可以使数据元素位置2105内的十六个位置的内容被预取到高速缓存中。更具体地,这条指令的执行可以使得使用索引阵列2105中从位置32处开始的这十六个索引值来计算十六个预取目标位置的地址,并且使得这些预取目标位置的内容被预取到二级(L2)高速缓存1824(其由高速缓存提示“T1”标识)。在本示例中,由所述指令的参数显式地指定发生预取的固定偏移距离(32)。
LoadIndicesScatterAndPrefetchD(ZMMn,Addr A,Addr B,T1,32)(加载索引分散及预取D(ZMMn,地址A,地址B,T1,32))指令的执行可以产生在图22B的底部处所示的结果。在本示例中,在这条指令的执行之后,存储在ZMMn寄存器2101中的这十六个数据元素S0至S15可以存储在数据元素位置2103内地址是基于基址2104和从索引阵列2105内的第一组十六个位置处检索的对应索引值计算的对应位置处。被分散到存储器的每个数据元素存储在与其索引值在索引阵列2105中的位置一致的位置中。例如,数据元素S0存储在ZMMn寄存器2101中的第一位置(位置0),并且索引阵列2105内的第一位置(位置0)中的索引值用于计算所述数据元素通过分散操作被存储的位置的地址(地址2207)。类似地,数据元素S1存储在ZMMn寄存器2101中的第二位置,索引阵列2105内的第二位置中的索引值用于计算数据元素S1通过分散操作被存储的位置的地址(地址2209),数据元素S5存储在ZMMn寄存器2101中的第六位置,并且索引阵列2105内的第六位置中的索引值用于计算数据元素S5通过分散操作被存储的位置的地址(地址2216),以此类推。
在本示例中,在对所述指令的执行之后,由所述指令预取的十六个数据元素D32至D47被示出在L2高速缓存1824内。在本示例中,预取到L2高速缓存1824的数据是恰好存储在作为后续分散操作的潜在目标的数据元素位置中的任意数据这些数据元素是从地址为基于从索引阵列2105内距用于所分散数据元素的索引值被检索的位置一段等于32的距离处的那十六个位置中检索的对应索引值而计算的那些位置处预取的。在一个实施例中,当从数据元素位置2103内的特定位置处预取数据元素时,所述预取可以使得相邻位置中的多个元素连同目标数据元素一起被预取并高速缓存在L2高速缓存1824中。例如,取决于所述预取的目标的大小和位置以及高速缓存行的长度,可以一次将4、8、16或32个数据元素预取到所标识高速缓存中。然而,为了简单起见,这未在图22B中展示。
图23展示了根据本公开的实施例的示例方法2300,所述方法用于从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散。方法2300可以由图1至图22中所示的元件中的任何一个来实施。方法2300可以由任何合适的标准来发起并且可以在任何合适的点来发起操作。在一个实施例中,方法2300可以在2305处发起操作。方法2300可以包括比所展示的这些步骤更多或更少的步骤。此外,方法2300可以按照与下文所展示的那些顺序不同的顺序来执行其步骤。方法2300可以在任何合适的步骤处终止。此外,方法2300可以在任何合适的步骤处重复操作。方法2300可以采用与方法2300中的其他步骤并行的方式或与其他方法的步骤并行的方式来执行其步骤中的任何一个。此外,方法2300可以被执行多次以执行从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散。
在2305处,在一个实施例中,可以接收并解码用于执行从索引阵列中加载索引并且基于这些索引从稀疏存储器中的各个位置进行预取,从而取得存储器中的所述位置的所有权以用于后续分散的指令。例如,可以接收并解码LoadIndicesAndPrefetchScatter指令。在2310处,指令以及所述指令的一个或多个参数可以被引导至SIMD执行单元以供执行。在一些实施例中,指令参数可以包括:存储器中的索引阵列的标识符或指向所述索引阵列的指针、存储器中的一组数据元素位置(包括可能是后续分散操作的目标的数据元素位置)的基址的标识符或指向所述基址的指针、对有待预取的数据元素大小的指示、对有待预取的最大数据元素数量的指示、指示数据元素应当被预取到高速缓存层级结构中的特定高速缓存的高速缓存提示、标识特定掩码寄存器的参数、或指定掩码类型的参数。
在2315处,在一个实施例中,可以开始处理第一潜在的load-index-and-prefetch。例如,可以开始在2320至2355中所示的步骤的第一次迭代,所述第一次迭代与存储器中的索引阵列中针对所述指令标识的第一位置(位置i=0)相对应。如果(在2320处)确定与索引阵列中的第一位置(位置0)相对应的掩码位未被置位,则可以针对这次迭代省略2320至2355中所示的步骤。在这种情况下,将不会预取存储器中使用索引阵列中的第一位置中的索引值所间接寻址的位置的值。
如果(在2320处)确定与索引阵列中的第一位置相对应的掩码位被置位或者尚未针对LoadIndicesAndPrefetchScatter操作指定掩码,则在2330处可以从索引阵列中的位置i(位置0)处检索执行预取的第一位置的索引值。在2335处,可以基于针对所述指令指定的基址与针对第一预取获得的索引值之和来计算目标预取位置的地址。在2340处,在所计算地址处的目标预取位置的内容可以被预取到由所述指令的高速缓存提示参数标识的高速缓存中。在一个实施例中,目标预取位置的内容可以使用读取所有权访问来预取。
如果(在2350处)确定存在更多有待执行的潜在预取,则在2355处可以开始处理下一个潜在的load-index-and-prefetch。例如,可以开始在2320至2355中所示的步骤中的第二次迭代,所述第二次迭代与索引阵列中的第二位置(位置i=2)相对应。可以针对具有下一个i值的每次附加迭代来重复2320至2355中所示的步骤,直到已经执行了最大迭代次数(i)。对于每次附加迭代,如果(在2320处)确定与索引阵列中的下一位置(位置i)相对应的掩码位未被置位,则可以针对这次迭代省略2320至2355中所示的步骤。在这种情况下,在2325处,将不会预取存储器中使用索引阵列中的位置i中的索引值所间接寻址的位置的当前内容。然而,如果(在2320处)确定与索引阵列中的下一位置相对应的掩码位被置位或者尚未针对LoadIndicesAndPrefetchScatter操作指定掩码,则在2330处可以从索引阵列内的下一位置处检索索引值。在2335处,可以基于针对所述指令指定的基址与针对下一个预取获得的索引值之和来计算存储器中当前内容将被预取的下一个位置的地址。在2340处,存储器中在所计算地址处的位置的内容可以被预取到指定高速缓存中。
在一个实施例中,迭代次数可以取决于指令的参数。例如,指令的参数可以指定索引阵列中的索引值的数量。这可以表示指令的最大循环索引值,并且因此,可以表示可由指令执行的最大预取数量。一旦已经执行了最大迭代次数(i),就可以引退指令(在2360处)。
在一个实施例中,LoadIndicesAndPrefetchScatter类型的操作可以从索引阵列加载索引、基于这些索引将元素分散至稀疏存储器中的各个位置、并且从可能潜在的为稍后时间的分散操作的目标的位置处预取其他元素。例如,形式为LoadIndicesAndPrefetchScatter的LoadIndicesAndPrefetchScatter类型的操作可以被执行用于从索引阵列加载索引、基于这些索引将元素分散至稀疏存储器中的各个位置、并且从可能潜在的为稍后时间的分散的目标的位置处预取其他元素。图24展示了根据本公开的实施例的示例方法,所述方法用于从索引阵列中加载索引、基于这些索引将元素分散到稀疏存储器中的各个位置、以及从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散。
方法2400可以由图1至图22中所示的元件中的任何一个来实施。方法2400可以由任何合适的标准来发起并且可以在任何合适的点来发起操作。在一个实施例中,方法2400可以在2405处发起操作。方法2400可以包括比所展示的这些步骤更多或更少的步骤。此外,方法2400可以按照与下文所展示的那些顺序不同的顺序来执行其步骤。方法2400可以在任何合适的步骤处终止。此外,方法2400可以在任何合适的步骤处重复操作。方法2400可以采用与方法2400中的其他步骤并行的方式或与其他方法的步骤并行的方式来执行其步骤中的任何一个。此外,方法2400可以被执行多次以执行从索引阵列中加载索引、基于这些索引将元素分散到稀疏存储器中的各个位置以及从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散。
在2405处,在一个实施例中,用于从索引阵列中加载索引、基于这些索引将元素分散到稀疏存储器中的各个位置、以及从存储器中的附加位置进行预取,从而取得存储器中的附加位置的所有权以用于后续分散的指令。例如,可以接收并解码LoadIndicesScatterAndPrefetch指令。在2410处,指令以及所述指令的一个或多个参数可以被引导至SIMD执行单元以供执行。在一些实施例中,指令参数可以包括:存储器中的索引阵列的标识符或指向所述索引阵列的指针、存储器中的一组潜在数据元素位置(包括可能是后续分散操作的目标的数据元素位置以及可能是当前预取操作的目标的其他数据元素位置)的基址的标识符或指向所述基址的指针、源寄存器(其可以是扩展向量寄存器)的标识符、对有待分散和/或预取的数据元素大小的指示、对有待分散和/或预取的最大数据元素数量的指示、指示数据元素应当被预取到高速缓存层级结构中的特定高速缓存的高速缓存提示、指定在索引阵列内(潜在地)用于在给定迭代期间分散数据元素的索引值位置与索引阵列内用于从可能为后续分散操作的目标的位置预取数据元素的索引值位置之间的固定距离的参数、标识特定掩码寄存器的参数、或指定掩码类型的参数。
在2415处,在一个实施例中,可以开始处理第一潜在的load-index-scatter-and-prefetch(加载索引分散及预取)。例如,可以开始在2420至2455中所示的步骤中的第一次迭代,所述第一次迭代与存储器中的索引阵列中针对所述指令标识的第一位置(位置i=0)相对应。如果(在2420处)确定与索引阵列中的第一位置(位置0)相对应的掩码位未被置位,则可以针对这次迭代省略2430至2435中所示的步骤。在这种情况下,存储在源寄存器中的第一位置(位置i=0)中的数据元素将不会由所述指令存储至存储器中使用索引阵列中的第一位置中的索引值间接寻址的位置。
如果(在2420处)确定与索引阵列中的第一位置相对应的掩码位被置位或者尚未针对LoadIndicesScatterrAndPrefetch操作指定掩码,则在2430处可以从索引阵列中的位置i(位置0)处检索有待分散的第一元素的索引值,并且可以计算第一元素将被分散的地址。在一个实施例中,可以基于针对所述指令指定的基址与针对有待分散的第一元素获得的索引值之和来计算有待分散的第一元素的地址。在2435处,有待分散的第一元素可以从由所述指令的参数标识的目的地寄存器的位置i(位置0)处被检索,并且被存储至存储器中在所计算地址处的位置。
在2440处,在一个实施例中,无论在第一次迭代期间是否执行步骤2430至2435中所示的操作,都可以从索引阵列中从位置i偏移针对所述指令指定的预取偏移距离的位置处检索有待预取的元素的索引值,并且可以计算有待预取的元素的地址。在一个实施例中,可以基于针对所述指令指定的基址与针对有待预取的元素获得的索引值之和来计算有待预取的元素的地址。在2445处,可以从存储器中在所计算地址处的位置预取有待预取的元素的地址,在此之后,所述地址可以存储在由所述指令的高速缓存提示参数标识的高速缓存中。在一个实施例中,预取目标位置的内容可以使用读取所有权访问来预取。
如果(在2450处)确定存在更多有待执行的潜在分散或预取,则在2455处可以开始处理下一个潜在的load-index-scatter-and-prefetch。例如,可以开始在2420至2455中所示的步骤中的第二次迭代,所述第二次迭代与索引阵列中的第二位置(位置i=2)相对应。可以在适当时针对具有下一个i值的每次附加迭代来重复2420至2455中所示的步骤,直到已经执行了最大迭代次数(i)。对于每次附加迭代,如果(在2420处)确定与索引阵列中的下一位置(位置i)相对应的掩码位未被置位,则可以针对这次迭代省略2430至2435中所示的步骤。在这种情况下,在2425处,在执行LoadIndicesScatterAndPrefetch指令之前存储在源寄存器中的位置i中的数据元素可能不会被存储至存储器。然而,如果(在2420处)确定与索引阵列中的下一位置相对应的掩码位被置位或者尚未针对LoadIndicesScatterAndPrefetch操作指定掩码,则在2430处可以从索引阵列中的位置i处检索要执行预取的下一个位置的索引值,并且可以计算存储器中要分散数据元素的位置的地址。在2435处,存储至源寄存器中的位置i中的数据元素可以存储至存储器的所计算地址处。在2440处,对于每次附加迭代,可以从索引阵列中从与位置i偏移指定距离的位置处检索有待预取的元素的索引值,并且可以计算要执行预取的位置的地址。在2445处,在所计算地址处的位置的内容的地址可以被从存储器中在所计算地址处的位置预取到由所述指令的高速缓存提示参数标识的高速缓存中。在一个实施例中,预取目标位置的内容可以使用读取所有权访问来预取。
在一个实施例中,迭代次数可以取决于指令的参数。例如,指令的参数可以指定索引阵列中的索引值的数量。这可以表示指令的最大循环索引值,并且因此,可以表示可由指令分散的最大数据元素数量以及可由指令预取的最大数据元素数量。一旦已经执行了最大迭代次数(i),就可以引退指令(在2460处)。
虽然若干示例描述了存储有待分散到扩展向量寄存器(ZMM寄存器)中的存储器的数据元素的LoadIndicesAndPrefetchScatter指令和LoadIndicesScatterAndPrefetch指令的形式,但在其他实施例中,这些指令可以对存储在具有少于512位的向量寄存器中的源数据元素进行操作。例如,如果有待分散的最大数据元素数量可以基于其大小以256位或更少位来存储,则LoadIndicesAndPrefetchScatter指令可以从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所述的处理器,其中,所述处理器包括:单指令多数据(SIMD)协处理器,用于实施所述指令的执行。
9.一种用于指令处理的方法,所述方法包括在处理器中:
接收指令;
对所述指令进行解码;
执行所述指令,包括:
从索引阵列中检索第一索引值,其中,所述索引阵列将位于存储器中基于所述指令的第一参数的索引基址处;以及
基于以下各项来计算第一元素地址,所述第一元素地址用于标识在所述存储器中将分散第一数据元素的位置:
所述第一索引值;以及
所述存储器中的一组潜在数据元素位置的数据基址,所述数据基址基于所述指令的第二参数;以及
将所述存储器中在所述第一元素地址处的位置中的内容预取到高速缓存中,包括:
执行读取所有权访问以用于后续分散;以及
引退所述指令。
10.如权利要求9所述的方法,进一步包括:
从所述索引阵列中检索第二索引值,所述第二索引值在所述阵列内与所述第一索引值相邻;
基于以下各项来计算第二元素地址,所述第二元素地址用于标识在所述存储器中将分散第二数据元素的位置,所述第二元素地址与所述第一元素地址不相邻:
所述第二索引值;以及
所述数据基址;
将所述存储器中在所述第二元素地址处的位置中的内容预取到所述高速缓存中,包括:
执行读取所有权访问。
11.如权利要求9所述的方法,进一步包括:
在检索所述第一索引值的同时从所述索引阵列中检索第二索引值,所述第二索引值在所述阵列内与所述第一索引值相邻;
基于以下各项在计算所述第一元素地址的同时计算第二元素地址,所述第二元素地址用于标识在所述存储器中将分散第二数据元素的位置,所述第二元素地址与所述第一元素地址不相邻:
所述第二索引值;以及
所述数据基址;
在预取所述第一元素地址处的所述位置的内容的同时将所述存储器中所述第二元素地址处的位置的内容预取到所述高速缓存中,包括:
执行读取所有权访问。
12.如权利要求9所述的方法,进一步包括:
在检索所述第一索引值之前,确定所述索引值阵列中用于从所述存储器中分散数据元素的位置与所述索引值阵列中用于从所述存储器中预取数据元素的位置之间的固定距离;
从所述索引阵列中检索第二索引值,其中:
所述第二索引值位于所述索引阵列内的最低阶位置处;以及
所述第二索引值在所述索引阵列内在所述第一索引值之前所述固定距离;
基于以下各项来计算第二元素地址,所述第二元素地址标识所述存储器中将分散第二数据元素的第二位置:
所述第二索引值;以及
所述数据基址;以及
从由所述指令的第三参数标识的源向量寄存器中的最低阶位置检索所述第二数据元素;以及
将所述第二数据元素存储至所述存储器中在所述第二元素地址处的位置。
13.如权利要求9所述的方法,进一步包括:
基于所述指令的第三参数,确定所述索引值阵列中用于从所述存储器中分散数据元素的位置与所述索引值阵列中用于从所述存储器中预取数据元素的位置之间的固定距离;
从所述索引阵列中检索第二索引值,其中:
所述第二索引值位于所述索引阵列内的最低阶位置处;以及
所述第二索引值在所述索引阵列内在所述第一索引值之前所述固定距离;
基于以下各项来计算第二元素地址,所述第二元素地址标识所述存储器中将分散第二数据元素的第二位置:
所述第二索引值;以及
所述数据基址;以及
从由所述指令的第三参数标识的源向量寄存器中的最低阶位置检索所述第二数据元素;以及
将所述第二数据元素存储至所述存储器中在所述第二元素地址处的位置。
14.如权利要求9所述的方法,进一步包括:
确定掩码寄存器中用于第二索引值的位未被置位,所述掩码寄存器是基于所述指令的第三参数而被标识的;
基于确定了所述掩码中的所述位未被置位而省略以下各项操作:
从由所述指令的第四参数标识的源向量寄存器中检索所述第二索引值;
基于所述第二索引值来计算第二元素地址,所述第二元素地址标识将分散第二数据元素的位置;
从所述源向量寄存器中检索所述第二数据元素;以及
将所述第二数据元素存储至所述存储器中在所述第二元素地址处的位置;以及
基于确定了所述掩码中的所述位未被置位而保持所述存储器中在所述第二元素地址处的所述位置中的所述值。
15.如权利要求9所述的方法,进一步包括:
将所述第一元素地址计算为所述第一索引值与所述存储器中的所述一组数据元素位置的所述基址之和。
16.如权利要求9所述的方法,其中:
数据元素被预取到其中的所述高速缓存是由所述指令的第三参数标识的。
17.一种用于指令处理的系统,包括:
前端,用于接收指令;
解码器,用于对所述指令进行解码;
核,用于执行所述指令,所述核包括:
第一逻辑,用于从索引阵列中检索第一索引值,其中,所述索引阵列将位于存储器中的基于所述指令的第一参数的索引基址处;
第二逻辑,用于基于以下各项来计算第一元素地址,所述第一元素地址用于标识在所述存储器中将分散第一数据元素的位置:
所述第一索引值;以及
所述存储器中的一组潜在数据元素位置的数据基址,所述数据基址基于所述指令的第二参数;以及
第三逻辑,用于将所述存储器中在所述第一元素地址处的位置中的内容预取到高速缓存中,所述第三逻辑包括:
第四逻辑,用于执行读取所有权访问以用于后续分散;以及
引退单元,用于引退所述指令。
18.如权利要求17所述的系统,其中,所述核进一步包括:
第五逻辑,用于从所述索引阵列中检索第二索引值,所述第二索引值将在所述阵列内与所述第一索引值相邻;
第六逻辑,用于基于以下各项来计算第二元素地址,所述第二元素地址用于标识在所述存储器中将分散第二数据元素的位置,所述第二元素地址将与所述第一元素地址不相邻:
所述第二索引值;以及
所述数据基址;
第七逻辑,用于将所述存储器中在所述第二元素地址处的位置中的内容预取到所述高速缓存,包括:
第八逻辑,用于执行读取所有权访问。
19.如权利要求17所述的系统,其中,所述核进一步包括:
第五逻辑,用于在检索所述第一索引值的同时从所述索引阵列中检索第二索引值,所述第二索引值将在所述阵列内与所述第一索引值相邻;
第六逻辑,用于基于以下各项在计算所述第一元素地址的同时计算第二元素地址,所述第二元素地址用于标识在所述存储器中将分散第二数据元素的位置,所述第二元素地址将与所述第一元素地址不相邻:
所述第二索引值;以及
所述数据基址;
第七逻辑,用于在预取所述第一元素地址处的所述位置的内容的同时将所述存储器中所述第二元素地址处的位置的内容预取到所述高速缓存中,所述第七逻辑包括:
第八逻辑,用于执行读取所有权访问。
20.如权利要求17所述的系统,其中,所述核进一步包括:
第五逻辑,用于从所述索引阵列中检索第二索引值,其中:
所述第二索引值将位于所述索引阵列内的最低阶位置处;以及
所述第二索引值在所述索引阵列内在所述第一索引值之前一段固定距离;
第六逻辑,用于基于以下各项来计算第二元素地址,所述第二元素地址用于标识第二数据元素将被分散到的位置:
所述第二索引值;以及
所述数据基址;以及
第七逻辑,用于从由所述指令的第三参数标识的源向量寄存器检索所述第二数据元素,其中,所述第二数据元素将从所述源向量寄存器中的最低阶位置被检索;
第八逻辑,用于将所述第二数据元素存储至所述存储器中在所述第二元素地址处的位置;以及
第九逻辑,用于确定所述固定距离。
21.如权利要求17所述的系统,其中,所述核进一步包括:
第五逻辑,用于从所述索引阵列中检索第二索引值,其中:
所述第二索引值将位于所述索引阵列内的最低阶位置处;以及
所述第二索引值在所述索引阵列内在所述第一索引值之前一段固定距离;
第六逻辑,用于基于以下各项来计算第二元素地址,所述第二元素地址用于标识第二数据元素将被分散到的位置:
所述第二索引值;以及
所述数据基址;以及
第七逻辑,用于从由所述指令的第三参数标识的源向量寄存器检索所述第二数据元素,其中,所述第二数据元素将从所述源向量寄存器中的最低阶位置被检索;
第八逻辑,用于将所述第二数据元素存储至所述存储器中在所述第二元素地址处的位置;以及
第九逻辑,用于基于所述指令的第四参数来确定所述固定距离。
22.如权利要求17所述的系统,其中,所述核进一步包括:
第五逻辑,用于确定掩码寄存器中用于第二索引值的位未被置位,所述掩码寄存器是基于所述指令的第三参数而被标识的;以及
第六逻辑,用于基于确定了所述掩码中的所述位未被置位而省略以下各项操作:
检索所述第二索引值;
基于所述第二索引值来计算标识将分散第二数据元素的位置的第二元素地址;
从由所述指令的第四参数标识的源向量寄存器中检索所述第二数据元素;以及
将所述第二数据元素存储至所述存储器中在所述第二元素地址处的位置;以及
第七逻辑,用于基于确定了所述掩码中的所述位未被置位而保持所述存储器中在所述第二元素地址处的所述位置中的所述值。
23.如权利要求17所述的系统,其中,所述核进一步包括:
第五逻辑,用于将所述第一元素地址计算为所述第一索引值与所述数据基址之和。
24.如权利要求17所述的系统,其中:
数据元素被预取到其中的所述高速缓存是由所述指令的第三参数标识的。
25.一种用于指令处理的设备,包括用于执行如权利要求9至16中所述的方法中任一种方法的装置。
CN201680070838.5A 2015-12-20 2016-11-18 用于加载-索引和预取-分散操作的指令和逻辑 Active CN108369516B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/975,809 US10509726B2 (en) 2015-12-20 2015-12-20 Instructions and logic for load-indices-and-prefetch-scatters operations
US14/975,809 2015-12-20
PCT/US2016/062688 WO2017112171A1 (en) 2015-12-20 2016-11-18 Instructions and logic for load-indices-and-prefetch-scatters operations

Publications (2)

Publication Number Publication Date
CN108369516A CN108369516A (zh) 2018-08-03
CN108369516B true CN108369516B (zh) 2023-06-20

Family

ID=59065094

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680070838.5A Active CN108369516B (zh) 2015-12-20 2016-11-18 用于加载-索引和预取-分散操作的指令和逻辑

Country Status (5)

Country Link
US (1) US10509726B2 (zh)
EP (1) EP3391203B1 (zh)
CN (1) CN108369516B (zh)
TW (1) TWI725073B (zh)
WO (1) WO2017112171A1 (zh)

Families Citing this family (14)

* 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
WO2019005169A1 (en) * 2017-06-30 2019-01-03 Intel Corporation APPARATUS AND METHOD FOR MEMORY OPERATIONS READY FOR DATA
KR102453542B1 (ko) 2018-02-21 2022-10-12 삼성전자주식회사 스킵 연산 모드를 지원하는 메모리 장치 및 그 동작 방법
US10521207B2 (en) * 2018-05-30 2019-12-31 International Business Machines Corporation Compiler optimization for indirect array access operations
US10684858B2 (en) * 2018-06-01 2020-06-16 Intel Corporation Indirect memory fetcher
US11334547B2 (en) * 2018-08-20 2022-05-17 Koninklijke Philips N.V. Data-oblivious copying from a first array to a second array
KR102654297B1 (ko) * 2018-08-27 2024-04-04 에스케이하이닉스 주식회사 컨트롤러 및 컨트롤러의 동작방법
US11126575B1 (en) * 2019-03-05 2021-09-21 Amazon Technologies, Inc. Interrupt recovery management
US10929132B1 (en) * 2019-09-23 2021-02-23 Intel Corporation Systems and methods for ISA support for indirect loads and stores for efficiently accessing compressed lists in graph applications
US20210406016A1 (en) * 2020-06-27 2021-12-30 Intel Corporation Matrix data scatter and gather by row
KR20220049396A (ko) * 2020-10-14 2022-04-21 삼성전자주식회사 간접 어드레싱을 위한 시스템, 장치 및 방법
US20220197656A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Instruction and logic for code prefetching
CN112579607B (zh) * 2020-12-24 2023-05-16 网易(杭州)网络有限公司 数据访问方法和装置、存储介质、电子设备
CN116909755B (zh) * 2023-09-13 2023-12-22 北京开源芯片研究院 一种访存方法、处理器、电子设备及可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013180738A1 (en) * 2012-06-02 2013-12-05 Intel Corporation Scatter using index array and finite state machine
CN103827813A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784711A (en) 1990-05-18 1998-07-21 Philips Electronics North America Corporation Data cache prefetching under control of instruction cache
US7080210B2 (en) * 2002-02-12 2006-07-18 Ip-First, Llc Microprocessor apparatus and method for exclusive prefetch of a cache line from memory
US6918010B1 (en) 2002-10-16 2005-07-12 Silicon Graphics, Inc. Method and system for prefetching data
JP5059609B2 (ja) 2004-08-17 2012-10-24 エヌヴィディア コーポレイション メモリへの様々なタイプのアクセスを予測するため、およびキャッシュメモリに関連付けられた予測を管理するための、システム、装置、および方法
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
US20080091921A1 (en) * 2006-10-12 2008-04-17 Diab Abuaiadh Data prefetching in a microprocessing environment
US8191056B2 (en) 2006-10-13 2012-05-29 International Business Machines Corporation Sparse vectorization without hardware gather/scatter
WO2008087779A1 (ja) 2007-01-19 2008-07-24 Nec Corporation アレイ型プロセッサおよびデータ処理システム
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
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
US20100115233A1 (en) 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US20120060016A1 (en) 2010-09-07 2012-03-08 International Business Machines Corporation Vector Loads from Scattered Memory Locations
US20120254591A1 (en) 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
WO2013095563A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions
WO2013095555A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data rearrangement control indexes generation processors, methods, systems, and instructions
CN104040489B (zh) 2011-12-23 2016-11-23 英特尔公司 多寄存器收集指令
US8996840B2 (en) 2011-12-23 2015-03-31 International Business Machines Corporation I/O controller and method for operating an I/O controller
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
GB2506902A (en) 2012-10-12 2014-04-16 Ibm Jump position and frame shifting in list based prefetching
US9501276B2 (en) 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
WO2014107148A1 (en) * 2013-01-03 2014-07-10 Intel Corporation Adaptive data prefetching
US9817762B2 (en) * 2014-05-20 2017-11-14 Oracle International Corporation Facilitating efficient prefetching for scatter/gather operations
JP6253514B2 (ja) 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103827813A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
WO2013180738A1 (en) * 2012-06-02 2013-12-05 Intel Corporation Scatter using index array and finite state machine
CN104303142A (zh) * 2012-06-02 2015-01-21 英特尔公司 使用索引阵列和有限状态机的分散

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Intel.Intel Xeon Phi Coprocessor Instruction Set Architecture Reference Manual.《Intel Xeon Phi Coprocessor Instruction Set Architecture Reference Manual》.2012, *

Also Published As

Publication number Publication date
CN108369516A (zh) 2018-08-03
TW201732547A (zh) 2017-09-16
US10509726B2 (en) 2019-12-17
WO2017112171A1 (en) 2017-06-29
US20170177346A1 (en) 2017-06-22
TWI725073B (zh) 2021-04-21
EP3391203A4 (en) 2019-08-21
EP3391203B1 (en) 2021-09-29
EP3391203A1 (en) 2018-10-24

Similar Documents

Publication Publication Date Title
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369516B (zh) 用于加载-索引和预取-分散操作的指令和逻辑
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN108351779B (zh) 用于安全指令执行流水线的指令和逻辑
CN108292229B (zh) 用于重新出现的相邻聚集的指令和逻辑
US10055256B2 (en) Instruction and logic for scheduling instructions
US20170177352A1 (en) Instructions and Logic for Lane-Based Strided Store Operations
US10338920B2 (en) Instructions and logic for get-multiple-vector-elements operations
US20170177363A1 (en) Instructions and Logic for Load-Indices-and-Gather Operations
US20170177360A1 (en) Instructions and Logic for Load-Indices-and-Scatter Operations
US10152321B2 (en) Instructions and logic for blend and permute operation sequences
US20170177350A1 (en) Instructions and Logic for Set-Multiple-Vector-Elements Operations
KR20160113236A (ko) 스토어들을 소팅 및 리타이어링하기 위한 명령어와 로직
CN108292271B (zh) 用于向量置换的指令和逻辑
US10061746B2 (en) Instruction and logic for a vector format for processing computations
US10133582B2 (en) Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor
US9928066B2 (en) Instruction and logic for encoded word instruction compression
EP3391197A1 (en) Instruction and logic for getting a column of data

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
GR01 Patent grant
GR01 Patent grant