CN107430508A - 用于提供原子范围操作的指令和逻辑 - Google Patents

用于提供原子范围操作的指令和逻辑 Download PDF

Info

Publication number
CN107430508A
CN107430508A CN201680018796.0A CN201680018796A CN107430508A CN 107430508 A CN107430508 A CN 107430508A CN 201680018796 A CN201680018796 A CN 201680018796A CN 107430508 A CN107430508 A CN 107430508A
Authority
CN
China
Prior art keywords
instruction
range
index
processor
size
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
CN201680018796.0A
Other languages
English (en)
Other versions
CN107430508B (zh
Inventor
I.帕尔多
O.本-基基
A.D.罗比逊
N.查克蒙
J.H.考尼
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 CN107430508A publication Critical patent/CN107430508A/zh
Application granted granted Critical
Publication of CN107430508B publication Critical patent/CN107430508B/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/3001Arithmetic 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • 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/30018Bit or string 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/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/30181Instruction operation extension or modification
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

指令和逻辑在多处理系统中提供原子范围操作。在一个实施例中,原子范围修改指令指定用于范围索引的集合的地址。指令锁定对范围索引的集合的访问,并加载范围索引以检查范围大小。将范围大小与足以执行范围修改的大小进行比较。如果范围大小足以执行范围修改,则执行范围修改,并将范围索引的集合的一个或多个已修改的范围索引存储回存储器。否则,当范围大小不足以执行所述范围修改时,设置错误信号。响应于原子范围修改指令的完成,解锁对范围索引的集合的访问。实施例可以包括原子增量next指令、加next指令、减量end指令和/或减end指令。

Description

用于提供原子范围操作的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器以及相关联的指令集架构的领域,这些指令集架构在被处理器或其它处理逻辑执行时实行加载、存储、逻辑、数学或其它功能操作。具体而言,本公开涉及用于提供原子范围操作的指令和逻辑。
背景技术
在多处理中,处理器或逻辑处理器可以采用多线程逻辑来并发地或并行地执行可执行指令的多个线程。并行编程的最常见形式之一称为单程序多数据(SPMD)。SPMD是用于实现并行性的技术,其中任务被分割并利用不同输入在多个处理器(或逻辑处理器)上同时运行,以便更快地获得结果。多个自主处理器(或逻辑处理器)可以在独立执行点处同时执行相同的程序。
SPMD与单指令多数据(SIMD)的不同之处在于,与SIMD对不同数据施加的逐指令的前后紧接的方式(lockstep)不同,SPMD可以用于调用函数的多个实例,或者在多个处理器(或逻辑处理器)上并行地执行循环的多个迭代。并行编程的这两种形式并不相互排斥。例如,SPMD程序也可以采用SIMD指令。
事实上,当前的计算机可以允许同时利用许多并行模式以获得最大的组合效果。分布式存储器程序可以在一群节点上运行。每个节点可以是共享存储器计算机,并且在多个处理器(或逻辑处理器)上并行地执行。在每个处理器内,SIMD向量指令可以使用超标量指令执行(通常由CPU透明地处置)、流水线化和多个并行功能单元,以实现最大的单CPU速度。
随着这些各种形式的并行性被一起采用,可以降低执行单独的SPMD任务所需的处理时间,而执行实时同步(例如,分割任务、将任务分配给多个处理器(或逻辑处理器)、以及通过共享存储器进行通信)所需的处理时间成为更显著的开销挑战,这可能限制了原本同时利用如此多种形式的并行性所预期的性能增益。
到目前为止,尚未充分探索解决这些挑战、潜在的性能限制问题和实时复杂性的解决方案。
附图说明
在附图的各图中通过示例而非限制的方式图示出本发明。
图1A是执行用于提供原子范围操作的指令的系统的一个实施例的框图。
图1B是执行用于提供原子范围操作的指令的系统的另一实施例的框图。
图1C是执行用于提供原子范围操作的指令的系统的另一实施例的框图。
图2是执行用于提供原子范围操作的指令的处理器的一个实施例的框图。
图3A图示出根据一个实施例的打包数据类型。
图3B图示出根据一个实施例的打包数据类型。
图3C图示出根据一个实施例的打包数据类型。
图3D图示出根据一个实施例的用于提供原子范围操作的指令编码。
图3E图示出根据另一实施例的用于提供原子范围操作的指令编码。
图3F图示出根据另一实施例的用于提供原子范围操作的指令编码。
图3G图示出根据另一实施例的用于提供原子范围操作的指令编码。
图3H图示出根据另一实施例的用于提供原子范围操作的指令编码。
图4A图示出具有用于提供原子范围操作的指令和逻辑的处理器微架构的一个实施例的元素。
图4B图示出具有用于提供原子范围操作的指令和逻辑的处理器微架构的另一实施例的元素。
图5是具有用于提供原子范围操作的指令和逻辑的处理器的一个实施例的框图。
图6是具有用于提供原子范围操作的指令和逻辑的计算机系统的一个实施例的框图。
图7是具有用于提供原子范围操作的指令和逻辑的计算机系统的另一实施例的框图。
图8是具有用于提供原子范围操作的指令和逻辑的计算机系统的另一实施例的框图。
图9是具有用于提供原子范围操作的指令和逻辑的片上系统的一个实施例的框图。
图10是具有用于提供原子范围操作的指令和逻辑的处理器的实施例的框图。
图11是具有用于提供原子范围操作的指令和逻辑的IP核开发系统的一个实施例的框图。
图12图示出支持用于提供原子范围操作的指令和逻辑的架构模拟系统的一个实施例。
图13图示出用于转译用于提供原子范围操作的指令的系统的一个实施例。
图14图示出用于使用用于提供原子范围操作的指令的处理器装置逻辑的实施例。
图15图示出用于使用用于提供原子范围操作的指令的处理器装置逻辑的替代实施例。
图16图示出用于使用用于提供原子范围操作的指令的处理器装置逻辑的另一替代实施例。
图17图示出用于使用用于提供原子范围操作的指令的处理器装置逻辑的另一替代实施例。
图18A图示出执行用于提供原子范围操作的指令的过程的一个实施例的流程图。
图18B图示出执行用于提供原子范围操作的指令的过程的替代实施例的流程图。
图19A图示出执行用于提供原子范围操作的指令的过程的另一替代实施例的流程图。
图19B图示出执行用于提供原子范围操作的指令的过程的另一替代实施例的流程图。
具体实施方式
以下描述公开了在处理器、计算机系统或其它处理装置内或者与处理器、计算机系统或其它处理装置相关联的用于提供原子范围操作的指令和处理逻辑。
在一些实施例中,本文公开的指令和逻辑提供多处理系统中的原子范围操作。在一些实施例中,原子范围修改指令指定用于范围索引的集合的地址。指令锁定对范围索引的集合的访问,并加载范围索引以检查范围大小。将范围大小与足以执行范围修改的大小进行比较。如果该范围大小足以执行范围修改,则执行范围修改并且将范围索引的集合中的一个或多个经修改的范围索引存储回存储器。否则当该范围大小不足以执行所述范围修改时可以设置错误信号。例如,错误信号可以包括在寄存器中设置的返回值。在一些实施例中,错误信号可以设置在处理器条件码或标志寄存器(例如,零标志)中。响应于原子范围修改指令的完成,解锁对范围索引的集合的访问。因此,这种原子范围修改指令的读取、有条件修改和写入操作对于系统中的所有观察者来说看起来是瞬时的。在一些实施例中,范围可以包括存储器中的一对64位索引NEXT和END。在一些替代实施例中,范围可以包括存储器中的一对32位(或16位)索引NEXT和END。实施例可以包括原子增量NEXT指令、加NEXT指令、减量END指令和/或减END指令。
例如,范围[NEXT,END)包括从NEXT到END-1的索引。当NEXT≥END时,范围[NEXT,END)为空。每当END>NEXT时,范围[NEXT,END)的大小就等于END - NEXT。具有大小≥1的范围足以执行原子增量NEXT指令(INC NEXT)或原子减量END指令(DEC END)。大小≥X的范围足以执行将X加到NEXT的原子指令(ADD NEXT)或从END减去X的原子指令(SUB END)。
将领会到,SPMD处理可以在多处理系统中使用原子范围操作来划分任务并调用函数的多个实例(例如,用于贝塞尔曲线、贝塞尔曲面、数据库搜索/更新等),或者在多个处理器(或逻辑处理器)上并行地执行循环的多次迭代。当这些多个处理器(例如处理器核、逻辑处理器、硬件线程等)共享对公共缓存存储器的访问时,通过使用原子范围操作进行同步(例如,分割任务、将任务索引分配给多个处理器并通过共享存储器进行通信)提供了在协作的SPMD处理器(或逻辑处理器)当中的任务或工作项的分配方面的改进的可编程性和效率。
在以下描述中,阐述了诸如处理逻辑、处理器类型、微架构状况、事件、启用机制等众多具体细节,以提供对本发明实施例的更透彻理解。然而,本领域技术人员将领会到,可以在没有此类具体细节的情况下实践本发明。此外,没有详细示出一些公知的结构、电路等等,以避免不必要地模糊本发明的实施例。
尽管参考处理器来描述以下实施例,但其它实施例也适用于其它类型的集成电路和逻辑器件。本发明的实施例的类似技术和教导可以应用于能够受益于更高的流水线吞吐量和改进的性能的其它类型的电路或半导体器件。本发明的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,本发明不限于执行512位、256位、128位、64位、32位或16位数据运算的处理器或机器,而是可以应用于执行数据操纵或管理的任何处理器和机器。此外,以下描述提供了示例,并且附图出于说明性目的示出了各种示例。然而,这些示例不应以限制性意义来解释,因为它们仅旨在提供本发明的实施例的示例,而并非旨在提供对本发明的实施例的所有可能实现方式的穷举列表。
虽然下述示例在执行单元和逻辑电路的上下文中描述了指令处置和分发,但本发明的其它实施例也可以通过存储在机器可读有形介质上的数据和/或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本发明的至少一个实施例相一致的功能。在一个实施例中,与本发明的实施例相关联的功能被实施在机器可执行指令中。所述指令可以用来使被编程有所述指令的通用处理器或专用处理器执行本发明的步骤。本发明的实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可以包括其上存储有指令的机器或计算机可读介质,所述指令可以被用来对计算机(或其它电子设备)进行编程以执行根据本发明的实施例的一个或多个操作。替代地,本发明的实施例的步骤可以由包含用于执行所述步骤的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。
用于对逻辑进行编程以执行本发明的实施例的指令可以被存储在系统中的存储器(诸如DRAM、缓存、闪存或其它存储)内。另外,可以经由网络或通过其它计算机可读介质的方式来分发指令。因此,计算机可读介质可以包括用于以机器(诸如,计算机)可读的格式存储或传输信息的任何机构,但不限于:软盘、光盘、紧凑盘只读存储器(CD-ROM)、和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在经由电、光、声或其它形式的传播信号(诸如,载波、红外信号、数字信号等)通过互联网的信息传输中使用的有形机器可读存储。因此,计算机可读介质包括适用于存储或传输以机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
设计可经历从创造到仿真到制造的各种阶段。表示设计的数据可以用多种方式来表示该设计。首先,如仿真中将有用的,可以使用硬件描述语言或另一功能性描述语言来表示硬件。此外,可以在设计过程的一些阶段处产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某一阶段处都达到表示硬件模型中各种器件的物理放置的数据级别。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定用于产生集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可以被存储在任何形式的机器可读介质中。存储器或者磁或光存储(诸如,盘)可以是机器可读介质,以存储经由光或电波传输的信息,所述光或电波被调制或以其它方式被生成为传输这种信息。当传输指示或携带代码或设计的电载波时,在执行电信号的复制、缓冲或重传输的程度上做出新的副本。因此,通信供应商或网络供应商可以在有形的机器可读介质上至少暂时性地存储诸如被编码到载波中的信息的制品,从而实施本发明的实施例的技术。
在现代处理器中,使用多个不同执行单元来处理和执行各种代码和指令。并不是所有指令都被同等地创建,因为一些指令更快地被完成而其它指令可能花费多个时钟周期来完成。指令的吞吐量越快,处理器的总体性能就越好。因此,使同样数目的指令尽可能快地执行将会是有利的。然而,存在具有更大的复杂度、并且在执行时间和处理器资源方面要求更多的某些指令。例如,存在浮点指令、加载/存储操作、数据移动等。
随着更多的计算机系统被用于互联网、文本以及多媒体应用中,随时间而引进了附加的处理器支持。在一个实施例中,指令集可以与一个或多个计算机架构相关联,所述一个或多个计算机架构包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可以由一个或多个微架构来实现,所述微架构包括用于实现一个或多个指令集的处理器逻辑和电路。替代实施例可以通过微代码、扩展的微代码或微代码辅助、管理程序、二进制转译、硬件重编译等来实现ISA。相应地,具有不同微架构的处理器可以共享公共指令集的至少一部分。例如,英特尔®奔腾4处理器、英特尔®酷睿TM处理器以及来自加利福尼亚州桑尼威尔市的超微半导体公司的处理器实现几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。类似地,由其它处理器开发公司(诸如,ARM控股有限公司、MIPS或它们的被许可方或采用方)所设计的处理器可以共享至少一部分公共指令集,但可以包括不同的处理器设计。例如,可以使用新的或公知的技术在不同的微架构中以不同方式实现相同的ISA寄存器架构,所述技术包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器文件)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可以包括:可以由软件编程者寻址或不可寻址的一个或多个寄存器、寄存器架构、寄存器文件或其它寄存器集合。
在一个实施例中,指令可以包括一个或多个指令格式。在一个实施例中,指令格式可以指示各种字段(位的数目、位的位置等)以除其它内容之外指定将要被执行的操作以及将要对其执行操作的(一个或多个)操作数。可以通过指令模板(或子格式)来进一步细分定义一些指令格式。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集和/或被定义为具有以不同方式解译的给定字段。在一个实施例中,使用指令格式(并且,如果定义了的话,则以该指令格式的指令模板中的给定的一个)来表达指令,并且该指令指定或指示操作以及该操作将对其进行操作的操作数。
科学、金融、自动向量化通用、RMS(识别、挖掘和合成)以及视觉和多媒体应用(诸如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(SIMD)指的是使得处理器对多个数据元素执行一操作的指令类型。SIMD技术可以被用于处理器中,所述处理器可以将寄存器中的位以逻辑方式划分到多个固定大小或可变大小的数据元素中,所述数据元素中的每一个表示分离的值。例如,在一个实施例中,64位寄存器中的位可以被组织为包含四个分离的16位数据元素的源操作数,所述数据元素中的每一个表示分离的16位值。该数据类型可以被称为“打包”数据类型或“向量”数据类型,并且该数据类型的操作数被称为打包数据操作数或向量操作数。在一个实施例中,打包数据项或向量可以是存储在单个寄存器内的打包数据元素的序列,并且打包数据操作数或向量操作数可以是SIMD指令(或“打包数据指令”或“向量指令”)的源操作数或目的地操作数。在一个实施例中,SIMD指令指定了将要对两个源向量操作数执行的单个向量操作,以生成具有相同或不同大小的、具有相同或不同数量的数据元素的、且以相同或不同数据元素次序的目的地向量操作数(也被称为结果向量操作数)。
诸如由英特尔®酷睿TM处理器(具有包括x86、MMXTM、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集)、ARM处理器(诸如,具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM Cortex®处理器家族)和MIPS处理器(诸如,由中国科学院计算技术研究所(ICT)开发的龙芯处理器家族)所采用的SIMD技术之类的SIMD技术使得在应用性能上实现了显著的改进(酷睿TM和MMXTM是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。
在一个实施例中,目的地寄存器/数据和源寄存器/数据是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可以由寄存器、存储器或具有与所描绘的那些名称或功能不同的名称或功能的其它存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”是第一和第二源存储寄存器或其它存储区域,以此类推。在其它实施例中,SRC和DEST存储区域中的两个或更多个区域可以对应于相同存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回至两个源寄存器中用作目的地寄存器的那个寄存器,源寄存器中的一个也可以充当目的地寄存器。
图1A是根据本发明的一个实施例的示例性计算机系统的框图,该计算机系统被形成为具有包括执行单元以执行指令的处理器。根据本发明,诸如在本文描述的实施例中,系统100包括诸如处理器102之类的组件,以采用包括逻辑的执行单元来实行算法以便处理数据。系统100代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的奔腾® III、奔腾® 4、至强TM、安腾®、XScaleTM和/或StrongARMTM微处理器的处理系统,但是也可以使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可以执行可从华盛顿州雷蒙德市的微软公司获得的WINDOWSTM操作系统的版本,但是也可以使用其它操作系统(例如UNIX和Linux)、嵌入式软件和/或图形用户界面。因此,本发明的实施例不限于硬件电路和软件的任何具体组合。
实施例不限于计算机系统。本发明的替代实施例可以被用于其它设备中,诸如手持式设备和嵌入式应用。手持式设备的一些示例包括:蜂窝电话、互联网协议设备、数字相机、个人数字助理(PDA)和手持式PC。嵌入式应用可以包括:微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机或可以执行根据至少一个实施例的一个或多个指令的任何其它系统。
图1A是计算机系统100的框图,计算机系统100被形成为具有处理器102,处理器102包括一个或多个执行单元108以实行算法,以便实行根据本发明的一个实施例的至少一个指令。可以在单处理器桌面或服务器系统的上下文中描述一个实施例,但替代实施例可以被包括在多处理器系统中。系统100是“中枢”系统架构的示例。计算机系统100包括处理器102以处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任何其它处理器设备(诸如例如数字信号处理器)。处理器102耦合至处理器总线110,处理器总线110可以在处理器102和系统100中的其它组件之间传输数据信号。系统100的元件执行熟知本领域的人们众所周知的它们的常规功能。
在一个实施例中,处理器102包括第一级(L1)内部缓存存储器104。取决于架构,处理器102可以具有单个内部缓存或多级内部缓存。替代地,在另一实施例中,缓存存储器可以居于处理器102的外部。其它实施例也可以包括内部缓存和外部缓存的组合,这取决于特定实现和需求。寄存器文件106可以在各种寄存器(包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)中存储不同类型的数据。
执行单元108(包括执行整数和浮点运算的逻辑)也居于处理器102中。处理器102还包括微代码(ucode)ROM,其存储用于某些宏指令的微代码。对于一个实施例,执行单元108包括处置打包指令集109的逻辑。通过将打包指令集109包括在通用处理器102的指令集中以及包括执行这些指令的相关联的电路,可以使用通用处理器102中的打包数据来实行许多多媒体应用所使用的操作。因此,通过将处理器数据总线的全部宽度用于对打包数据实行操作,许多多媒体应用可以被加速并被更高效地执行。这可以消减对跨处理器的数据总线传输更小数据单元以在一个时间对一个数据元素实行一个或多个操作的需要。
执行单元108的替代实施例也可以用在微控制器、嵌入式处理器、图形设备、DSP以及其它类型的逻辑电路中。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其它存储器设备。存储器120可以存储可以由处理器102执行的、通过数据信号表示的指令和/或数据。
系统逻辑芯片116耦合至处理器总线110和存储器120。在所示出的实施例中的系统逻辑芯片116是存储器控制器中枢(MCH)。处理器102可以经由处理器总线110与MCH 116通信。MCH 116提供至存储器120的高带宽存储器路径118,用于指令和数据存储,以及用于存储图形命令、数据和结构(texture)。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、芯片集和处理器120的高速I/O总线。一些示例是音频控制器、固件中枢(闪速BIOS)128、无线收发机126、数据存储124、包含用户输入和键盘接口的旧有I/O控制器、串行扩展端口(诸如通用串行总线(USB))、和网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备或者其它大容量存储设备。
对于系统的另一实施例而言,根据一个实施例的指令可以与片上系统一起使用。片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器是闪存。闪存可以位于与处理器和其它系统组件相同的管芯上。附加地,诸如存储器控制器或者图形控制器之类的其它逻辑块也可以位于片上系统上。
图1B图示出实现本发明的一个实施例的原理的数据处理系统140。本领域技术人员将容易领会的是,本文描述的实施例可以与替代处理系统一起使用,而不会脱离本发明的实施例的范围。
计算机系统140包括能够执行根据一个实施例的至少一个指令的处理核159。对于一个实施例而言,处理核159表示任何类型架构的处理单元,所述架构包括但不限于CISC、RISC、或者VLIM类型架构。处理核159还可以适合于以一种或者多种工艺技术进行制造,以及通过以足够细节在机器可读介质上表示,该处理核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)和它们的相应逆变换之类的离散变换;诸如颜色空间变换、视频编码运动估计或者视频解码运动补偿之类的压缩/解压缩技术;以及诸如脉冲编码调制(PCM)之类的调制/解调(MODEM)函数。
图1C图示出能够执行用于提供原子范围操作的指令的数据处理系统的另一替代实施例。根据一个替代实施例,数据处理系统160可以包括主处理器166、SIMD协处理器161、缓存存储器167、和输入/输出系统168。输入/输出系统168可以可选地耦合到无线接口169。SIMD协处理器161能够执行包括根据一个实施例的指令的操作。处理核170可以适合于以一种或者多种工艺技术进行制造,以及通过以足够细节在机器可读介质上表示,处理核170可以适合于促进包括处理核170的数据处理系统160的全部或者一部分的制造。
对于一个实施例而言,SIMD协处理器161包括执行单元162和(一个或多个)寄存器文件164的集合。主处理器166的一个实施例包括用以识别指令集163的指令的解码器165,所述指令集163包括根据一个实施例的用于由执行单元162执行的指令。对于替代实施例而言,SIMD协处理器161还包括用以对指令集163的指令解码的解码器165B的至少一部分。处理核170还包括附加电路(未示出),其对于理解本发明的实施例而言不是必需的。
在操作时,主处理器166执行控制通用类型的数据处理操作的数据处理指令流,所述数据处理操作包括与缓存存储器167和输入/输出系统168的交互。嵌入在数据处理指令流内的是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为具有应该由所附接的SIMD协处理器161执行的类型。因此,主处理器166在协处理器总线171上发布这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号),由任何所附接的SIMD协处理器从该协处理器总线171接收这些SIMD协处理器指令。在该情况下,SIMD协处理器161将接受和执行意图用于其的任何接收到的SIMD协处理器指令。
可以经由无线接口169接收数据,以用于由SIMD协处理器指令进行处理。对于一个示例而言,语音通信可以以数字信号的形式被接收,所述数字信号可以被SIMD协处理器指令处理,以重新生成表示语音通信的数字音频样本。对于另一示例而言,压缩的音频和/或视频可以以数字位流的形式被接收,所述数字位流可以被SIMD协处理器指令处理,以重新生成数字音频样本和/或运动视频帧。对于处理核170的一个实施例而言,主处理器166和SIMD协处理器161被集成到单个处理核170中,所述单个处理核170包括执行单元162、(一个或者多个)寄存器文件164的集合和解码器165,以识别包括根据一个实施例的指令的指令集163的指令。
图2是用于处理器200的微架构的框图,所述处理器200包括用以执行根据本发明的一个实施例的指令的逻辑电路。在一些实施例中,根据一个实施例的指令可以被实现为对具有字节、字、双字、四倍字等等大小以及诸如单精度和双精度整数和浮点数据类型之类的数据类型的数据元素进行操作。在一个实施例中,有序前端201是处理器200的部分,其提取要被执行的指令并且将它们准备好以随后用于处理器流水线中使用。前端201可以包括若干个单元。在一个实施例中,指令预提取器226从存储器提取指令,并且将它们馈送到指令解码器228中,指令解码器228进而对它们进行解码或者解译。例如,在一个实施例中,解码器将接收到的指令解码成机器可以执行的被称为“微指令”或者“微操作”(也被称为微op或者uop)的一个或者多个操作。在其它实施例中,解码器将指令解析成由微架构用于执行根据一个实施例的操作的操作码和对应的数据和控制字段。在一个实施例中,轨迹缓存230取得已解码的微操作,并且将其组装成微操作队列234中的程序排序的序列或者轨迹以用于执行。当轨迹缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需要的微操作。
一些指令被转换成单个微操作,而其它指令需要若干个微操作来完成完整操作。在一个实施例中,如果需要多于四个微操作来完成指令,则解码器228访问微代码ROM 232来进行该指令。对于一个实施例而言,指令可以被解码成少量微操作以用于在指令解码器228处进行处理。在另一实施例中,如果需要多个微操作来完成操作,则指令可以被存储在微代码ROM 232内。轨迹缓存230指代入口点可编程逻辑阵列(PLA),用以确定用于读取微代码序列的正确微指令指针,以完成来自微代码ROM 232的根据一个实施例的一个或者多个指令。在微代码ROM 232完成针对指令将微操作进行定序之后,机器的前端201恢复从轨迹缓存230提取微操作。
无序执行引擎203是其中将指令准备好用于执行的地方。无序执行逻辑具有多个缓冲器,用以使指令流平滑并对其重新排序,以随着指令沿流水线传下去而对性能进行优化并且为了执行而受到调度。分配器逻辑分配每个微操作为了执行而需要的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。分配器还在指令调度器之前针对两个微操作队列(一个用于存储器操作,而一个用于非存储器操作)之一中的每个微操作分配条目,所述指令调度器是:存储器调度器、快速调度器202、慢速/通用浮点调度器204、和简单浮点调度器206。微操作调度器202、204、206基于其相关性输入寄存器操作数源的准备就绪和微操作完成其操作所需要的执行资源的可用性来确定何时微操作已经准备好进行执行。一个实施例的快速调度器202可以对每半个主时钟周期进行调度,而其它调度器可以仅每个主处理器时钟周期调度一次。调度器对分派端口进行仲裁,以调度微操作以用于执行。
寄存器文件208、210位于调度器202、204、206和执行块211中的执行单元212、214、216、218、220、222、224之间。存在分别用于整数和浮点操作的单独的寄存器文件208、210。一个实施例的每个寄存器文件208、210还包括分流网络(bypass network),其可以向新的相关性微指令分流或转发还没有被写入到寄存器文件中的刚完成的结果。整数寄存器文件208和浮点寄存器文件210也能够与彼此传送数据。对于一个实施例而言,整数寄存器文件208被拆分成两个单独的寄存器文件,一个寄存器文件用于数据的低序位32位,而第二个寄存器文件用于数据的高序位32位。一个实施例的浮点寄存器文件210具有128位宽的条目,因为浮点指令通常具有在宽度上从64到128位的操作数。
执行块211包含执行单元212、214、216、218、220、222、224,在其中指令被实际执行。该部分包括存储微指令为了执行所需要的整数和浮点数据操作数值。一个实施例的处理器200包括多个执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。对于一个实施例而言,浮点执行块222、224执行浮点操作、MMX操作、SIMD操作和SSE操作或者其它操作。一个实施例的浮点ALU 222包括64位乘64位的浮点除法器,用以执行对微操作的除法、平方根、和求余数。对于本发明的实施例而言,涉及浮点值的指令可以利用浮点硬件来处理。在一个实施例中,ALU操作去往高速ALU执行单元216、218。一个实施例的快速ALU 216、218可以以半个时钟周期的有效延迟来执行快速操作。对于一个实施例而言,大多数复杂整数操作去往慢速ALU 220,因为慢速ALU 220包括用于长延迟类型的操作(诸如乘法器、移位、标志逻辑和分支处理)的整数执行硬件。存储器加载/存储操作由AGU 212、214执行。对于一个实施例而言,在对64位数据操作数执行整数操作的情境中描述整数ALU 216、218、220。在替代实施例中,ALU 216、218、220可以被实现为支持各种各样的数据位,包括16、32、128、256等等。相似地,浮点单元222、224可以被实现为支持具有各种宽度的位的操作数范围。对于一个实施例而言,浮点单元222、224可以结合SIMD和多媒体指令对128位宽度的打包数据操作数进行操作。
在一个实施例中,微操作调度器202、204、206在亲代加载已经完成执行之前分派相关性操作。因为微操作在处理器200中被推测性地调度和执行,所以处理器200也包括用以处理存储器丢失的逻辑。如果数据加载在数据缓存中丢失,则在流水线中可能有在途中(in flight)的相关性操作,其已经为调度器中留有暂时不正确的数据。重放机制可以跟踪和重新执行使用不正确数据的指令。只有相关性操作需要被重放,并且允许独立性操作完成。
术语“寄存器”可以指代机载处理器存储位置,其被用作用以标识操作数的指令的一部分。换言之,寄存器可以是可从处理器外部(从程序员的角度而言)使用的那些。然而,一个实施例的寄存器不应该在含义上被限制为特定类型的电路。而是,一个实施例的寄存器能够存储和提供数据,并且执行本文描述的功能。本文描述的寄存器可以由处理器内的电路使用任何数量的不同技术来实现,所述技术诸如是专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用物理寄存器和动态分配物理寄存器的组合等等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含用于打包数据的8个多媒体SIMD寄存器。对于以下的讨论,寄存器被理解为是被设计成保持打包数据的数据寄存器,诸如在利用来自加利福尼亚州圣克拉拉市的英特尔公司的MMX技术能够实现的微处理器中的64位宽的MMXTM寄存器(其在一些实例中也被称为“mm”)。以整数和浮点形式都可用的这些MMX寄存器可以利用伴有SIMD和SSE指令的打包数据元素进行操作。相似地,与SSE2、SSE3、SSE4或者之后的(被概括称为“SSEx”)技术相关的128位宽XMM寄存器也可以用于保持这样的打包数据操作数。在一个实施例中,在存储打包数据和整数数据时,寄存器不需要在两种数据类型之间进行区分。在一个实施例中,整数和浮点被包含在相同寄存器文件或者不同寄存器文件中。此外,在一个实施例中,浮点和整数数据可以被存储在不同寄存器中或者相同寄存器中。
在以下附图的示例中,描述了多个数据操作数。图3A图示出根据本发明的一个实施例的在多媒体寄存器中的各种打包数据类型表示。图3A图示出用于128位宽操作数的打包字节310、打包字320和打包双字(dword)330的数据类型。该示例的打包字节格式310是128位长的,并且包含16个打包字节数据元素。字节在此处被定义为数据的8位。针对每个字节数据元素的信息被如下存储:对于字节0而言被存储在位7到位0中,对于字节1而言被存储在位15到位8中,对于字节2而言被存储在位23到位16中,并且最终对于字节15而言被存储在位120到位127中。因此,所有可用的位在寄存器中使用。这种存储布置增加了处理器的存储效率。同样,在访问16个数据元素的情况下,现在可以对16个数据元素并行执行一个操作。
一般地,数据元素是存储在单个寄存器或者存储器位置中的单个一段数据,其中其它数据元素具有相同长度。在与SSEx技术相关的打包数据序列中,存储在XMM寄存器中的数据元素的数量是128位除以单个数据元素的位长度。相似地,在与MMX和SSE技术相关的打包数据序列中,存储在MMX寄存器中的数据元素的数量是64位除以单个数据元素的位长度。虽然在图3A中图示的数据类型是128位长,但是本发明的实施例也可以利用64位宽、256位宽、或者其它大小的操作数来操作。该示例的打包字格式320是128位长,并且包含八个打包字数据元素。每个打包字包含16位信息。图3A的打包双字格式330是128位长,并且包含四个打包双字数据元素。每个打包双字数据元素包含32位信息。打包四倍字是128位长,并且包含两个打包四倍字数据元素。
图3B图示出替代的寄存器内数据存储格式。每个打包数据可以包括多于一个独立数据元素。三个打包数据格式被图示:打包半字(packed half)341、打包单字(packedsingle)342、和打包双字(packed double)343。打包半字341、打包单字342、和打包双字343的一个实施例包含固定点数据元素。对于替代实施例而言,打包半字341、打包单字342、和打包双字343中的一项或者多项可以包含浮点数据元素。打包半字341的一个替代实施例是包含8个16位数据元素的128位长。打包单字342的一个实施例是128位长并且包含4个32位数据元素。打包双字343的一个实施例是128位长并且包含2个64位数据元素。将领会,这样的打包数据格式可以被进一步扩展成其它寄存器长度,例如96位、160位、192位、224位、256位、512位或更多。
图3C图示出根据本发明的一个实施例的在多媒体寄存器中的各种有符号和无符号打包数据类型表示。无符号打包字节表示344图示出在SIMD寄存器中的无符号打包字节的存储。针对每个字节数据元素的信息被如下存储:对于字节0被存储在位7到位0,对于字节1被存储在位15到位8,对于字节2被存储在位23到位16等等,并且最后,对于字节15被存储在位120到位127。因此,所有可用的位在寄存器中被使用。这种存储布置增加了处理器的存储效率。同样,在访问16个数据元素的情况下,现在可以对16个数据元素以并行方式执行一个操作。有符号打包字节表示345图示出有符号打包字节的存储。要指出,每个字节数据元素的第八位是符号指示符。无符号打包字表示346图示出字7到字0如何被存储在SIMD寄存器中。有符号打包字表示347类似于无符号打包字寄存器内表示346。要指出,每个字数据元素的第16位是符号指示符。无符号打包双字表示348示出了双字数据元素如何被存储。有符号打包双字表示349类似于无符号打包双字寄存器内表示348。要指出,必要的符号位是每个双字数据元素的第32位。
图3D是操作编码(操作码)格式360的一个实施例的描绘,所述操作编码格式360具有32或更多个位,以及下述寄存器/存储器操作数寻址模式:该寄存器/存储器操作数寻址模式与在intel.com/products/processor/manuals/处在万维网(www)上可从加利福尼亚州的圣克拉拉市的英特尔公司获得的“Intel® 64 and IA-32 Intel ArchitectureSoftware Developer's Manual Combined Volumes 2A and 2B: Instruction SetReference A-Z”中描述的操作码格式类型相对应。在一个实施例中,指令可以由字段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与源操作数标识符375相同,而在其它实施例中,它们是不同的。对于替代实施例而言,目的地操作数标识符376与源操作数标识符375相同,而在其它实施例中,它们是不同的。在一个实施例中,指令对由操作数标识符374和375标识的操作数中的一项或者多项进行操作,并且由操作数标识符374和375所标识的一个或者多个操作数被指令的结果所覆写,而在其它实施例中,由标识符374和375标识的操作数被写入到另一寄存器中的另一数据元素。操作码格式360和370允许部分地由MOD字段363和373以及由可选的缩放索引基数和位移字节所指定的寄存器对寄存器寻址、存储器对寄存器寻址、经由存储器的寄存器寻址、经由寄存器的寄存器寻址、经由立即数的寄存器寻址、寄存器对存储器寻址。
接下来转向图3F,在一些替代实施例中,64位(或者128位、或者256位、或者512位或者更多)单指令多数据(SIMD)算术操作可以通过协处理器数据处理(CDP)指令来执行。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一个这样的CDP指令。对于替代实施例而言,CDP指令类型的操作可以由字段383、384、387和388中的一项或者多项来编码。每个指令的多达三个操作数位置可以被标识,其包括多达两个源操作数标识符385和390,以及一个目的地操作数标识符386。协处理器的一个实施例可以对8、16、32、和64位值进行操作。对于一个实施例而言,对整数数据元素执行指令。在一些实施例中,可以使用条件字段381有条件地执行指令。对于一些实施例而言,源数据大小可以由字段383编码。在一些实施例中,零(Z)、负(N)、进位(C)、和溢出(V)检测可以在SIMD字段上进行。对于一些指令而言,饱和类型可以由字段384编码。
接下来转向图3G,其是根据另一实施例的用来提供原子范围操作的另一替代操作编码(操作码)格式397的描绘,所述另一替代操作编码(操作码)格式397与在intel.com/products/processor/manuals/处在万维网(www)上可从加利福尼亚州的圣克拉拉市的英特尔公司获得的“Intel® Advanced Vector Extensions Programming Reference”中描述的操作码格式类型相对应。
原始x86指令集提供1字节操作码,其具有各种格式的被包含在附加字节中的地址字节(address syllable)和立即数操作数,所述附加字节的存在从第一“操作码”字节中已知。附加地,存在被预留为对于操作码的修饰符的特定字节值(被称为前缀,因为其必须被置于指令之前)。当256操作码字节的原始调色码(palette)(包括这些特殊的前缀值)被耗尽时,单个字节专用为对于新的一组256个操作码的换码。随着向量指令(例如,SIMD)被添加,生成了对于更多操作码的需要,并且“两个字节”的操作码映射也是不足的,即便当通过使用前缀进行扩展时。为了这个目的,新指令被添加到使用2字节加上作为标识符的可选前缀的附加映射中。
附加地,为了促成64位模式中的附加寄存器,可以在前缀和操作码(以及确定操作码必需的任何换码字节)之间使用附加前缀(被称为“REX”)。在一个实施例中,REX可以具有4个“有效负荷”位,以指示在64位模式中的附加寄存器的使用。在其它实施例中,其可以少于或者多于4个位。至少一个指令集的一般格式(其一般对用于格式360和/或格式370)被一般地说明如下:
[前缀] [rex] 换码 [换码2] 操作码 modrm(等等)。
操作码格式397对应于操作码格式370,并且包括可选的VEX前缀字节391(在一个实施例中以C4十六进制开始),以代替大多数其它常用的旧有指令前缀字节和换码。例如,以下说明了使用两个字段来编码指令的实施例,这可以以下的时候被使用:当第二换码存在于原始指令中的时候,或者在REX字段中的额外位(例如,XB和W字段)需要被使用的时候。在以下图示的实施例中,旧有换码由新换码值来表示,旧有前缀被完全压缩成“有效负荷”字节的一部分,旧有前缀被收回并且可用于未来扩展,第二换码在“映射”字段中被压缩,并且未来映射或者特征空间是可用的,并且新特征被添加(例如,增大的向量长度和附加的源寄存器说明符)。
根据一个实施例的指令可以由字段391和392中的一项或者多项编码。每个指令的多达四个操作数位置可以由字段391与源操作数标识符374和375相结合地以及与可选的缩放索基数(SIB)标识符393、可选的位移标识符394和可选的立即数字节395相结合地来标识。对于一个实施例而言,VEX前缀字节391可以用于标识32位或者64位源和目的地操作数和/或128位或者256位SIMD寄存器或存储器操作数。对于一个实施例而言,由操作码格式397提供的功能可以对于操作码格式370而言是冗余的,而在其它实施例中,它们是不同的。操作码格式370和397允许部分地由MOD字段373以及由可选的(SIB)标识符393、可选的位移标识符394、和可选的立即数字节395所指定的寄存器对寄存器寻址、存储器对寄存器寻址、经由存储器的寄存器寻址、经由寄存器的寄存器寻址、经由立即数的寄存器寻址、寄存器对存储器寻址。
接下来转向图3H,其是根据另一实施例的用来提供原子范围操作的另一替代操作编码(操作码)格式398的描绘。操作码格式398对应于操作码格式370和397,并且包括可选的EVEX前缀字节396(在一个实施例中以62十六进制开始),以替代大多数其它常用的旧有指令前缀字节和换码,并且提供附加的功能。根据一个实施例的指令可以由字段396和392中的一项或者多项来编码。每个指令多达四个操作数位置和掩码可以由字段396与源操作数标识符374和375相结合地以及与可选的缩放索引基数(SIB)标识符393、可选的位移标识符394、和可选的立即数字节395相结合地来标识。对于一个实施例而言,EVEX前缀字节396可以用于标识32位或者64位源和目的地操作数和/或128位、256位或者512位SIMD寄存器或者存储器操作数。对于一个实施例而言,由操作码格式398提供的功能可以对于操作码格式370或者397是冗余的,而在其它实施例中,它们是不同的。操作码格式398允许部分地由MOD字段373以及由可选的(SIB)标识符393、可选的位移标识符394、和可选的立即数字节395所指定的利用掩码的寄存器对寄存器寻址、存储器对寄存器寻址、经由存储器的寄存器寻址、经由寄存器的寄存器寻址、经由立即数的寄存器寻址、寄存器对存储器寻址。至少一个指令集的一般格式(其一般对应于格式360和/或格式370)被一般地说明如下:
evex 1 RXBmmmmm WvvvLpp evex4 操作码 modrm [sib][disp][imm]。
对于一个实施例而言,根据EVEX格式398编码的指令可以具有附加的“有效载荷”位,其可以用于提供具有附加的新特征的原子范围操作,诸如例如用户可配置掩码寄存器,或附加的操作数,或从128位、256位或512位向量寄存器或待选的更多寄存器当中的选择等等。例如,在VEX格式397可以用于不具有掩码的指令的情况下,EVEX格式398可以用于具有显式用户可配置掩码的指令。此外,在VEX格式397可以用于使用128位或256位向量寄存器的指令的情况下,EVEX格式398可以用于使用128位、256位、512位或更大(或更小)的向量寄存器的指令。
通过以下示例来说明用于提供原子范围操作的示例指令或命令:
指令 目的地 描述
INC NEXT Addr1 在有效地址Addr1处从存储器加载范围索引NEXT和END,并锁定对范围索引的访问。如果NEXT小于END,则清除错误信号标志、增量NEXT并存储回存储器。如果不是这样,则设置错误信号标志。然后解锁对范围索引的访问。
ADD NEXT Addr1 Reg/Imm 在有效地址Addr1处从存储器加载范围索引NEXT和END,并锁定对范围索引的访问。如果NEXT加上Reg/Imm的值小于END,则清除错误信号标志、将Reg/Imm的值加到NEXT中并存储回存储器。如果不是这样,则设置错误信号标志。然后解锁对范围索引的访问。
DEC END Addr1 在有效地址Addr1处从存储器加载范围索引NEXT和END,并锁定对范围索引的访问。如果NEXT小于END,则清除错误信号标志、减量END并存储回存储器。如果不是这样,则设置错误信号标志。然后解锁对范围索引的访问。
SUB END Addr1 Reg/Imm 在有效地址Addr1处从存储器加载范围索引NEXT和END,并锁定对范围索引的访问。如果NEXT加上Reg/Imm的值小于END,则清除错误信号标志、从END中减去Reg/Imm的值并存储回存储器。如果不是这样,则设置错误信号标志。然后解锁对范围索引的访问。
PREFETCH RANGE(预提取范围) Addr1 从存储器的有效地址Addr1处将范围索引NEXT和END预提取-加载到L1缓存中,并获得对范围索引的写访问权限。
在一些实施例中,对于上面的示例原子范围指令,范围可以包括存储器中的一对索引NEXT和END。在一些实施例中,范围可以包括存储器中的一对64位索引。在一些替代实施例中,范围可以包括存储器中的一对32位(或16位)索引。示例实施例可以包括原子增量NEXT指令(例如INC NEXT)、加NEXT指令(例如ADD NEXT)、减量END指令(例如DEC END)和/或减END指令(例如SUB END)以及用于将范围预提取到缓存存储器中的指令。
例如,在存储器中由两个整数——NEXT和END指定的范围[NEXT,END)包括从NEXT到END-1的索引。当NEXT≥END时,范围[NEXT,END)为空。每当END>NEXT时,范围[NEXT,END)的大小就等于END - NEXT。具有大小≥1的范围足以执行原子增量NEXT指令(INC NEXT)或原子减量END指令(DEC END)。大小≥X的范围足以执行将X加到NEXT的原子指令(ADD NEXT)或从END减去X的原子指令(SUB END)。
将领会到,SPMD处理可以在多处理系统中使用上面的示例原子范围指令来划分任务并调用函数的多个实例(例如,用于贝塞尔曲线、贝塞尔曲面、数据库搜索/更新等),或者在多个处理器(或逻辑处理器)上并行地执行循环的多次迭代。当这些多个处理器(例如处理器核、逻辑处理器、硬件线程等)共享对公共缓存存储器的访问时,通过使用原子范围操作进行同步(例如,分割任务、将任务索引分配给多个处理器并通过共享存储器进行通信)提供了在协作的SPMD处理器(或逻辑处理器)当中的任务或工作项的分配方面的改进的可编程性和效率。
图4A是图示出根据本发明的至少一个实施例的有序流水线和寄存器重命名级、无序发布/执行流水线的框图。图4B是图示出根据本发明的至少一个实施例的要被包括在处理器中的有序架构核和寄存器重命名逻辑、无序发布/执行逻辑的框图。图4A中的实线框图示出有序流水线,而虚线框图示出寄存器重命名、无序分发/执行流水线。相似地,图4B中的实线框图示出有序架构逻辑,而虚线框图示出寄存器重命名逻辑和无序发布/执行逻辑。
在图4A中,处理器流水线400包括提取级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或者发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处理级422和提交级424。
在图4B中,箭头表示了在两个和更多单元之间的耦合,并且箭头的方向指示了在那些单元之间的数据流方向。图4B示出了处理器核490,其包括耦合到执行引擎单元450的前端单元430,并且引擎单元450和前端单元430两者都耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或者替代核类型。作为又一个选项,核490可以是专用核,诸如例如是网络或者通信核、压缩引擎、图形核等等。
前端单元430包括耦合到指令缓存单元434的分支预测单元432,该指令缓存单元434耦合到指令转译后备缓冲器(TLB)436,该指令转译后备缓冲器(TLB)436耦合到指令提取单元438,该指令提取单元438耦合到解码单元440。解码单元或者解码器可以解码指令,并且作为输出生成一个或者多个微操作、微代码入口点、微指令、其它指令、或者其它控制信号,其是从原始指令解码的、或者以其它方式反映原始指令、或者从原始指令导出的。解码器可以使用各种不同机制来实现。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。指令缓存单元434进一步耦合到存储器单元470中的2级(L2)缓存单元476。解码单元440耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦合到引退单元454和一个或多个调度器单元456的集合的重命名/分配器单元452。(一个或者多个)调度器单元456表示任何数目的不同调度器,其包括保留站、中央指令窗等等。(一个或者多个)调度器单元456耦合到(一个或者多个)物理寄存器文件单元458。(一个或者多个)物理寄存器文件单元458中的每一个表示一个或者多个物理寄存器文件,其中的不同物理寄存器文件存储一个或者多个不同数据类型(诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点等等)、状态(例如,作为要执行的下一指令的地址的指令指针)等等。(一个或者多个)物理寄存器文件单元458被引退单元454覆盖以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或者多个)重排序缓冲器和(一个或者多个)引退寄存器文件、使用(一个或者多个)未来文件、(一个或者多个)历史缓冲器和(一个或者多个)引退寄存器文件;使用寄存器映射和寄存器池等等)。一般地,架构寄存器从处理器外是可见的,或者从程序员的视角是可见的。寄存器不限于任何已知特定类型的电路。各种不同类型的寄存器是适当的,只要它们能够存储和提供数据,如本文所描述的。适当寄存器的示例包括但不限于:专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等等。引退单元454和(一个或者多个)物理寄存器文件单元458耦合到(一个或者多个)执行集群460。(一个或者多个)执行集群460包括一个或者多个执行单元462的集合和一个或者多个存储器访问单元464的集合。执行单元462可执行各种操作(例如,移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于具体功能或者功能集合的多个执行单元,但是其它实施例可以仅包括一个执行单元或者全部都执行全部功能的多个执行单元。(一个或者多个)调度器456、(一个或者多个)物理寄存器文件单元458和(一个或者多个)执行集群460可能被示为可能是复数个,因为特定实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或各自具有其自己的调度器单元、物理寄存器(多个)文件单元和/或执行集群的存储器访问流水线,并且在单独的存储器访问流水线的情况下,实现某些实施例,其中只有该流水线的执行集群具有(一个或者多个)存储器访问单元464)。还应该理解,在使用单独流水线的情况下,这些流水线中的一个或者多个可以是无序发布/执行的,并且其余是有序的。
存储器访问单元464的集合耦合到存储器单元470,存储器单元470包括耦合到数据缓存单元474的数据TLB单元472,该数据缓存单元474耦合到2级(L2)缓存单元476。在一个示例性实施例中,存储器访问单元464可以包括加载单元、存储地址单元、和存储数据单元,这些中的每一个耦合到存储器单元470中的数据TLB单元472。L2缓存单元476耦合到一个或者多个其它级别的缓存,并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、无序发布/执行核架构可以将如下来实现流水线400:1)指令提取438执行提取和长度解码级402和404;2)解码单元440执行解码级406;3)重命名/分配器单元452执行分配级408和重命名级410;4)(一个或者多个)调度器单元456执行调度级412;5)(一个或者多个)物理寄存器文件单元458和存储器单元470执行寄存器读取/存储器读取级414;执行集群460执行该执行级416;6)存储器单元470和(一个或者多个)物理寄存器文件单元458执行写回/存储器写入级418;7)各种单元可以被牵涉于异常处理级422中;以及8)引退单元454和(一个或者多个)物理寄存器文件单元458执行提交级424。
核490可以支持一个或者多个指令集(例如,x86指令集(具有已经被添加有较新版本的一些扩展);加利福尼亚州桑尼威尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼威尔市的ARM控股公司的ARM指令集(具有可选的附加扩展,诸如NEON)。
应该理解,所述核可以支持多线程(执行操作或者线程的两个或者更多个并行集合),并且可以以各种各样的方式进行,这些方式包括时间片段化多线程、同时多线程(其中,单个物理核为物理核正在同时进行多线程的线程中的每一个提供逻辑核)、或者其组合(例如,时间片段化提取和解码以及此后的同时多线程,诸如在英特尔®超线程技术中)。
虽然在无序执行的情境中描述了寄存器重命名,但是应该理解,寄存器重命名可以用于有序架构中。虽然处理器的所图示的实施例还包括单独的指令和数据缓存单元434/474和共享L2缓存单元476,但是替代实施例可具有用于指令和数据两者的单个内部缓存,诸如例如1级(L1)内部缓存、或者多个级别的内部缓存。在一些实施例中,系统可以包括内部缓存和在核和/或处理器外部的外部缓存的组合。可替代地,所有的缓存都可以在核和/或处理器外部。
图5是根据本发明的实施例的具有集成存储器控制器和图形单元(graphics)的单核处理器和多核处理器500的框图。图5中的实线框图示出具有单核502A、系统代理510、一个或者多个总线控制器单元516的集合的处理器500,而虚线框的可选附加项图示出具有多核502A-N、系统代理单元510中的一个或者多个集成存储器控制器单元514的集合和专用图形逻辑508的替代存储器500。
存储器层级包括核内的一个或者多个级别的缓存、一个或者多个共享缓存单元506的集合、和耦合到集成存储器控制器单元514的集合的外部存储器(未示出)。共享缓存单元506的集合可以包括一个或者多个中级缓存,诸如2级(L2)、3级(L3)、4级(L4)、或者其它级别的缓存、末级缓存(LLC)、和/或其组合。虽然在一个实施例中,基于环的互连单元512将集成图形逻辑508、共享缓存单元506的集合、以及系统代理单元510进行互连,但是替代实施例可以使用用于互连这样的单元的任何数量的众所周知的技术。
在一些实施例中,核502 A-N中的一个或者多个能够进行多线程。系统代理510包括协调和操作所述核502 A-N的那些组件。系统代理单元510可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者可以包括调节核502 A-N和集成图形逻辑508的功率状态所需要的逻辑和组件。显示单元用于驱动一个或者多个外部连接的显示器。
在架构和/或指令集方面,核502 A-N可以是同构的或者异构的。例如,核502 A-N中的一些可以是有序的,而其它可以是无序的。作为另一个示例,核502 A-N中的两个或者更多个可以能够执行相同的指令集,而其它可以能够仅执行该指令集的子集或者执行不同的指令集。
处理器可以是通用处理器,诸如可从加利福尼亚州圣克拉拉市的英特尔公司获得的酷睿TM i3、i5、i7、2 Duo和Quad、至强TM、安腾TM、XScaleTM或者StrongARMTM处理器。可替代地,处理器可以来自其它公司,诸如ARM股份有限公司、MIPS公司等等。处理器可以是专用处理器,诸如例如网络或者通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等。处理器可以在一个或者多个芯片上实现。处理器500可以是使用多种工艺技术(诸如例如BiCOMS、CMOS、或者NMOS)中的任一种的一个或者多个基板的一部分和/或在所述基板上实现。
图6-8是适合于包括处理器500的示例性系统,而图9是可以包括核502中的一个或者多个的示例性片上系统(SoC)。用于膝上型电脑、台式电脑、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其它电子设备的本领域中已知的其它系统设计和配置也是适当的。一般而言,能够结合本文公开的处理器和/或其它执行逻辑的多种多样的系统或者电子设备一般是适当的。
现在参考图6,示出了根据本发明的一个实施例的系统600的框图。系统600可以包括一个或者多个处理器610、615,其耦合到图形存储器控制器中枢(GMCH)620。附加处理器615的可选性质在图6中用虚线来表示。
每个处理器610、615可以是处理器600的某种版本。然而,应该指出,不太可能的是,集成图形逻辑和集成存储器控制单元将会存在于处理器610、615中。图6图示出GMCH620可以耦合到可以是例如动态随机存取存储器(DRAM)的存储器640。对于至少一个实施例而言,DRAM可以与非易失性缓存相关联。
GMCH 620可以是芯片集或者芯片集的一部分。GMCH 620可以与(一个或者多个)处理器610、615通信,并且控制(一个或者多个)处理器610、615和存储器之间的交互。GMCH620还可以充当系统600的(一个或者多个)处理器610、615和其它元件之间的加速总线接口。对于至少一个实施例而言,GMCH 620经由诸如前端总线(FSB)695之类的多点分支总线与(一个或者多个)处理器610、615通信。
此外,GMCH 620耦合到显示器645(诸如平面板显示器)。GMCH 620可以包括集成图形加速器。GMCH 620进一步耦合到输入/输出(I/O)控制器中枢(ICH)650,其可以用于将各种外围设备耦合到系统600。例如在图6的实施例中所示的是外部图形设备660(其可以是耦合到ICH 650的离散图形设备)以及另一外围设备670。
替代地,附加或者不同的处理器也可以存在于系统600中。例如,(一个或者多个)附加处理器615可以包括与处理器610相同的(一个或者多个)附加处理器、与处理器610异构的或者不对称的(一个或者多个)附加处理器、加速器(诸如例如,图形加速器或者数字信号处理(DSP)单元)、现场可编程门阵列或者任何其它处理器。在优点度量范围(包括架构的、微架构的、热学的、功率消耗特性等等)方面,在物理资源610、615之间可能存在各种各样的区别。这些区别可以有效地将它们自己表明为在处理器610、615之间的不对称性和异构性。对于至少一个实施例而言,各种处理器610、615可以驻留于相同的管芯封装中。
现在参考图7,示出了根据本发明的实施例的第二系统700的框图。如在图7中示出的,多处理器系统700是点对点互连系统,并且包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某种版本,如处理器610、615中的一个或者多个。
虽然仅示出了两个处理器770、780,但是要理解,本发明的范围不被如此限制。在其它实施例中,可以在给定处理器中存在一个或者多个附加处理器。
处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还包括作为其总线控制器单元的一部分的点对点(P-P)接口776和778;相似地,第二控制器780包括P-P接口786和788。处理器770、780可以经由点对点(P-P)接口750使用P-P接口电路778、788来交换信息。如图7中示出的,IMC 772和782将处理器耦合到相应存储器,即存储器732和存储器734,其可以是本地附接到相应处理器的主存储器的部分。
处理器770、780可以各自经由单个P-P接口752、754使用点对点接口电路776、794、786、798与芯片集790交换信息。芯片集790还可以经由高性能图形接口739与高性能图形电路738交换信息。
共享缓存(未示出)可以被包括在任一处理器中,或者在两个处理器之外,但是经由P-P互连与处理器连接,以使得如果处理器被置于低功率模式中,任一处理器或者两个处理器的本地缓存信息可以被存储在共享缓存中。
芯片集790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围组件互连(PCI)总线、或者诸如是PCI Express总线或者另一第三代I/O互连总线之类的总线,但是本发明的范围并不被如此限制。
如图7中示出的,各种I/O设备714与总线桥718一起可以耦合到第一总线716,所述总线桥718将第一总线718耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。各种设备可以耦合到第二总线720,在一个实施例中,所述设备包括例如键盘和/或鼠标722、通信设备727和可以包括指令/代码和数据730的存储单元728(诸如盘驱动器或者其它大容量存储设备)。此外,音频I/O 724可以耦合到第二总线720。要指出,其它架构是可能的。例如,代替图7的点对点架构,系统可以实现多点分支总线或者其它这样的架构。
现在参考图8,示出了根据本发明的实施例的第三系统800的框图。在图7和8中的类似元件具有类似的附图标记,并且已经将图7的某些方面从图8中省略,以便避免使图8的其它方面晦涩难懂。
图8图示出处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于一个实施例而言,CL 872、882可以包括集成存储器控制器单元,诸如以上结合图5和7所描述的。另外,CL 872、882还包括I/O控制逻辑。图8图示出不仅存储器832、834被耦合到CL 872、882,而且I/O设备814也耦合到控制逻辑872、882。旧有I/O设备815被耦合到芯片集890。
现在参考图9,示出了根据本发明的实施例的SoC 900的框图。在图5中的相似元件具有类似的附图标记。另外,虚线框是更高级的SoC上的可选特征。在图9中,(一个或者多个)互连单元902耦合到:包括一个或者多个核502A-N的集合和(一个或者多个)共享缓存单元506的应用处理器910;系统代理单元510;(一个或者多个)总线控制器单元516;(一个或者多个)集成存储器控制器单元514;一个或多个媒体处理器920的集合,其可以包括集成图形逻辑508、用于提供静止和/或视频相机功能的图像处理器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、高清晰度多媒体接口(HDMI)控制器1045、MIPI控制器1050、闪存控制器1055、双数据速率(DDR)控制器1060、安全引擎1065、和I2S/I2C(集成芯片间声音/内部集成电路)接口1070。其它逻辑和电路可以被包括在图10的处理器中,其包括更多CPU或者GPU以及其它外围接口控制器。
至少一个实施例的一个或者多个方面可以由存储在表示处理器内的各种逻辑的机器可读介质上的代表性数据来实现,所述代表性数据当被机器读取时促使该机器制造用以执行本文描述的技术的逻辑。称为“IP核”的这样的表示可以被存储在有形、机器可读介质(“磁带(tape)”)上,并且供应给各种消费者或者加工设施,以加载到实际制作逻辑或者处理器的制造机器中。例如,诸如由ARM股份有限公司开发的CortexTM族的处理器和由中国科学院的计算技术研究所(ICT)开发的龙芯IP核之类的IP核可以被许可或者售卖给各种消费者或者被许可方,诸如德州仪器、高通、苹果或者三星,并且被实现在由这些消费者或者被许可方生产的处理器中。
图11示出了图示出根据一个实施例的IP核的开发的方框。存储1130包括仿真软件1120和/或硬件或者软件模型1110。在一个实施例中,表示IP核设计的数据可以经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或者无线连接1160提供给存储1130。由仿真工具和模型生成的IP核信息然后可以被传输到制造设施,在那里其可以被第三方制造,以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或者多个指令可以对应于第一类型或架构(例如,x86),并且在不同类型或架构(例如,ARM)的处理器上被转译或者模拟。根据一个实施例的指令可以因此在包括ARM、x86、MIPS、GPU或者其它处理器类型或架构的任何处理器或者处理器类型上执行。
图12图示出根据一个实施例的第一类型的指令如何被不同类型的处理器模拟。在图12中,程序1205包含可以与根据一个实施例的指令执行相同或者基本相同功能的一些指令。然而,程序1205的指令可以具有不同于处理器1215或者与处理器1215不兼容的类型和/或格式,这意味着在程序1205中的类型的指令可能不能够由处理器1215原生地执行。然而,在模拟逻辑1210的帮助下,程序1205的指令被转译成原生地能够由处理器1215执行的指令。在一个实施例中,模拟逻辑被体现在硬件中。在另一实施例中,模拟逻辑被嵌入在有形、机器可读介质中,所述机器可读介质包含软件,其用以将程序1205中的类型的指令转译成可由处理器1215原生地执行的类型。在其它实施例中,模拟逻辑是固定功能或者可编程硬件和存储在有形、机器可读介质上的程序的组合。在一个实施例中,处理器包含模拟逻辑,而在其它实施例中,模拟逻辑存在于处理器外,并且由第三方提供。在一个实施例中,处理器能够通过执行被包含在该处理器中或者与该处理器相关联的微代码或者固件来加载体现在包含软件的有形机器可读介质中的模拟逻辑。
图13是对照了根据本发明的实施例的使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是可替代地,指令转换器可以被实现在软件、固件、硬件或者其各种组合中。图13示出了以高级语言1302的程序可以使用x86编译器1304来编译,以生成可以由具有至少一个x86指令集核1316的处理器原生地执行的x86二进制代码1306。具有至少一个x86指令集核1316的处理器表示下述的任何处理器,其可通过兼容地执行或者以其它方式处理以下各项而基本上执行与具有至少一个x86指令集核的英特尔处理器相同的功能:(1)英特尔x86指令集核的指令集的主要部分,或者(2)目标在于运行于具有至少一个x86指令集核的英特尔处理器上以便基本实现与具有至少一个x86指令集核的英特尔处理器相同的结果的应用或其它软件的目标代码版本。x86编译器1304表示可操作为生成x86二进制代码1306(例如,目标代码)的编译器,所述x86二进制代码1306可以在具有或者不具有附加联动处理的情况下在具有至少一个x86指令集核1316的处理器上被执行。相似地,图13示出了以高级语言1302的程序可以通过使用替代指令集编译器1308来编译,以生成替代指令集二级制代码1310,其可以由不具有至少一个x86指令集核1314的处理器(例如,具有执行加利福尼亚州桑尼威尔市的MIPS技术公司的MIPS指令集的核和/或执行加利福尼亚州桑尼威尔市的ARM控股公司的ARM指令集的核的处理器)原生地执行。指令转换器1312用于将x86二进制代码1306转换成可以由不具有x86指令集核1314的处理器原生地执行的代码。这种经转换的代码不太可能与替代指令集二进制代码1310相同,因为能够进行这一点的指令转换器是难以制作的;然而,经转换的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1312通过模拟、仿真或者任何其它过程来表示软件、固件、硬件或者其组合,允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码1306。
在多处理中,采用SPMD处理的处理器或逻辑处理器可以在多处理系统中使用原子范围操作来划分任务并调用函数的多个实例(例如,用于贝塞尔曲线、贝塞尔曲面、数据库搜索/更新等)或者在多个处理器(或逻辑处理器)上并行地执行循环的多次迭代。原子范围操作的实施例可以包括原子增量NEXT指令、将X加到NEXT指令、减量END指令和/或从END减去X指令。当这些多个处理器(例如处理器核、逻辑处理器、硬件线程等)共享对公共存储器和/或缓存存储器的访问时,通过使用原子范围操作进行同步(例如,分割任务、将任务索引分配给多个处理器并通过共享存储器进行通信)提供了在协作的SPMD处理器(或逻辑处理器)当中的任务或工作项的分配方面的改进的可编程性和效率。
在一些实施例中,范围可以包括存储器中的一对64位索引NEXT和END。在一些替代实施例中,范围可以包括存储器中的一对32位(或16位)索引NEXT和END。将范围[NEXT,END)定义成包括从NEXT到END-1的索引。于是每当END>NEXT时,范围[NEXT,END)的大小就等于END - NEXT。当NEXT≥END时,范围[NEXT,END)为空。具有大小≥1的范围足以执行原子增量NEXT指令(INC NEXT)或原子减量END指令(DEC END)。大小≥X的范围足以执行将X加到NEXT的原子指令(ADD NEXT)或从END减去X的原子指令(SUB END)。
图14图示出使用用于提供原子范围操作的指令的处理器装置INC NEXT逻辑1401的实施例。范围索引1420和1430的集合1410存储在存储器和/或缓存存储器中。响应于指定范围索引1420和1430的集合1410的地址的INC NEXT指令,锁定对范围索引1420和1430的集合1410的访问。(例如,从存储器或缓存存储器)加载范围索引1420和1430的集合1410以确定范围大小。比较器1440确定该范围大小是否至少为足以根据INC NEXT指令执行范围修改的大小。如果比较器1440的结果为一(1),则通过加法器1450将比较器1440的结果加到NEXT索引1420,以根据INC NEXT指令执行范围修改。然后,可以将范围索引1425和1430的集合1410的一个或多个已修改的范围索引存储回存储器和/或缓存存储器。在一些实施例中,未修改的END索引(或未修改的NEXT索引)不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,集合1410的两个索引均被加载并被存储回存储器和/或缓存存储器,而不管它们是否被INC NEXT指令修改。可选地,如果范围大小并不足以根据INC NEXT指令执行范围修改,则比较器1440的结果被反转以设置错误信号1460。在一些替代实施例中,可以以不同的方式将可选的错误信号1460设置为不同的值。在一些实施例中,可选的错误信号1460可以被保存到处理器寄存器(例如,条件码或标志寄存器)。响应于INC NEXT指令的完成,解锁对范围索引1425和1430的集合1410的访问。因此,这种原子范围修改指令的读取、有条件修改和写入操作对于系统中的所有观察者来说看起来是瞬时的。
图15图示出用于使用用于提供原子范围操作的指令的处理器装置ADD NEXT逻辑1501的替代实施例。范围索引1520和1530的集合1510存储在存储器和/或缓存存储器中。响应于指定范围索引1520和1530的集合1510的地址的ADD NEXT指令,锁定对范围索引1520和1530的集合1510的访问。(例如,从存储器或缓存存储器)加载范围索引1520和1530的集合1510以确定范围大小。由加法器1550将操作数X加到NEXT索引1520。比较器1540确定该范围大小是否至少为足以根据ADD NEXT指令执行范围修改的大小。如果比较器1540的结果为一(1),则使用比较器1540的结果来通过多路复用器1555选择加法器1550的结果,以根据ADDNEXT指令执行范围修改。然后,范围索引1525和1530的集合1510的一个或多个已修改的范围索引可以被存储回存储器和/或缓存存储器。在一些实施例中,未修改的END索引(或未修改的NEXT索引)不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,集合1510的两个索引均被加载并被存储回存储器和/或缓存存储器,而不管它们是否被ADD NEXT指令修改。可选地,如果范围大小并不足以根据ADD NEXT指令执行范围修改,则比较器1540的结果被反转以设置错误信号1560。在一些替代实施例中,可以以不同的方式将可选的错误信号1560设置为不同的值。在一些实施例中,可选的错误信号1560可以被保存到处理器寄存器(例如条件码或标志寄存器)。响应于ADD NEXT指令的完成,解锁对范围索引1525和1530的集合1510的访问。
图16图示出用于使用用于提供原子范围操作的指令的处理器装置DEC END逻辑1601的另一替代实施例。范围索引1620和1630的集合1610存储在存储器和/或缓存存储器中。响应于指定范围索引1620和1630的集合1610的地址的DEC END指令,锁定对范围索引1620和1630的集合1610的访问。(例如,从存储器或缓存存储器)加载范围索引1620和1630的集合1610以确定范围大小。比较器1640确定该范围大小是否至少为足以根据DEC END指令执行范围修改的大小。如果比较器1640的结果为一(1),则通过减法器1650从END索引1630减去比较器1640的结果,以根据DEC END指令执行范围修改。然后,可以将范围索引1620和1635的集合1610的一个或多个已修改的范围索引存储回存储器和/或缓存存储器。在一些实施例中,未修改的NEXT索引(或未修改的END索引)不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,集合1610的两个索引均被加载并被存储回存储器和/或缓存存储器,而不管它们是否被SUB END指令修改。可选地,如果范围大小并不足以根据DECEND指令执行范围修改,则比较器1640的结果被反转以设置错误信号1660。在一些替代实施例中,可以以不同的方式将可选的错误信号1660设置为不同的值。在一些实施例中,可选的错误信号1660可以被保存到处理器寄存器(例如条件码或标志寄存器)。响应于DEC END指令的完成,解锁对范围索引1620和1635的集合1610的访问。
图17图示出用于使用用于提供原子范围操作的指令的处理器装置SUB END逻辑1701的另一替代实施例。范围索引1720和1730的集合1710存储在存储器和/或缓存存储器中。响应于指定范围索引1720和1730的集合1710的地址的SUB END指令,锁定对范围索引1720和1730的集合1710的访问。(例如,从存储器或缓存存储器)加载范围索引1720和1730的集合1710以确定范围大小。由减法器1750从END索引1730减去操作数X。比较器1740确定该范围大小是否至少为足以根据SUB END指令执行范围修改的大小。如果比较器1740的结果为一(1),则使用比较器1740的结果来通过多路复用器1755选择减法器1750的结果,以根据SUB END指令执行范围修改。然后,可以将范围索引1720和1735的集合1710的一个或多个已修改的范围索引存储回存储器和/或缓存存储器。在一些实施例中,未修改的NEXT索引(或未修改的END索引)不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,集合1710的两个索引均被加载并被存储回存储器和/或缓存存储器,而不管它们是否被SUBEND指令修改。可选地,如果范围尺寸并不足以根据SUB END指令执行范围修改,则比较器1740的结果被反转以设置错误信号1760。在一些替代实施例中,可以以不同的方式将可选错误信号1760设置为不同的值。在一些实施例中,可选的错误信号1760可以被保存到处理器寄存器(例如条件码或标志寄存器)。响应于SUB END指令的完成,解锁对范围索引1720和1735的集合1710的访问。
因此,这种原子范围修改指令的读取、有条件修改和写入操作对于系统中的所有观察者来说看起来是瞬时的。当多个处理器(例如处理器核、逻辑处理器、硬件线程等)共享对公共存储器和/或缓存存储器的访问时,通过使用原子范围操作进行同步(例如,分割任务、将任务索引分配给多个处理器并通过共享存储器进行通信)提供了在协作的SPMD处理器(或逻辑处理器)当中的任务或工作项的分配方面的改进的可编程性和效率。
图18A图示出执行用于提供原子范围操作的指令的过程1801的一个实施例的流程图。本文公开的过程1801和其它过程是由处理块来执行的,所述处理块可以包括可由通用机器或由专用机器或由二者的组合执行的专门的硬件或软件或固件操作代码。
在过程1801的处理块1810中,对原子增量NEXT指令(INC NEXT)进行解码。INCNEXT指令的实施例可以指定存储器和/或缓存存储器中的范围索引NEXT和END(例如1420和1430)的集合的地址。在处理块1820中,响应于INC NEXT指令,锁定对范围索引NEXT和END的集合的访问。在处理块1830中,(例如,从存储器或缓存存储器)加载范围索引NEXT和END的集合以确定范围大小。在处理块1835中,确定由范围索引NEXT和END的集合表示的范围是否为空。如果是这样,则在处理块1880中设置错误信号标志,范围索引NEXT和END的值不被INCNEXT指令修改,并且在处理块1890中解锁对范围索引NEXT和END的集合的访问。在一些实施例中,错误信号标志可以可选地被保存到处理器寄存器(例如,条件码或标志寄存器,诸如零标志寄存器)。
否则,如果在处理块1835中确定了由范围索引NEXT和END的集合表示的范围不为空,则该范围大小足以根据INC NEXT指令执行范围修改,并且处理前进至处理块1840。在处理块1840中,范围索引NEXT被增量。在处理块1850中,清除错误信号标志。在处理块1860中,范围索引NEXT被存储回存储器和/或缓存存储器。在一些实施例中,未修改的范围索引END不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,未修改的范围索引END也可以在处理块1870中被存储回存储器和/或缓存存储器。在过程1801的一些替代实施例中,范围索引NEXT和END的集合的两个索引均可以被加载并被存储回存储器和/或缓存存储器,而不管它们是否被INC NEXT指令修改。在处理块1890中,响应于INC NEXT指令的完成,解锁对范围索引NEXT和END的集合的访问。因此,原子指令INC NEXT如通过过程1801的实施例所示的那样来实现。
将领会到,如果可能的话,在过程1801的一些替代实施例中以及在本文公开的其它过程中,被图示为以特定顺序执行的处理块也可以以另一顺序执行、或者彼此并发地或并行地执行。
图18B图示出执行用于提供原子范围操作的指令的过程1802的替代实施例的流程图。在过程1802的处理块1812中,对将X加到NEXT的原子指令(ADD NEXT)进行解码。ADDNEXT指令的实施例可以指定存储器和/或缓存存储器中的范围索引NEXT和END(例如1520和1530)的集合的地址以及源操作数X。在处理块1820中,响应于ADD NEXT指令,锁定对范围索引NEXT和END的集合的访问。在处理块1830中,(例如,从存储器或缓存存储器)加载范围索引NEXT和END的集合以确定范围大小。在处理块1837中,确定由范围索引NEXT和END的集合表示的范围是否小于X。如果是这样,则在处理块1880中设置错误信号标志,范围索引NEXT和END的值不被ADD NEXT指令所修改,并且在处理块1890中解锁对范围索引NEXT和END的集合的访问。在一些实施例中,错误信号标志可以可选地被保存到处理器寄存器(例如,条件码或标志寄存器,诸如零标志寄存器)。在一些替代实施例中,错误信号标志可以可选地被保存到某其它位置(例如,堆栈)。
否则,如果在处理块1837中确定由范围索引NEXT和END的集合表示的范围不具有小于X的大小,则该范围大小足以根据ADD NEXT指令执行范围修改,并且处理前进至处理块1842。在处理块1842中,将值X加到范围索引NEXT。在处理块1850中,清除错误信号标志。在处理块1860中,范围索引NEXT被存储回存储器和/或缓存存储器。在一些实施例中,未修改的范围索引END不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,未修改的范围索引END也可以在处理块1870中被存储回存储器和/或缓存存储器。在过程1802的一些替代实施例中,范围索引NEXT和END的集合的两个索引均可以被加载并被存储回存储器和/或缓存存储器,而不管它们是否被ADD NEXT指令修改。在处理块1890中,响应于ADD NEXT指令的完成,解锁对范围索引NEXT和END的集合的访问。因此,原子指令ADD NEXT如通过过程1802的实施例所示的那样来实现。
将领会到,如果可能的话,在过程1802的一些替代实施例中以及在本文公开的其它过程中,被图示为以特定顺序执行的处理块也可以以另一顺序执行、或者彼此并发地或并行地执行。
图19A图示出执行用于提供原子范围操作的指令的过程1901的另一替代实施例的流程图。在过程1901的处理块1910中,对原子减量END指令(DEC END)进行解码。DEC END指令的实施例可以指定存储器和/或缓存存储器中的范围索引NEXT和END(例如1620和1630)的集合的地址。在处理块1920中,响应于DEC END指令,锁定对范围索引集合NEXT和END的访问。在处理块1930中,(例如,从存储器或缓存存储器)加载范围索引NEXT和END的集合以确定范围大小。在处理块1935中,确定由范围索引NEXT和END的集合表示的范围是否为空。如果是这样,则在处理块1980中设置错误信号标志,范围索引NEXT和END的值不被DEC END指令所修改,并且在处理块1990中解锁对范围索引NEXT和END的集合的访问。在一些实施例中,错误信号标志可以可选地被保存到处理器寄存器(例如,条件码或标志寄存器,诸如零标志寄存器)。
否则,如果在处理块1935中确定由范围索引NEXT和END的集合表示的范围不为空,则该范围大小足以根据DEC END指令执行范围修改,并且处理前进至处理块1940。在处理块1940中,范围索引NEXT被增量。在处理块1950中,清除错误信号标志。在一些实施例中,未修改的范围索引NEXT不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,未修改的范围索引NEXT也可以在处理块1960中被存储回存储器和/或缓存存储器。在处理块1970中,范围索引END被存储回存储器和/或缓存存储器。在过程1901的一些替代实施例中,范围索引NEXT和END的集合的两个索引均可以被加载并被存储回存储器和/或缓存存储器,而不管它们是否被DEC END指令修改。在处理块1990中,响应于DEC END指令的完成,解锁对范围索引NEXT和END的集合的访问。因此,原子指令DEC END如通过过程1901的实施例所示的那样来实现。
将领会到,如果可能的话,在过程1901的一些替代实施例中以及在本文公开的其它过程中,被图示为以特定顺序执行的处理块也可以以另一顺序执行、或者彼此并发地或并行地执行。
图19B图示出执行用于提供原子范围操作的指令的过程1902的另一替代实施例的流程图。在过程1902的处理块1912中,对从END中减去X的原子指令(SUB END)进行解码。SUBEND指令的实施例可以指定存储器和/或缓存存储器中的范围索引NEXT和END(例如1720和1730)的集合的地址以及源操作数X。在处理块1920中,响应于SUB END指令,锁定对范围索引NEXT和END的集合的访问。在处理块1930中,(例如,从存储器或缓存存储器)加载范围索引NEXT和END的集合以确定范围大小。在处理块1937中,确定由范围索引NEXT和END的集合表示的范围是否小于X。如果是这样,则在处理块1980中设置错误信号标志,范围索引NEXT和END的值不被SUB END指令所修改,并且在处理块1990中解锁对范围索引NEXT和END的集合的访问。在一些实施例中,错误信号标志可以可选地被保存到处理器寄存器(例如,条件码或标志寄存器,诸如零标志寄存器)。在一些替代实施例中,错误信号标志可以可选地被保存到某其它位置(例如,堆栈)。
否则,如果在处理块1937中确定了由范围索引NEXT和END的集合表示的范围不具有小于X的大小,则该范围大小足以根据SUB END指令执行范围修改,并且处理前进至处理块1942。在处理块1942中,从范围索引END中减去值X。在处理块1950中,清除错误信号标志。在一些实施例中,未修改的范围索引NEXT不被存储回存储器和/或缓存存储器,但是在一些替代实施例中,未修改的范围索引NEXT也可以在处理块1960中被存储回存储器和/或缓存存储器。在处理块1970中,范围索引END被存储回存储器和/或缓存存储器。在过程1902的一些替代实施例中,范围索引NEXT和END的集合的两个索引均可以被加载并被存储回存储器和/或缓存存储器,而不管它们是否被SUB END指令修改。在处理块1990中,响应于SUB END指令的完成,解锁对范围索引NEXT和END的集合的访问。因此,原子指令SUB END如通过过程1902的实施例所示的那样来实现。
将领会到,如果可能的话,在过程1902的一些替代实施例中以及在本文公开的其它过程中,被图示为以特定顺序执行的处理块也可以以另一顺序执行、或者彼此并发地或并行地执行。
采用SPMD处理的处理器或逻辑处理器可以在多处理系统中使用原子范围操作来划分任务并调用函数的多个实例或者在共享对公共存储器和/或缓存存储器的访问的多个处理器(或逻辑处理器)上并行地执行循环的多次迭代。将领会到,通过使用原子范围操作进行同步(例如,分割任务、将任务索引分配给多个处理器并通过共享存储器进行通信)提供了在协作的SPMD处理器(或逻辑处理器)当中的任务或工作项的分配方面的改进的可编程性和效率。
本文公开的机制的实施例可以以硬件、软件、固件或者这样的实现方法的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或者程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
程序代码可以被应用于用以执行本文描述的功能的输入指令并且生成输出信息。所输出的信息可以以已知方式被应用于一个或者多个输出设备。出于这种应用的目的,处理系统包括具有处理器的任何系统,处理器诸如例如是数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或者微处理器。
程序代码可以以高级过程或面向对象的编程语言来实现,以与处理系统通信。如果期望的话,程序代码也可以以汇编语言或者机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是经编译的阈值或者经解译的语言。
至少一个实施例的一个或者多个方面可以由存储在表示处理器内的各种逻辑的机器可读介质上的代表性指令来实现,所述指令当被机器读取时促使该机器制造用于执行本文描述的技术的逻辑。这样的称为“IP核”的表示可以被存储在有形、机器可读介质上,并且供应给各种消费者或者制造设施,以加载到实际制作逻辑或者处理器的制造机器中。
这样的机器可读介质可以包括但是不限于由机器或者设备制造或者形成的制品的非暂时性、有形布置,其包括存储介质,诸如硬盘、任何其它类型的盘(包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑可重写盘(CD-RW)、和磁光盘)、半导体设备(诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦可编程只读存储器(EPROM)、闪存、电可擦可编程只读存储器(EEPROM))、磁卡或者光学卡、或者适于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括非暂时性有形机器可读介质,其包含指令或者包含设计数据,诸如定义了本文描述的结构、电路、装置、处理器和/或系统特征的硬件描述语言(HDL)。这样的实施例也可以被称为程序产品。
在一些情况下,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、模拟或者以其它方式转换成要由核来处理的一个或者多个其它指令。指令转换器可以以软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者部分在处理器上且部分在处理器外。
因此,公开了用于执行根据至少一个实施例的一个或者多个指令的技术。虽然已经在附图中描述且示出了某些示例性实施例,但是要理解,这样的实施例仅仅说明宽泛发明而并不对宽泛发明进行限制,并且本发明不限于所示出和描述的具体构造和布置,因为各种其它修改可以由本领域技术人员在研究本公开时想到。在诸如本文的技术领域中,在发展很快并且进一步的进步不容易预见的情况下,所公开的实施例可以是通过使得能够实现技术进步所促成的在布置和细节方面可容易修改的,而不会脱离本公开的原理或者随附权利要求的范围。

Claims (25)

1.一种方法,包括:
解码指定范围索引的集合的地址的单个范围修改指令;
锁定对范围索引的该集合的访问;
加载范围索引的该集合以确定范围大小;
将该范围大小与足以执行与该单个范围修改指令对应的范围修改的大小进行比较;
如果该范围大小至少为足以执行所述范围修改的大小,则执行所述范围修改并存储范围索引的该集合的一个或多个已修改的范围索引;以及
响应于所述单个范围修改指令的完成,解锁对范围索引的该集合的访问。
2.根据权利要求1所述的方法,还包括:
如果该范围大小小于足以执行所述范围修改的大小,则设置错误信号。
3.根据权利要求1所述的方法,其中,范围修改包括响应于所述单个范围修改指令,以原子方式增量范围索引的该集合的第一索引。
4.根据权利要求1所述的方法,其中所述单个范围修改指令还指定源操作数,并且范围修改包括以原子方式将所述源操作数的值加到范围索引的该集合的第一索引。
5.根据权利要求1所述的方法,其中,范围修改包括响应于所述单个范围修改指令,以原子方式减量范围索引的该集合的第二索引。
6.根据权利要求1所述的方法,其中所述单个范围修改指令还指定源操作数,并且范围修改包括以原子方式从范围索引的该集合的第二索引减去所述源操作数的值。
7.一种处理器,包括:
缓存存储器,其存储范围索引的集合;
解码级,用以解码第一指令以供所述处理器执行,该第一指令指定范围索引的所述集合的地址;以及
一个或多个执行单元,响应于所解码的第一指令来:
锁定对范围索引的该集合的访问;
加载范围索引的该集合以确定范围大小;
将该范围大小与足以执行与该第一指令对应的范围修改的大小进行比较;
如果该范围大小至少为足以执行所述范围修改的大小,则执行所述范围修改并存储范围索引的该集合的一个或多个已修改的范围索引;
如果该范围大小小于足以执行所述范围修改的大小,则将错误信号设置为第一值;以及
响应于所述第一指令的完成,解锁对范围索引的该集合的访问。
8.根据权利要求7所述的处理器,其中,范围修改包括响应于所述第一指令,以原子方式增量范围索引的该集合的第一索引。
9.根据权利要求7所述的处理器,其中,所述第一指令还指定源操作数,并且范围修改包括以原子方式将所述源操作数的值加到范围索引的该集合的第一索引。
10.根据权利要求7所述的处理器,其中,范围修改包括响应于所述第一指令,以原子方式减量范围索引的该集合的第二索引。
11.根据权利要求7所述的处理器,其中,所述第一指令还指定源操作数,并且范围修改包括以原子方式从范围索引的该集合的第二索引减去所述源操作数的值。
12.根据权利要求7所述的处理器,所述一个或多个执行单元还响应于所解码的第一指令来:
如果该范围大小至少为足以执行所述范围修改的大小,则将错误信号设置为第二值。
13.根据权利要求12所述的处理器,其中,该错误信号被设置在处理器零标志寄存器中。
14.根据权利要求13所述的处理器,其中该第一值为一,并且该第二值为零。
15.根据权利要求7所述的处理器,其中,范围索引的该集合包括两个32位索引NEXT和END。
16.根据权利要求7所述的处理器,其中,范围索引的该集合包括两个64位索引NEXT和END。
17.一种用于在处理器中提供原子范围操作的装置,该装置包括执行逻辑,其响应于指定范围索引的集合的地址的第一处理器指令来:
锁定对范围索引的该集合的访问;
加载范围索引的该集合以确定范围大小;
将该范围大小与足以执行与该第一处理器指令对应的范围修改的大小进行比较;
如果该范围大小至少为足以执行所述范围修改的大小,则执行所述范围修改并存储范围索引的该集合的一个或多个已修改的范围索引;
如果该范围大小小于足以执行所述范围修改的大小,则将错误信号设置为第一值;以及
响应于所述第一处理器指令的完成,解锁对范围索引的该集合的访问。
18.根据权利要求17所述的装置,其中,范围修改包括响应于所述第一处理器指令,以原子方式增量范围索引的该集合的第一索引。
19.根据权利要求17所述的装置,其中,所述第一处理器指令还指定源操作数,并且范围修改包括以原子方式将所述源操作数的值加到范围索引的该集合的第一索引。
20.根据权利要求17所述的装置,其中,范围修改包括响应于所述第一处理器指令,以原子方式减量范围索引的该集合的第二索引。
21.根据权利要求17所述的装置,其中,所述第一处理器指令还指定源操作数,并且范围修改包括以原子方式从范围索引的该集合的第二索引减去所述源操作数的值。
22.根据权利要求17所述的装置,其中,范围索引的该集合包括两个32位索引NEXT和END。
23.根据权利要求17所述的装置,其中,范围索引的该集合包括两个64位索引NEXT和END。
24.一种处理系统,包括:
外部存储器,其存储范围索引的集合;以及
处理器,其包括:
解码级,用以解码第一指令以供所述处理器执行,该第一指令指定范围索引的所述集合的地址;以及
一个或多个执行单元,响应于所解码的第一指令来:
锁定对范围索引的该集合的访问;
加载范围索引的该集合以确定范围大小;
将该范围大小与足以执行与该第一指令对应的范围修改的大小进行比较;
如果该范围大小至少为足以执行所述范围修改的大小,则执行所述范围修改并存储范围索引的该集合的一个或多个已修改的范围索引;
如果该范围大小小于足以执行所述范围修改的大小,则将错误信号设置为第一值;以及
响应于所述第一指令的完成,解锁对范围索引的该集合的访问。
25.根据权利要求24所述的处理系统,其中,范围修改包括响应于所述第一处理器指令,以原子方式增量范围索引的该集合的第一索引。
CN201680018796.0A 2015-03-27 2016-03-02 用于提供原子范围操作的指令和逻辑 Active CN107430508B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/671,914 US10528345B2 (en) 2015-03-27 2015-03-27 Instructions and logic to provide atomic range modification operations
US14/671914 2015-03-27
PCT/US2016/020394 WO2016160248A1 (en) 2015-03-27 2016-03-02 Instructions and logic to provide atomic range operations

Publications (2)

Publication Number Publication Date
CN107430508A true CN107430508A (zh) 2017-12-01
CN107430508B CN107430508B (zh) 2021-09-14

Family

ID=56975714

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680018796.0A Active CN107430508B (zh) 2015-03-27 2016-03-02 用于提供原子范围操作的指令和逻辑

Country Status (7)

Country Link
US (1) US10528345B2 (zh)
EP (1) EP3274817A4 (zh)
JP (1) JP6703707B2 (zh)
KR (1) KR102512315B1 (zh)
CN (1) CN107430508B (zh)
TW (1) TWI578231B (zh)
WO (1) WO2016160248A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111258637A (zh) * 2018-11-30 2020-06-09 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN114385545A (zh) * 2020-10-20 2022-04-22 美光科技公司 针对可编程原子操作的存储器存取边界检查

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10061746B2 (en) * 2014-09-26 2018-08-28 Intel Corporation Instruction and logic for a vector format for processing computations
CN109478139B (zh) * 2016-08-13 2024-01-23 英特尔公司 用于共享存储器中的访问同步的装置、方法和系统
US10481870B2 (en) 2017-05-12 2019-11-19 Google Llc Circuit to perform dual input value absolute value and sum operation
CN107291537A (zh) * 2017-06-07 2017-10-24 江苏海平面数据科技有限公司 一种gpu片上存储空间使用的优化方法
US11782713B1 (en) * 2019-08-27 2023-10-10 Amazon Technologies, Inc. Security vulnerability mitigation using address space co-execution
GB2587426B (en) * 2019-09-30 2022-04-06 Advanced Risc Mach Ltd Atomic range compare and modify operations
US11436187B2 (en) * 2020-10-20 2022-09-06 Micron Technology, Inc. Method of notifying a process or programmable atomic operation traps
US11693690B2 (en) 2020-10-20 2023-07-04 Micron Technology, Inc. Method of completing a programmable atomic transaction by ensuring memory locks are cleared
US11586439B2 (en) 2020-10-20 2023-02-21 Micron Technology, Inc. Detecting infinite loops in a programmable atomic transaction
US12020062B2 (en) 2020-10-20 2024-06-25 Micron Technology, Inc. Method of executing programmable atomic unit resources within a multi-process system
US11740929B2 (en) 2020-10-20 2023-08-29 Micron Technology, Inc. Registering a custom atomic operation with the operating system
US11403023B2 (en) 2020-10-20 2022-08-02 Micron Technology, Inc. Method of organizing a programmable atomic unit instruction memory
US11977496B1 (en) 2022-09-29 2024-05-07 Amazon Technologies, Inc. Security vulnerability mitigation using hardware-supported context-dependent address space hiding

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100146245A1 (en) * 2008-12-04 2010-06-10 Microsoft Corporation Parallel execution of a loop
US20100332766A1 (en) * 2009-06-26 2010-12-30 Sun Microsystems, Inc. Supporting efficient spin-locks and other types of synchronization in a cache-coherent multiprocessor system
CN102103570A (zh) * 2009-12-22 2011-06-22 英特尔公司 Simd向量的同步化
CN102436781A (zh) * 2011-11-04 2012-05-02 杭州中天微系统有限公司 基于隐式相关性和隐式旁路的微处理器指令拆分装置
CN103299272A (zh) * 2010-12-07 2013-09-11 超威半导体公司 使用存储的原子程序的可编程原子内存
CN103827814A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑
US20140181474A1 (en) * 2012-12-26 2014-06-26 Telefonaktiebolaget L M Ericsson (Publ) Atomic write and read microprocessor instructions
CN104050077A (zh) * 2013-03-15 2014-09-17 英特尔公司 利用多个测试源来提供或(or)测试和与(and)测试功能的可融合指令和逻辑
CN104050415A (zh) * 2013-03-15 2014-09-17 英特尔公司 用于系统调用的稳健且高性能的指令

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4206503A (en) * 1978-01-10 1980-06-03 Honeywell Information Systems Inc. Multiple length address formation in a microprogrammed data processing system
US6446198B1 (en) 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US20030167379A1 (en) 2002-03-01 2003-09-04 Soltis Donald Charles Apparatus and methods for interfacing with cache memory
US7769794B2 (en) * 2003-03-24 2010-08-03 Microsoft Corporation User interface for a file system shell
US9164978B2 (en) 2008-06-17 2015-10-20 Microsoft Technology Licensing, Llc Identifying objects within a multidimensional array
US20100014624A1 (en) * 2008-07-17 2010-01-21 Global Nuclear Fuel - Americas, Llc Nuclear reactor components including material layers to reduce enhanced corrosion on zirconium alloys used in fuel assemblies and methods thereof
US8266409B2 (en) 2009-03-03 2012-09-11 Qualcomm Incorporated Configurable cache and method to configure same
US8623888B2 (en) * 2009-07-15 2014-01-07 Mallinckrodt Llc 3-oxy-hydromorphone derivatives
CA2695564C (en) 2010-02-26 2017-05-30 Lesley Lorraine Shannon Modular re-configurable profiling core for multiprocessor systems-on-chip
US8392683B1 (en) 2009-11-30 2013-03-05 Micron Technology, Inc. Dynamic range unlock or lock memory device and method to operate the same
US8352656B2 (en) * 2010-04-08 2013-01-08 Intel Corporation Handling atomic operations for a non-coherent device
US8849950B2 (en) * 2011-04-07 2014-09-30 Qualcomm Incorporated Network streaming of video data using byte range requests
US20130007768A1 (en) * 2011-07-02 2013-01-03 Ramakrishna Saripalli Atomic operations on multi-socket platforms
KR101741484B1 (ko) * 2012-04-26 2017-05-30 퀄컴 인코포레이티드 저-레이턴시 스트림을 처리하기 위한 개선된 블록-요청 스트리밍 시스템

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100146245A1 (en) * 2008-12-04 2010-06-10 Microsoft Corporation Parallel execution of a loop
US20100332766A1 (en) * 2009-06-26 2010-12-30 Sun Microsystems, Inc. Supporting efficient spin-locks and other types of synchronization in a cache-coherent multiprocessor system
CN102103570A (zh) * 2009-12-22 2011-06-22 英特尔公司 Simd向量的同步化
CN103299272A (zh) * 2010-12-07 2013-09-11 超威半导体公司 使用存储的原子程序的可编程原子内存
CN103827814A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑
CN102436781A (zh) * 2011-11-04 2012-05-02 杭州中天微系统有限公司 基于隐式相关性和隐式旁路的微处理器指令拆分装置
US20140181474A1 (en) * 2012-12-26 2014-06-26 Telefonaktiebolaget L M Ericsson (Publ) Atomic write and read microprocessor instructions
CN104050077A (zh) * 2013-03-15 2014-09-17 英特尔公司 利用多个测试源来提供或(or)测试和与(and)测试功能的可融合指令和逻辑
CN104050415A (zh) * 2013-03-15 2014-09-17 英特尔公司 用于系统调用的稳健且高性能的指令

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
J GOODACRE等: "《Parallelism and the ARM instruction set architecture》", 《IEEE TRANSACTIONS ON COMPUTERS》 *
董小社等: "《面向GPU异构并行系统的多任务流编程模型》", 《计算机学报》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111258637A (zh) * 2018-11-30 2020-06-09 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN111258637B (zh) * 2018-11-30 2022-08-05 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN114385545A (zh) * 2020-10-20 2022-04-22 美光科技公司 针对可编程原子操作的存储器存取边界检查
CN114385545B (zh) * 2020-10-20 2023-03-14 美光科技公司 针对可编程原子操作的存储器存取边界检查
US11734173B2 (en) 2020-10-20 2023-08-22 Micron Technology, Inc. Memory access bounds checking for a programmable atomic operator

Also Published As

Publication number Publication date
JP6703707B2 (ja) 2020-06-03
US10528345B2 (en) 2020-01-07
EP3274817A1 (en) 2018-01-31
JP2018512631A (ja) 2018-05-17
KR20170131379A (ko) 2017-11-29
TWI578231B (zh) 2017-04-11
KR102512315B1 (ko) 2023-03-22
US20160283237A1 (en) 2016-09-29
TW201702867A (zh) 2017-01-16
WO2016160248A1 (en) 2016-10-06
EP3274817A4 (en) 2018-11-07
CN107430508B (zh) 2021-09-14

Similar Documents

Publication Publication Date Title
CN107430508A (zh) 用于提供原子范围操作的指令和逻辑
CN104919416B (zh) 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑
CN103793201B (zh) 提供向量压缩和旋转功能的指令和逻辑
CN103827814B (zh) 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑
JP6207095B2 (ja) 条件付きループをベクトル化する命令及び論理
CN104011662B (zh) 用于提供向量混合和置换功能的指令和逻辑
CN104915181B (zh) 用于条件存储器错误帮助抑制的方法、处理器和处理系统
TWI731892B (zh) 用於以通道為基礎的跨步儲存操作之指令及邏輯
CN103827813B (zh) 用于提供向量分散操作和聚集操作功能的指令和逻辑
CN104321741B (zh) 双舍入组合浮点乘法和加法
CN103959236B (zh) 用于提供向量横向多数表决功能的处理器、设备和处理系统
CN103827815B (zh) 用于提供利用跨越和掩码功能的向量加载和存储的指令和逻辑
CN107094369A (zh) 用于提供simd sm3密码散列函数的指令和逻辑
CN104025033B (zh) 利用控制操纵的simd可变移位和循环
TWI720056B (zh) 用於設置多重向量元素操作之指令及邏輯
CN108292229A (zh) 用于重新出现的相邻聚集的指令和逻辑
CN107003854A (zh) 提供向量包装元组交叉比较功能的方法、装置、指令和逻辑
CN103988173B (zh) 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑
TWI738679B (zh) 處理器、運算系統及用以執行運算操作之方法
CN104011658B (zh) 用于提供向量线性内插功能的指令和逻辑
CN107690618A (zh) 用于提供向量紧缩直方图功能的方法、装置、指令和逻辑
CN108292293A (zh) 用于得到多个向量元素操作的指令和逻辑
CN108369518A (zh) 用于位字段寻址和插入的指令和逻辑
TW201723812A (zh) 用於以亂序載入來排列之指令及邏輯
CN108292271A (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