CN109791487A - 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令 - Google Patents

用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令 Download PDF

Info

Publication number
CN109791487A
CN109791487A CN201780058647.1A CN201780058647A CN109791487A CN 109791487 A CN109791487 A CN 109791487A CN 201780058647 A CN201780058647 A CN 201780058647A CN 109791487 A CN109791487 A CN 109791487A
Authority
CN
China
Prior art keywords
instruction
processor
cache
memory
load
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.)
Granted
Application number
CN201780058647.1A
Other languages
English (en)
Other versions
CN109791487B (zh
Inventor
W·C·哈森普劳伽
C·J·纽本
小西蒙·C·史迪力
S·S·苏里
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 CN109791487A publication Critical patent/CN109791487A/zh
Application granted granted Critical
Publication of CN109791487B publication Critical patent/CN109791487B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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/0877Cache access modes
    • G06F12/0886Variable-length word access
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1054Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently physically addressed
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/681Multi-level TLB, e.g. microTLB and main TLB
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一个方面的处理器包括多个紧缩数据寄存器和用于对指令解码的解码单元。该指令用于指示多个紧缩数据寄存器中用于存储源紧缩存储器地址信息的紧缩数据寄存器。源紧缩存储器地址信息包括多个存储器地址信息数据元素。执行单元与解码单元和多个紧缩数据寄存器耦合,该执行单元响应于指令而用于:从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素;以及将被加载的多个数据元素存储在目的地存储位置中。该目的地存储位置不包括多个紧缩数据寄存器中的寄存器。

Description

用于将多个数据元素加载到除紧缩数据寄存器之外的目的地 存储位置的处理器、方法、系统和指令
政府权益的声明
本发明是在由国防部授予的合同号H98230-13-D-0124的政府支持下进行的。政府具有本发明的某些权益。
技术领域
本文中所描述的实施例总体上涉及处理器。具体而言,本文中所描述的实施例总体上涉及处理器的存储器访问能力。
背景技术
处理器常执行用于访问存储器的指令。例如,处理器可执行加载指令以从存储器读取或加载数据,和/或可执行存储指令以向存储器写入或存储数据。
对于至少一些应用和用途,快速地从存储器加载数据的能力可显著地影响性能。例如,这对于各种不同类型的存储器访问密集型应用通常可以是事实。
附图说明
通过参考以下描述以及用于说明实施例的附图,可最佳地理解本发明。在附图中:
图1是可操作用于执行索引加载指令的实施例的处理器的实施例的框图,该索引加载指令具有不在紧缩数据寄存器的集合中的目的地存储位置。
图2是执行索引加载指令的实施例的方法的实施例的流程框图,该索引加载指令具有不是紧缩数据寄存器的目的地存储位置。
图3是可操作用于执行索引加载指令的实施例的处理器的实施例的框图,该索引加载指令具有绕过高速缓存的非时效性加载操作。
图4是用于执行索引加载指令的合适的执行单元的示例实施例的框图。
图5是合适的区块化转换后备缓冲器(TLB)的示例实施例的框图。
图6是合适的并发加载操作分派单元的示例实施例的框图。
图7A是示例存储队列以及合适的扩展存储队列的示例实施例的框图。
图7B示出可按其提交图7A的示例的操作的顺序。
图8是图示合适的存储器排序语义的示例实施例的示例指令序列的流程框图。
图9是可操作以执行索引加载指令的实施例的处理器的详细的示例实施例的框图。
图10A-10C是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。
图11A-图11B是图示根据本发明的实施例的示例性专用向量友好指令格式和操作码字段的框图。
图12A-图12D是图示根据本发明的实施例的示例性专用向量友好指令格式及其字段的框图。
图13是寄存器架构的实施例的框图。
图14A是图示有序流水线的实施例以及寄存器重命名的乱序发布/执行流水线的实施例的框图。
图14B是处理器核的实施例的框图,该处理器核包括耦合至执行引擎单元的前端单元,并且执行引擎单元和前端单元两者都耦合至存储器单元。
图15A是单个处理器核以及它与管芯上互连网络的连接及其第二级(L2)高速缓存的本地子集的实施例的框图。
图15B是图15A的处理器核的部分的展开图的实施例的框图。
图16是可具有多于一个的核、可具有集成存储器控制器并且可具有集成图形器件的处理器的实施例的框图。
图17是计算机架构的第一实施例的框图。
图18是计算机架构的第二实施例的框图。
图19是计算机架构的第三实施例的框图。
图20是计算机架构的第四实施例的框图。
图21是根据本发明的实施例的使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
本文公开的是指令的实施例、用于执行指令的处理器的实施例、当执行指令时由处理器执行的方法的实施例、包含用于执行指令的一个或多个处理器的系统的实施例、以及提供指令的程序或机器可读介质的实施例。在一些实施例中,处理器可具有用于执行指令的逻辑(例如,解码单元、其他单元、或用于解码的其他逻辑、以及存储器访问单元、其他执行单元、其他单元、或用于执行或进行指令的其他逻辑)。在以下描述中,阐述了众多特定细节(例如,特定的指令操作、操作序列、存储器排序语义、处理器配置、微架构细节等)。然而,可在没有这些特定细节的情况下实施实施例。在其他实例中,未详细示出公知的电路、结构和技术,以避免使对本说明书的理解模糊。
图1是可操作用于执行索引加载指令102的实施例的处理器100的实施例的框图,该索引加载指令102具有不是架构寄存器的目的地存储位置124。在一些实施例中,该处理器可以是通用处理器(例如,在台式机、膝上型计算机、服务器和其他计算机系统中所使用类型的通用微处理器或中央处理单元(CPU))。替代地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器和数字信号处理器(DSP)。处理器可具有各种复杂指令集计算(CISC)架构、精简指令集计算(RISC)架构、超长指令字(VLIW)架构、混合架构、其他类型的架构中的任一种,或者具有不同架构的组合(例如,不同的核可具有不同的架构)。在一些实施例中,处理器可以被设置在至少一个集成电路或半导体管芯上。在一些实施例中,处理器可包括至少一些硬件(例如,晶体管、电路、存储微代码的非易失性存储器等等)。
在操作期间,处理器100可取出或以其他方式接收索引加载指令102。索引加载指令的一个示例是聚集指令。指令可表示处理器的指令集的宏指令、机器语言指令、或其他指令或控制信号。
在一些实施例中,索引加载指令102可显式地指定(例如,通过一个或多个字段或多组位)或以其他方式指示(例如,隐式地指示)源紧缩存储器地址信息110。如图所示,在一些实施例中,源紧缩存储器地址信息可任选地包括多个紧缩存储器索引(例如,I0、I1、I2和I3).类似地,在一些实施例中,索引加载指令可任选地显式地指定或以其他方式指示任选附加的存储器地址生成信息116,该任选附加的存储器地址生成信息116用于与存储器索引组合或以其他方式与存储器索引一起使用以生成完整的或有效的逻辑存储器地址。在其他实施例中,源紧缩存储器地址信息110可任选地包括源紧缩逻辑存储器地址(例如,完整的或有效的逻辑存储器地址),在这种情况下,可任选地忽略该任选附加的存储器地址生成信息116。为清楚起见,指令102用术语被称为“索引加载指令”,因为常使用索引,但是不存在必须使用索引的要求。类似地,在一些实施例中,索引加载指令可任选地显式地指定或以其他方式指示任选的目的地存储器地址信息118(例如,目的地存储器索引或目的地逻辑存储器地址)。当目的地存储位置124(当指令被执行时,结果紧缩数据126将被存储在该目的地位置124)任选地是存储器位置(或经高速缓存的存储器位置)时,可使用任选的目的地存器地址信息。在一些情况下,指令可具有一个或多个源和/或目的地操作数指定字段,用于指定用于提供这些操作数中的一个或多个的寄存器、存储器位置、或其他存储位置。在其他情况下,可任选地将这些操作数中的一个或多个存储在对于指令而言是隐式的(例如对于指令的操作码而言是隐式的)寄存器、存储器位置、或其他存储位置中。还可任选地使用此类方式的组合。
不同类型的任选附加的存储器地址生成信息116取决于特定存储器寻址模式而适合于不同实施例。作为示例,任选附加的存储器地址生成信息可表示这样的信息,当该信息与源紧缩存储器索引和/或任选的目的地存储器索引118中的每一个组合时可操作用于生成完整的或有效的虚拟线性或其他逻辑存储器地址。这样做所按照的确切方式可取决于特定架构以及所采用的存储器寻址机制。合适的存储器地址生成信息的示例包括但不限于比例因数、基址、段以及它们的各种组合。
如在所图示的实施例中所示,源紧缩存储器地址信息110可存储在紧缩数据寄存器的集合108中。可任选地将任选附加的存储器地址生成信息116和任选的目的地地址信息118存储在标量寄存器的集合114(例如,通用寄存器的集合、特殊存储器寻址寄存器等)中。替代地,可任选地将其他存储位置用于这些操作数中的一个或多个。紧缩数据寄存器和标量寄存器中的每一个可表示可操作以存储数据的管芯上和/或集成电路上存储位置。紧缩数据寄存器可以可操作以存储紧缩数据、向量数据或单指令多数据(SIMD)数据。紧缩数据寄存器和标量寄存器可表示架构可见或对软件和/或编程者可见的架构寄存器,并且/或者是由处理器的指令集中的指令指示以标识操作数的寄存器。这些架构寄存器与给定微架构中的其他非架构寄存器(例如,临时寄存器、重排序缓冲器、引退寄存器等)形成对照。可在不同的微架构中、以不同方式实现这些紧缩数据寄存器,并且它们不限于任何特定类型的设计。合适类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器以及它们的组合。合适的紧缩数据寄存器的和标量寄存器的特定示例包括但不限于图13中的紧缩数据寄存器1310和标量寄存器1325。
再次参考图1,处理器包括解码单元或解码器104。解码单元可被耦合以接收索引加载指令,并且可操作以对索引加载指令102解码。解码单元可输出反映、表示相对较高级别的索引加载指令和/或从相对较高级别的索引加载指令导出的一个或多个相对较低级别的指令或控制信号(例如,一个或多个微指令、微操作、微代码进入点、经解码的指令或控制信号等)。在一些实施例中,解码单元可包括用于接收索引加载指令的至少一个输入结构(例如,端口、互连或接口)、与该输入结构耦合的用于识别索引加载指令并对其进行解码的指令识别和解码逻辑、以及与该指令识别和解码逻辑耦合的用于输出一个或多个较低级别的指令或控制信号的至少一个输出结构(例如,端口、互连或接口)。可使用各种不同的机制来实现解码单元,各种不同的机制包括但不限于微代码只读存储器(ROM)、查找表、硬件实现方式、可编程逻辑阵列(PLA)和适用于实现解码单元的其他机制。在一些实施例中,解码单元可被包括在管芯上(例如,与执行单元106一起在管芯上)。在一些实施例中,解码单元可包括至少一些硬件(例如,晶体管、集成电路、或管芯上固件等)。
在一些实施例中,可任选地使用指令仿真器、变换器、变形器、解释器或其他指令转换模块(未示出),而不是直接将索引加载指令102提供给解码单元104。各种类型的指令转换模块能以软件、硬件、固件、或其组合来实现。在一些实施例中,指令转换模块可位于处理器外部,诸如例如,在分开的管芯上和/或存储器中(例如,作为静态的、动态的或运行时仿真模块)。作为示例,指令转换模块可接收可以是第一指令集中的索引加载指令,并且可将该索引加载指令仿真、变换、变形、解释或以其他方式转换为可以是不同的第二指令集中的一个或多个对应的中间指令或控制信号。可将第二指令集中的这一个或多个中间指令或控制信号提供给解码单元(例如,解码单元104),该解码单元可将它们解码为可由处理器的原生硬件(例如,一个或多个执行单元)执行的一个或多个较低级别的指令或控制信号。
再次参考图1,执行单元106与解码单元104、紧缩数据寄存器108和标量寄存器114耦合。在一些实施例中,执行单元可以在管芯或集成电路上(例如,与解码单元一起在管芯或集成电路上)。执行单元可接收表示索引加载指令和/或从索引加载指令导出的一个或多个经解码或以其他方式转换的指令或控制信号。执行单元也可被耦合以接收源紧缩存储器地址信息110、任选附加的存储器地址生成信息116以及任选的目的地存储器地址信息118。执行单元可以可操作以响应于索引加载指令和/或作为索引加载指令的结果(例如,响应于从指令解码出的一个或多个指令或控制信号和/或响应于指令被解码和/或响应于指令被提供给解码器)以执行或以其他方式进行索引加载指令的操作。
在一些实施例中,执行单元106和/或处理器100可以可操作以响应于索引加载指令102和/或作为索引加载指令102的结果来从存储器120聚集、以其他方式读取或以其他方式加载多个数据元素(例如,A、B、C和D)。当处理器与存储器一起被部署在计算机系统中时,处理器可以可操作以与存储器耦合;或者如果处理器和存储器两者都设置在同一片上系统(SoC)上,则处理器可与存储器耦合。可通过各种耦合机制来耦合处理器和存储器,这些耦合机制诸如例如一个或多个总线或其他互连、中枢、存储器控制器、芯片组组件、和它们的各种组合。在该示例中,数据元素是存储器(例如,主存储器或主要存储器),但是数据元素还可以或可任选替代地从次存储器或备份存储器、大容量存储设备、局域网、广域网、互联网连接的存储等被聚集。
在所图示的实施例中,基于和/或使用(任选地利用附加的寻址信息116)源紧缩存储器地址信息110(例如,四个存储器索引I0、I1、I2和I3)从存储器120加载四个数据元素(例如,A、B、C和D)。例如,可基于和/或使用和/或对应于第一索引I0从物理存储器地址或位置加载第一数据元素A,可利用第二索引I1从物理存储器地址或位置加载第二数据元素B,可利用第三索引I3从物理存储器地址或位置加载第三数据元素C,并且可利用第四索引I3从物理存储器地址或位置加载第四数据元素D。
如图所示,通常可从存储器中的非连续存储位置122加载数据元素(例如,A、B、C和D)。在一些情况下,非连续存储位置可以是相对广泛地分散或稀疏的。存在通常访问广泛分散或稀疏的数据的各种不同类型的应用和/或算法。例如,当处理稀疏矩阵或其他稀疏数据结构(例如,稀疏矩阵-向量乘法)时,情况可以如此。作为另一示例,当执行对大型和/或多维表或其他数据结构中的数据的大跨步访问时,情况可以如此。作为又一示例,在代数多重网格(AMG)算法中,情况可以如此。还尤其在大数据和/或高性能计算应用中找到各种其他示例。在此类应用和/或算法中,快速地从非连续的广泛分散或稀疏的存储器位置访问数据的能力可倾向于显著地影响性能。所希望和相信的是,所公开的方式可帮助改善许多此类应用和/或算法的性能,但是本发明的范围不限于此。
在一些实施例中,数据元素中被加载的每个数据元素可任选地与小于完整的高速缓存行的量的数据(例如,不大于一半的高速缓存行的量的数据)一起被加载,但是这不是必需的。例如,在一些实施例中,数据元素中被加载的每个数据元素可任选地单独被加载而无需附加数据,但是这不是必需的。例如,分别加载8位、16位、32位或64位的数据元素可仅涉及加载8位、16位、32位或64位的数据,而不是加载包含该数据元素的完整的高速缓存行(例如,512位的高速缓存行)。有利地,这可有助于更高效地利用可用的互连带宽和/或存储器访问带宽。附加地,这还可有助于降低功耗,因为当沿存储器层次结构被向上移动时,更少的位需要在互连或其他结构上被传递和/或需要被存储。
再次参考图1,在一些实施例中,执行单元106和/或处理器100可以可操作地响应于索引加载指令102和/或作为索引加载指令102的结果来将多个被加载的数据元素作为结果紧缩数据126存储在目的地存储位置124中。在一些实施例中,可将多个被加载的数据元素作为连续的128数据元素块(例如,A、B、C和D)存储在目的地存储器位置中。目的地存储位置中的结果紧缩数据可具有在顺序的、邻接的或以其他方式连续的数据元素位置或存储位置中的数据元素。有利地,连续的数据元素可提供紧凑且高效的格式以用于进一步处理。作为示例,该紧凑的格式可有助于允许所有数据元素被存储在单个高速缓存行中,和/或可有助于通过单条后续的向量寄存器加载指令将所有数据元素加载到紧缩数据寄存器中。
可任选地在不同实施例中使用不同的目的地存储位置。在各实施例中,目的地存储位置124可任选地是存储器120中的目的地存储器位置、用于对目的地存储器地址或位置进行高速缓存的高速缓存中的高速缓存行、或除高速缓存之外的非架构管芯上存储位置(例如,管芯上专用暂存器存储器、流缓冲器或其他管芯上微架构存储)。此类非架构管芯上存储位置可与高速缓存不同,因为此类非架构管芯上存储位置可能无法使用高速缓存一致性协议,可能不具有自动或自主的高速缓存行替换算法,等等。在一些实施例中,目的地存储位置124可以不位于紧缩数据寄存器108内。如在示图中由“X”所示,指令可不具有作为目的地存储位置124的目的地紧缩数据寄存器112。通常存在相对较少的紧缩数据寄存器。例如,取决于处理器,可以有约8个、16个、32个紧缩数据寄存器。通常,紧缩数据寄存器表示相对精确的资源。不将紧缩数据寄存器用于目的地存储位置的一个可能的优势在于,当数据元素正在被加载时,紧缩数据寄存器可以不被束缚潜在地达长持续时间,并且可以是空闲的以用于其他目的。通常具有显著更多数量的存储器位置或高速缓存位置,使得它们无法如要消耗的资源那么精确。同样,具有更多数量的目的地存储位置可任选地在需要时允许并发地执行相对大数量的索引加载指令。替代地,在其他实施例中,如果需要,则目的地存储位置可任选地是目的地紧缩数据寄存器。
执行单元106和/或处理器100可包括专门或特定的逻辑(例如,晶体管、集成电路或潜在地与固件(例如,存储在非易失性存储器中的指令)组合的其他硬件、和/或软件),该专门或特定的逻辑可操作用于执行索引加载指令102和/或响应于索引加载指令和/或作为索引加载指令的结果(例如,响应于从索引加载指令解码出的一个或多个指令或控制信号)来加载经索引的数据元素(例如,A、B、C、D)并存储结果紧缩数据126。作为示例,执行单元可包括加载-存储单元、聚集单元、存储器访问单元、执行引擎单元,等等。在一些实施例中,执行单元可包括:至少一个输入结构(例如,端口、互连、或接口),用于接收源操作数;电路或其他逻辑,与至少一个输入结构耦合,用于接收并处理源操作数,并从存储器加载数据元素;以及至少一个输出结构(例如,端口、互连、或接口),与电路或其他逻辑耦合,用于输出结果紧缩数据。在一些实施例中,执行单元可任选地与图4中的执行单元406类似或相同,但是本发明的范围不限于此。
为了避免使描述模糊,已示出和描述了相对简单的处理器100。然而,处理器可任选地包括其他处理器组件。例如,各种不同的实施例可包括针对图14B、图15A、图15B、图16中的任一图所示出和所描述的组件的各种不同的组合和配置。处理器的所有组件可耦合在一起以允许它们按预期操作。作为示例,考虑图14B,指令高速缓存单元1434可对指令进行高速缓存,指令取出单元1438可取出指令,解码单元1440可对指令进行解码,调度器单元1456可调度相关联的操作,存储器访问单元1464和/或执行引擎单元1450可执行指令,引退单元1454可以引退指令,等等。
图2是执行索引加载指令的实施例的方法230的实施例的流程框图,该索引加载指令具有不是紧缩数据寄存器的目的地存储位置。在各实施例中,可由处理器、指令处理装置、数字逻辑器件或集成电路来执行该方法。在一些实施例中,该方法230可由图1的处理器100和/或利用图1的处理器100和/或使用图1的指令102来执行。本文中针对处理器100和/或指令102所描述的组件、特征以及特定的任选细节也任选地应用于方法230。替代地,可由类似或不同的处理器或装置和/或在类似或不同的处理器或装置内和/或使用类似或不同的指令来执行方法230。而且,处理器100可执行与方法230相同、类似、或不同的方法。
该方法包括:在框231处,接收索引加载指令。在各方面,可在处理器或处理器的部分(例如,指令取出单元、解码单元、总线接口单元等)处接收该指令。在各方面,可从处理器外和/或管芯外的源(例如,从存储器、互连等)或从处理器上和/或管芯上的源(例如,从指令高速缓存、指令队列等)接收该指令。指令可指定或以其他方式指示存储源紧缩存储器地址信息的紧缩数据寄存器。源紧缩存储器地址信息可包括多个存储器地址信息数据元素。
该方法还包括:在框232处,响应于索引加载指令和/或作为索引加载指令的结果,从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素。
该方法还包括:在框233处,响应于索引加载指令和/或作为索引加载指令的结果,将多个被加载的数据元素存储在目的地存储位置中。在一些实施例中,目的地存储位置不包括紧缩数据寄存器。
所图示的方法230涉及架构操作(例如,那些从软件角度可见的操作)。在其他实施例中,该方法可任选地包括一个或多个微架构操作。作为示例,可乱序地取出、解码、调度指令,可访问源操作数,执行单元可执行微架构操作以实现该指令,等等。在一些实施例中,用于实现该指令的微架构操作可任选地包括相对于源存储器地址执行非时效性和/或非高速缓存加载,以加载数据元素(例如,以便有助于减少高速缓存污染),但是这不是必需的。在一些实施例中,用于实现该指令的微架构操作可任选地包括将结果紧缩数据的连续数据元素写入或存储到给定的高速缓存级别(例如,所指定的或隐式的高速缓存级别,其可以任选地是第二级即级别2(L2)高速缓存),但是这不是必需的。在一些实施例中,用于实现该指令的微架构操作可任选地包括下文中针对图3-图7以及图9进一步所示或所述的那些操作中的任一操作,但是本发明的范围不限于此。
图3是可操作用于执行索引加载指令302的实施例的处理器300的实施例的框图,该索引加载指令302具有绕过一个或多个高速缓存338、340的非时效性加载操作341。处理器可与图1中的处理器100相同、类似或不同。处理器300包括解码单元304和执行单元306,该解码单元304和执行单元306利用源紧缩存储器地址信息310、目的地存储器地址信息318和任选附加的存储器地址生成信息316。这些组件可任选地与图1的对应地命名的组件(包括针对其提及的所有变型和替代)类似或相同(例如,具有与图1的对应地命名的组件类似或相同的任何一个或多个特性)。为了避免使描述模糊,在下文中将主要描述图3的实施例的不同和/或附加的特性。
在操作期间,解码单元304可接收索引加载指令302,并对该索引加载指令302解码。在一些实施例中,索引加载指令可显式地指定(例如,通过一个或多个字段或多组位)或以其他方式指示(例如,隐式地指示)源紧缩存储器地址信息310(例如,紧缩存储器索引I0、I1、I2和I3)。在一些实施例中,索引加载指令可任选地显式地指定或以其他方式指示结果紧缩数据326将被存储在的目的地存储器地址信息318(例如,目的地存储器索引或目的地逻辑地址)。在一些实施例中,索引加载指令可任选地指定或以其他方式指示任选附加的存储器地址生成信息316,该任选附加的存储器地址生成信息316与源紧缩存储器索引和/或目的地存储器存储器索引一起使用以生成存储器地址。
执行单元306耦合至解码单元304。执行单元可接收一条或多条经解码的或以其他方式转换的指令、或从索引加载执行302解码出的和/或表示索引加载执行302的和/或从索引加载执行302导出的控制信号。执行单元也可被耦合以接收源紧缩存储器地址信息310、目的地存储器地址信息318、以及任选附加的存储器地址生成信息316。执行单元可以可操作以响应于索引加载指令302和/或作为索引加载指令302的结果(例如,响应于从指令解码出的一个或多个指令或控制信号和/或响应于指令被解码和/或响应于指令被提供给解码器)以执行索引加载指令的操作。
在一些实施例中,执行单元306和/或处理器300可操作地响应于索引加载指令302和/或作为索引加载指令302的结果来基于和/或使用对应的存储器地址信息(例如,存储器索引I0、I1、I2、I3、以及任选附加的存储器地址生成信息316)从存储器320加载多个数据元素(例如,A、B、C和D)。随后,可如先前所描述经常从潜在不连续的存储器位置加载数据元素。在一些实施例中,对于数据元素中的每个数据元素可任选地加载小于完整的高速缓存行的量的数据和/或数据元素中的每个数据元素可任选地单独被加载而没有任何附加的相邻数据元素。有利地,如先前所描述,这可有助于更好地利用互连和/或存储器访问带宽和/或降低功耗。
在一些实施例中,可任选地通过非时效性或非高速缓存加载操作341来加载数据元素(例如,A、B、C、D)。处理器可具有至少一个高速缓存338,或任选地包括高速缓存层次结构336,该高速缓存层次结构包括在两个或更多个高速缓存级别上的两个或更多个高速缓存。在所图示的特定实施例中,高速缓存层次结构包括第一级即级别1(L1)高速缓存338以及第二级即级别2(L2)高速缓存340。其他实施例可任选地具有更少或更多的高速缓存级别。高速缓存在它们与执行单元306和/或执行单元被包括在其中的核的相对接近度方面可有所不同。L1高速缓存可最接近执行单元或核,而L2高速缓存可第二接近执行单元或核。在另一实施例中,可任选地存在附加的第三级即级别3(L3)高速缓存(未示出),其进一步远离执行单元或核。高速缓存中的任一高速缓存可专用于对应的核,或可由两个或更多个核共享。通常,最低的高速缓存级别中的一个或多个(例如,L1高速缓存,并且在一些情况下,L2高速缓存)可专用于核,而最高的高缓存级别中的一个或多个(例如,L3高速缓存,并且在一些情况下,L2高速缓存)可由两个或更多个核共享(例如,被用于对用于两个或更多个核的数据进行高速缓存),但是这不是必需的。
L1高速缓存338和L2高速缓存340可表示相对小的快速访问本地存储,该相对小的快速访问本地存储相比存储器320更靠近执行单元306和/或执行单元被包括在其中的核。在操作期间,高速缓存可用于对来自存储器的数据中的已经被加载到处理器中的部分进行高速缓存或以其他方式进行存储。随后,当处理器想要从存储器加载数据,或将数据写入在存储器中时,可首先检查高速缓存来看该数据的副本是否已经被存储在高速缓存中。如果数据已经被存储在高速缓存中,则可迅速从高速缓存访问该数据,这可有助于避免对来自存储器的数据的较慢的访问。一般而言,访问处于较低高速缓存级别处的高速缓存中的数据比访问处于较高高速缓存级别处的高速缓存中的数据更快。通常,处于较低高速缓存级别处的高速缓存比处于较高高速缓存级别处的高速缓存小。相应地,高速缓存、尤其是处于最低高速缓存级别处的高速缓存可提供有价值的存储空间,该有价值的存储空间如果被有效利用可有助于改善性能。
为了使高速缓存338、340是最有效的,保持它们填充有可能在不久的将来再次需要的相关数据一般是重要的。高速缓存行替换算法和策略典型地用于随着时间的推移来替换高速缓存行,使新高速缓存行具有新数据。高速缓存行替换算法和策略常至少部分地基于数据的年龄和/或该数据近来多近被使用来确定用于驱逐的候选高速缓存行。对于此的一个原因是对存储器中的数据的访问常呈现出被称为“时域局部性”的性质,在“时域局部性”下,已被使用的数据在相对短的时间段内常被重新使用。此外,常规意义上一般从存储器加载完整的或整个高速缓存行的数据,并将完整的或整个高速缓存行的数据存储在高速缓存中,而不是仅加载和存储立即需要的高速缓存行的特定的各个数据元素或多个部分。对于此的一个原因是对存储器中的数据的访问常呈现出被称为“空间局部性”的性质,在“空间局部性”下,靠近或邻近所需要的给定数据片段的数据在相对短的时间段内也将常常需要。
高速缓存338、340还实现高速缓存一致性机制或协议以有助于确保高速缓存中的数据被一致地管理并在适当时刻被写回到系统存储器。这可有助于确保系统中的所有核、处理器或其他实体一致地查看正确版本的数据。合适的高速缓存一致性协议的示例包括但不限于MESI、MOSI、MOESI等等。MESI协议包括四种状态,即修改(M)、独占(E)、共享(S)以及无效(I),这些状态由两个MESI位指示。MOSI协议利用拥有(O)状态替代独占(E)状态。MOESI协议利用独占(E)状态和拥有(O)状态两者。修改状态指定脏高速缓存行。
再次参考图3,在一些实施例中,可任选地通过非时效性或非高速缓存加载操作341来将数据元素(例如,A、B、C和D)从存储器加载到处理器。非时效性或非高速缓存加载操作对于(例如,从源紧缩存储器地址信息310导出的)源存储器地址可以使得不为高速缓存层次结构336的高速缓存338、340中的任何高速缓存中的被加载的数据元素分配高速缓存行,并且可不将被加载的数据元素存储在高速缓存中的任何高速缓存中。也就是说,在一些实施例中,就涉及到源存储器地址而言,这些加载可绕过高速缓存。
如果加载操作不被执行为非时效性的或非高速缓存的,则在一些情况下,被加载的数据元素(例如,A、B、C和D)中的每一个可潜在地驻留在存储器中的不同高速缓存行中,当数据元素广泛地分散或是稀疏的时尤其如此。在此类情况下,加载这些数据元素中的每个数据元素会使不同的高速缓存行从高速缓存层次结构被驱逐,从而为具有被加载数据元素的高速缓存行腾出空间。此外,通常可将L1高速缓存用于被加载的数据元素,该L1高速缓存典型地是最小且最快的访问高速缓存。如图所示,如果不使用非时效性加载操作341,则潜在地四个不同的高速缓存行可被存储在L1高速缓存中用于四个数据元素A、B、C和D。其他索引加载或聚集指令可加载甚至更多数据元素,诸如例如,8个、16个或甚至更多数据元素,这导致甚至更多高速缓存行按顺序被驱逐以为被加载的数据元素腾出空间。尤其在被加载的数据元素具有相对低的空间和/或时域局部性(例如,当数据元素是广泛地分散的或是稀疏的)时,这会倾向于降低高速缓存的有效性。在此类情况下,具有相对更多空间和/或时域局部性的高速缓存行的数据(例如,这些数据相对更可能在不久的将来被重新使用)会被驱逐,以为具有相对更少空间和/或时域局部性的高速缓存行的数据(例如,这些数据相对较不可能在不久的将来被重新使用)腾出空间。这可有效地表示较少的相关数据对高速缓存的污染。然而,如在示图中由“X”所示,就涉及到源存储器地址而言,非时效性或非高速缓存加载操作341可不使高速缓存行被分配给被加载的数据元素。
非时效性或非高速缓存加载操作341还可有助于减少为了实现索引加载指令302所需的资源(例如,微架构资源)的数量。实现常规聚集指令(例如,其不使用非时效性加载操作341)的一项挑战在于,这些聚集指令典型地需要使用大量微架构资源。此外,对于此类常规聚集指令,当从存储器聚集数据元素时,这些资源倾向于被束缚达相对长的持续时间。需要相对大量的资源来实现常规聚集指令的一个重要原因在于,一般需要使用微架构资源来跟踪用于来自源存储器地址中的每个源存储器地址的加载中的每个加载的高速缓存一致性簿记信息。作为示例,对于来自源存储器地址中的每个源存储器地址的这些加载中的每个加载,可能需要不同的加载缓冲器条目、未决存储器请求队列中的不同条目,等等。尤其是在每个此类常规聚集指令聚集多个(例如,4个、8个、16个或更多个)数据元素时,这会倾向于束缚大量微架构资源,这进而会倾向于限制在特定时刻来自核的可以是未决的聚集指令的数量。
然而,在一些实施例中,通过执行非时效性或非高速缓存加载操作341,处理器可以不需要使用那么多资源(例如,用于高速缓存一致性簿记信息的微架构资源)。例如,在一些实施例中,由于非时效性地或非高速缓存式地执行加载,可以不需要使用一些资源来跟踪来自源存储器地址中的每个源存储器地址的加载中的每个加载,而仅跟踪被加载的数据要被存储到何处(例如,单个目的地存储位置而不是4个、8个或16个源存储位置)。有利地,这可有助于降低对微架构资源的压力和/或可有助于在无需显著增加处理器的微架构资源数量的情况下允许更多(或任选地,甚至多得多的)索引加载指令同时并发地是未决的。在一个可能的用例中,这可允许功率节省,因为单个核或核的小子集可用于加载完全使存储器访问带宽饱和所需的所有数据,这可允许任选地对一个或多个其他核断电(例如,而不是那些核也需要运行以使存储器访问带宽饱和)。
在一些实施例中,就涉及到源存储器地址而言,指令可显式地指定(例如,具有一个或多个位或具有字段以显式地指定)将(例如,通过非时效或非高速缓存加载操作)非时效性地或非高速缓存式地加载数据元素。例如,指令的一个或多个位或字段可配置为第一值(例如,单个位可被置位为二进制一)以指示将非时效性地加载数据元素,或指令的一个或多个位或字段可配置为不同的第二值(例如,单个位可被清除为二进制零)以指示将时效性地加载数据元素。在其他实施例中,就涉及源存储器地址而言将(例如,通过非时效性或非高速缓存加载操作341)非时效性地或非高速缓存式地加载数据元素对于指令可任选地是隐式的(例如,对指令的操作码是隐式的)。在其他实施例中,可任选地支持两个不同的操作码,并且对于这些操作码中的一个操作码,将非时效性地加载数据元素可以是隐式的,而对于另一个操作码,将时效性地加载数据元素可以是隐式的。具有时效性地或非时效性地执行加载的能力可允许编程器、编译器、动态二进制转换器等(例如,基于数据的所估计或所感知的空间和/或时域局部性)更好地管理高速缓存。
在一些实施例中,数据元素中被加载的每个数据元素可任选地与小于完整的高速缓存行的量的数据(例如,不大于一半的高速缓存行的量的数据)一起被加载,但是这不是必需的。例如,在一些实施例中,数据元素中被加载的每个数据元素可任选地单独地被加载而无需附加数据,但是这不是必需的。有利地,这可有助于更高效地利用可用的互连带宽和/或存储器访问带宽和/或可有助于降低功耗。
再次参考图3,在一些实施例中,执行单元306和/或处理器300可以可操作地响应于索引加载指令302和/或作为索引加载指令302的结果来将多个被加载的数据元素作为结果紧缩数据326存储在目的地存储器地址的高速缓存行324副本或存储器320中的位置319中。在一些实施例中,这可通过时效性存储操作343来实现。在一些实施例中,可将被加载的数据元素存储在连续的、序列化的或邻接的数据元素位置中,这可允许所有数据元素被存储在单个高速缓存行中。在所图示的示例实施例中,高速缓存行324是L2高速缓存340,但这不是必需的。对于使用L2高速缓存(或替代地,L3高速缓存)而不是L1高速缓存的一个可能的原因在于,L2高速缓存(和L3高速缓存)以便相对较大且一般是较慢的访问,使得相比束缚L1高速缓存中的高速缓存行,束缚L2高速缓存(或L3高速缓存)中的高速缓存行达索引加载指令的持续时间可对性能具有相对更小的影响。另一可能的原因在于,L2高速缓存和L3高速缓存相对更远地被移离核的定时约束。替代地,如果需要,则可任选地使用L1高速缓存。在一些实施例中,高速缓存行324可任选地配置成当正在执行加载时是不可读取且不可驱逐的直到完成加载。
在一些实施例中,使用给定的高速缓存或高速缓存级别(例如,在一些实施例中,该给定的高速缓存或高速缓存级别可以不是L1高速缓存)来对结果紧缩数据进行高速缓存对于指令可以任选地是隐式的(例如,对指令的操作码是隐式的)。在一些实施例中,不同的索引加载指令(例如,不同操作码)可任选地具有不同的隐式高速缓存级别(例如,第一操作码可隐式地指示L1高速缓存,不同的第二操作码可隐式地指示L2高速缓存,进一步不同的第三操作码可隐式地指示L3高速缓存,进一步不同的第四操作码可隐式地指示存储器(例如,供在非时效性或非高速缓存存储中使用))。
在其他实施例中,索引加载指令102可任选地具有一组一个或多个位或可具有字段(例如,高速缓存级别指示字段)以指示要将结果紧缩数据高速缓存在给定的高速缓存或高速缓存级别。如本文中所使用,术语“字段”是指不需要一定是连续的一个或多个位(例如,物理上分开的位可在逻辑上表示字段)。可根据各种可能的约定任意地将值映射或指派到不同的高速缓存或高速缓存级别。作为一个示例,2位的字段值‘00’可指示L1高速缓存,值‘01’可指示L2高速缓存,值‘10’可指示L3高速缓存,并且值‘11’可指示存储器(例如,供在非时效性或非高速缓存存储中使用)。作为另一示例,1位的字段值‘0’可指示L2高速缓存,并且值‘1’可指示存储器(例如,供在非时效性或非高速缓存存储中使用)。这可允许编译器或编程器(例如,基于数据的所感知的空间和/或时域局部性)调整高速缓存级别。
图4是用于执行索引加载指令的合适的执行单元406的示例实施例的框图。执行单元具有经耦合以接收源紧缩存储器地址信息410和基址416的输入。在该示例中,源紧缩存储器地址信息具有八个紧缩存储器索引I0至I7。执行单元包括各自都经耦合以接收存储器索引中的不同存储器索引和基址的一组八个加法器。八个加法器中的每个加法器可操作用于将该加法器的对应存储器索引应用于基址以生成对应的虚拟或其他逻辑存储器地址(LA)。八个索引I0至I7被转换为八个对应的逻辑存储器地址LA0至LA7。执行单元包括用于存储逻辑存储器地址的临时地址寄存器447。
执行单元还任选地包括用于存储掩码的掩码寄存器451。掩码包括用于存储器索引中的每个存储器索引的一个掩码元素,在该情况下为单个位。例如,具有八个掩码位。最初,根据一种可能的约定,将所有掩码位设置为二进制一。掩码元素选择器452与掩码寄存器耦合。掩码元素选择器可顺序地选择掩码元素。例如,掩码元素选择器可在掩码寄存器的与最低有效的存储器索引对应的一端处开始,并且顺序地朝该掩码寄存器的另一端工作。地址选择器单元448与掩码元素选择器耦合。地址选择器单元可以可操作用于从与来自掩码寄存器的所选择的掩码元素对应的地址临时寄存器选择一个或多个(例如,1个、2个、3个、4个、5个、6个、7个或8个)逻辑存储器地址。地址选择器可将所选择的(从1个到8个)逻辑存储器地址输出到访问地址单元449。访问地址单元可在其输出处输出或提供一个或多个(例如,1个、2个、3个、4个、5个、6个、7个或8个)逻辑存储器地址(例如,输出或提供到一个或多个TLB)。执行单元406被设计成顺序地输出各个逻辑存储器地址。在其他实施例中,执行单元可以可操作用于并发地输出两个或更多个逻辑存储器地址,或任选地并发地输出逻辑存储器地址的整个源紧缩存储器地址信息量。
图5是合适的区块化的转换后备缓冲器(TLB)555的示例实施例的框图。至少两个虚拟线性或其他逻辑存储器地址553可被输出到区块化的TLB 555。在所图示的示例中,第一逻辑存储器地址553-1至第N逻辑存储器地址553-N是输入。在各实施例中,可任选地并发地输入2个、4个、8个或16个逻辑存储器地址。在一些实施例中,可任选地并发地输入索引加载指令的所有逻辑存储器地址(例如,4个、8个、16个或32个),但是这不是必需的。
区块化的TLB包括第一TLB区块556-1至第N TLB区块556-N,其中区块的数量(N)至少为2。在各实施例中,可任选地存在2个、3个、4个、5个、6个、7个、8个、多于8个、或16个TLB区块,但是本发明的范围不限于此。在一些实施例中,可任选地存在数量与索引加载指令的逻辑存储器地址的数量一样多的TLB区块,但是这不是必需的。没有使用数量与逻辑存储器地址输入的数量一样多的TLB区块的要求。
可能需要将逻辑存储器地址转换为对应的物理存储器地址以在存储器中标识适当的物理页。在使用期间,TLB区块中的每个TLB区块可以可操作用于对已经被执行的逻辑存储器地址至物理存储器地址转换进行高速缓存。例如,在已经执行了页表遍历以将逻辑地址转换为物理地址之后,可将地址转换高速缓存在区块化的TLB中。如果在足够短的时间段内再次需要该地址转换,则可迅速从区块化的TLB检取该地址转换而无需再次执行较慢的页表遍历。典型地,每个TLB区块可具有用于存储不同地址转换的不同条目。如图所示,第一TLB区块可具有第一条目557-1(例如,存储第一逻辑地址至物理地址映射)至第M条目557-M。类似地,第N TLB区块可具有第一条目558-1(例如,存储逻辑地址至物理地址映射)至第M条目558-M。
在一些实施例中,TLB区块中的每个TLB区块可与转换的不同(例如,互斥的)集合对应。例如,在一些实施例中,不同TLB区块的地址可以是彼此交织的地址。可确定映射或指派到对应的逻辑地址的适当的TLB区块,并且这些适当的TLB区块可对被寻找的转换进行高速缓存。如图所示,在一些实施例中,可将逻辑地址提供给交叉或其他互连599,该交叉或其他互连599可用于将逻辑地址路由到适当的TLB区块。
被寻找的地址转换将被存储在对应的TLB区块中,或将不被存储在对应的TLB区块中。当适当的地址转换被存储在对应的TLB区块中时,“命中”可发生。相反,当适当的地址转换不被存储在对应的TLB区块中时,“未命中”可发生。在命中560的情况下,可从TLB条目检取地址转换,并且对应的物理存储器地址可被输出并进一步被用于访问存储器中的页。未命中561可被定向到存储器管理单元(MMU)562或MMU 562的页未命中处置器。MMU可以可操作用于执行页表遍历来确定转换。例如,MMU可访问总体上表示层级式分页结构的页表的集合563。MMU可以可操作用于“遍历”或进展通过页表以定位页转换。可使用所确定的地址转换并将其存储在区块化的TLB中。
在一些情况下,在给定周期上,多个逻辑地址可映射到同一TLB区块,或者无一逻辑地址可映射至给定的TLB区块。在前一种情况下,可串行地处理逻辑地址。在后一种情况下,给定的TLB区块在那个周期上可以空闲。然而,只要至少两个逻辑地址被映射到至少两个不同的对应TLB区块并由至少两个不同的对应TLB区块服务,执行地址转换时的至少一些并发性或并行性就可发生。有利地,这可有助于增加执行索引加载指令的吞吐量或性能。然而,区块化TLB 555的使用是任选的而不是必需的。
图6是合适的并发加载操作分派单元664的示例实施例的框图。并发加载操作分派单元可经耦合以接收第一物理存储器地址659-1至第N物理存储器地址659-N,其中,物理存储器地址的数量(N)至少为2。在各实施例中,物理存储器地址的数量可任选地是2个、3个、4个、5个、6个、7个、8个、至少8个、16个、或32个,但是本发明的范围不限于此。在一些实施例中,对于索引加载指令,可任选地存在数量与源存储器地址的数量一样多的物理存储器地址(例如,4个、8个、16个或32个),但是这不是必需的。
并发加载操作分派单元664还可经耦合以接收指示索引加载指令的目的地存储位置的信息665。在一些实施例中,在目的地存储位置在高速缓存中的高速缓存行中时,该信息可包括具有该高速缓存的核的编号(核#)、以及用于该高速缓存行的集合和通路。可任选地以不同方式来指示其他目的地存储位置。例如,可由不同的存储位置索引、地址或其他编号来指示管芯上专用暂存器存储器中的不同存储位置。
在一些实施例中,并发加载操作分派单元664可以可操作用于并发地和/或并行地发起或分派多个加载操作667。在一些实施例中,并发加载操作分派单元可以可操作用于对于所接收的物理存储器地址中的每个物理存储器地址和/或对于索引加载指令的不同的源存储器地址中的每个源存储器地址并发地和/或并行地发起或分派不同的加载操作。在一些实施例中,这些加载操作可以任选地是非时效性的先加载再写入操作(NTLW),但是本发明的范围不限于此。就涉及到源存储器地址而言,NTLW可绕过(多个)高速缓存,如先前结合图3所描述(例如,以有助于减少高速缓存污染和/或有助于减少用于跟踪来自源存储器地址的加载的高速缓存一致性簿记或其他微架构资源的数量)。
如在所图示的实施例中所示,可分派第一NTLW 667-1,该第一NTLW 667-1具有作为其源存储器地址的第一物理存储器地址659-1(PA_1),指示目的地存储位置(例如,核#、集合、和通路),并指示(例如,该第一NTLW 667-1导致被加载的数据元素要被存储在的结果紧缩数据和/或目的地存储位置的)其对应的通道(lane_1)。类似地,并发地和/或并行地,可分派第N NTLW 667-N,该第N NTLW 667-N具有作为其源存储器地址的第N物理存储器地址659-N(PA_N),指示相同目的地存储位置(例如,核#、集合、和通路),并指示(例如,该第NNTLW 667-N导致被加载的数据元素要被存储在的结果紧缩数据和/或目的地存储位置的)其对应的通道(lane_N)。作为示例,与源紧缩存储器地址信息的最低有效的存储器索引对应的加载操作可指示最低有效的通道,与次低有效的存储器索引对应的加载操作可指示次低有效的通道,以此类推。如图所示,与PA_1和lane_1对应的加载操作可加载数据元素A,并执行第一写入668-1将该数据元素A存储到目的地存储位置的lane_1。类似地,与PA_N和lane_N对应的加载操作可加载数据元素D,并执行第N写入668-N将该数据元素D存储到目的地存储位置的lane_N。
有利地,并发加载操作分派单元664可有助于改善索引加载指令的分派分量加载操作的速度和并发性,这可有助于提高执行索引加载指令的吞吐量或性能。此外,在一些实施例中,可任选地存在多个此类并发加载操作分派单元。例如,在一些多核和/或多片实施例中,对于每个核和/或每个片可任选地存在并发加载操作分派单元。作为示例,并发加载操作分派单元可任选地位于和/或被耦合在用于核和/或片的对应标签目录附近。可基于索引加载指令的目的地物理地址来确定用于索引加载指令的并发加载操作分派单元。仅一个核和/或片及其相关联的并发加载操作分派单元可使那个物理地址“归属”(“home”)。在一些实施例中,用于不同核和/或片的不同并发加载操作分派单元当前可各自为不同的对应索引加载指令分派加载操作,这可进一步有助于提高并发性和/或并行性的量。
图7A是示例存储队列770以及合适的扩展存储队列771的示例实施例的框图。所图示的存储队列具有16个条目。多个存储操作(例如,S1、S2、S4、S5、S6、S8、S9、S11、S12、S13、S14、S15)在条目中排队。在所图示的实施例中,头指针772正指向朝向存储队列的顶部的条目,以指示要引退的来自存储队列的下一存储操作。尾指针773正指向朝向存储队列的底部的条目以指向被排队的最后存储操作。
一般而言,存储队列中的条目的数量可能倾向于是有限的。不存在更多存储队列条目的一个重要原因在于,它们经常以相对大面积和/或大功耗的结构来实现。例如,当存储队列的条目利用内容可寻址存储器(CAM)来实现时,以其他方式可操作用于支持存储队列的条目中的存储操作向后续加载操作的存储至加载转发等等情况时,情况尤其可能倾向于如此。在此类情况下,为了避免增加存储队列的面积和/或功耗,将附加条目包括在存储队列中可能是不尽如人意的。结果,对于许多应用尤其是存储器访问密集型应用,在存储队列中可能没有如所期望那么多的条目。
在一些实施例中,扩展存储队列771可用于将与如本文中所公开的索引加载指令的索引加载操作排队。在一些实施例中,扩展存储队列可将索引加载操作从存储队列转移,使得这些索引加载操作不需要消耗存储队列中的任何条目。如在所图示的示例中所示,在扩展存储队列中对32个索引加载操作(每个索引加载操作与不同的对应索引加载指令的目的地存储位置对应)排队,但是这仅是一个说明性示例。这32个索引加载操作被分组为三个不同的组,13个在最上面的组(G3)中,7个在中间的组(G7)中,以及12个在最下面的组(G10)中,但是这仅是一个说明性示例。
在一些实施例中,可将索引加载操作按相对于彼此的顺序、且按相对于存储队列中的存储操作的顺序从扩展存储队列引退或以其他方式提交。在提交操作之前,可搜索或检查存储队列和扩展存储队列两者以确定哪个队列当前对更高级的操作排队,随后,可提交在存储队列或扩展存储队列中的该更高级的操作。由于索引加载指令可将多个被加载的数据元素收集到一个连续的目的地存储位置(例如,一个高速缓存行)中,因此扩展存储队列可利用以下优势:多个存储操作去往相同的连续目的地存储位置,并且将整个集合表示为扩展存储队列中的相对于来自于存储队列的存储被处理而被排序的一个位置。
图7B示出可按其提交图7A的示例的操作的顺序。首先,可按顺序从存储队列一次一个地提交存储操作S1和S2,随后,可从存储队列提交存储操作S2,随后,在使控制返回到存储队列之前,可按顺序从扩展存储队列一次一个地提交索引加载操作的最上面的组(S3)。接下来,可按顺序从存储队列一次一个地提交存储操作S4、S5和S6,随后,在使控制返回到存储队列之前,可按顺序从扩展存储队列一次一个地提交索引加载操作的中间组(G7)。接下来,可按顺序从存储队列一次一个地提交存储操作S8和S9,随后,在使控制返回到存储队列之前,可按顺序从扩展存储队列一次一个地提交索引加载操作的最下面的组(G10),最后,可按顺序从存储队列一次一个地提交存储操作S11、S12、S13、S14和S15。
由于对于每条索引加载指令可以仅需要扩展存储队列中的一个条目,因此对于扩展存储队列中的给定数量的条目,多条索引加载指令可以是并发地未决的。此外,由于扩展存储队列的条目在实现的面积和或功耗方面可以任选地是相对成本较低的(例如,可不支持存储至加载转发),因此相比一般对于存储队列是可行的情况,扩展存储队列可潜在地具有更多或甚至多得多的条目。扩展存储队列可有助于减轻对存储队列的压力和/或允许更多索引加载指令是同时未决的。然而,扩展存储队列的使用是任选的而不是必需的。
图8是用于图示合适的存储器排序语义的示例实施例的示例指令序列874的流程框图。该指令序列按原始的程序顺序示出(例如,在任何乱序执行或重排序之前),其中,最早/最旧的指令在顶部,并且最新/最年轻的指令在底部。该序列包括来自存储器的先前加载指令875和向存储器的先前存储指令876,这两条指令在第一索引加载指令877、第二索引加载指令878、第三索引加载指令879和第四索引加载指令881的框884之前。该序列还包括来自存储器的后续加载指令882和向存储器的后续存储指令883,这两条指令在框884之后。向存储器的间歇性存储指令880设置在框884的索引加载指令内。
在一些实施例中,可任选地用于索引加载指令的第一存储器排序规则或语义是:在一条或多条索引加载指令的连续集合中的任何一个索引加载指令发布之前,该连续集合之前的加载指令引退或以其他方式提交。作为示例,在连续的第一索引加载指令877、第二索引加载指令878、第三索引加载指令879中的任何一个指令发布之前,在该连续的第一索引加载指令877、第二索引加载指令878和第三索引加载指令879之前的来自存储器的先前加载指令875可提交。
在一些实施例中,可任选地用于索引加载指令的第二存储器排序规则或语义是:在后续加载指令被提交之前,索引加载指令被实现为将在标签目录处被排序的分量加载操作(例如,非时效性加载操作)。作为示例,在从存储器的后续加载指令882被提交之前,第一索引加载操作877可实现为将在标签目录处被排序的分量NTLW 1至NTLW N。
在一些实施例中,可任选地用于索引加载操作的第三存储器排序规则或语义是:索引加载指令按相对于彼此以及相对于其他存储指令的顺序被存储。作为示例,第一索引加载指令877可被存储在第二索引加载指令878之前,第二索引加载指令878可被存储在第三索引加载指令879之前,并且第三索引加载指令879可被存储在第四索引加载指令881之前。同样,第一索引加载指令877可被存储在向存储器的先前存储指令876之后,并且向存储器的间歇性存储指令880可被存储在第三索引加载指令879与第四索引加载指令881之间。
在一些实施例中,可任选地用于索引加载指令的第四存储器排序规则或语义是:准许对一个或多个索引加载指令的连续集合的数据元素进行加载的分量加载操作(例如,非时效性加载操作)按任何顺序开始(例如,好像并行地发布所有分量加载操作)。作为示例,用于第一索引加载指令877的分量操作NTLW 1至NTLW N、用于第二索引加载指令878的分量操作NTLW(N+1)至NTLW(2N)、以及用于第三索引加载指令879的分量操作NTLW(2N+1)至NTLW 3N全都被准许以相对于彼此的任何顺序开始。
作为示例,维持此类存储器一致性规则的一个可针对在其中给定的线程聚集若干客户端线程的数据的示例协作用例来领会。给定的线程可发布连续序列的索引加载指令,并且想要在数据可用时提醒客户端线程。如果索引加载指令不有序地提交,则给定的线程可能需要读取每个目的地以确保这些索引加载地址全部已完成,因为这些索引加载指令仅在一旦它们已完成后才变得可读。如果索引加载指令有序地提交,但是不相对于其他存储指令有序地提交,则给定的线程可能想要发布存储器围栏以有助于确保被执行以指示数据的可用性的后续存储指令不超前于正在被执行的实际的索引加载指令来收集数据。然而,利用上述存储器一致性语义,给定的线程可仅发布索引加载指令的序列,且随后执行后续的存储指令以(例如,通过更新标志)指示数据的可用性。存储队列可有助于确保用于指示数据的可用性(例如,标志的改变)的存储操作仅在所有先前的索引加载指令已提交之后才是可观察的。
在一些实施例中,这些存储器排序规则或语义中的一个或多个可任选地实现为索引加载指令的架构方面或架构实现,但是这不是必需的。在此类实施例中,这一个或多个存储器排序规则或语义对于索引加载指令可以是隐式的或固有的,并且处理器可具有用于当执行索引加载指令时强加这一个或多个存储器排序规则或语义的逻辑。在其他实施例中,这些存储器排序规则或语义中的一个或多个可任选地不实现为索引加载指令的架构方面或架构实现。在此类实施例中,附加的指令可用于强加这一个或多个存储器排序规则或语义。例如,可任选地将围栏和/或屏障指令(例如,加载围栏指令、存储围栏指令、加载和存储围栏指令等)插入在存储器访问指令之间以强加存储器排序规则或语义。
图9是可操作以执行索引加载指令902的实施例的处理器900的详细的示例实施例的框图。处理器至少包括第一核984-1,并且任选地包括一个或多个其他核984-2。处理器还包括至少一个存储器控制器991,用于耦合至至少一个对应的存储器设备。互连990(例如,全网格互连、一个或多个环形互连等)将第一核、任选地一个或多个其他核、以及至少一个存储器控制器耦合在一起。
第一核984-1包括用于对索引加载指令902进行解码的解码单元904。该解码单元可提供指令或控制信号以实现索引加载指令。在一些实施例中,最初,所有先前被发布的加载的加载队列可被耗尽。这对于连续的索引加载指令的序列可仅发生一次。
执行单元906耦合至解码单元。执行单元可发起对索引加载指令的执行。执行单元与紧缩数据寄存器的集合908以及标量寄存器的集合914耦合。在一些实施例中,可将索引加载指令的源紧缩存储器地址信息操作数存储在紧缩数据寄存器中以及从紧缩数据寄存器接收索引加载指令的源紧缩存储器地址信息操作数,并且可将索引加载指令的目的地存储器地址信息存储在标量寄存器中或从标量寄存器接收索引加载指令的目的地存储器地址信息。
第一级即级别1(L1)TLB 986与执行单元耦合。L1 TLB与第二级即级别2(L2)TLB955耦合。L1 TLB和/或L2 TLB可用于将从源紧缩存储器地址信息和目的地存储器地址信息导出的逻辑地址或逻辑存储器地址转换为对应的物理存储器地址。在一些实施例中,L2TLB 955可以任选地是区块化的。在一些实施例中,任选地区块化的L2 TLB可与图5中的区块化的TLB类似或相同,但是这不是必需的。在一些实施例中,区块化的L2 TLB可并发地将从源紧缩存储器地址信息导出的至少两个或任选地所有逻辑地址953转换为至少两个或任选地所有对应的物理地址959
L1高速缓存938还与执行单元耦合。L2高速缓存940与L1高速缓存耦合。在一些实施例中,目的地高速缓存行924可任选地在L2高速缓存中被分配用于从目的地存储器地址信息导出的目的地物理存储器地址。替代地,其他存储位置可任选地如本文中别处所述来使用。在一些实施例中,目的地高速缓存行可配置为是不可读取且不可驱逐的。使高速缓存行不可驱逐可有助于锁定高速缓存中的该高速缓存行,以防止该高速缓存行从高速缓存被驱逐,直到已完成所有相关联的加载操作之后。使高速缓存行不可读取可有助于确保直到已完成所有相关联的加载操作已完成之后其他实体才读取该高速缓存行,使得部分地被更新的数据不被读取。如果需要,可任选地准许用于同一目的地物理存储器地址的单独的有效高速缓存行副本在此时保持在L2高速缓存中,直到加载操作完成且目的地高速缓存行被配置为是可读取的,但这不是必需的。
存储器请求队列987与L2高速缓存耦合。存储器请求队列可以可操作用于对待决的存储器访问请求排队。在一些实施例中,至少一个计数器988可与存储器请求队列987耦合。在一些情况下,对于第一核984-1的一个或多个硬件线程中的每个硬件线程可任选地具有对应的计数器。在一些实施例中,至少一个计数器可以可操作用于对分量加载操作还未在标签目录989处被排序的未决索引加载指令的数量进行计数或跟踪。标签目录可以可操作用于对索引加载指令的分量加载操作排序。在一些实施例中,可将与源紧缩存储器地址信息对应的物理存储器地址(例如,并发生成的物理存储器地址959)提供给与目的地存储器地址相关联的标签目录。
加载操作分派单元964与标签目录和存储器请求队列耦合。在一些实施例中,加载操作分派单元可任选地是并发加载操作分派单元。并发加载操作分派单元可任选地与图6中的并发加载操作分派单元类似或相同。并发加载操作分派单元可以可操作用于并发地为至少两个相关联的输入物理存储器地址959分派至少两个分量加载操作967。在一些实施例中,对于索引加载操作的源紧缩存储器地址信息操作数中的不同组的存储器地址信息中的每一组,可任选地并发地和/或并行地发起或分派分量加载操作。在一些实施例中,加载操作中的每个加载操作可以是非时效性的先加载后写入(NTLW)操作,该NTLW操作对于源存储器地址绕过所有高速缓存(例如,L1高速缓存和L2高速缓存)。这可有助于在其中正被加载的数据具有低空间和/或时域局部性的情况下减少高速缓存污染。在一些实施例中,加载操作中的每个加载操作可指示目的地存储位置(例如,将核984-1指示为目的地核,并指示目的地高速缓存行924的集合和通路)。在一些实施例中,加载操作中的每个加载操作还可指示被加载的数据元素将存储在其中的结果紧缩数据和/或目的地高速缓存行的对应通道。
当标签目录989从与每个加载操作相关联的其他分布式标签目录接收到确收时,它可将确收往回发送到起源核。当该起源核接收到该确收时,该起源核可递减或以其他方式减小该起源核的、具有还未被排序的加载操作的未决的索引加载指令的计数。一方面,在引退加载指令之前,可预期具有还未被排序的加载操作的未决的索引加载指令的计数变成零。作为另一选项,在另一实施例中,可从存储器请求队列中的条目发布所有加载(非时效性加载),并且所有加载坍缩为一个条目以接收结果,并且从那里进入将被放置在目的地高速缓存中的一个响应中。这提供了使用并发加载操作分派单元的替代方式(例如,邻近标签目录被加载)。
在一些实施例中,可为加载操作967返回被加载的数据元素998。可使用利用加载操作967传送的目的地存储位置信息来返回这些被加载的数据元素。可将这些被加载的数据元素存储在目的地高速缓存行924的它们的对应指示通道中。
处理器还包括存储队列970。在一些实施例中,处理器还可任选地包括扩展存储队列971。一方面,这些元件可与执行单元906耦合。扩展存储队列可与图7中示出的扩展存储队列类似或相同,但是这不是必需的。扩展存储队列可用于对索引加载指令排队。在一些实施例中,索引加载指令可由扩展存储队列中的条目表示,但是不消耗存储队列中的任何条目。在一些实施例中,扩展存储队列可具有比存储队列相对更少的每条目逻辑。在一些实施例中,当索引加载指令在存储队列和扩展存储队列中变成最高级的存储时,它可等待,直到其所有分量加载操作已被写入到目的地高速缓存行924中。随后,存储器请求队列987可发布针对目的地存器地址的命令,诸如例如,对所有权的请求、无数据、完整块写入命令。这可使高速缓存行可读取。随后,可将目的地高速缓存行924提交到存储器,在一些情况下,这潜在地破坏同一集合中的现有副本。
在以上描述中,已描述了具有多个源存储器地址的紧缩、向量或索引加载指令。在其他实施例中,本文中公开的技术可任选地用于仅具有单个标量源存器地址的标量加载指令。例如,这可设涉及数据的非时效性加载以及将数据写入或存储到目的地位置。
指令集包括一种或多种指令格式。给定的指令格式定义各种字段(位的数量、位的位置)以指定将要执行的操作(操作码)以及将对其执行该操作的(多个)操作数,等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可被定义为具有指令格式的字段(所包括的字段典型地按照相同的顺序,但是至少一些字段具有不同的位的位置,因为包括了更少的字段)的不同子集,以及/或者被定义为具有以不同方式进行解释的给定字段。由此,ISA的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码以及包括用于指定该操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地以及源2)的指令格式;并且该ADD指令在指令流中的出现将具有选择特定操作数的操作数字段中的特定内容。已发布和/或出版了被称为高级向量扩展(AVX)(AVX1和AVX2)并使用向量扩展(VEX)编码方案的SIMD扩展集(例如,参见2011年10月的《64和IA-32架构软件开发者手册》(“64and IA-32Architectures Software Developers Manual”);并且参见2011年6月的《高级向量扩展编程参考》(“Advanced Vector Extensions Programming Reference”))。
示例性指令格式
本文中所描述的(多条)指令的实施例能以不同格式来具体化。另外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。
VEX指令格式
VEX编码允许指令具有多于两个操作数,并且允许SIMD向量寄存器长于128位。VEX前缀的使用提供了三操作数(或者更多操作数)句法。例如,先前的两操作数指令执行诸如A=A+B之类的覆写源操作数的操作。VEX前缀的使用使操作数能执行诸如A=B+C之类的非破坏性操作。
图10A示出示例性AVX指令格式,该示例性AVX指令格式包括VEX前缀1002、实操作码字段1030、MoD R/M字节1040、SIB字节1050、位移字段1062以及IMM8 1072。图10B图示出来自图10A的哪些字段构成完整操作码字段1074和基础操作字段1042。图10C示出来自图10A的哪些字段构成寄存器索引字段1044。
VEX前缀(字节0-2)1002以三字节的形式进行编码。第一字节是格式字段1040(VEX字节0,位[7:0]),该格式字段1040包含显式的C4字节值(用于区分C4指令格式的唯一值)。第二-第三字节(VEX字节1-2)包括提供专用能力的多个位字段。具体地,REX字段1005(VEX字节1,位[7-5])由VEX.R位字段(VEX字节1,位[7]–R)、VEX.X位字段(VEX字节1,位[6]–X)以及VEX.B位字段(VEX字节1,位[5]–B)组成。这些指令的其他字段对如在本领域中已知的寄存器索引的较低的三个位(rrr、xxx以及bbb)进行编码,以使得可通过对VEX.R、VEX.X以及VEX.B相加来形成Rrrr、Xxxx以及Bbbb。操作码映射字段1015(VEX字节1,位[4:0]–mmmmm)包括用于对隐含的前导操作码字节进行编码的内容。W字段1064(VEX字节2,位[7]–W)——由记号VEX.W表示,并且提供取决于指令的不同功能。VEX.vvvv1020(VEX字节2,位[6:3]-vvvv)的作用可包括如下:1)VEX.vvvv对以反转(1补码)形式被指定的第一源寄存器操作数进行编码,并且对具有两个或更多个源操作数的指令有效;2)VEX.vvvv对目的地寄存器操作数编码,该目的地寄存器操作数针对某些向量位移以1补码的形式被指定;或者3)VEX.vvvv不对任何操作数编码,该字段被预留并应当包含1011b。如果VEX.L 1068尺寸字段(VEX字节2,位[2]-L)=0,则它指示128位向量;如果VEX.L=1,则它指示256位向量。前缀编码字段1025(EVEX字节2,位[1:0]-pp)提供了用于基础操作字段的附加位。
实操作码字段1030(字节3)还被称为操作码字节。操作码的部分在该字段中被指定。
MOD R/M字段1040(字节4)包括MOD字段1042(位[7-6])、Reg字段1044(位[5-3])、以及R/M字段1046(位[2-0])。Reg字段1044的作用可包括如下:对目的地寄存器操作数或源寄存器操作数(Rrrr中的rrr)进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段1046的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)-比例字段1050(字节5)的内容包括用于存储器地址生成的SS1052(位[7-6])。先前已经针对寄存器索引Xxxx和Bbbb参考了SIB.xxx 1054(位[5-3])和SIB.bbb 1056(位[2-0])的内容。
位移字段1062和立即数字段(IMM8)1072包含地址数据。
通用向量友好指令格式
向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量操作。
图11A-图11B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图11A是图示根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图11B是图示根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式1100定义A类和B类指令模板,这两者都包括无存储器访问1105的指令模板和存储器访问1120的指令模板。在向量友好指令格式的上下文中的术语“通用”是指不束缚于任何特定指令集的指令格式。
尽管将描述其中向量友好指令格式支持以下情况的本发明的实施例:64字节向量操作数长度(或尺寸)与32位(4字节)或64位(8字节)数据元素宽度(或尺寸)(并且由此,64字节向量由16个双字尺寸的元素组成,或者替代地由8个四字尺寸的元素组成);64字节向量操作数长度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸);32字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或尺寸);以及16字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸);但是替代实施例可支持更大、更小和/或不同的向量操作数尺寸(例如,256字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
图11A中的A类指令模板包括:1)在无存储器访问1105的指令模板内,示出无存储器访问的完全舍入控制型操作1110的指令模板、以及无存储器访问的数据变换型操作1115的指令模板;以及2)在存储器访问1120的指令模板内,示出存储器访问的时效性1125的指令模板和存储器访问的非时效性1130的指令模板。图11B中的B类指令模板包括:1)在无存储器访问1105的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作1112的指令模板以及无存储器访问的写掩码控制的vsize型操作1117的指令模板;以及2)在存储器访问1120的指令模板内,示出存储器访问的写掩码控制1127的指令模板。
通用向量友好指令格式1100包括以下列出的按照在图11A-11B中图示的顺序的如下字段。
格式字段1140——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
基础操作字段1142——其内容区分不同的基础操作。
寄存器索引字段1144——其内容直接或者通过地址生成来指定源或目的地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。尽管在一个实施例中N可多达三个源寄存器和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源中的一个源还用作目的地;可支持多达三个源,其中这些源中的一个源还用作目的地;可支持多达两个源和一个目的地)。
修饰符(modifier)字段1146——其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问1105的指令模板与存储器访问1120的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段1150——其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字段被分成类字段1168、α字段1152和β字段1154。扩充操作字段1150允许在单条指令而非2条、3条或4条指令中执行多组共同的操作。
比例字段1160——其内容允许用于存储器地址生成(例如,用于使用(2比例*索引+基址)的地址生成)的索引字段的内容的按比例缩放。
位移字段1162A——其内容用作存储器地址生成的一部分(例如,用于使用(2比例*索引+基址+位移)的地址生成)。
位移因数字段1162B(注意,位移字段1162A直接在位移因数字段1162B上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;它指定将按比例缩放存储器访问的尺寸(N)的位移因数——其中N是存储器访问中的字节数量(例如,用于使用(2比例*索引+基址+按比例缩放的位移)的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总尺寸(N)以生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段1174(稍后在本文中描述)和数据操纵字段1154C确定。位移字段1162A和位移因数字段1162B不用于无存储器访问1105的指令模板和/或不同的实施例可实现这两者中的仅一个或不实现这两者中的任一个,在这个意义上,位移字段1162A和位移因数字段1162B是任选的。
数据元素宽度字段1164——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中只用于指令中的一些指令)。如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上,该字段是任选的。
写掩码字段1170——其内容逐数据元素位置地控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码,而B类指令模板支持合并-写掩码和归零-写掩码两者。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功能的子集是控制正被执行的操作的向量长度的能力(即,从第一个到最后一个正被修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段1170允许部分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段1170的内容选择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此,写掩码字段1170的内容间接地标识要执行的掩码)的本发明的实施例,但是替代实施例替代地或附加地允许掩码写字段1170的内容直接指定要执行的掩码。
立即数字段1172——其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上,该字段是任选的。
类字段1168——其内容在不同类的指令之间进行区分。参考图11A-图11B,该字段的内容在A类和B类指令之间进行选择。在图11A-图11B中,圆角方形用于指示特定的值存在于字段中(例如,在图11A-图11B中分别用于类字段1168的A类1168A和B类1168B)。
A类指令模板
在A类非存储器访问1105的指令模板的情况下,α字段1152被解释为其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作1110和无存储器访问的数据变换型操作1115的指令模板分别指定舍入1152A.1和数据变换1152A.2)的RS字段1152A,而β字段1154区分要执行所指定类型的操作中的哪一种。在无存储器访问1105的指令模板中,比例字段1160、位移字段1162A和位移比例字段1162B不存在。
无存储器访问的指令模板——完全舍入控制型操作
在无存储器访问的完全舍入控制型操作1110的指令模板中,β字段1154被解释为其(多个)内容提供静态舍入的舍入控制字段1154A。尽管在本发明的所述实施例中舍入控制字段1154A包括抑制所有浮点异常(SAE)字段1156和舍入操作控制字段1158,但是替代实施例可支持这两个概念,可将这两个概念编码为同一字段,或仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段1158)。
SAE字段1156——其内容区分是否禁用异常事件报告;当SAE字段1156的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序。
舍入操作控制字段1158——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段1158允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1150的内容覆盖(override)该寄存器值。
无存储器访问的指令模板-数据变换型操作
在无存储器访问的数据变换型操作1115的指令模板中,β字段1154被解释为数据变换字段1154B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
在A类存储器访问1120的指令模板的情况下,α字段1152被解释为驱逐提示字段1152B,其内容区分要使用驱逐提示中的哪一个(在图11A中,对于存储器访问时效性1125的指令模板和存储器访问非时效性1130的指令模板分别指定时效性的1152B.1和非时效性的1152B.2),而β字段1154被解释为数据操纵字段1154C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换以及目的地的向下转换)。存储器访问1120的指令模板包括比例字段1160,并任选地包括位移字段1162A或位移比例字段1162B。
向量存储器指令使用转换支持来执行来自存储器的向量加载以及向存储器的向量存储。如同寻常的向量指令,向量存储器指令以数据元素式的方式从/向存储器传输数据,其中实际被传输的元素由被选为写掩码的向量掩码的内容规定。
存储器访问的指令模板——时效性的
时效性的数据是可能足够快地被重新使用以从高速缓存操作受益的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
存储器访问的指令模板——非时效性的
非时效性的数据是不太可能足够快地被重新使用以从第一级高速缓存中的高速缓存操作受益且应当被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段1152被解释为写掩码控制(Z)字段1152C,其内容区分由写掩码字段1170控制的写掩码应当是合并还是归零。
在B类非存储器访问1105的指令模板的情况下,β字段1154的一部分被解释为RL字段1157A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的写掩码控制部分舍入控制类型操作1112的指令模板和无存储器访问的写掩码控制VSIZE型操作1317的指令模板分别指定舍入1157A.1和向量长度(VSIZE)1157A.2),而β字段1154的其余部分区分要执行所指定类型的操作中的哪一种。在无存储器访问1105的指令模板中,比例字段1160、位移字段1162A和位移比例字段1162B不存在。
在无存储器访问的写掩码控制部分舍入控制型操作1110的指令模板中,β字段1154的其余部分被解释为舍入操作字段1159A,并且禁用异常事件报告(给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序)。
舍入操作控制字段1159A——正如舍入操作控制字段1158,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段1159A允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1150的内容覆盖该寄存器值。
在无存储器访问的写掩码控制VSIZE型操作1117的指令模板中,β字段1154的其余部分被解释为向量长度字段1159B,其内容区分要执行多个数据向量长度中的哪一个(例如,128字节、256字节或512字节)。
在B类存储器访问1120的指令模板的情况下,β字段1154的一部分被解释为广播字段1157B,其内容区分是否要执行广播型数据操纵操作,而β字段1154的其余部分被解释为向量长度字段1159B。存储器访问1120的指令模板包括比例字段1160,并任选地包括位移字段1162A或位移比例字段1162B。
针对通用向量友好指令格式1100,示出完整操作码字段1174包括格式字段1140、基础操作字段1142和数据元素宽度字段1164。尽管示出了其中完整操作码字段1174包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段1174包括少于所有的这些字段。完整操作码字段1174提供操作代码(操作码)。
扩充操作字段1150、数据元素宽度字段1164和写掩码字段1170允许逐指令地以通用向量友好指令格式指定这些特征。
写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核可支持仅A类、仅B类、或者可支持这两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可仅支持A类,并且旨在用于通用计算和图形和/或科学(吞吐量)计算两者的核可支持A类和B类两者(当然,具有来自这两类的模板和指令的一些混合、但是并非来自这两类的所有模板和指令的核在本发明的范围内)。同样,单个处理器可包括多个核,这多个核全部都支持相同的类,或者其中不同的核支持不同的类。举例而言,在具有单独的图形核和通用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核。当然,在本发明的不同实施例中,来自一类的特征也可在其他类中实现。将使以高级语言编写的程序成为(例如,及时编译或静态编译)各种不同的可执行形式,这些可执行形式包括:1)仅具有由用于执行的目标处理器支持的(多个)类的指令的形式;或者2)具有替代例程并具有控制流代码的形式,该替代例程使用所有类的指令的不同组合来编写,该控制流代码选择这些例程以基于由当前正在执行代码的处理器支持的指令来执行。
示例性专用向量友好指令格式
图12是图示根据本发明的实施例的示例性专用向量友好指令格式的框图。图12示出专用向量友好指令格式1200,其指定各字段的位置、尺寸、解释和次序、以及那些字段中的一些字段的值,在这个意义上,该专用向量友好指令格式1200是专用的。专用向量友好指令格式1200可用于扩展x86指令集,并且由此字段中的一些字段与如在现有的x86指令集及其扩展(例如,AVX)中所使用的那些字段类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示来自图11的字段,来自图12的字段映射到来自图11的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式1100的上下文中参考专用向量友好指令格式1200描述了本发明的实施例,但是本发明不限于专用向量友好指令格式1200,除非另有声明。例如,通用向量友好指令格式1100构想了各种字段的各种可能的尺寸,而专用向量友好指令格式1200示出为具有特定尺寸的字段。作为具体示例,尽管在专用向量友好指令格式1200中数据元素宽度字段1164被图示为一位字段,但是本发明不限于此(即,通用向量友好指令格式1100构想数据元素宽度字段1164的其他尺寸)。
通用向量友好指令格式1100包括以下列出的按照图12A中图示的顺序的如下字段。
EVEX前缀(字节0-3)1202——以四字节形式进行编码。
格式字段1140(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段1140,并且它包含0x62(在本发明的一个实施例中,为用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
REX字段1205(EVEX字节1,位[7-5])——由EVEX.R位字段(EVEX字节1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)以及(1157BEX字节1,位[5]–B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,由此可通过对EVEX.R、EVEX.X和EVEX.B相加来形成Rrrr、Xxxx和Bbbb。
REX’字段1110——这是REX’字段1110的第一部分,并且是用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段(EVEX字节1,位[4]–R’)。在本发明的一个实施例中,该位与以下指示的其他位一起以位反转的格式存储以(在公知x86的32位模式下)与BOUND指令进行区分,该BOUND指令的实操作码字节是62,但是在MODR/M字段(在下文中描述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储该指示的位以及以下其他指示的位。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.R’、EVEX.R以及来自其他字段的其他RRR来形成R’Rrrr。
操作码映射字段1215(EVEX字节1,位[3:0]–mmmm)——其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段1164(EVEX字节2,位[7]–W)——由记号EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
EVEX.vvvv 1220(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作数进行编码,并且对具有两个或更多个源操作数的指令有效;2)EVEX.vvvv对针对特定向量位移以1补码的形式指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被预留,并且应当包含1111b。由此,EVEX.vvvv字段1220对以反转(1补码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将指定符尺寸扩展到32个寄存器。
EVEX.U 1168类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1225(EVEX字节2,位[1:0]-pp)——提供了用于基础操作字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SIMD前缀的益处(EVEX前缀仅需要2位,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码成SIMD前缀编码字段;并且在运行时在被提供给解码器的PLA之前被扩展成传统SIMD前缀(因此,在无需修改的情况下,PLA既可执行传统格式的这些传统指令又可执行EVEX格式的这些传统指令)。虽然较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是为了一致性,特定实施例以类似的方式扩展,但允许由这些传统SIMD前缀指定的不同含义。替代实施例可重新设计PLA以支持2位SIMD前缀编码,并且由此不需要扩展。
α字段1152(EVEX字节3,位[7]–EH,也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α图示)——如先前所述,该字段是针对上下文的。
β字段1154(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,还以βββ图示)——如前所述,此字段是针对上下文的。
REX’字段1110——这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写掩码字段1170(EVEX字节3,位[2:0]-kkk)——其内容指定写掩码寄存器中的寄存器的索引,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线到所有对象的写掩码或绕过掩码硬件的硬件来实现)。
实操作码字段1230(字节4)还被称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段1240(字节5)包括MOD字段1242、Reg字段1244和R/M字段1246。如先前所述的,MOD字段1242的内容将存储器访问操作和非存储器访问操作区分开。Reg字段1244的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或者被视为操作码扩展,并且不用于对任何指令操作数进行编码。R/M字段1246的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)——如先前所述的,比例字段1150的内容用于存储器地址生成。SIB.xxx 1254和SIB.bbb 1256——先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段1162A(字节7-10)——当MOD字段1242包含10时,字节7-10是位移字段1162A,并且它与传统32位位移(disp32)一样地工作,并且以字节粒度工作。
位移因数字段1162B(字节7)——当MOD字段1242包含01时,字节7是位移因数字段1162B。该字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。由于disp8是符号扩展的,因此它仅能在-128和117字节偏移之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段1162B是disp8的重新解释;当使用位移因数字段1162B时,通过将位移因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。此类经压缩的位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移的冗余低阶位不需要被编码。换句话说,位移因数字段1162B替代传统x86指令集8位位移。由此,位移因数字段1162B以与x86指令集8位位移相同的方式被编码(因此,在ModRM/SIB编码规则中没有变化),唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度方面没有变化,而仅在有硬件对位移值的解释方面有变化(这需要将位移按比例缩放存储器操作数的尺寸以获得字节式地址偏移)。立即数字段1172如先前所述地操作。
完整操作码字段
图12B是图示根据本发明的一个实施例的构成完整操作码字段1174的具有专用向量友好指令格式1200的字段的框图。具体地,完整操作码字段1174包括格式字段1140、基础操作字段1142和数据元素宽度(W)字段1164。基础操作字段1142包括前缀编码字段1225、操作码映射字段1215和实操作码字段1230。
寄存器索引字段
图12C是图示根据本发明的一个实施例的构成寄存器索引字段1144的具有专用向量友好指令格式1200的字段的框图。具体地,寄存器索引字段1144包括REX字段1205、REX’字段1210、MODR/M.reg字段1244、MODR/M.r/m字段1246、VVVV字段1220、xxx字段1254和bbb字段1256。
扩充操作字段
图12D是图示根据本发明的一个实施例的构成扩充操作字段1150的具有专用向量友好指令格式1200的字段的框图。当类(U)字段1168包含0时,它表明EVEX.U0(A类1168A);当它包含1时,它表明EVEX.U1(B类1168B)。当U=0且MOD字段1242包含11(表明无存储器访问操作)时,α字段1152(EVEX字节3,位[7]–EH)被解释为rs字段1152A。当rs字段1152A包含1(舍入1152A.1)时,β字段1154(EVEX字节3,位[6:4]–SSS)被解释为舍入控制字段1154A。舍入控制字段1154A包括一位SAE字段1156和两位舍入操作字段1158。当rs字段1152A包含0(数据变换1152A.2)时,β字段1154(EVEX字节3,位[6:4]–SSS)被解释为三位数据变换字段1154B。当U=0且MOD字段1242包含00、01或10(表明存储器访问操作)时,α字段1152(EVEX字节3,位[7]–EH)被解释为驱逐提示(EH)字段1152B,并且β字段1154(EVEX字节3,位[6:4]–SSS)被解释为三位数据操纵字段1154C。
当U=1时,α字段1152(EVEX字节3,位[7]–EH)被解释为写掩码控制(Z)字段1152C。当U=1且MOD字段1242包含11(表明无存储器访问操作)时,β字段1154的一部分(EVEX字节3,位[4]–S0)被解释为RL字段1157A;当它包含1(舍入1157A.1)时,β字段1154的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为舍入操作字段1159A,而当RL字段1157A包含0(VSIZE1157.A2)时,β字段1154的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段1159B(EVEX字节3,位[6-5]–L1-0)。当U=1且MOD字段1242包含00、01或10(表明存储器访问操作)时,β字段1154(EVEX字节3,位[6:4]–SSS)被解释为向量长度字段1159B(EVEX字节3,位[6-5]–L1-0)和广播字段1157B(EVEX字节3,位[4]–B)。
示例性寄存器架构
图13是根据本发明的一个实施例的寄存器架构1300的框图。在所图示的实施例中,有32个512位宽的向量寄存器1310;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较低阶256个位覆盖(overlay)在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。专用向量友好指令格式1200对这些被覆盖的寄存器堆操作,如在以下表格中所图示。
换句话说,向量长度字段1159B在最大长度与一个或多个其他较短长度之间进行选择,其中每一个此类较短长度是前一长度的一半,并且不具有向量长度字段1159B的指令模板在最大向量长度上操作。此外,在一个实施例中,专用向量友好指令格式1200的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置要么保持与在指令之前相同,要么归零。
写掩码寄存器1315——在所图示的实施例中,存在8个写掩码寄存器(k0至k7),每一写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器1315的尺寸是16位。如先前所述,在本发明的一个实施例中,向量掩码寄存器k0无法用作写掩码;当将正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地禁止写掩码用于那条指令。
通用寄存器1325——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用以对存储器操作数寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器堆(x87栈)1345,在其上面重叠了MMX紧缩整数平坦寄存器堆1350——在所图示的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器来对64位紧缩整数数据执行操作,以及为在MMX与XMM寄存器之间执行的一些操作保存操作数。
本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图14A是图示根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图14B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图14A-图14B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图14A中,处理器流水线1400包括取出级1402、长度解码级1404、解码级1406、分配级1408、重命名级1410、调度(也被称为分派或发布)级1412、寄存器读取/存储器读取级1414、执行级1416、写回/存储器写入级1418、异常处置级1422和提交级1424。
图14B示出处理器核1490,该处理器核1490包括前端单元1430,该前端单元1430耦合到执行引擎单元1450,并且前端单元1430和执行引擎单元1450两者都耦合到存储器单元1470。核1490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核1490可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元1430包括分支预测单元1432,该分支预测单元1432耦合到指令高速缓存单元1434,该指令高速缓存单元1434耦合到指令转换后备缓冲器(TLB)1436,该指令转换后备缓冲器1436耦合到指令取出单元1438,该指令取出单元1438耦合到解码单元1440。解码单元1440(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1440可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1490包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元1440中,或以其他方式在前端单元1430内)。解码单元1440耦合到执行引擎单元1450中的重命名/分配器单元1452。
执行引擎单元1450包括重命名/分配器单元1452,该重命名/分配器单元1452耦合到引退单元1454和一个或多个调度器单元的集合1456。(多个)调度器单元1456表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元1456耦合到(多个)物理寄存器堆单元1458。(多个)物理寄存器堆单元1458中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元1458包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元1458由引退单元1454重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元1454和(多个)物理寄存器堆单元1458耦合到(多个)执行集群1460。(多个)执行集群1460包括一个或多个执行单元的集合1462以及一个或多个存储器访问单元的集合1464。执行单元1462可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元1456、(多个)物理寄存器堆单元1458和(多个)执行集群1460示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元1464的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合1464耦合到存储器单元1470,该存储器单元1470包括数据TLB单元1472,该数据TLB单元1472耦合到数据高速缓存单元1474,该数据高速缓存单元1474耦合到第二级(L2)高速缓存单元1476。在一个示例性实施例中,存储器访问单元1464可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元1470中的数据TLB单元1472。指令高速缓存单元1434还耦合到存储器单元1470中的第二级(L2)高速缓存单元1476。L2高速缓存单元1476耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线1400:1)指令取出1438执行取出级1402和长度解码级1404;2)解码单元1440执行解码级1406;3)重命名/分配器单元1452执行分配级1408和重命名级1410;4)(多个)调度器单元1456执行调度级1412;5)(多个)物理寄存器堆单元1458和存储器单元1470执行寄存器读取/存储器读取级1414;执行集群1460执行执行级1416;6)存储器单元1470和(多个)物理寄存器堆单元1458执行写回/存储器写入级1418;7)各单元可牵涉到异常处置级1422;以及8)引退单元1454和(多个)物理寄存器堆单元1458执行提交级1424。
核1490可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核1490包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如 超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元1434/1474以及共享的L2高速缓存单元1476,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图15A-图15B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图15A是根据本发明的实施例的单个处理器核以及它至管芯上互连网络1502的连接及其第二级(L2)高速缓存的本地子集1504的框图。在一个实施例中,指令解码器1500支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1506允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1508和向量单元1510使用分开的寄存器集合(分别为标量寄存器11512和向量寄存器1514),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)高速缓存1506读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1504是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的L2高速缓存的本地子集1504的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集1504中,并且可以与其他处理器核访问其自身的本地L2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存子集1504中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图15B是根据本发明的实施例的图15A中的处理器核的一部分的展开图。图15B包括L1高速缓存1504的L1数据高速缓存1506A部分,以及关于向量单元1510和向量寄存器1514的更多细节。具体地,向量单元1510是16宽向量处理单元(VPU)(见16宽ALU 1528),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1520支持对寄存器输入的混合,通过数值转换单元1522A-B支持数值转换,并且通过复制单元1524支持对存储器输入的复制。写掩码寄存器1526允许掩蔽所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图16是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器1600的框图。图16中的实线框图示具有单个核1602A、系统代理1610、一个或多个总线控制器单元的集合1616的处理器1600,而虚线框的任选增加图示具有多个核1602A-N、系统代理单元1610中的一个或多个集成存储器控制器单元的集合1614以及专用逻辑1608的替代处理器1600。
因此,处理器1600的不同实现可包括:1)CPU,其中专用逻辑1608是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1602A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核1602A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1602A-N是大量通用有序核。因此,处理器1600可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器1600可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元的集合1606、以及耦合到集成存储器控制器单元的集合1614的外部存储器(未示出)。共享高速缓存单元的集合1606可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元1612将集成图形逻辑1608、共享高速缓存单元的集合1606以及系统代理单元1610/(多个)集成存储器控制器单元1614互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元1606与核1602A-N之间维持一致性。
在一些实施例中,一个或多个核1602A-N能够实现多线程化。系统代理1610包括协调和操作核1602A-N的那些部件。系统代理单元1610可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核1602A-N以及集成图形逻辑1608的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核1602A-N在架构指令集方面可以是同构的或异构的;即,核1602A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图17-21是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图17,所示出的是根据本发明一个实施例的系统1700的框图。系统1700可以包括一个或多个处理器1710、1715,这些处理器耦合到控制器中枢1720。在一个实施例中,控制器中枢1720包括图形存储器控制器中枢(GMCH)1790和输入/输出中枢(IOH)1750(其可以在分开的芯片上);GMCH 1790包括存储器和图形控制器,存储器1740和协处理器1745耦合到该存储器和图形控制器;IOH 1750将输入/输出(I/O)设备1760耦合到GMCH1790。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器1740和协处理器1745直接耦合到处理器1710,并且控制器中枢1720与IOH1750处于单个芯片中。
附加的处理器1715的任选性在图17中通过虚线来表示。每一处理器1710、1715可包括本文中描述的处理核中的一个或多个,并且可以是处理器1600的某一版本。
存储器1740可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1720经由诸如前端总线(FSB)之类的多分支总线、诸如快速路径互连(QPI)之类的点对点接口、或者类似的连接1795来与(多个)处理器1710、1715进行通信。
在一个实施例中,协处理器1745是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢1720可以包括集成图形加速器。
在物理资源1710、1715之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器1710执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1710将这些协处理器指令识别为具有应当由附连的协处理器1745执行的类型。因此,处理器1710在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1745。(多个)协处理器1945接受并执行所接收的协处理器指令。
现在参见图18,所示出的是根据本发明的实施例的第一更具体的示例性系统1800的框图。如图18中所示,多处理器系统1800是点对点互连系统,并且包括经由点对点互连1850耦合的第一处理器1870和第二处理器1880。处理器1870和1880中的每一个都可以是处理器1600的某一版本。在本发明的一个实施例中,处理器1870和1880分别是处理器1710和1715,而协处理器1838是协处理器1745。在另一实施例中,处理器1870和1880分别是处理器1710和协处理器1745。
处理器1870和1880示出为分别包括集成存储器控制器(IMC)单元1872和1882。处理器1870还包括作为其总线控制器单元的一部分的点对点(P-P)接口1876和1878;类似地,第二处理器1880包括P-P接口1886和1888。处理器1870、1880可以经由使用点对点(P-P)接口电路1878、1888的P-P接口1850来交换信息。如图18中所示,IMC 1872和1882将处理器耦合到相应的存储器,即存储器1832和存储器1834,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1870、1880可各自经由使用点对点接口电路1876、1894、1886、1898的各个P-P接口1852、1854来与芯片组1890交换信息。芯片组1890可以任选地经由高性能接口1839来与协处理器1838交换信息。在一个实施例中,协处理器1838是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组1890可以经由接口1896耦合到第一总线1816。在一个实施例中,第一总线1816可以是外围部件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图18中所示,各种I/O设备1814可连同总线桥1818一起耦合到第一总线1816,该总线桥1818将第一总线1816耦合到第二总线1820。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器1815耦合到第一总线1816。在一个实施例中,第二总线1820可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线1820,这些设备包括例如键盘和/或鼠标1822、通信设备1827以及存储单元1828,该存储单元1828诸如可包括指令/代码和数据1830的盘驱动器或者其他大容量存储设备。此外,音频I/O 1824可以被耦合到第二总线1820。注意,其他架构是可能的。例如,代替图18的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图19,示出的是根据本发明的实施例的第二更具体的示例性系统1900的框图。图18和图19中的类似元件使用类似的附图标记,并且从图19中省略了图18的某些方面以避免混淆图19的其他方面。
图19图示处理器1870、1880可分别包括集成存储器和I/O控制逻辑(“CL”)1872和1882。因此,CL 1872、1882包括集成存储器控制器单元,并包括I/O控制逻辑。图19图示不仅存储器1832、1834耦合到CL 1872、1882,而且I/O设备1914也耦合到控制逻辑1872、1882。传统I/O设备1915被耦合到芯片组1890。
现在参考图20,示出的是根据本发明的实施例的SoC 2000的框图。图16中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的任选的特征。在图20中,(多个)互连单元2002被耦合到:应用处理器2010,其包括一个或多个核的集合192A-N的集合以及(多个)共享高速缓存单元1606;系统代理单元1610;(多个)总线控制器单元1616;(多个)集成存储器控制器单元1614;一个或多个协处理器的集合2020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2030;直接存储器访问(DMA)单元2032;以及用于耦合到一个或多个外部显示器的显示单元2040。在一个实施例中,(多个)协处理器2020包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图18中图示的代码1830)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图21是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图21示出可使用x86编译器2104来编译高级语言2102形式的程序,以生成可由具有至少一个x86指令集核的处理器2116原生执行的x86二进制代码2106。具有至少一个x86指令集核的处理器2116表示通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的实质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器2104表示可操作用于生成x86二进制代码2106(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器2116上执行。类似地,图21示出可以使用替代的指令集编译器2108来编译高级语言2102形式的程序,以生成可以由不具有至少一个x86指令集核的处理器2114(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码2110。指令转换器2112用于将x86二进制代码2106转换成可以由不具有x86指令集核的处理器2114原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码2110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器2112通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2106的软件、固件、硬件或其组合。
也可任选地将针对图3-图7和图9中任一图所描述的组件、特征和细节应用于图1-图2中的任一图。针对本文公开的处理器中的任何处理器所描述的组件、特征、以及细节可任选地应用于在实施例中可任选地由此类处理器和/或使用此类处理器执行的本文公开的方法中的任何方法。在实施例中,本文中所描述的处理器中的任何处理器可任选地被包括在本文中所公开的系统中的任何系统(例如,图17-图20的系统中的任何系统)中。此外,本文中所公开的指令中的任何指令在一些实施例中可任选地具有本文中所示出的指令格式(例如,针对图10-图12所描述的格式)的特征或细节中的任何特征或细节。
本文公开的处理器组件可被说成和/或被声称可操作、能操作、能够、能、经配置、经适配或以其他方式执行操作。例如,解码器可被说成和/或被声称用于对指令解码,执行单元可被说成和/或被生成用于存储结果,等等。如本文中所使用,这些表达是指当处于断电状态时组件的特性、性质或属性,并且不暗示这些件或这些组件被包括在其中的设备或装置当前正被供电或正在操作。为清楚起见,应理解本文中要求保护的处理器和装置并不被要求正在被供电或正在运行。
在说明书和权利要求书中,可能已经使用了术语“耦合的”和/或“连接的”及其衍生词。这些术语不旨在互为同义词。相反,在多个实施例中,“连接的”可用于指示两个或更多个元件彼此直接物理和/或电接触。“耦合的”可意指两个或更多个元件彼此直接物理和/或电接触。然而,“耦合的”也可意指两个或更多个元件彼此并不直接接触,但是仍然彼此协作或相互作用。例如,执行单元可通过一个或多个中间组件与寄存器和/或解码单元耦合。在附图中,箭头用于示出连接和耦合。
可能已经使用了术语“和/或”。如本文中所使用,术语“和/或”意指一个或另一个或两者(例如,A和/或B意指:A或B或A和B两者)。
在以上描述中,为了提供对实施例的透彻理解,已阐述了特定细节。然而,可以在没有这些具体细节中的一些的情况下实施其他实施例。本发明的范围不旨在由以上所提供的具体示例来确定,而仅由所附权利要求确定。在其他实例中,已经以框图形式和/或没有细节的形式示出了公知的电路、结构、设备和操作,以避免使对说明书的理解变得模糊。除非被指定或以其他方式显而易见,否则在认为合适的地方,已在附图之间重复了附图标记或附图标记的结尾部分以指示可能任选地具有类似或相同特性的对应或类似的元件。
某些操作可由硬件组件执行,或者能以机器可执行或电路可执行指令来具体化,这些机器可执行指令或电路可执行指令可用于使得和/或者导致机器、电路、或硬件组件(例如,处理器、处理器的部分、电路等)利用执行这些操作的指令来编程。这些操作还可任选地由硬件和软件的组合执行。处理器、机器、电路或硬件可包括专用或特定电路或其他逻辑(例如,可能与固件和/或软件组合的硬件),该专用或特定电路或其他逻辑用于执行和/或处理指令,并且响应于该指令而存储结果。
一些实施例包括制品(例如,计算机程序产品),该制品包括机器可读介质。该介质可包括以机器可读形式提供(例如,存储)信息的机制。机器可读介质可提供或在其上存储有指令或指令序列,如果由机器执行该指令或指令序列和/或当由机器执行该指令或指令序列时,则该指令或指令序列可操作用于使该机器执行和/或导致该机器执行本文中所公开的一种或多种操作、方法或技术。
在一些实施例中,机器可读介质可包括有形的和/或非暂态的机器可读存储介质。例如,非暂态机器可读存储介质可包括软盘、光存储介质、光盘、光学数据存储设备、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储设备、非暂态存储器、或非暂态数据存储设备等。非暂态机器可读存储介质不由暂态的传播信号组成。在一些实施例中,存储介质可包括有形介质,该有形介质包括诸如例如半导体材料、相变材料、磁性固体材料、固体数据存储材料等之类的固态物质或材料。替代地,可任选地使用非有形暂态计算机可读传输介质诸如例如,电、光、声或其他形式的传播信号——诸如,载波,红外信号和数字信号。
合适机器的示例包括但不限于通用处理器、专用处理器、数字逻辑电路、集成电路等。合适的机器的另一些示例包括包含处理器、数字逻辑电路或集成电路的计算机系统或其他电子设备。此类计算机系统或电子设备的示例包括但不限于台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络设备(例如,路由器和交换机)、移动互联网设备(MID)、媒体播放器、智能电视、上网机、机顶盒和视频游戏控制器。
贯穿本说明书对例如“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”的引用例如指示可将特定的特征包括在本发明的实施中,但是不一定要求这么做。类似地,在该描述中,为了使本公开流畅并辅助对各发明性方面的理解,有时将各种特征一起归组在单个实施例、附图或对它们的描述中。然而,不应当将这种公开方法解读为反映本发明需要比每项权利要求中所明确记载的特征更多的特征的意图。相反,如所附权利要求所反映,发明性方面在于少于单个的公开实施例的所有特征。因此,将具体实施方式后所附的权利要求明确地结合到该具体实施方式中,并且每一项权利要求独立地作为本发明的单独的实施例而存在。
示例实施例
下列示例涉及进一步的实施例。可以在一个或多个实施例中的任何地方使用示例中的细节。
示例1是一种处理器,该处理器包括多个紧缩数据寄存器以及用于对指令解码的解码单元。该指令用于指示多个紧缩数据寄存器中用于存储源紧缩存储器地址信息的紧缩数据寄存器。源紧缩存储器地址信息包括多个存储器地址信息数据元素。该处理器也包括与解码单元和多个紧缩数据寄存器耦合的执行单元。该执行单元响应于指令而用于从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素,并用于将被加载的多个数据元素存储在目的地存储位置中。该目的地存储位置不包括多个紧缩数据寄存器中的寄存器。
示例2包括示例1的处理器,进一步包括高速缓存,并且其中,该执行单元响应于指令而用于非时效性地加载多个数据元素,非时效性地加载多个数据元素包括:不将被加载的所述数据元素存储在与从中加载多个数据元素的多个存储器地址对应的任何高速缓存行中。
示例3包括示例1至2中的任一示例的处理器,其中,解码单元用于对用于指示与目的地存储位置对应的目的地存储器地址信息的指令进行解码。
示例4包括示例1至3中的任一示例的处理器,进一步包括高速缓存,并且其中,执行单元响应于指令而用于将被加载的多个数据元素存储在作为高速缓存中的高速缓存行的目的地存储位置中。
示例5包括示例4的处理器,进一步包括第一级(L1)高速缓存,其中,解码单元用于对用于隐式地指示高速缓存的指令进行解码,并且其中,该高速缓存不是L1高速缓存。
示例6包括示例4的处理器,其中,解码单元用于对具有用于显式地指定高速缓存的字段的指令进行解码。
示例7包括示例1至6中的任一示例的处理器,其中,执行单元响应于指令而用于将高速缓存行配置为是不能读取且不能驱逐的,直到多个数据元素已被加载。
示例8包括示例1的处理器,其中,执行单元响应于指令而用于将被加载的多个数据元素存储在作为存储器中的存储器位置的目的地存储位置中。
示例9包括示例1至8中的任一示例的处理器,其中,执行单元响应于指令而用于从存储器加载多个数据元素中的每个数据元素作为单独的数据元素而不加载任何附加的相邻数据元素。
示例10包括示例1至9中的任一示例的处理器,进一步包括并发加载操作分派单元,该并发加载操作分派单元用于并发地为多个数据元素中的至少两个数据元素分派至少两个加载操作。
示例11包括示例10的处理器,其中,处理器包括多个核,其中,并发加载操作分派单元与多个核中的第一核对应,并且处理器进一步包括用于多个核中的每个核的不同的并发加载操作分派单元。
示例12包括示例1至11中任一示例的处理器,进一步包括区块化的转换后备缓冲器(TLB)。该区块化的TLB具有多个TLB区块,多个TLB区块用于并发地将多个逻辑地址转换为多个物理地址。
示例13包括示例12的处理器,其中,多个TLB中的每个TLB用于被映射到逻辑地址的不同集合。
示例14包括示例1至13中任一示例的处理器,进一步包括:存储队列,用于对操作排队;以及扩展存储队列,用于对包括不与指令对应的操作的多个操作排队,并且其中,用于在扩展存储队列中被排队的多个操作相对于用于在存储队列中被排队的多个操作按序被提交。
示例15包括示例14的处理器,其中,存储队列用于支持存储至加载转发,并且其中,扩展存储队列不用于支持存储至加载转发。
示例16是一种由处理器执行的方法,该方法包括:在处理器处接收指令。该指令指示存储源紧缩存储器地址信息的紧缩数据寄存器。该源紧缩存储器地址信息包括多个存储器地址信息数据元素。该方法包括:响应于指令,从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素;以及响应于指令,将被加载的多个数据元素存储在目的地存储位置中。该目的地存储位置不包括紧缩数据寄存器。
示例17包括示例16的方法,其中,所述加载步骤包括非时效性地加载多个数据元素,非时效性地加载多个数据元素包括:不将被加载的数据元素存储在与从中加载多个数据元素的多个存储器地址对应的任何高速缓存行中。
示例18包括示例16至17中的任一示例的方法,其中,所述接收步骤包括:接收指示与目的地存储位置对应的目的地存储器地址信息的指令。
示例19包括示例16至18中的任一示例的方法,其中,所述存储步骤包括:将被加载的多个数据元素存储在作为高速缓存中的高速缓存行的目的地存储位置中。
示例20包括示例19的方法,其中,所述接收步骤包括:接收隐式地指示高速缓存不是L1高速缓存的指令。
示例21是一种用于处理指令的系统,该系统包括:总线或其他互连;以及处理器,与该互连耦合。该处理器用于接收指令。该指令用于指示用于存储源紧缩存储器地址信息的紧缩数据寄存器。该源紧缩存储器地址信息包括多个存储器地址信息数据元素。该处理器响应于指令而用于从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素,并用于将被加载的多个数据元素存储在目的地存储位置中。该目的地存储位置不包括多个紧缩数据寄存器中的寄存器,并且该系统包括与互连耦合的存储器。
示例22包括示例21的系统,其中,处理器包括高速缓存,并且其中,该处理器响应于指令而用于非时效性地加载多个数据元素,非时效性地加载多个数据元素包括:不将被加载的所述数据元素存储在与从中加载多个数据元素的多个存储器地址对应的任何高速缓存行中。
示例23是一种制品,包括非暂态机器可读存储介质。该非暂态机器可读存储介质存储包括指令的多条指令。如果由机器执行该指令,该指令使该机器执行包括以下步骤的操作:从由指令指示的紧缩数据寄存器访问源紧缩存储器地址信息。源紧缩存储器地址信息包括多个存储器地址信息数据元素。操作还包括:从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素。操作还包括:将被加载的多个数据元素存储在目的地存储位置中。该目的地存储位置不包括紧缩数据寄存器。
示例24包括示例23的制品,该指令如果由机器执行使该机器执行包括以下步骤的操作:非时效性地加载多个数据元素,非时效性地加载多个数据元素包括:不将被加载的所述数据元素存储在与从中加载多个数据元素的多个存储器地址对应的任何高速缓存行中。
示例25包括一种处理器,该处理器包括:至少一个高速缓存;多个紧缩数据寄存器;以及用于对指令解码的解码单元。该指令用于指示源存储器地址信息。该处理器还包括执行单元,该执行单元与解码单元耦合。执行单元响应于指令而用于:非时效性地从与存储器地址信息对应的源存储器地址加载数据元素,所述非时效性地加载步骤包括:不将被加载的数据元素存储在与从中加载数据元素的源存储器地址对应的至少一个高速缓存的任何高速缓存行中;以及将被加载的数据元素存储在至少一个高速缓存中的目的地高速缓存行中。
示例26包括如示例1至15以及示例25中的任一示例的处理器,进一步包括:任选的分支预测单元,用于预测分支;以及任选的指令预取单元,与分支预测单元耦合,该指令预取单元用于预取包括该指令的多条指令。处理器还可任选地包括:任选的第一级(L1)指令高速缓存,与指令预取单元耦合,该L1指令高速缓存用于存储包括该指令的多条指令;任选的L1数据高速缓存,用于存储数据;以及任选的第二级(L2)高速缓存,用于存储数据和指令。处理器还可任选地包括指令取出单元,与解码单元、L1指令高速缓存以及L2高速缓存耦合,用于在一些情况下从L1指令高速缓存和L2高速缓存中的一个取出指令,并且用于将指令提供给解码单元。处理器还可任选包括用于对寄存器重命名的寄存器重命名单元以及用于提交指令的任选的提交单元。
示例27包括一种芯片上系统,该芯片上系统包括:至少一个互连;示例1至15和示例25中的任一示例的处理器,与该至少一个互连耦合;任选的图形处理单元(GPU),与该至少一个互连耦合;任选的数字信号处理器(DSP),与该至少一个互连耦合,任选的显示控制器,与该至少一个互连耦合;任选的存储器控制器,与该至少一个互连耦合;任选的无线调制解调器,与该至少一个互连耦合;任选的图像信号处理器,与该至少一个互连耦合;任选的兼容通用串行总线(USB)3.0的控制器,与该至少一个互连耦合;任选的兼容蓝牙4.1的控制器,与该至少一个互连耦合;以及任选的无线收发机控制器,与该至少一个互连耦合。
示例28是一种处理器或其他装置,可操作以执行如示例16至19中的任一示例的方法。
示例29是一种处理器或其他设备,其包括用于执行如示例16至19中的任一示例的方法的装置。
示例30是一种任选地非暂态和/或有形机器可读介质,其任选地存储或以其他方式提供包括第一指令的多条指令,如果由处理器、计算机系统、电子设备或其他机器执行该第一指令和/或当由处理器、计算机系统、电子设备或其他机器执行该第一指令时,该第一指令可操作以使该机器执行示例16至19中的任一示例的方法。
示例31是基本上如本文中所描述的处理器或其他装置。
示例32是可操作以执行基本上如本文中所描述的任何方法的处理器或其他装置。
示例33是可操作以执行基本上如本文中所描述的任何加载指令的处理器或其他装置。
示例34是一种处理器,该处理器包括用于存储紧缩数据的装置以及用于对指令解码的装置。该指令用于指示多个紧缩数据寄存器中用于存储源紧缩存储器地址信息的紧缩数据寄存器。源紧缩存储器地址信息包括多个存储器地址信息数据元素。该处理器还包括响应于指令而用于从各自都与多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素的装置。该处理器还包括响应于指令而用于将被加载的多个数据元素存储在目的地存储位置中的装置。该目的地存储位置不包括多个紧缩数据寄存器中的寄存器。

Claims (25)

1.一种处理器,包括:
多个紧缩数据寄存器;
解码单元,用于对指令解码,所述指令用于指示多个紧缩数据寄存器中用于存储源紧缩存储器地址信息的紧缩数据寄存器,所述源紧缩存储器地址信息包括多个存储器地址信息数据元素;以及
执行单元,与所述解码单元和所述多个紧缩数据寄存器耦合,所述执行单元响应于所述指令而用于:
从各自都与所述多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素;以及
将被加载的所述多个数据元素存储在目的地存储位置中,其中,所述目的地存储位置不包括所述多个紧缩数据寄存器中的寄存器。
2.如权利要求1所述的处理器,进一步包括高速缓存,并且其中,所述执行单元响应于所述指令而用于非时效性地加载所述多个数据元素,非时效性地加载所述多个数据元素包括:不将被加载的所述数据元素存储在与从中加载所述多个数据元素的多个存储器地址对应的任何高速缓存行中。
3.如权利要求1所述的处理器,其中,所述解码单元用于对用于指示与所述目的地存储位置对应的目的地存储器地址信息的指令进行解码。
4.如权利要求1所述的处理器,进一步包括高速缓存,并且其中,所述执行单元响应于所述指令而用于将被加载的所述多个数据元素存储在作为所述高速缓存中的高速缓存行的目的地存储位置中。
5.如权利要求4所述的处理器,进一步包括第一级(L1)高速缓存,其中,所述解码单元用于对用于隐式地指示所述高速缓存的指令进行解码,并且其中,所述高速缓存不是所述L1高速缓存。
6.如权利要求4所述的处理器,其中,所述解码单元用于对具有用于显式地指定所述高速缓存的字段的指令进行解码。
7.如权利要求4所述的处理器,其中,所述执行单元响应于所述指令而用于将所述高速缓存行配置为是不能读取且不能驱逐的,直到所述多个数据元素已被加载。
8.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于将被加载的所述多个数据元素存储在作为存储器中的存储器位置的目的地存储位置中。
9.如权利要求1至8中的任一项所述的处理器,其中,所述执行单元响应于所述指令而用于从存储器加载所述多个数据元素中的每个数据元素作为单独的数据元素而不加载任何附加的相邻数据元素。
10.如权利要求1至8中的任一项所述的处理器,进一步包括并发加载操作分派单元,所述并发加载操作分派单元用于并发地为所述多个数据元素中的至少两个数据元素分派至少两个加载操作。
11.如权利要求10所述的处理器,其中,所述处理器包括多个核,其中,所述并发加载操作分派单元与所述多个核中的第一核对应,并且所述处理器进一步包括用于所述多个核中的每个核的不同的并发加载操作分派单元。
12.如权利要求1至8中的任一项所述的处理器,进一步包括区块化的转换后备缓冲器(TLB),所述区块化的TLB具有多个TLB区块,所述多个TLB区块用于并发地将多个逻辑地址转换为多个物理地址。
13.如权利要求12所述的处理器,其中,所述多个TLB中的每个TLB用于被映射到逻辑地址的不同集合。
14.如权利要求1至8中的任一项所述的处理器,进一步包括:
存储队列,用于对操作排队;以及
扩展存储队列,用于对包括不与所述指令对应的操作的多个操作排队,并且其中,用于在所述扩展存储队列中被排队的多个操作用于相对于用于在所述存储队列中被排队的多个操作按序被提交。
15.如权利要求14所述的处理器,其中,所述存储队列用于支持存储至加载转发,并且其中,所述扩展存储队列不用于支持存储至加载转发。
16.一种由处理器执行的方法,包括:
在所述处理器处接收指令,所述指令指示紧缩数据寄存器,所述紧缩数据寄存器存储源紧缩存储器地址信息,所述源紧缩存储器地址信息包括多个存储器地址信息数据元素;
响应于所述指令,从各自都与所述多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素;以及
响应于所述指令,将被加载的所述多个数据元素存储在目的地存储位置中,其中,所述目的地存储位置不包括紧缩数据寄存器。
17.如权利要求16所述的方法,其中,所述加载步骤包括非时效性地加载所述多个数据元素,非时效性地加载所述多个数据元素包括:不将被加载的所述数据元素存储在与从中加载所述多个数据元素的多个存储器地址对应的任何高速缓存行中。
18.如权利要求16所述的方法,其中,所述接收步骤包括:接收指示与所述目的地存储位置对应的目的地存储器地址信息的指令。
19.如权利要求16所述的方法,其中,所述存储步骤包括:将被加载的所述多个数据元素存储在作为高速缓存中的高速缓存行的目的地存储位置中,并且其中,所述接收步骤包括:接收隐式地指示所述高速缓存不是L1高速缓存的指令。
20.一种制品,包括非暂态机器可读存储介质,所述非暂态机器可读存储介质存储多条指令,所述多条指令包括如果由机器执行则使所述机器执行包括以下步骤的操作的指令:
从由所述指令指示的紧缩数据寄存器访问源紧缩存储器地址信息,所述源紧缩存储器地址信息包括多个存储器地址信息数据元素;
从各自都与所述多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素;以及
将被加载的所述多个数据元素存储在目的地存储位置中,其中,所述目的地存储位置不包括紧缩数据寄存器。
21.如权利要求20所述的制品,其中,所述指令如果由所述机器执行则使所述机器执行包括以下步骤的操作:
非时效性地加载所述多个数据元素,非时效性地加载所述多个数据元素包括:不将被加载的所述数据元素存储在与从中加载所述多个数据元素的多个存储器地址对应的任何高速缓存行中。
22.一种处理器,包括:
用于存储紧缩数据的装置;
用于对指令解码的装置,所述指令用于指示多个紧缩数据寄存器中用于存储源紧缩存储器地址信息的紧缩数据寄存器,所述源紧缩存储器地址信息包括多个存储器地址信息数据元素;
响应于所述指令而用于从各自都与所述多个存储器地址信息数据元素中的不同存储器地址信息数据元素对应的多个存储器地址加载多个数据元素的装置;以及
响应于所述指令而用于将被加载的所述多个数据元素存储在目的地存储位置中的装置,其中,所述目的地存储位置不包括所述多个紧缩数据寄存器中的寄存器。
23.一种处理器,包括:
至少一个高速缓存;
多个紧缩数据寄存器;
解码单元,用于对指令解码,所述指令用于指示源存储器地址信息;以及
执行单元,与所述解码单元耦合,所述执行单元响应于所述指令而用于:
非时效性地从与所述存储器地址信息对应的源存储器地址加载数据元素,所述非时效性地加载步骤包括:不将被加载的所述数据元素存储在与从中加载所述数据元素的源存储器地址对应的至少一个高速缓存的任何高速缓存行中;以及
将被加载的所述数据元素存储在所述至少一个高速缓存中的目的地高速缓存行中。
24.一种设备,包括用于执行如权利要求16至19中任一项所述的方法的装置。
25.一种电子设备,包括:互连;如权利要求1至8中任一项所述的处理器,与所述互连耦合;以及动态随机存取存储器(DRAM),与所述互连耦合。
CN201780058647.1A 2016-09-30 2017-08-30 用于加载多个数据元素的处理器、方法、系统和指令 Active CN109791487B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/283,259 US10379855B2 (en) 2016-09-30 2016-09-30 Processors, methods, systems, and instructions to load multiple data elements to destination storage locations other than packed data registers
US15/283,259 2016-09-30
PCT/US2017/049328 WO2018093439A2 (en) 2016-09-30 2017-08-30 Processors, methods, systems, and instructions to load multiple data elements to destination storage locations other than packed data registers

Publications (2)

Publication Number Publication Date
CN109791487A true CN109791487A (zh) 2019-05-21
CN109791487B CN109791487B (zh) 2023-10-20

Family

ID=61758099

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780058647.1A Active CN109791487B (zh) 2016-09-30 2017-08-30 用于加载多个数据元素的处理器、方法、系统和指令

Country Status (5)

Country Link
US (2) US10379855B2 (zh)
EP (1) EP3519948A4 (zh)
CN (1) CN109791487B (zh)
TW (1) TWI742132B (zh)
WO (1) WO2018093439A2 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113918883A (zh) * 2021-11-03 2022-01-11 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质
CN116126252A (zh) * 2023-04-11 2023-05-16 南京砺算科技有限公司 数据加载方法及图形处理器、计算机可读存储介质
CN109791487B (zh) * 2016-09-30 2023-10-20 英特尔公司 用于加载多个数据元素的处理器、方法、系统和指令

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10970222B2 (en) 2019-02-28 2021-04-06 Micron Technology, Inc. Eviction of a cache line based on a modification of a sector of the cache line
US11106609B2 (en) 2019-02-28 2021-08-31 Micron Technology, Inc. Priority scheduling in queues to access cache data in a memory sub-system
US11288199B2 (en) 2019-02-28 2022-03-29 Micron Technology, Inc. Separate read-only cache and write-read cache in a memory sub-system
US10908821B2 (en) * 2019-02-28 2021-02-02 Micron Technology, Inc. Use of outstanding command queues for separate read-only cache and write-read cache in a memory sub-system
CN112395000B (zh) * 2019-08-13 2023-05-26 杭州中天微系统有限公司 一种数据预加载方法和指令处理装置
US11847463B2 (en) * 2019-09-27 2023-12-19 Advanced Micro Devices, Inc. Masked multi-lane instruction memory fault handling using fast and slow execution paths
CN113157631A (zh) * 2020-01-22 2021-07-23 瑞昱半导体股份有限公司 处理器电路以及数据处理方法
GB2617551A (en) * 2022-04-07 2023-10-18 Advanced Risc Mach Ltd Technique for handling ordering constrained access operations
CN114546488B (zh) * 2022-04-25 2022-07-29 超验信息科技(长沙)有限公司 一种向量跨步指令的实现方法、装置、设备及存储介质
US20240069795A1 (en) * 2022-08-30 2024-02-29 Micron Technology, Inc. Access request reordering across a multiple-channel interface for memory-based communication queues
US20240111674A1 (en) * 2022-09-29 2024-04-04 Advanced Micro Devices, Inc. Data Reuse Cache
CN117312182B (zh) * 2023-11-29 2024-02-20 中国人民解放军国防科技大学 基于便签式存储的向量数据分散方法、装置及计算机设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275904B1 (en) * 1998-03-31 2001-08-14 Intel Corporation Cache pollution avoidance instructions
WO2006033056A2 (en) * 2004-09-21 2006-03-30 Koninklijke Philips Electronics N.V. Micro processor device and method for shuffle operations
CN1971507A (zh) * 2005-11-22 2007-05-30 国际商业机器公司 动态地选择存储指令性能方案的处理器和方法
US20140108862A1 (en) * 2012-10-17 2014-04-17 Advanced Micro Devices, Inc. Confirming store-to-load forwards
US20150095623A1 (en) * 2013-09-27 2015-04-02 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
CN104583943A (zh) * 2012-06-15 2015-04-29 索夫特机械公司 拥有具有分布式结构的动态分派窗口的虚拟加载存储队列
US20150269091A1 (en) * 2014-03-19 2015-09-24 Facebook, Inc. Secure support for i/o in software cryptoprocessor

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7793080B2 (en) 2007-12-31 2010-09-07 Globalfoundries Inc. Processing pipeline having parallel dispatch and method thereof
US9727471B2 (en) 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US9842046B2 (en) 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
US11036505B2 (en) 2012-12-20 2021-06-15 Advanced Micro Devices, Inc. Store-to-load forwarding
US9600442B2 (en) * 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US9971686B2 (en) 2015-02-23 2018-05-15 Intel Corporation Vector cache line write back processors, methods, systems, and instructions
US10379855B2 (en) * 2016-09-30 2019-08-13 Intel Corporation Processors, methods, systems, and instructions to load multiple data elements to destination storage locations other than packed data registers

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275904B1 (en) * 1998-03-31 2001-08-14 Intel Corporation Cache pollution avoidance instructions
WO2006033056A2 (en) * 2004-09-21 2006-03-30 Koninklijke Philips Electronics N.V. Micro processor device and method for shuffle operations
CN1971507A (zh) * 2005-11-22 2007-05-30 国际商业机器公司 动态地选择存储指令性能方案的处理器和方法
CN104583943A (zh) * 2012-06-15 2015-04-29 索夫特机械公司 拥有具有分布式结构的动态分派窗口的虚拟加载存储队列
US20140108862A1 (en) * 2012-10-17 2014-04-17 Advanced Micro Devices, Inc. Confirming store-to-load forwards
US20150095623A1 (en) * 2013-09-27 2015-04-02 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
US20150269091A1 (en) * 2014-03-19 2015-09-24 Facebook, Inc. Secure support for i/o in software cryptoprocessor

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
沈秀红: "基于基地址寄存器映射的数据高速缓存设计研究", 《中国优秀硕士学位论文全文数据库》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109791487B (zh) * 2016-09-30 2023-10-20 英特尔公司 用于加载多个数据元素的处理器、方法、系统和指令
CN113918883A (zh) * 2021-11-03 2022-01-11 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质
CN113918883B (zh) * 2021-11-03 2022-05-27 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质
CN116126252A (zh) * 2023-04-11 2023-05-16 南京砺算科技有限公司 数据加载方法及图形处理器、计算机可读存储介质
CN116126252B (zh) * 2023-04-11 2023-08-08 南京砺算科技有限公司 数据加载方法及图形处理器、计算机可读存储介质

Also Published As

Publication number Publication date
EP3519948A2 (en) 2019-08-07
WO2018093439A3 (en) 2018-07-05
US20180095756A1 (en) 2018-04-05
US20190384601A1 (en) 2019-12-19
EP3519948A4 (en) 2020-08-19
WO2018093439A2 (en) 2018-05-24
CN109791487B (zh) 2023-10-20
US10379855B2 (en) 2019-08-13
US11068264B2 (en) 2021-07-20
TW201820123A (zh) 2018-06-01
TWI742132B (zh) 2021-10-11

Similar Documents

Publication Publication Date Title
CN109791487A (zh) 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令
CN105278917B (zh) 无局部性提示的向量存储器访问处理器、方法、设备、制品和电子设备
CN104781803B (zh) 用于架构不同核的线程迁移支持
US10908906B2 (en) Apparatus and method for a tensor permutation engine
CN106547518B (zh) 用于加速器的低等待时间调用的装置和方法
CN104137060B (zh) 高速缓存协处理单元
CN104049943B (zh) 有限范围向量存储器访问指令、处理器、方法和系统
CN109478139A (zh) 用于共享存储器中的访问同步的装置、方法和系统
CN104049953B (zh) 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品
CN109213522A (zh) 远程原子操作指令
CN107250993A (zh) 向量缓存行写回处理器、方法、系统和指令
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN104011663B (zh) 掩码寄存器上的广播操作
CN108292224A (zh) 用于聚合收集和跨步的系统、设备和方法
CN109992304A (zh) 用于加载片寄存器对的系统和方法
CN109992240A (zh) 用于多加载和多存储向量指令的方法和装置
CN107220027A (zh) 用于执行掩码位压缩的系统、装置以及方法
CN109313549A (zh) 用于向量的元素排序的装置、方法和系统
CN107077329A (zh) 用于通过无序硬件软件协同设计处理器中的栈同步指令来实现和维持判定值的栈的方法和设备
CN109992308A (zh) 用于单指令多数据(simd)流水线中的循环展平和约简的装置和方法
CN107003846A (zh) 用于向量索引加载和存储的方法和装置
CN107924307A (zh) 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令
CN110347431A (zh) 自适应空间访问预取器装置和方法
CN109643234A (zh) 用于合并数据元素并生成索引更新的处理器、方法、系统和指令
CN108519921A (zh) 用于从通用寄存器向向量寄存器进行广播的装置和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant