CN104919416A - 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑 - Google Patents

用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑 Download PDF

Info

Publication number
CN104919416A
CN104919416A CN201380062559.0A CN201380062559A CN104919416A CN 104919416 A CN104919416 A CN 104919416A CN 201380062559 A CN201380062559 A CN 201380062559A CN 104919416 A CN104919416 A CN 104919416A
Authority
CN
China
Prior art keywords
data field
register
instruction
data
processor
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
CN201380062559.0A
Other languages
English (en)
Other versions
CN104919416B (zh
Inventor
C·休斯
E·乌尔德-艾哈迈德-瓦勒
R·瓦伦丁
J·科巴尔
B·L·托尔
M·J·查尼
M·B·吉尔卡尔
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 CN104919416A publication Critical patent/CN104919416A/zh
Application granted granted Critical
Publication of CN104919416B publication Critical patent/CN104919416B/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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)

Abstract

指令和逻辑提供SIMD地址冲突检测功能。一些实施例包括具有寄存器的处理器,所述寄存器具有可变的多个数据字段,每一个数据字段将数据元素的偏移存储在存储器中。目的寄存器具有相对应的数据字段,这些数据字段中的每一个存储可变的第二多个位,以存储具有针对每一个偏移的掩码位的冲突掩码。响应于对矢量冲突指令进行解码,执行单元比较每一个数据字段与每个较不重要的数据字段中的偏移,以确定它们是否保存着匹配的偏移,以及在目的寄存器中的相对应的冲突掩码中,设置与具有匹配偏移的较不重要的数据字段相对应的任何掩码位。矢量地址冲突检测可以与可变尺寸的元素一起使用,并生成冲突掩码以解决在聚集-修改-分散SIMD操作中的相关性。

Description

用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑
相关申请的交叉引用
本申请涉及:2009年10月1日提交的标题为“Vector Instructions toEnable Efficient Synchronization and Parallel Reduction Operations”的申请序列号NO.12/079,774;2010年12月21日提交的标题为“Mechanism forConfilict Detection Using SIMD”的申请序列号NO.12/974,157;以及2010年12月22日提交的标题为“Vector Confict Instructions”的申请序列号NO.12/976,616。
技术领域
本公开涉及处理逻辑、微处理器和相关联的指令集架构的领域,所述相关联的指令集架构在被处理器或其它处理逻辑执行时,执行逻辑、数学或其它功能操作。特别是,本公开涉及提供SIMD矢量地址冲突检测功能的指令和逻辑。
背景技术
现代处理器常常包括用于提供操作的指令,所述操作是计算密集的,但给予可以通过使用各种数据存储设备(例如,单指令多数据(SIMD)矢量寄存器)的有效实现来利用的高级数据并行性。在SIMD执行中,单个指令在多个数据元素上并发或同时操作。这一般通过扩展各种资源(例如,寄存器和算术逻辑单元(ALU))的宽度,允许它们分别在多个数据元素上保存或操作来实现。
中央处理单元(CPU)可以提供这样的并行硬件以支持矢量的SIMD处理。矢量是保存多个连续数据元素的数据结构。尺寸L的矢量寄存器可以包含尺寸M的N个矢量元素,其中N=L/M。例如,64字节矢量寄存器可以被划分成(a)64个矢量元素,每一个元素保存占据1个字节的数据项,(b)32个矢量元素,用于保存每一个占据2个字节(或一个“字”)的数据项,(c)16个矢量元素,用于保存每一个占据4个字节(或一个“双字”)的数据项,或(d)8个矢量元素,用于保存每一个占据8个字节(或一个“四字”)的数据项。
多个应用具有大量的数据级并行性并且可能能够受益于SIMD支持。然而,一些应用花费相当大数量的时间在对一组稀疏的位置上的操作。而且,有时连续的操作在相同的稀疏位置上被执行,并且所以这些应用可能只看到来自SIMD、操作的有限益处。为了维持SIMD效率,一些架构不仅允许SIMD算术操作,而且允许SIMD存储器读和写(通过聚集和分散操作)。分散减少在很多应用中是常见操作。例如,分散-添加操作可以用于能够根据索引的分布使第一阵列的多个值减少为(即添加到)第二阵列的选定元素,这常常可以是随机的。但是由于此,可能很难同时有效地处理多个元素(即,在SIMD模式中)。一个关注是确保标量程序顺序在必要时被保留。另一关注是确保当数据分散到存储器中时,所得到的存储器地址的矢量只包括唯一的地址(即,不存在完全相同的地址)。
例如,柱状图运算在很多图像处理应用中是常见的操作。柱状图可以用于跟踪图像中的像素的颜色值的分布。然而,对柱状图阵列的更新可能是随机的,这取决于阵列的输入数据。特别是,相邻元素的索引可以指向同一柱状图库。因此,需要冲突检测和解决方案来检测对相同位置的多个相关的更新并确保标量程序顺序被保留。这精确地是以下类型的条件:该条件可以使共同或同时处理多个数据(即,使用SIMD操作)变得非常难。
目前,对这样的冲突关注和相关的处理困难的潜在解决方案还没有被充分探究。
附图说明
本发明将作为示例而不是限制在附图的图中示出。
图1A是执行提供SIMD地址冲突检测功能的指令的系统的一个实施例的框图。
图1B是执行提供SIMD地址冲突检测功能的指令的系统的另一实施例的框图。
图1C是执行提供SIMD地址冲突检测功能的指令的系统的另一实施例的框图。
图2是执行提供SIMD地址冲突检测功能的指令的处理器的一个实施例的框图。
图3A示出了根据一个实施例的紧缩数据类型。
图3B示出了根据一个实施例的紧缩数据类型。
图3C示出了根据一个实施例的紧缩数据类型。
图3D示出了根据一个实施例的编码用于提供SIMD地址冲突检测功能的指令。
图3E示出了根据另一实施例的编码用于提供SIMD地址冲突检测功能的指令。
图3F示出了根据另一实施例的编码用于提供SIMD地址冲突检测功能的指令。
图3G示出了根据另一实施例的编码用于提供SIMD地址冲突检测功能的指令。
图3H示出了根据另一实施例的编码用于提供SIMD地址冲突检测功能的指令。
图4A示出了用于执行提供SIMD地址冲突检测功能的指令的处理器微架构的一个实施例的元件。
图4B示出了执行提供SIMD地址冲突检测功能的指令的处理器微架构的另一实施例的元件。
图5是执行提供SIMD地址冲突检测功能的指令的处理器的一个实施例的框图。
图6是执行提供SIMD地址冲突检测功能的指令的计算机系统的一个实施例的框图。
图7是执行提供SIMD地址冲突检测功能的指令的计算机系统的另一实施例的框图。
图8是执行提供SIMD地址冲突检测功能的指令的计算机系统的另一实施例的框图。
图9是执行提供SIMD地址冲突检测功能的指令的芯片上系统的一个实施例的框图。
图10是执行提供SIMD地址冲突检测功能的指令的处理器的一个实施例的框图。
图11是提供SIMD地址冲突检测功能的IP核心开发系统的一个实施例的框图。
图12示出了提供SIMD地址冲突检测功能的架构仿真系统的一个实施例。
图13示出了用于变换提供SIMD地址冲突检测功能的指令的系统的一个实施例。
图14A示出了使用提供SIMD矢量前导零计数功能的指令的示例的一个实施例的流程图,所述SIMD矢量前导零计数功能针对有效矢量地址冲突解决方案生成置换控制是有用的。
图14B示出了使用提供SIMD矢量地址冲突检测功能的指令的示例的一个实施例的流程图。
图14C示出了使用向SIMD矢量地址冲突解决方案提供矢量种群计数功能的指令的示例的一个实施例的流程图。
图14D示出了使用提供有效SIMD矢量地址冲突解决方案的组合指令的示例的可替换实施例的流程图。
图15A示出了向SIMD置换控制提供矢量前导零计数功能的过程的一个实施例的流程图。
图15B示出了提供SIMD矢量地址冲突检测功能的过程的一个实施例的流程图。
图15C示出了向SIMD矢量地址冲突解决方案提供矢量种群计数功能的过程的一个实施例的流程图。
图15D示出了提供有效SIMD矢量地址冲突解决方案的组合过程的可替换实施例的流程图。
图16示出了用于执行提供SIMD矢量前导零计数功能的指令的装置的实施例,所述SIMD矢量前导零计数功能针对有效矢量地址冲突解决方案生成置换控制是有用的。
图17示出了用于执行针对有效矢量地址冲突解决方案提供SIMD矢量地址冲突检测功能的指令的装置的实施例。
图18示出了用于执行针对有效矢量地址冲突解决方案提供SIMD矢量种群计数功能的指令的装置的实施例。
具体实施方式
下面的描述公开了指令和处理逻辑以在处理器、计算机系统或其它处理装置内或与处理器、计算机系统或其它处理装置相关联地提供SIMD地址冲突检测功能。在本文中公开了用于提供SIMD地址冲突检测功能的指令和逻辑。一些实施例包括具有寄存器的处理器,所述寄存器带有可变的多个数据字段,每一个数据字段用于存储针对存储器中的一个数据元素的偏移。目的寄存器具有相对应的数据字段,这些数据字段中的每一个存储可变的第二多个位以存储具有针对每一个偏移的掩码位的冲突掩码。响应于对矢量冲突指令进行解码,执行单元比较每一个数据字段与每个较不重要的数据字段中的偏移,以确定它们是否保存着匹配的偏移,并且在目的寄存器中的相对应的冲突掩码中,设置与具有匹配偏移的较不重要的数据字段相对应的任何掩码位。矢量地址冲突检测可以与可变尺寸的元素一起使用并生成冲突掩码以解决在聚集-修改-分散SIMD操作中的相关性。
下面的描述公开了多个指令、方法和处理逻辑以解决在聚集-修改-分散SIMD操作中的相关性。将认识到,如在本文描述的实施例中的,SIMD矢量冲突指令可以用于可变尺寸的元素或存储器偏移,以提供SIMD矢量地址冲突检测功能并针对有效SIMD地址冲突解决方案来生成冲突掩码。还将认识到,如在本文描述的实施例中的,SIMD矢量前导零计数指令可以与可变尺寸的元素和冲突掩码一起使用以提供将在下面更详细地描述的SIMD置换控制,从而允许在寄存器中的更有效的SIMD地址冲突解决方案而不通过存储器执行相关的计算。将进一步认识到,如在本文描述的实施例中的,SIMD矢量种群计数指令可以与可变尺寸的元素和冲突掩码一起使用,以有效地计算迭代计数并为将在下面更详细地被描述的SIMD地址冲突解决方案的每次迭代提供SIMD完全掩码。因此本文公开的指令和逻辑提供更有效的SIMD地址冲突解决方案,特别是在聚集-修改-分散应用中。
在下面的描述中,阐述了多个特定的细节,例如,处理逻辑、处理器类型、微架构条件、事件、启动机制等,以便提供对本发明的实施例的更彻底的理解。然而本领域中的技术人员将认识到,本发明可以在没有这样的特定细节的情况下被实施。此外,没有详细示出一些公知的结构、电路等以便避免不必要地使对本发明的实施例难理解。
虽然参考处理器描述了下面的实施例,但是其它实施例可应用于其它类型的集成电路和逻辑设备。本发明的实施例的类似技术和教导可以应用于可以受益于较高流水线吞吐量和改进的性能的其它类型的电路或半导体设备。本发明的实施例的教导可应用于执行数据操纵的任何处理器或机器。然而,本发明不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于数据的操纵或管理在其中被执行的任何处理器和机器。此外,下面的描述提供了示例,并且附图出于说明的目的地示出了各种示例。然而,这些示例不应在限制的意义上被解释,因为它们仅仅是要提供本发明的实施例的示例而不是提供本发明的实施例的所有可能实现的详尽的列表。
虽然下面的示例在执行单元和逻辑电路的上下文中描述了指令处理和分布,但是本发明的其它实施例可以通过存储在机器可读、有形介质上的数据或指令的方式来完成,所述数据或指令当由机器执行时使机器执行与本发明的至少一个实施例一致的功能。在一个实施例中,与本发明的实施例相关联的功能体现在机器可执行指令中。所述指令能够用于使利用指令编程的通用或专用处理器执行本发明的步骤。本发明的实施例可以被提供为可以包括机器或计算机可读介质的计算机程序产品或软件,所述机器或计算机可读介质具有在其上存储的指令,所述指令可以用于对计算机(或其它电子设备)进行编程以根据本发明的实施例执行一个或多个操作。可替换地,本发明的实施例的步骤可以由包含用于执行步骤的固定功能逻辑的特定的硬件部件、或由编程计算机部件和固定功能硬件部件的任何组合执行。
用于对逻辑进行编程以执行本发明的实施例的指令可以存储在系统中的存储器(例如,DRAM、高速缓存、闪速存储器或其它存储装置)内。此外,指令可以经由网络或通过其它计算机可读介质来分布。因此,机器可读介质可以包括用于存储或发送以机器(例如,计算机)可读的形式的信息的任何机构,但不限于软盘、光学盘、光盘只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪速存储器或在经由电、光、声或其它形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网传输信息中使用的有形、机器可读存储装置。因此,计算机可读介质包括适合于存储或发送以机器(例如,计算机)可读的形式的电子指令或信息的任何类型的有形机器可读介质。
设计也可以经历各种级,从创建到仿真到制造。表示设计的数据可以用多种方式来表示设计。首先,如在仿真中有用的,可以使用硬件描述语言或另一功能描述语言来表示硬件。此外,可以在设计过程的一些级生成具有逻辑和/或晶体管栅极的电路级模型。此外,在一些级,大部分设计达到表示在硬件模型中的各种设备的物理放置的数据的水平。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于生成集成电路的掩模的不同掩模层上各种特征的存在或不存在的数据。在设计的任何表示中,所述数据可以存储在任何形式的机器可读介质中。存储器或磁性或光学存储装置(例如,磁盘)可以是机器可读介质,其用于存储经由光波或电波传输的信息,所述光波或电波被调制或否则生成以传输这样的信息。当指示或携带代码或设计的电载波被发送时,在电信号的复制、缓冲或重传被执行的程度上,制造新拷贝。因此,通信提供者或网络提供者可以在有形、机器可读介质上至少暂时性地存储制品,例如,被编码到载波中的信息,所述信息体现了本发明的实施例的技术。
在现代处理器中,多个不同的执行单元用于处理并且执行各种代码和指令。不是所有指令都同等地被创建,一些更快完成,而另一些可能花费多个时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因此,尽可能快地执行很多指令将是有利的。然而,存在具有较大的复杂性并且从执行时间和处理器资源方面来说需要更多的某些指令。例如,存在浮点指令、加载/存储操作、数据移动等。
由于在互联网、文本和多媒体应用中使用更多的计算机系统,所以随着时间的过去引入了额外的处理器支持。在一个实施例中,指令集可以与一个或多个计算机架构相关联,所述计算机架构包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理、和外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可以由一个或多个微架构实现,所述微架构包括用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同的微架构的处理器可以共享公共指令集的至少一部分。例如,Pentium 4处理器、CoreTM处理器和来自Sunnyvale CA的Advanced Micro Devices,Inc的处理器实现x86指令集的几乎相同的版本(具有添加有较新版本的一些扩展),但具有不同的内部设计。类似地,由其它处理器开发公司(例如,ARM Holdings,Ltd、MIPS或其许可证接受方或采用方)设计的处理器可以共享公共指令集的至少一部分,但可以包括不同的处理器设计。例如,可以使用新的或公知的技术在不同的微架构中以不同的方式实现ISA的相同的寄存器架构,所述寄存器架构包括专用物理寄存器、使用寄存器重命名机制(例如,寄存器别名表(RAT)、记录器缓冲器(ROB)和引退寄存器文件的使用)的一个或多个动态分配的物理寄存器。在一个实施例中,寄存器可以包括一个或多个寄存器、寄存器架构、寄存器文件或可以或可以不由软件编程者可寻址的其它寄存器集。
在一个实施例中,指令可以包括一个或多个指令格式。在一个实施例中,指令格式可以指示各种字段(位的数量、位的位置等)来指定待执行的操作和操作数,其中该操作将在该操作数上被执行,连同其它事物。一些指令格式可以进一步由指令模板(或子格式)中断地定义。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集和/或被定义为具有被不同地解释的给定字段。在一个实施例中,指令使用指令格式来进行表示(并且,如果被定义,则在该指令格式的指令模板的给定模板中)并且指定或指示操作和操作数,其中该操作将在该操作数上操作。
科学、金融、自动矢量化通用、RMS(识别、挖掘和合成)、以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)可能需要要在大量的数据项上执行的相同的操作。在一个实施例中,单指令多数据(SIMD)指使处理器在多个数据元素上执行操作的指令的类型。可以在处理器中使用SIMD技术,所述SIMD技术可以将寄存器中的位逻辑地划分为多个固定尺寸或可变尺寸的数据元素,每一个数据元素表示单独的值。例如,在一个实施例中,在64位寄存器中的位可以被组织为包含四个单独的16位数据元素的源操作数,每一个数据元素表示单独的16位值。这类数据可以被称为“紧缩”数据类型或“矢量”数据类型,并且所述数据类型的操作数被称为紧缩数据操作数或矢量操作数。在一个实施例中,紧缩数据项或矢量可以是存储在单个寄存器中的紧缩数据元素的序列,并且紧缩数据操作数或矢量操作数可以是SIMD指令(或“紧缩数据指令”或“矢量指令”)的源或目的操作数。在一个实施例中,SIMD指令指定单个矢量操作,所述单个矢量操作要在两个源矢量操作数上被执行以生成相同或不同尺寸、具有相同或不同数量的数据元素和以相同或不同的数据元素顺序的目的矢量操作数(也被称为结果矢量操作数)。
例如由具有包括x86、MMXTM指令集、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集的CoreTM处理器、ARM处理器(例如,具有包括矢量浮点(VFP)和/或NEON指令的指令集的ARM系列的处理器)、以及MIPS处理器(例如,由中国科学院的计算技术研究所(ICT)开发的Loongson系列的处理器)使用的SIMD技术使在应用性能中的显而易见的改进变得可能(CoreTM和MMXTM是Santa Clara,Calif的Intel公司的注册商标或商标)。
在一个实施例中,目的和源寄存器/数据是表示相对应的数据或操作的源和目的地的一般术语。在一些实施例中,它们可以由寄存器、存储器或具有除了所描述的那些名称或功能以外的其它名称或功能的其它存储区域实现。例如,在一个实施例中,“DEST1”可以是暂时性存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域,等等。在其它实施例中,SRC和DEST存储区域中的两个或更多个可以与在同一存储区域(例如,SIMD寄存器)内的不同数据存储元件相对应。在一个实施例中,源寄存器中的一个也可以通过例如将在第一和第二源数据上执行的操作的结果写回到用作目的寄存器的两个源寄存器中的一个来充当目的寄存器。
图1A是由包括用于根据本发明的一个实施例执行指令的执行单元在内的处理器形成的示例性计算机系统的框图。根据本发明,例如在本文所的实施例中,系统100包括部件(例如,处理器102),用于使用包括逻辑的执行单元来执行用于处理数据的算法。系统100代表基于从Santa Clara,California的Intel公司可得到的PENTIUM IIITM、PENTIUM 4TM、XeonTMXScaleTM和/或StrongARMTM微处理器的处理系统,但是也可以使用其它系统(包括具有其它微处理器、工程工作站、机顶盒等的PC)。在一个实施例中,范例系统100执行从Redmond,Washington的Microsoft公司可得到的WINDOWSTM操作系统的版本,但是也可以使用其它操作系统(例如,UNIX和Linux)、嵌入式软件、和/或图形用户接口。因此,本发明的实施例不限于硬件电路和软件的任何特定的组合。
实施例不限于计算机系统。可以在其它设备(例如,手持设备和嵌入式应用)中使用本发明的可替换实施例。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字摄像机、个人数字助理(PDA)和手持PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可以根据至少一个实施例执行一个或多个指令的任何其它系统。
图1A是由处理器102形成的计算机系统100的框图,处理器102包括一个或多个执行单元108,用于实施算法,以根据本发明的一个实施例来实施至少一个指令。可以在单处理器桌面型或服务器系统的上下文中描述一个实施例,但可选的实施例可以包括在多处理器系统中。系统100是“集线器”系统架构的示例。计算机系统100包括用于处理数据信号的处理器102。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器、或任何其它处理器设备,例如,数字信号处理器。处理器102耦合到处理器总线110,处理器总线110可以在系统100中的处理器102和其它部件之间传输数据信号。系统100的元件执行熟悉本领域的人员所公知的常规功能。
在一个实施例中,处理器102包括一级(L1)内部高速缓冲存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多级内部高速缓存。可替换地,在另一实施例中,高速缓冲存储器可以存在于处理器102的外部。取决于特定的实现和需要,其它实施例还可以包括内部和外部高速缓存二者的组合。寄存器文件106将不同类型的数据存储在各种寄存器中,所述各种寄存器包括整数寄存器、浮点寄存器、矢量寄存器、状态寄存器、和指令指针寄存器。
执行单元108包括执行整数和浮点操作的逻辑,执行单元108也存在于处理器102中。处理器102还包括微代码(ucode)ROM,其存储微代码以用于某些微指令。对于一个实施例,执行单元108包括用于处理紧缩指令集109的逻辑。通过将紧缩指令集109包括在通用处理器102的指令集中,连同用于执行指令的相关联的电路,可以在通用处理器102中使用紧缩数据来执行由很多多媒体应用使用的操作。因此,很多多媒体应用通过使用处理器的数据总线的全宽以用于在紧缩数据上执行操作来更有效地被加速和执行。这潜在地消除了如下需要,在处理器的数据总线当中传送较小的数据单元,以执行一个或多个操作,一次一个数据元素。
也可以在微控制器、嵌入式处理器、图形设备、DSP和其它类型的逻辑电路中使用执行单元108的可替换实施例。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或其它存储器设备。存储器120可以存储由数据信号表示的指令和/或数据,所述数据信号可以由处理器102执行。
系统逻辑芯片116耦合到处理器总线110和存储器120。系统逻辑芯片116在所示的实施例中是存储器控制器集线器(MCH)。处理器102可以经由处理器总线110与MCH 116通信。MCH 116向存储器120提供高带宽存储器路径118,以用于指令和数据存储以及用于图形命令、数据和结构的存储。MCH 116在系统100中的处理器102、存储器120和其它部件之间引导数据信号,并在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可以提供图形端口以用于耦合到图形控制器112。MCH 116通过存储器接口118耦合到存储器120。图形卡112通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100使用专用集线器接口总线122来将MCH 116耦合到I/O控制器集线器(ICH)130。ICH 130提供经由局部I/O总线到一些I/O设备的直接连接。局部I/O总线是用于将外围设备连接到存储器120、芯片组和处理器102的高速I/O总线。一些示例是音频控制器、固件集线器(闪速存储器BIOS)128、无线收发机126、数据存储装置124、包含用户输入和键盘接口的旧版I/O控制器、串行扩展端口,例如通用串行总线(USB)和网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪速存储器设备、或其它大容量存储设备。
对于系统的另一实施例,根据一个实施例的指令可以与芯片上系统一起使用。芯片上系统的一个实施例由处理器和存储器组成。一个这样的系统的存储器是闪速存储器。闪速存储器可以位于与处理器和其它系统部件相同的管芯上。此外,其它逻辑块(例如,存储器控制器或图形控制器)也可以位于芯片上的系统上。
图1B示出了实现本发明的一个实施例的原理的数据处理系统140。本领域中的技术人员将容易认识到,本文描述的实施例可以与可选的处理系统一起使用,而不偏离本发明的实施例的范围。
计算机系统140包括能够根据一个实施例执行至少一个指令的处理核心159。对于一个实施例,处理核心159代表任何类型的架构的处理单元,包括但不限于CISC、RISC或VLIW型架构。处理核心159也可以适合于用一种或多种处理技术来制造,并且通过足够详细地呈现在机器可读介质上,可以适合有助于所述制造。
处理核心159包括执行单元142、一组寄存器文件145和解码器144。处理核心159还包括对本发明的实施例的理解不是必需的额外的电路(未示出)。执行单元142用于执行由处理核心159接收的指令。除了执行一般的处理器指令以外,执行单元142可以执行在紧缩指令集143中的指令以用于在紧缩数据格式上执行操作。紧缩指令集143包括用于执行本发明的实施例的指令和其它紧缩指令的指令。执行单元142通过内部总线耦合到寄存器文件145。寄存器文件145代表用于存储包括数据的信息的在处理核心159上的存储区域。如前面提到的,应理解,用于存储紧缩数据的存储区域不是重要的。执行单元142耦合到解码器144。解码器144用于将由处理核心159所接收的指令解码为控制信号和/或微代码入口点。响应于这些控制信号和/或微代码入口点,执行单元142执行适当的操作。在一个实施例中,解码器用于解释指令的操作码,所述操作码将指示什么操作应在指令内指示的相对应的数据上执行。
处理核心159与总线141耦合,以用于与各种其它系统设备通信,所述各种其它系统设备可以包括但不限于例如,同步动态随机存取存储器(SDRAM)控件146、静态随机存取存储器(SRAM)控件147、突发式闪速存储器接口148、个人计算机存储卡国际协会(PCMCIA)/紧凑式闪速存储器(CF)卡控件149、液晶显示器(LCD)控件150、直接存储器存取(DMA)控制器151和可选的总线主接口152。在一个实施例中,数据处理系统140还可以包括用于经由I/O总线153与各种I/O设备通信的I/O桥154。这样的I/O设备可以包括但不限于例如通用异步接收机/发射机(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例提供了移动、网络、和/或无线通信和能够执行包括文本串比较操作的SIMD操作的处理核心159。可以使用各种音频、视频、成像和通信算法——包括离散变换,例如,Walsh-Hadamard变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)以及其相应的逆变换;压缩/解压缩技术,例如,颜色空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)函数,例如,脉冲编码调制(PCM)——来对处理核心159进行编程。
图1C示出了能够执行指令以提供SIMD数据冲突检测功能的数据处理系统的又一可选的实施例。根据一个可选的实施例,数据处理系统160可以包括主处理器166、SIMD协处理器161、高速缓冲存储器167和输入/输出系统168。输入/输出系统168可以可替换地耦合到无线接口169。SIMD协处理器161能够根据一个实施例来执行包括指令的操作。处理核心170可以适合于用一种或多种处理技术来制造,并且通过足够详细地呈现在机器可读介质上,可以适合有助于包括处理核心170的数据处理系统160的全部或部分的制造。
对于一个实施例,SIMD协处理器161包括执行单元162和一组寄存器文件164。主处理器165的一个实施例包括解码器165,以用于根据一个实施例来识别包括指令的指令集163的指令以由执行单元162执行。对于可选的实施例,SIMD协处理器161还包括解码器165B的至少部分,以用于对指令集163的指令进行解码。处理核心170还包括对本发明的实施例的理解不是必需的额外的电路(未示出)。
在操作中,主处理器166执行控制通用类型的数据处理操作的数据处理指令的流,通用类型的数据处理操作包括与高速缓冲存储器167和输入/输出系统168的交互。嵌入在数据处理指令的流中的是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为应由附加的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线171上发出这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号),其中它们由任何附加的SIMD协处理器接收。在这种情况下,SIMD协处理器161将接受并执行打算用于它的任何所接收的SIMD协处理器指令。
可以经由无线接口169来接收数据,以用于由SIMD协处理器指令处理。对于一个示例,可以以数字信号的形式接收语音通信,所述数字信号可以由SIMD协处理器指令处理以重新生成表示语音通信的数字音频样本。对于另一示例,可以以数字位流的形式接收压缩的音频和/或视频,所述数字位流可以由SIMD协处理器指令处理以重新生成数字音频样本和/或运动视频帧。对于处理核心170的一个实施例,主处理器166和SIMD协处理器161集成到包括执行单元162、一组寄存器文件164和解码器165的单个处理核心170中,以识别包括根据一个实施例的指令的指令集163的指令。
图2是包括用于执行根据本发明的一个实施例的指令的逻辑电路在内的处理器200的微架构的框图。在一些实施例中,根据一个实施例的指令可以被实现为在具有字节、字、双字、四字等的尺寸以及数据类型(例如,单和双精度整数和浮点数据类型)的数据元素上操作。在一个实施例中,有序前端201是取出待执行的指令并使它们准备好稍后在处理器流水线中使用的处理器200的部分。前端201可以包括几个单元。在一个实施例中,指令预取器226从存储器取出指令并将它们馈送到指令解码器228,解码器228继而对它们进行解码或解释它们。例如,在一个实施例中,解码器将所接收的指令解码为机器可以执行的被称为“微指令”或“微操作”(也被称为微op或uops)的一个或多个操作。在其它实施例中,解码器将指令解析为操作码和由微架构使用的相对应的数据和控制字段以根据一个实施例执行操作。在一个实施例中,追踪高速缓存230采用解码的uops,并将它们组合为在uop队列234中的程序有序序列或轨迹以用于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需的uops。
一些指令被转换为单个微操作,而其它指令需要几个微操作来完成完整的操作。在一个实施例中,如果需要多于四个微操作来完成指令,则解码器228访问微代码ROM 232以进行指令。对于一个实施例,指令可以被解码为用于在指令解码器228处处理的少量微操作。在另一实施例中,指令可以存储在微代码ROM 232内,假定需要多个微操作来完成操作。追踪高速缓存230指入口点可编程逻辑阵列(PLA),以确定正确的微指令指针,以用于读取微代码序列从而根据一个实施例完成来自微代码ROM 232的一个或多个指令。在微代码ROM 232完成指令的微操作排序之后,机器的前端201重新开始从追踪高速缓存230取出微操作。
乱序执行引擎203是指令准备用于执行的位置。随着指令流沿着流水线行进并被调度用于执行,乱序执行逻辑具有多个缓冲器以使指令流趋于平滑并重新排序以优化性能。分配器逻辑分配每一个uop需要的机器缓冲器和资源以便执行。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。分配器还为两个uop队列中的一个uop队列的每一个uop分配条目,一个用于存储器操作以及一个用于非存储器操作,在指令调度器的前面:存储器调度器、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206。uop调度器202、204、206基于其相关的输入寄存器操作数源的准备状态和uop需要来完成其操作的执行资源的可用性来确定uop何时准备执行。一个实施例的快速调度器202可以在主时钟周期的每一半上进行调度,而其它调度器可以每主处理器时钟周期调度一次。调度器仲裁分派端口以调度uop用于执行。
寄存器文件208、210位于调度器202、204、206和执行块211中的执行单元212、214、216、218、220、222、224之间。存在分别用于整数和浮点操作的单独的寄存器文件208、210。一个实施例的每一个寄存器文件208、210还包括旁路网络,所述旁路网络可以将还没有被写到寄存器文件中的刚刚完成的结果绕过或转发到新的相关的uop。整数寄存器文件208和浮点寄存器文件210也能够与另一个传递数据。对于一个实施例,整数寄存器文件208分为两个单独的寄存器文件,一个寄存器文件用于数据的低位32位,以及第二寄存器文件用于数据的高位32位。一个实施例的浮点寄存器文件210具有128位宽条目,这是因为浮点指令一般具有在宽度上从64到128位的操作数。
执行块211包含执行单元212、214、216、218、220、222、224,在其中指令实际上被执行。所述部分包括存储微指令需要执行的整数和浮点数据操作值的寄存器文件208、210。一个实施例的处理器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位数据操作数执行整数操作的上下文中描述了整数ALU216、218、220。在可选的实施例中,ALU 216、218、220可以被实现为支持包括16、32、128、256等的各种数据位。类似地,浮点单元222、224可以被实现为支持具有各种宽度的位的一定范围的操作数。对于一个实施例,浮点单元222、224可以结合SIMD和多媒体指令在128位宽紧缩数据操作数上操作。
在一个实施例中,uops调度器202、204、206在父加载完成执行之前分派相关的操作。因为uops在处理器200中被推测地调度和执行,所以处理器200还包括用于处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可能在流水线的飞行中存在相关的操作,其给调度器留下暂时不正确的数据。重放机制跟踪并重新执行使用不正确的数据的指令。只有相关的操作被重放,并且不相关的操作被允许完成。处理器的一个实施例的调度器和重放机制也被设计为提供SIMD地址冲突检测功能的指令。
术语“寄存器”可以指用作指令的部分以识别操作数的机载处理器存储位置。换句话说,寄存器可以是从处理器的外部可用(从编程者的观点看)的那些寄存器。然而,寄存器的实施例不应被限制在特定类型电路的意义上。更确切地,实施例的寄存器能够存储并提供数据,并执行本文描述的功能。本文描述的寄存器可以使用任何数量的不同技术由处理器内的电路实现,例如,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储三十二位整数数据。一个实施例的寄存器文件还包含用于紧缩数据的八个多媒体SIMD寄存器。对于下面的讨论,寄存器被理解为被设计用于保存紧缩数据的数据寄存器,例如,在使用来自Santa Clara,California的Intel公司的MMX技术实现的微处理器中的64位宽MMXTM寄存器(在一些实例中也被称为“mm”寄存器)。以整数和浮点二者形式可用的这些MMX寄存器可以使用伴随SIMD和SSE指令的紧缩数据元素来操作。类似地,与SSE2、SSE3、SSE4或以上(一般被称为“SSEx”)技术相关的128位宽XMM寄存器也可以用于保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两个数据类型。在一个实施例中,整数和浮点包含在同一寄存器文件或包含在不同的寄存器文件中。此外,在一个实施例中,浮点和整数数据可以存储在不同的寄存器或相同的寄存器中。
在下面的图的示例中,描述了多个数据操作数。图3A示出了根据本发明的一个实施例的在多媒体寄存器中的各种紧缩数据类型表示。图3A示出了128位宽操作数的紧缩字节310、紧缩字320和紧缩双字(dword)330的数据类型。这个示例的紧缩字节格式310是128位长,并包含十六个紧缩字节数据元素。字节在这里被定义为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位宽、512位宽或其它尺寸的操作数来操作。这个示例的紧缩字格式320是128位长并包含八个紧缩字数据元素。每一个紧缩字包含16位的信息。图3A的紧缩双字格式330是128位长并包含四个紧缩双字数据元素。每一个紧缩双字数据元素包含32位的信息。紧缩四字是128位长并包含两个紧缩四字数据元素。
图3B示出了可选的寄存器中数据存储格式。每一个紧缩数据可以包括多于一个的不相关的数据元素。示出了三个紧缩数据格式:紧缩半341、紧缩单342和紧缩双343。紧缩半341、紧缩单342和紧缩双343的一个实施例包含定点数据元素。对于可选的实施例,紧缩半341、紧缩单342和紧缩双343中的一个或多个可以包含浮点数据元素。紧缩半341的一个可替换实施例是128位长,包含八个16位数据元素。紧缩单342的一个实施例是128位长并包含四个32位数据元素。紧缩双343的一个实施例是128位长并包含两个64位数据元素。将认识到,这样的紧缩数据格式可以进一步扩展到其它寄存器长度,例如,扩展到96位、160位、192位、224位、256位、512位或更多。
图3C示出了根据本发明的一个实施例的在多媒体寄存器中的各种带符号和不带符号的紧缩数据类型表示。不带符号的紧缩字节表示344示出了在SIMD寄存器中的不带符号的紧缩字节的存储。每一个字节数据元素的信息存储在字节零的位7到位0、字节一的位15到位8、字节二的位23到位16、和最后字节15的位120到位127中。因此,在寄存器中使用了所有可用的位。这个存储布置可以增加处理器的存储效率。同样,使用所访问的16个数据元素,一个操作现在也可以以并行的方式在16个数据元素上被执行。带符号的紧缩字节表示345示出了带符号的紧缩字节的存储。注意,每一个字节数据元素的第8位是符号指示符。不带符号的紧缩字表示346示出了字7到字0是如何存储在SIMD寄存器中的。带符号的紧缩字表示347与不带符号的紧缩字寄存器中表示346类似。注意,每一个字数据元素的第16位是符号指示符。不带符号的紧缩双字表示348示出了双字数据元素是如何被存储的。带符号的紧缩双字表示349与不带符号的紧缩双字寄存器中表示348类似。注意,必要的符号位是每一个双字数据元素的第32位。
图3D是具有32或更多位的操作编码(操作码)格式360和寄存器/存储器操作数寻址模式的一个实施例的描绘,所述寄存器/存储器操作数寻址模式与在intel.com/products/processors/manuals的万维网(www)上的从SantaClara,CA的Intel公司可得到的“64and IA-32Intel ArchitectureSoftware Developer’s Manual Combined Volumes 2A and 2B:Instruction SetReference A-Z”中描述的操作码格式的类型相对应。每指令可以识别多达两个操作数位置,包括多达两个源操作数标识符364和365。对于一个实施例,目的操作数标识符366与源操作数标识符364相同,而在其它实施例中,它们是不同的。对于可选的实施例,目的操作数标识符366与源操作数标识符365相同,而在其它实施例中,它们是不同的。在一个实施例中,由源操作数标识符364和365识别的源操作数中的一个由指令的结果覆写,而在其它实施例中,标识符364与源寄存器元素相对应,并且标识符365与目的寄存器元素相对应。对于一个实施例,操作数标识符364和365可以用于识别32位或64位源和目的操作数。
图3E是具有40或更多位的另一可替换的操作编码(操作码)格式370的描绘。操作码格式370与操作码格式360相对应,并且包括前缀字节378。根据一个实施例的指令可以由一个或多个字段378、371和372进行编码。每指令多达两个操作数位置可以由源操作数标识符374和375并且由前缀字节378识别。对于一个实施例,前缀字节378可以用于识别32位或64位源和目的操作数。对于一个实施例,目的操作数标识符376与源操作数标识符374相同,而在其它实施例中,它们是不同的。对于可选的实施例,目的操作数标识符376与源操作数标识符375相同,而在其它实施例中,它们是不同的。在一个实施例中,指令在由操作数标识符374和375识别的操作数中的一个或多个上操作,并且由操作数标识符374和375识别的一个或多个操作数由指令的结果覆写,而在其它实施例中,由标识符374和375识别的操作数被写到另一寄存器中的另一数据元素。操作码格式360和370允许部分地由MOD字段363和373并由缩放索引基础(scale-index-base)和移位字节指定的寄存器到寄存器、存储器到寄存器、由存储器到寄存器、由寄存器到寄存器、由中间到寄存器、寄存器到存储器寻址。
接着转到图3F,在一些可选的实施例中,可以通过协处理器数据处理(CDP)指令来执行64位(或128位、或256位、或512位或更多)单指令多数据(SIMD)算术操作。操作编码(操作码)格式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,其是根据另一实施例的用于提供SIMD地址冲突检测功能的另一可替换的操作编码(操作码)格式397的描绘,操作编码格式397与在intel.com/products/processors/manuals/的万维网(www)上的从SantaClara,CA的Intel公司可得到的“Advanced Vector ExtensionsProgramming Reference”中描述的操作码格式的类型相对应。
为具有各种格式的地址字节和包含在额外字节中的立即操作数的1字节操作码提供原始x86指令集,额外字节的存在从第一“操作码”字节已知。此外,存在某些字节值,其被保留作为操作码的修改符(被称为前缀,因为它们必须被放置在指令之前)。当256个操作码字节(包括这些特殊前缀值)的原始调色板被用尽时,单个字节专门用作新的一组256个操作码的转义。当矢量指令(例如,SIMD)被添加时,生成对更多操作码的需要,并且“两字节”操作码映射也是不够的,即使当通过前缀的使用进行了扩展时。为此目的,在使用2个字节加上可选前缀作为标识符的额外的映射中添加了新指令。
此外,为了便于在64位模式中的额外寄存器,可以在前缀和操作码(和确定操作码所必需的任何转义字节)之间使用额外的前缀(被称为“REX”)。在一个实施例中,REX可以具有4个“有效载荷”位以指示在64位模式中的额外寄存器的使用。在其它实施例中,它可以具有比4位更少或更多的位。至少一个指令集的一般格式(其通常与格式360和/或格式370相对应)一般由下式示出:
[前缀][额外的前缀]转义[转义2]操作码modrm(等)
操作码格式397与操作码格式370相对应,并包括可选的VEX前缀字节391(在一个实施例中以C4hex开始)以代替大部分其它常用的旧版指令前缀字节和转义码。例如,下文示出了使用两个字段来对指令进行编码的实施例,该实施例可以在第二转义码存在于原始指令中时或在需要使用REX字段中的额外位(例如,XB和W字段)时使用。在下面示出的实施例中,旧版转义由新的转义值表示,旧版前缀被完全压缩为“有效载荷”字节的部分,旧版前缀被回收并可用于未来扩展,第二转义码在“映射”字段中被压缩,未来映射或特征空间是可用的,并且新的特征被添加(例如,增加的矢量长度和额外的源寄存器说明符)。
[前缀][rex]转义[转义2]操作码modrm[sib][disp][imm]
vex RXBmmmmm WvvvLpp操作码modrm[sib][disp][imm]
新的特征
根据一个实施例的指令可以由一个或多个字段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,其是根据另一实施例的提供SIMD地址冲突检测功能的另一可替换的操作编码(操作码)格式398的描绘。操作码格式398与操作码格式370和397相对应,并包括可选的EVEX前缀字节396(在一个实施例中以62hex开始)以代替大部分其它常用的旧版指令前缀字节和转义码并提供额外的功能。根据一个实施例的指令可以由字段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 1RXBmmmmm WvvvLpp evex4操作码modrm[sib][disp][imm]
对于一个实施例,根据EVEX格式398编码的指令可以具有可以用于提供具有额外的“有效载荷”位,所述额外的“有效载荷”位用于向SIMD地址冲突检测功能提供额外的新特征(例如,用户可配置的掩码寄存器或额外的操作数或来自128位、256位或512位矢量寄存器当中的选择或要选择的更多寄存器等)。
例如,在VEX格式397可以用于提供不具有掩码的SIMD地址冲突检测功能的场合,EVEX格式398可以用于向SIMD地址冲突检测功能提供显式的用户可配置掩码。此外,在VEX格式397可以用于在128位或256位矢量寄存器上提供SIMD地址冲突检测功能的场合,EVEX格式398可以用于在128位、256位、512位或更大(或更小)的矢量寄存器上提供SIMD地址冲突检测功能。
针对有效矢量地址冲突解决方案,用于提供SIMD矢量前导零计数功能、SIMD矢量地址冲突检测功能和SIMD矢量种群计数功能的示例指令由下面的示例示出:
将认识到,如在上面的示例中的,SIMD矢量冲突指令可以用于可变尺寸的元素和存储器偏移,以提供SIMD矢量地址冲突检测功能,并针对有效SIMD地址冲突解决方案生成冲突掩码。还将认识到,如在上面的示例中的,SIMD矢量前导零计数指令可以与可变尺寸的元素和冲突掩码一起使用,以提供将在下面更详细地被描述的SIMD置换控制,从而允许在寄存器中的更有效的SIMD地址冲突解决方案而不通过存储器执行相关的计算。将进一步认识到,如在上面的示例中的,SIMD矢量种群计数指令可以与可变尺寸的元素和冲突掩码一起使用,以有效地计算迭代计数并针对将在下面更详细地被描述的SIMD地址冲突解决方案的每次迭代提供SIMD完全掩码。因此本文公开的指令提供更有效的SIMD地址冲突解决方案,特别是在聚集-修改-分散应用中。
图4A是示出了根据本发明的至少一个实施例的有序流水线和寄存器重命名级、乱序发出/执行流水线的框图。图4B是示出了根据本发明的至少一个实施例的包括在处理器中的有序架构核心和寄存器重命名逻辑、乱序发出/执行逻辑的框图。图4A中的实线框示出了有序流水线,而虚线框示出了寄存器重命名、乱序发出/执行流水线。类似地,图4B中的实线框示出了有序架构逻辑,而虚线框示出了寄存器重命名逻辑和乱序发出/执行逻辑。
在图4A中,处理器流水线400包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或发出)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写级418、异常处理级422和提交级424。
在图4B中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示在那些单元之间的数据流的方向。图4B示出了包括耦合到执行引擎单元450的前端单元430的处理器核心490,并且这两个单元都耦合到存储器单元470。
核心490可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或混合或可选的核心类型。作为又一选择,核心490可以是专用核心,例如,网络或通信核心、压缩引擎、图形核心等。
前端单元430包括耦合到指令高速缓存单元434的分支预测单元432,指令高速缓存单元434耦合到指令转换后备缓冲器(TLB)436,指令转换后备缓冲器(TLB)436耦合到指令取出单元438,指令取出单元438耦合到解码单元440。解码单元或解码器可以对指令解码,并作为输出生成一个或多个微操作、微代码入口点、微指令、其它指令、或从原始指令解码或否则反映原始指令或从原始指令得到的其它控制信号。可以使用各种不同的机制来实现解码器。适当的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。指令高速缓存单元434进一步耦合到存储器单元470中的二级(L2)高速缓存单元476。解码单元440耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦合到引退单元454和一个或多个调度器单元456的集合的重命名/分配器单元452。调度器单元456表示任何数量的不同的调度器,包括预留站、中央指令窗口等。调度器单元456耦合到物理寄存器文件单元458。物理寄存器文件单元458的每一个代表一个或多个物理寄存器文件、不同的物理寄存器文件存储一个或多个不同的数据类型,例如,标量整数、标量浮点、紧缩整数、紧缩浮点、矢量整数、矢量浮点等、状态(例如,作为待执行的下一指令的地址的指令指针)等。物理寄存器文件单元458由引退单元454重叠以示出寄存器重命名和乱序执行可以被实现的各种方式(例如,使用记录器缓冲器和引退寄存器文件,使用未来文件、历史缓冲器和引退寄存器文件;使用寄存器映射和寄存器池;等等)。通常,架构寄存器从处理器的外部或从编程者的观点是可见的。寄存器不限于任何已知的特定类型的电路。各种不同类型的寄存器是适当的,只要它们能够存储并提供如本文描述的数据。适当的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。引退单元454和物理寄存器文件单元458耦合到执行群集460。执行群集460包括一个或多个执行单元162的集合和一个或多个存储器存取单元464的集合。执行单元462可以执行各种操作(例如,移位、加法、减法、乘法)并且针对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、矢量整数、矢量浮点)。虽然一些实施例可以包括专用于特定的功能或功能集合的多个执行单元,但是其它实施例可以包括一个执行单元或全部执行所有功能的多个执行单元。调度器单元456、物理寄存器文件单元458和执行群集460被示为可能是多个,这是因为某些实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/矢量整数/矢量浮点流水线、和/或存储器存取流水线,每一个流水线具有其自己的调度器单元、物理寄存器文件单元、和/或执行群集,并且在单独的存储器存取流水线的情况下,某些实施例被实现,其中只有这个流水线的执行群集具有存储器存取单元464)。也应理解,在单独的流水线被使用的场合,这些流水线中的一个或多个可以是乱序发出/执行,并且其余流水线是有序的。
所述存储器存取单元464的集合耦合到存储器单元470,存储器单元470包括耦合到数据高速缓存单元474的数据TLB单元472,数据高速缓存单元474耦合到二级(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指令集(具有添加有较新版本的一些扩展);Sunnyvale,CA的MIPS Technologies的MIPS指令集;Sunnyvale,CA的ARM Holdings的ARM指令集(具有额外的扩展例如,NEON))。
应理解,核心可以支持多线程(执行两组或更多组并行的操作或线程),并可以用各种方式这么做,包括时间分片多线程、同时多线程(其中单个物理核心为每一个线程提供逻辑核心,物理核心是同时多线程的)或其组合(例如,时间分片取出和解码和在下文例如在超线程技术中的同时多线程)。
虽然在乱序执行的上下文中描述了寄存器重命名,但是应理解,可以在顺序架构中使用寄存器重命名。虽然处理器的所示实施例还包括单独的指令和数据高速缓存单元434/474以及共享L2高速缓存单元476,但是可选的实施例可以具有用于指令和数据二者的单个内部高速缓存,例如一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存都可以在核心和/或处理器外部。
图5是根据本发明的实施例的单核处理器和具有集成存储器控制器和图形的多核处理器500的框图。图5中的实线框示出了具有单个核心502A、系统代理510、一个或多个总线控制器单元516的集合的处理器500,而虚线框的添加示出了具有多个核心502A-N、在系统代理单元510中的一个或多个集成存储器控制器单元514的集合、和集成图形逻辑508的可选的处理器500。
存储器层次结构包括在核心内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元506或共享高速缓存单元506的集合,和耦合到集成存储器控制器单元514的集合的外部存储器(未示出)。所述共享高速缓存单元506的集合可以包括一个或多个中级高速缓存,例如,二级(L2)、三级(L3)、四级(L4)或其它级高速缓存、最后一级高速缓存(LLC)、和/或其组合。虽然在一个实施例中基于环的互连单元512使集成图形逻辑508、共享高速缓存单元506的集合和系统代理单元510互连,但是可选的实施例可以使用任何数量的公知技术以用于使这样的单元互连。
在一些实施例中,核心502A-N中的一个或多个能够进行多线程。
系统代理510包括协调并操作核心502A-N的那些部件。系统代理单元510可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核心502A-N和集成图形逻辑508的功率状态所需的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核心502A-N从架构和/或指令集的方面来说可以是同构的或异构的。例如,核心502A-N中的一些可以是有序的,而其它核心是乱序的。作为另一示例,核心502A-N中的两个或更多个可能能够执行相同的指令集,而其它核心可能能够执行该指令集的子集或不同的指令集。
处理器可以是通用处理器,例如,从Santa Clara,Calif的Intel公司可得到的CoreTM i3、i5、i7、2Duo和Quad、XeonTM、ItaniumTM、XScaleTM或StrongARMTM处理器。可替换地,处理器可以来自另一公司,例如,ARMHoldings,Ltd、MIPS等。处理器可以是专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器500可以是一个或多个衬底的一部分和/或可以使用多种处理技术(例如,BiCMOS、CMOS或NMOS)中的任何在一个或多个衬底上实现。
图6-图8是适合于包括处理器500的示例性系统,而图9是可以包括核心502中的一个或多个的示例性芯片上系统(SoC)。对膝上型计算机、桌上型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其它电子设备的领域公知的其它系统设计和配置也是适当的。通常,能够合并处理器和/或如本文公开的其它执行逻辑的种类繁多的系统或电子设备通常是适当的。
现在参考图6,示出了根据本发明的一个实施例的系统600的框图。系统600可以包括耦合到图形存储器控制器集线器(GMCH)620的一个或多个处理器610、615。在图6中用虚线表示额外的处理器615的可选的性质。
每一个处理器610、615可以是处理器500的某个版本。然而,应注意,集成图形逻辑和集成存储器控制器单元不可能存在于处理器610、615中。图6示出了GMCH 620可以耦合到存储器640,存储器640可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片组或芯片组的一部分。GMCH 620可以与处理器610、615通信,并控制在处理器610、615和存储器640之间的交互。GMCH 620也可以充当在处理器610、615和系统600的其它元件之间的加速总线接口。对于至少一个实施例,GMCH 620经由多分支总线(例如,前端总线(FSB)695)与处理器610、615通信。
此外,GMCH 620耦合到显示器645(例如,平板显示器)。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接口电路778、788经由点对点(P-P)接口750交换信息。如图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可以是外围部件互连(PIC)总线或诸如快速PCI总线或另一第三代I/O互连总线的总线,但是本公开的范围并不被如此限制。
如图7所示,各种I/O设备714可以耦合到第一总线716,连同将第一总线716耦合到第二总线720的总线桥718。在一个实施例中,第二总线720可以是低引脚计数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线720,所述各种设备包括例如键盘和/或鼠标722、通信设备727和存储单元728例如,磁盘驱动器或可以包括指令/代码和数据730的其它大容量存储设备。此外,音频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的集合和共享高速缓存单元906的应用处理器910;系统代理单元910;总线控制器单元516;集成存储器控制器单元514;一个或多个媒体处理器920的集合,媒体处理器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、双数据率(DDR)控制器1060、安全引擎1065和I2S/I2C(集成芯片间声音/集成电路间)接口1070。其它逻辑和电路可以包括在图10的处理器中,所述其它逻辑和电路包括更多的CPU或GPU和其它外围接口控制器。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性数据实现,所述代表性数据表示处理器内的各种逻辑,所述代表性数据当由机器读取时,使所述机器制造逻辑以执行本文描述的技术。被称为“IP核心”的这样的表示可以存储在有形、机器可读介质(“带子”)上,并被应用到各种消费者或制造设施,以加载到实际制造逻辑或处理器的制造机器中。例如,IP核心(例如,由ARM Holdings,Ltd开发的CortexTM系列处理器和中国科学院的计算技术研究所(ICT)开发的Loongson IP核心)可以被许可或出售给各种消费者或许可证接受方(例如,Texas Instruments、Qualcomm、Apple、或Samsung),并在由这些消费者或许可证接受方生成的处理器中实现。
图11示出了根据一个实施例的IP核心的发展的框图。存储装置1130包括仿真软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核心设计的数据可以经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160被提供到存储装置1130。由仿真工具和模型生成的IP核心信息可以接着被发送到制造设施,其中它可以由第三方制造以根据至少一个实施例执行至少一个指令。
在一些实施例中,一个或多个指令可以与第一类型或架构(例如,x86)相对应,并在不同类型或架构(例如,ARM)的处理器上被变换或仿真。根据一个实施例,指令可以因此在任何处理器或处理器类型上被执行,所述任何处理器或处理器类型包括ARM、x86、MIPS、GPU、或其它处理器类型或架构。
图12示出了根据一个实施例的第一类型的指令是如何由不同类型的处理器进行仿真的。在图12中,程序1205包含可以执行与根据一个实施例的指令相同或实质上相同的功能的一些指令。然而,程序1205的指令可以具有与处理器1215不同或不兼容的类型和/或格式,意味着程序1205中的类型的指令可能不能够自然地由处理器1215执行。然而,借助于仿真逻辑1210,程序1205的指令被转换为自然能够由处理器1215执行的指令。在一个实施例中,仿真逻辑体现在硬件中。在另一实施例中,仿真逻辑体现在包含软件的有形、机器可读介质中,用于将程序1205中的指令的类型转换为由处理器1215自然可执行的类型。在其它实施例中,仿真逻辑是固定功能或可编程硬件和存储在有形、机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器外部并由第三方提供。在一个实施例中,处理器能够通过执行包含在处理器中或与处理器相关联的微代码或固件来加载体现在包含软件的有形、机器可读介质中的仿真逻辑。
图13是根据本发明的实施例的对照将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所示实施例中,指令转换器是软件指令转换器,但是可替换地,指令转换器可以在软件、固件、硬件或其各种组合中实现。图13示出了以高级语言1302的形式的程序可以使用x86编译器1304进行编译以生成可以由具有至少一个x86指令集核心1316的处理器自然地执行的x86二进制代码1306。具有至少一个x86指令集核心1316的处理器代表能够执行与具有至少一个x86指令集核心的Intel处理器实质上相同的功能的任何处理器,执行与具有至少一个x86指令集核心的Intel处理器实质上相同的功能可以通过兼容地执行或否则处理(1)Intel x86指令集核心的指令集的相当大的部分或(2)应用的对象代码版本或目标为在具有至少一个x86指令集核心的Intel处理器上运行的其它软件,以便实现与具有至少一个x86指令集核心的Intel处理器实质上相同的结果。x86编译器1304代表可操作用于生成x86二进制代码1306(例如,对象代码)的编译器,x86二进制代码1306可以在有或没有额外的链接处理的情况下在具有至少一个x86指令集核心1316的处理器上执行。类似地,图13示出了以高级语言1302的形式的程序可以使用可替换的指令集编译器1308进行编译,以生成可以由不具有至少一个x86指令集核心1314的处理器(例如,具有执行Sunnyvale,CA的MIPS Technologies的MIPS指令集和/或执行Sunnyvale,CA的ARM Holdings的ARM指令集的核心的处理器)自然地执行的可替换的指令集二进制代码1310。指令转换器1312用于将x86二进制代码1306转换为可以自然地由不具有x86指令集核心1314的处理器执行的代码。这个转换的代码不可能与可替换的指令集二进制代码1310相同,因为能够完成此的指令转换器难以制造;然而,所转换的代码将完成一般操作并由来自可选的指令集的指令构成。因此,指令转换器1312代表软件、固件、硬件或其组合,其通过模拟、仿真或任何其它过程允许不具有x86指令集核心处理器或核心的处理器或其它电子设备执行x86二进制代码1306。
图14A示出了用于使用提供SIMD矢量前导零计数功能指令的示例过程的一个实施例的流程图,所述SIMD矢量前导零计数功能针对有效矢量地址冲突解决方案来生成置换控制是有用的。过程1401和本文公开的其它过程由处理块执行,所述处理块可以包括由通用机器或由专用机器或由这两者的组合可执行的专用硬件或软件或固件操作代码。
在过程1401的处理块1410中,一组索引被初始化为例如值7、2、7、1和7。将认识到,偏移索引的数量和偏移索引的值是要成为例证性的而不是对本发明的实施例的限制。特别是,在寄存器中的偏移索引的数量可以由特定的应用和/或与索引相对应的数据元素的尺寸确定。偏移索引的示例值简单地是要示出依赖冲突的解决方案。在处理块1415中,元素遗留掩码被设置为全(例如,五)一。在处理块1420中,依赖掩码根据过程1405的现有技术来设置以反映所有匹配的偏移索引。然后在处理块1425中,一组顺序掩码被初始化。在处理块1430中,通过在依赖掩码和顺序掩码之间执行按位AND来计算冲突掩码。虽然示出了过程1405的现有技术,相反将认识到,下面以图14B开始更详细描述在处理块1430中用于生成冲突掩码的过程1405的改进,但直接作为一个SIMD矢量冲突检测指令的结果。
接着继续进行到处理块1439,通过对冲突掩码的每一个数据字段的被设置为零的最高有效连续位的数量进行计数并将每一个计数存储为在前导零计数的相对应的数据字段中的值来在冲突掩码上使用矢量紧缩前导零计数指令VPLZCNT,计算前导零计数。在处理块1440中,最大计数被初始化为全四,其为比用于表示所示示例中的冲突掩码的位的数量小一的值。在处理块1445中,通过执行SIMD紧缩减法PSUB,从相对应的最大计数值——比用于表示冲突掩码的位的数量小一,减去每一个前导零计数的值,以生成最大计数减去前导零计数的相对应的差,来计算一组置换索引。将认识到,这些位置与偏移索引相对应,所述偏移索引不依赖于具有负一的置换索引的先前计算,所述先前计算也可以被有利地使用。
在处理块1450中,从存储器聚集数据,并根据偏移索引和(可选地)都为一的元素遗留掩码来计算修改的值。接着在处理块1455中,使用紧缩比较不等指令PCMPNEQ,有利地比较置换索引与全负一,来重新计算元素遗留掩码。在处理块1460中,确定元素遗留掩码是否为零(0)。如果是,则在块1465中,使用偏移索引将数据分散到存储器,并且对这组SIMD数据的处理在处理块1499中结束。
否则在处理块1470中,通过执行SIMD矢量紧缩置换VPERM,使用置换索引和元素遗留掩码作为完全掩码以有利地只更新被留下来处理的元素,来置换数据。在处理块1475中,使用元素遗留掩码作为完全掩码在被留下来处理的数据上执行所需的计算。然后在现有技术过程1406中,通过将元素遗留掩码广播到处理块1480中的所有元素来初始化一组冲突输出元素。然后在前面的冲突掩码和新的冲突输出元素上使用矢量紧缩AND指令来重新计算这组冲突掩码。然后使用紧缩比较不等指令PCMPNEQ,比较每一个冲突掩码与全零,来计算新的元素遗留掩码。处理然后在处理块1460中利用对新元素遗留掩码的测试来开始重新迭代。虽然示出了过程1406的现有技术,相反将认识到下面也将以图14C开始描述用于通过替代地使用迭代计数,SIMD矢量种群计数指令的结果来生成处理块1490的元素遗留掩码的过程1406的改进。
将认识到,如在本文描述的实施例中的,SIMD矢量前导零计数指令可以有利地与可变尺寸的元素和冲突掩码一起使用以提供SIMD置换控制,从而允许在寄存器中的更有效的SIMD地址冲突解决方案而不通过存储器执行相关的计算。
图14B示出了使用提供SIMD矢量地址冲突检测功能的指令的示例的一个实施例的流程图。在过程1402的处理块1410中,这组偏移索引被初始化为例如值7、2、7、1和7。将再次认识到,偏移索引的数量和偏移索引的值是要成为例证性的而不是限制本发明的实施例。特别是,在寄存器中的偏移索引的数量可以由特定的应用和/或与索引相对应的数据元素的尺寸确定。偏移索引的示例值简单地是要示出依赖冲突的解决方案。在处理块1415中,元素遗留掩码被设置为全(例如,五)一。
在处理块1431中,使用SIMD矢量紧缩冲突指令VPCONFLICT,比较在这组偏移索引的每一个元素中的偏移与在每个较不重要的元素中的偏移,以确定它们是否保存着匹配的偏移,来计算冲突掩码。将认识到,处理块1431代表对过程1405的现有技术的明显改进。
在处理块1450中,从存储器聚集数据,并根据偏移索引和(可选地)都为一的元素遗留掩码来计算修改的值。接着在现有技术过程1406中,通过将元素遗留掩码广播到处理块1480中的所有元素来初始化一组冲突输出元素。然后在处理块1485中在前面的冲突掩码和新的冲突输出元素上使用矢量紧缩AND指令来重新计算这组冲突掩码。然后在处理块1490中使用紧缩比较不等指令PCMPNEQ,比较每一个冲突掩码与全零,来计算新的元素遗留掩码。在处理块1462中,元素遗留掩码被求反以形成做这些掩码,并且数据元素根据偏移索引在处理块1466中被分散到存储器。在处理块1460中,确定元素遗留掩码是否是零(0)。如果是,则对这组SIMD数据的处理在处理块1499中结束。否则,处理迭代在过程1402的处理块1450中开始重新迭代。
将认识到,如在本文描述的实施例中的,SIMD矢量地址冲突检测指令可以用于可变尺寸的元素和存储器偏移以提供SIMD矢量地址冲突检测功能并针对有效SIMD地址冲突解决方案来生成冲突掩码。还将认识到,如在本文描述的实施例中的,SIMD矢量地址冲突检测指令可以结合SIMD矢量前导零计数指令来使用,以为更有效的SIMD地址冲突解决方案提供SIMD置换控制,特别是在允许寄存器中的地址冲突解决方案而不通过存储器执行相关的计算的某些聚集-修改-分散应用中。
图14C示出了使用提供SIMD矢量地址冲突检测功能的指令的示例的一个实施例的流程图。在过程1403的处理块1410中,这组偏移索引再一次被初始化为例如值7、2、7、1和7。在处理块1431中,使用SIMD矢量紧缩冲突指令VPCONFLICT,比较在这组偏移索引的每一个元素中的偏移与在每个较不重要的元素中的偏移以确定它们是否保存着匹配的偏移,来计算冲突掩码。
在处理块1432中,使用SIMD矢量种群计数指令VPOPCNT,对冲突掩码的每一个数据字段的被设置为一的位的数量进行计数并将每一个计数存储为在迭代计数的相对应的字段中的值,来计算迭代计数。然后使用矢量紧缩比较大于指令VPCMPGT,比较每一个迭代计数与相对应的阈值以测试任何相关性是否需要太多的迭代,来计算掩码。在处理块1434中,确定比较迭代计数与阈值的所有测试是否都是否定的,导致零。如果不是,则在处理块1436中,针对这些元素执行计算的标量处理版本,这是因为有太多的串行相关性。
否则,零测试结果指示依赖可以以SIMD方式来解决而没有太多的迭代,并且所以处理继续进行到处理块1446,其中元素遗留掩码被初始化为全一。在处理块1447中,增量矢量的元素都被初始化为值一,并且迭代矢量在处理块1448中被初始化为零。
在处理块1449中,使用紧缩比较相等指令PCMPEQ,比较每一个迭代计数与当前迭代矢量,来计算元素准备处理的掩码,do_these。在处理块1450中,从存储器聚集数据,并根据偏移索引和元素要处理的完全掩码do_these来计算修改的值。接着在处理块1451中,使用矢量紧缩比较大于指令VPCMPGT,比较每一个迭代计数与当前迭代矢量,来计算元素遗留掩码。将认识到,处理块1451代表对过程1406的现有技术的改进。在处理块1458中,经处理的数据元素根据偏移索引和完全掩码do_these被分散回到存储器,并且处理继续进行到处理块1460,其中确定元素遗留掩码是否是零,指示没有元素被留下来处理。如果是,则对这组SIMD数据的处理在处理块1499中结束。否则处理继续进行到处理块1463,其中迭代矢量递增了增量矢量的紧缩添加PADD到当前迭代矢量。然后处理重新迭代在过程1403的处理块1449中开始。将认识到,如在本文描述的实施例中的,SIMD矢量种群计数指令可以与可变尺寸的元素和冲突掩模一起使用来有效地计算迭代计数并对SIMD地址冲突解决方案的迭代提供SIMD完全掩码。
图14D示出了使用SIMD矢量紧缩冲突检测、SIMD矢量紧缩种群计数和SIMD矢量紧缩前导零计数的组合指令来提供有效的SIMD矢量地址冲突解决方案的示例的可替换的实施例的流程图。在过程1404的处理块1410中,这组偏移索引再一次被初始化为例如值7、2、7、1和7。在处理块1431中,使用SIMD矢量紧缩冲突指令VPCONFLICT,比较在这组偏移索引的每一个元素中的偏移与在每个较不重要的元素中的偏移以确定它们是否保存着匹配的偏移,来计算冲突掩码。在处理块1432中,使用SIMD矢量种群计数指令VPOPCNT,对冲突掩码的每一个数据字段的被设置为一的位的数量进行计数并将每一个计数存储为在迭代计数的相对应的数据字段中的值,来计算迭代计数。然后在处理块1437中,使用矢量紧缩比较大于指令VPCMPGT,比较每一个迭代计数与全零的矢量,来计算元素遗留掩码。在处理块1438中,确定元素遗留掩码是否是零,指示没有要解决的相关性,在这种情况下处理直接继续进行到处理块1452、1460、1465和1499,其中数据元素可以被处理,而没有任何依赖解决。
否则,如果在处理块1438中元素遗留掩码不为零,则处理继续进行到处理块1439,其中通过对冲突掩码的每一个数据字段的被设置为零的最高有效连续位的数量进行计数并将每一个计数存储为在前导零计数的相对应的数据字段中的值来在冲突掩码上使用矢量紧缩前导零计数指令VPLZCNT计算前导零计数。在处理块1440中,最大计数被初始化为全四,其在这个示例中为比用于表示冲突掩码的位的数量小一的值。在处理块1445中,通过执行SIMD紧缩减法PSUB,从相对应的最大计数值——比用于表示冲突掩码的位的数量少一,减去每一个前导零计数的值,以生成最大计数减去前导零计数的相对应的差,来计算一组置换索引。我们想起,与不依赖于先前的计算的偏移索引相对应的那些位置具有负一的置换索引,其也可以被有利地使用。
在处理块1447中,增量矢量的元素都被初始化为值一,并且在处理块1448中,迭代矢量被初始化为零。在处理块1452中,从存储器聚集数据,并根据偏移索引和都为一的可选的完全掩码来计算修改的值。将认识到,任何不正确地修改的数据值都将随后被解决。
在处理块1460中,确定元素遗留掩码是否是零,指示没有元素被留下来处理。如果在处理块1465中为是,则经处理的数据元素根据偏移索引被分散回到存储器,并且处理继续进行到处理块1499,其中对这组SIMD数据的处理结束。将认识到,分散操作将最近的更新值存储到任一个存储器位置,从而正确地解决任何冲突依赖。
否则如果在处理器块1460中元素遗留掩码不为零,则处理继续进行到处理块1463,其中迭代矢量递增了增量矢量的紧缩添加PADD到当前迭代矢量。在处理块1464中,使用紧缩比较相等指令PCMPEQ比较每一个迭代计数与最新计算的迭代矢量,来计算元素准备处理的掩码do_these。在处理块1470中,通过执行SIMD矢量紧缩置换VPERM,使用置换索引和do_these掩码作为完全掩码以在这次迭代中有利地只更新要处理的元素,来置换数据。在处理块1475中,在这次迭代中使用do_these掩码作为完全掩码,在要处理的数据元素上执行所需的计算。在处理块1476中使用矢量紧缩比较大于指令VPCMPGT,比较每一个迭代计数与当前迭代矢量,来计算元素遗留掩码。然后处理重新迭代在过程1404的处理块1460中开始。将认识到,本文公开的指令和逻辑的组合,SIMD矢量紧缩冲突检测、SIMD矢量紧缩种群计数和SIMD矢量紧缩前导零计数提供了更有效的SIMD地址冲突解决方案,特别是在某些聚集-修改-分散应用中。
图15A示出了向有效矢量地址冲突解决方案的SIMD置换控制提供矢量前导零计数功能的过程的一个实施例的流程图。过程1501和本文公开的其它过程由处理块执行,所述处理块可以包括由通用机器或由专用机器或由这两者的组合可执行的专用硬件或软件或固件操作代码。
在过程1501的处理块1535中,将对第一矢量寄存器的每一个元素的设置为零的最高有效连续位的数量进行计数。在处理块1540中,每一个计数被存储为在第一矢量目的寄存器的相对应的数据字段中的值。在处理块1545中,在第一矢量目的寄存器的每一个数据字段中的值被从相对应的值——比用于存储在第一矢量寄存器中的元素的位的数量少一——中减去,以生成相对应的差。在处理块1550中,每一个相对应的差被存储为在第二矢量目的寄存器的相对应的数据字段中的置换控制值。在处理块1555中,在第二矢量目的寄存器的每一个数据字段的值与在矢量寄存器中的每一个数据字段中的指定值(例如,负一或某个其它值)的相对应的拷贝比较,以检测准备处理的元素,并且在处理块1560中,比较结果被存储为在矢量完全掩码中的指示准备处理的接下来的元素的相对应的掩码值,该掩码值连同这组置换控制值一起被使用。在处理块1565中,执行SIMD计算,并且在处理块1580中,使用置换控制值和完全掩码来置换SIMD数据,以针对要处理的接下来的元素准备输入数据。在处理块1595中,确定对所有元素的处理是否都完成,并且如果是,则对这些元素的处理在处理块1599结束。否则,在处理块1586中,第一矢量源的每一个元素的逻辑AND使用完全掩码的拷贝被执行,并且处理重新迭代在处理块1535中开始。将认识到,虽然如所示的过程1501不假设经处理的元素需要存储到存储器,任何这样的存储或分散到存储器连同过程1501的额外随后的迭代可以根据本发明的可替换的实施例被执行。
图15B示出了提供SIMD矢量地址冲突检测功能的过程1502的一个实施例的流程图。
在处理块1505中,在第一寄存器或存储器矢量源的每一个元素中的偏移与在矢量源的每个较不重要的元素中的偏移进行比较以确定它们是否保存着匹配的偏移。在处理块1510中,与在保存偏移的第一矢量源中的较不重要的元素相对应的任何掩码位被设置为一,其中第一矢量源中保存的偏移与在元素中与第一矢量目的地中的掩码相对应的偏移相匹配。在处理块1511中,在目的寄存器中的任何其它位被设置为第二值(例如,零)。
在处理块1516中,存储在第一目的寄存器中的每一个掩码的值与在另一矢量中的特定值(例如零)的相对应的拷贝比较,以便生成依赖于较不重要的元素的计算的元素的掩码。在处理块1572中,依赖于在较不重要的元素上的不完全计算的元素的掩码用于检测准备处理的元素并生成完全掩码。在处理块1564中,使用完全掩码在数据上执行SIMD计算。然后在处理块1569中,更新依赖于在较不重要的元素上的不完全计算的元素的掩码。在处理块1595中确定所有元素的处理是否都完成,并且如果是,则对这些元素的处理在处理块1599中结束。否则,处理重新迭代在处理块1572中开始。还将认识到,虽然如所示的,过程1502不假设经处理的元素需要存储到存储器,任何这样的存储或分散到存储器连同过程1502的额外随后的迭代可以根据本发明的可替换实施例被执行。
图15C示出了提供SIMD矢量地址冲突检测功能的过程1503的一个实施例的流程图。在处理块1515中,将对第一矢量源的每一个元素的设置为一的位的数量进行计数,每一个元素根据特定的种群计数指令存储相同的可变数量的位。在处理块1520中,计数被存储为在第一矢量目的地中的相对应的元素中的值。在处理块1525中,在第一目的寄存器的计数与在第二矢量源中的相对应的值的每一个进行比较,以便确定它们是否超过阈值并生成相对应的掩码值,在处理块1530中,所述相对应的掩码值根据在第一矢量掩码目的地中的比较结果被存储。在处理块1570中,在第一目的寄存器中的计数的每一个与在第三矢量源中的相对应的值进行比较,以便确定在当前迭代中在其上操作的在第四矢量源中的相对应的元素。比较结果在处理块1575中被存储为在完全掩码中的掩码值以用于执行SIMD操作。在处理块1577中确定所有元素的处理是否都完成,并且如果是,则对这些元素的处理在处理块1599中结束。否则,处理继续进行到处理块1563,其中一个或多个SIMD操作使用完全掩码而被执行。然后在处理块1568中迭代计数被更新并且处理重新迭代在处理块1570中开始。将再次认识到,虽然如所示的,过程1503不假设经处理的元素需要被存储到存储器,任何这样的存储或分散到存储器连同过程1503的额外随后的迭代可以根据本发明的可替换的实施例被执行。
图15D示出了提供有效SIMD矢量地址冲突解决方案的组合过程1504的可替换实施例的流程图。在处理块1505中,在第一寄存器或存储器矢量源的每一个元素中的偏移与第一矢量源的每个较不重要的元素中的偏移比较,以确定它们是否保存着匹配的偏移。在处理块1510中,对于与第一矢量源的每一个元素相对应的在第一矢量目的地中的掩码,根据在较不重要的元素中的匹配偏移,将掩码位设置为一。在处理块1515中,将对第一矢量目的地的每一个元素的设置为一的位的数量进行计数,并且在处理块1520中,该计数存储在第二矢量目的地中。在处理块1526中,在第二目的寄存器中的计数的每一个与在第二矢量源中的相对应的值进行比较,以便确定在其上执行SIMD操作的在第三矢量源中的相对应的元素。比较结果在处理块1531中被存储为在第一矢量掩码目的地中的掩码值。在处理块1533中,确定在SIMD操作中是否有相关性。如果没有,则处理可以直接继续进行到处理块1553。否则处理首先继续进行到处理块1535,其中将对第一矢量目的地的每一个元素的设置为零的最高有效连续位的数量进行计数。在处理块1540中,每一个计数被存储为在第三矢量目的地的相对应的数据字段中的值。在处理块1545中,在第三矢量目的寄存器中的每一个数据字段的计数从相对应的值——比用于存储在第一矢量目的地中的元素的位的数量少一——中减去,以生成相对应的差。在处理块1550中,每一个相对应的差被存储为在第四矢量目的地的相对应的数据字段中的置换控制值。
然后在处理块1553中,使用在第一矢量源和第一矢量掩码目的地中的偏移作为完全掩码将元素从存储器或高速缓存聚集到第三矢量源中。在处理块1566中,使用第一矢量掩码目的地作为完全掩码在第三矢量源的元素上执行一个或多个SIMD操作。在处理块1567中确定对所有数据元素的处理是否都完成。如果是,则在处理块1590中第三矢量源的数据元素使用在第一矢量源中的偏移被分散回到存储器或高速缓存,并且对这些元素的处理在处理块1599结束。
否则,在处理块1568中,更新迭代计数。然后在处理块1571中,将在第二矢量目的地中的计数的每一个与迭代计数比较,以便确定接下来在其上操作的元素。在处理块1576中,比较结果被存储为在第一掩码目的地完全掩码中的掩码值。在处理块1581中,使用在第四矢量目的地中的置换控制和第一掩码目的地完全掩码来置换在第三矢量源中的元素。然后在处理块1585中,将在第二矢量目的地中的计数与迭代计数比较,以确定这个迭代是否可以被识别为最后的迭代。然后处理重新迭代在处理块1566中开始。因此,在本文公开的指令和逻辑的组合提供更有效的SIMD地址冲突解决方案,特别是在某些聚集-修改-分散应用中。
图16示出了用于执行提供SIMD矢量前导零计数功能的指令的装置1601的实施例,所述SIMD矢量前导零计数功能对于生成有效矢量地址冲突解决方案的置换控制是有用的。装置1601的实施例可以是流水线400的部分(例如执行级416)或核心490的部分(例如,执行单元462),以用于执行提供SIMD矢量前导零计数功能的指令。装置1601的实施例可以与解码级(例如,解码级406)或解码器(例如,解码单元440)耦合,以对用于SIMD矢量前导零计数的指令进行解码,这可以允许有效的矢量地址冲突解决方案。一个或多个执行单元(例如,执行装置1601)响应于所解码的指令,来读取在存储器矢量操作数或矢量寄存器1610或1620中的每一个数据字段的多个位,并且对于在存储器矢量操作数或矢量寄存器1610或1620中的每一个数据字段,对设置为零的最高有效连续位的数量进行计数并将计数存储为在SIMD目的寄存器1650或1660的相对应的数据字段中的值。
例如,装置1601的实施例可以与包括可变的数目为n的多个可变尺寸数据字段的矢量寄存器(例如,物理寄存器文件单元458)耦合,以存储可变的数目为n的多个可变尺寸数据元素的值。提供SIMD矢量前导零计数功能的指令的实施例指定矢量前导零计数操作和数据字段尺寸,以用于针对存储器矢量操作数或矢量寄存器(例如,1610或1620)的每一个数据字段执行SIMD前导零计数并将计数存储为在SIMD目的寄存器(例如,1650或1660)中的指定尺寸的相对应的数据字段中的值。
例如,用于执行提供SIMD矢量前导零计数功能的指令的装置1601的一个实施例读取在存储器矢量操作数或矢量寄存器1620中的第一尺寸(例如16位或32位)的每一个数据字段的多个位,并在前导零计数电路1603的前导零计数器1630-1637中对被设置为零的最高有效连续位的数量进行计数,然后将计数存储为在SIMD目的寄存器1660中的相同指定尺寸的相对应的数据字段中的值。用于执行提供SIMD矢量前导零计数的指令的装置1601的另一实施例读取在存储器矢量操作数或矢量寄存器1610中的第二尺寸(例如32位或64位)的每一个数据字段的多个位,并从奇数前导零计数器1631到1637选择被设置为零的最高有效连续位的计数,或在前导零计数组合电路1604的选择性加法器电路1640到1643中将值m分别加到来自偶数前导零计数器1630到1636的计数,然后将组合计数存储为在SIMD目的寄存器1650中的指定尺寸的相对应的数据字段中的值。将认识到,用于执行提供SIMD矢量前导零计数的指令的装置1601的可替换实施例可能能够执行如图16所示的第一数据字段尺寸的SIMD矢量前导零计数和第二数据字段尺寸的SIMD矢量前导零计数二者,或可以被修改为执行各种指定数据字段尺寸的SIMD矢量前导零计数。如在本文描述的实施例中的,SIMD矢量前导零计数指令可以与可变尺寸的元素和冲突掩码一起使用以提供SIMD置换控制,从而允许在寄存器中的更有效的SIMD地址冲突解决方案而不通过存储器执行相关的计算。因此本文公开的SIMD矢量前导零计数指令和逻辑提供更有效的SIMD地址冲突解决方案,特别是在某些聚集-修改-分散应用中,例如,如关于图14A和14D讨论的。
图17示出了用于执行向有效矢量地址冲突解决方案提供SIMD矢量地址冲突检测功能的指令的装置1701的实施例。装置1701的实施例还可以是流水线400的部分(例如,执行级416)或核心490的部分(例如,执行单元462),以用于执行提供SIMD矢量地址冲突检测功能的指令。装置1701的实施例可以与解码级(例如,解码406)或解码器(例如,解码单元440)耦合以对用于SIMD矢量地址冲突检测的指令进行解码,这可以允许有效的矢量地址冲突解决方案。一个或多个执行单元(例如,执行装置1701)响应于所解码的指令,来读取在存储器矢量操作数或矢量寄存器1710或1720中的每一个数据字段的值,并且对于存储器矢量操作数或矢量寄存器1710或1720中的每一个数据字段,比较它的相对应的偏移与存储器矢量操作数或矢量寄存器的每个较不重要的数据字段,以确定它们是否保存着匹配的偏移。然后对于在与存储器矢量操作数或矢量寄存器1710或1720中的偏移相对应的在SIMD目的寄存器1750或1760中的每一个数据字段,执行装置1701设置(例如,为一)与保存匹配的较不重要的数据字段相对应的任何掩码位,并将在SIMD目的寄存器1750或1760中的任何其它位设置为不同的值(例如,像零)。
例如,装置1701的实施例可以与包括可变的数目为n的多个可变尺寸数据字段的矢量寄存器(例如,物理寄存器文件单元458)耦合以存储可变的数目为n的多个可变尺寸数据元素的值。提供SIMD矢量地址冲突检测功能的指令的实施例指定矢量地址冲突检测操作和数据字段尺寸,以用于针对存储器矢量操作数或矢量寄存器(例如,1710或1720)的每一个数据字段执行SIMD地址冲突检测并将冲突掩码存储在SIMD目的寄存器(例如,1750或1760)中的指定尺寸的相对应的数据字段中。
例如,用于执行提供SIMD矢量地址冲突检测功能的指令的装置1701的一个实施例读取在存储器矢量操作数或矢量寄存器1720中的第一尺寸(例如16位或32位)的每一个数据字段的值,并使用地址冲突检测电路1703的相等比较器(例如,相等比较器1730-1736)比较它的相对应的偏移与在每个较不重要的数据字段中的偏移的相等性,然后存储在SIMD目的寄存器1760中的相同的指定尺寸的相对应的数据字段中的冲突掩码。用于执行提供SIMD矢量地址冲突检测的指令的装置1701的另一实施例读取在存储器矢量操作数或矢量寄存器1610中的第二尺寸(例如,32位或64位)的每一个数据字段的值,并在冲突组合电路1704的AND逻辑1740到1742中分别例如从相等比较器1732和1733、1730和1736、1734和1735等将相对应的相邻数据子字段的比较组合(例如,在一起AND),然后将组合的冲突掩码存储在SIMD目的寄存器1750中的指定尺寸的相对应的数据字段中。将认识到,用于执行提供SIMD矢量地址冲突检测的指令的装置1701的可替换实施例可能能够执行如图17所示的第一数据字段尺寸的SIMD矢量地址冲突检测和第二数据字段尺寸的SIMD矢量地址冲突检测,或可以被修改以执行各种指定数据字段尺寸的SIMD矢量地址冲突检测。将认识到,如在本文描述的实施例中的,SIMD矢量地址冲突检测指令可以与可变尺寸的元素和存储器偏移一起使用以提供SIMD矢量地址冲突检测功能并针对有效SIMD地址冲突解决方案生成冲突掩码。还将认识到,如在本文描述的实施例中的,SIMD矢量地址冲突检测指令可以结合SIMD矢量前导零计数指令结合使用,以针对更有效的SIMD地址冲突解决方案提供SIMD置换控制,特别是在某些聚集-修改-分散应用中,例如,如关于图14A、14B和14D所讨论的。
图18示出了用于执行向有效矢量地址冲突解决方案提供SIMD矢量种群计数功能的指令的装置1801的实施例。装置1801的实施例可以是流水线400的部分(例如执行级416)或核心490的部分(例如,执行单元462),以用于执行提供SIMD种群计数功能的指令。装置1801的实施例可以与解码级(例如,解码406)或解码器(例如,解码单元440)耦合以对用于SIMD种群计数的指令进行解码,这可以允许有效的矢量地址冲突解决方案。一个或多个执行单元(例如,执行装置1801)响应于所解码的指令,读取在存储器矢量操作数或矢量寄存器1810或1820中的每一个数据字段的多个位,并且对于存储器矢量操作数或矢量寄存器1810或1820中的每一个数据字段,对设置为一的位的数量进行计数,并将计数存储为SIMD目的寄存器1850或1860的相对应的数据字段中的值。
例如,装置1801的实施例可以与包括可变的数目为n的多个可变尺寸数据字段的矢量寄存器(例如,物理寄存器文件单元458)耦合,以存储可变的数目为n的多个可变尺寸数据元素的值。提供SIMD种群计数功能的指令的实施例指定矢量种群计数操作和数据字段尺寸,以用于针对存储器矢量操作数或矢量寄存器(例如,1810或1820)的每一个数据字段执行SIMD种群计数,并将计数存储为在SIMD目的寄存器(例如,1850或1860)中的指定尺寸的相对应的数据字段中的值。
例如,用于执行提供SIMD矢量种群计数功能的指令的装置1801的一个实施例读取在存储器矢量操作数或矢量寄存器1820中的第一尺寸(例如16位或32位)的每一个数据字段的多个位,并在种群计数电路1803的种群计数器1830-1837中对被设置为一的位的数量进行计数,然后将计数存储为在SIMD目的寄存器1860中的相同指定尺寸的相对应的数据字段中的值。用于执行提供SIMD矢量种群计数的指令的装置1801的另一实施例读取在存储器矢量操作数或矢量寄存器1810中的第二尺寸(例如32位或64位)的每一个数据字段的多个位,并在种群计数组合电路1804的加法器1840到1845中,分别从种群计数器1830-1831,1836到1837加上被设置为一的位的计数,然后将组合的计数存储为在SIMD目的寄存器1850中的指定尺寸的相对应的数据字段中的值。将认识到,用于执行提供SIMD矢量种群计数的指令的装置1801的可替换的实施例可能能够执行如图18所示的第一数据字段尺寸的SIMD矢量种群计数和第二数据字段尺寸的SIMD矢量种群计数二者,或可以被修改为执行各种指定数据字段尺寸的SIMD矢量种群计数。如在本文描述的实施例中的,SIMD矢量种群计数指令可以与可变尺寸的元素和冲突掩码一起使用以有效地计算迭代计数并为SIMD地址冲突解决方案的迭代提供SIMD完全掩码。因此本文公开的指令和逻辑的组合提供了更有效的SIMD地址冲突解决方案,特别是在聚集-修改-分散应用中,例如,如关于图14A-图14D所讨论的。
本文公开的机制的实施例可以在硬件、软件、固件或这样实现的方法的组合中实现。本发明的实施例可以被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
程序代码可以应用于输入指令以执行本文描述的功能并生成输出信息。输出信息可以用已知的方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器(例如,数字信号处理器(DSP))、微控制器、专用集成电路(ASIC)或微处理器的任何系统。
程序代码可以以高级程序或面向对象的编程语言实现,以与处理系统进行通信。如果需要,也可以以汇编或机器语言来实现程序代码。事实上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令实现,所述代表性指令代表在处理器内的各种逻辑,当由机器读取时,使机器制造逻辑以执行在本文中描述的技术。被称为“IP核心”的这样的表示可以存储在有形、机器可读介质上并被提供到各种消费者或制造设施,以加载到实际上制造逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的制品的非暂时性、有形布置,包括存储介质,例如,硬盘、任何其它类型的盘,包括软盘、光学盘、光盘只读存储器(CD-ROM)、可重写光盘(CD-RW)和磁光盘、半导体器件,例如,只读存储器(ROM)、随机存取存储器(RAM),例如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、或适合于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括包含指令或包含设计数据(例如,硬件描述语言(HDL))的非暂时性、有形机器可读介质,其定义了本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可以被称为程序产品。
在一些情况下,指令转换器可以用于将指令从源指令集转换成目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或否则转换成由核心处理的一个或多个其它指令。指令转换器可以在软件、硬件、固件或其组合中实现。指令转换器可以在处理器上、在处理器外、或部分在处理器上或部分在处理器外。
因此,公开了用于根据至少一个实施例执行一个或多个指令的技术。虽然在附图中描述和示出了某些示例性实施例,但是应理解,这样的实施例仅仅是广泛的发明的举例示出而不对广泛的发明进行限制,以及本发明不限于所示和所述的特定结构和布置,因为本领域中的普通技术人员在研究本公开时可以想到各种其它修改。在诸如如下的技术领域中,在该领域,增长快速并且更远的进步不容易预见,所公开的实施例可以在布置和细节上容易修改,正如通过实现技术进步所促进的,而不偏离本公开的原理或附随的权利要求的范围。

Claims (37)

1.一种处理器,包括:
第一寄存器,其包括第一多个数据字段,其中,在所述第一寄存器中的第一多个数据字段中的每一个与针对在存储器中的数据元素的偏移相对应;
目的寄存器,其包括与所述第一多个数据字段相对应的第二多个数据字段,其中,在所述目的寄存器中的第二多个数据字段中的每一个的一部分用于存储具有针对所述第一多个数据字段中的每一个的掩码位的位掩码;
解码级,其对指定矢量冲突操作和数据字段尺寸的第一指令进行解码;以及
一个或多个执行单元,其响应于所解码的第一指令,用于:
读取在所述第一寄存器中的数据字段中的每一个的值;
对于在所述第一寄存器中的第一多个数据字段中的每一个数据字段,将它的相对应的偏移与所述多个数据字段中的每个较不重要的数据字段进行比较,以确定它们是否保存着匹配的偏移,以及
对于与在所述第一寄存器中的数据字段相对应的、在所述目的寄存器中的第二多个数据字段中的每一个数据字段,将与保存着和在所述第一寄存器中的该相对应的数据字段相匹配的偏移的、在所述第一寄存器中的较不重要的数据字段相对应的任何掩码位设置为第一值,并且将在所述目的寄存器中的任何其它位设置为第二值。
2.如权利要求1所述的处理器,其中,所述第一值是一。
3.如权利要求2所述的处理器,其中,所述第二值是零。
4.如权利要求1所述的处理器,其中,所述第一指令是矢量冲突指令,用于测试在所述第一寄存器中的第一多个数据字段中的每一个数据字段中的偏移,以确定与更接近所述第一寄存器的最低有效位的所述第一多个数据字段中的所有其它数据字段的相等性。
5.如权利要求4所述的处理器,其中,所述第二多个数据字段中的每一个保存32位。
6.如权利要求5所述的处理器,其中,存储位掩码的所述第二多个数据字段中的每一个的所述部分包括4位。
7.如权利要求5所述的处理器,其中,存储位掩码的所述第二多个数据字段中的每一个的所述部分包括8位。
8.如权利要求5所述的处理器,其中,存储位掩码的所述第二多个数据字段中的每一个的所述部分包括16位。
9.如权利要求4所述的处理器,其中,所述第二多个数据字段中的每一个保存64位。
10.如权利要求9所述的处理器,其中,存储位掩码的所述第二多个数据字段中的每一个的所述部分包括2位。
11.如权利要求9所述的处理器,其中,存储位掩码的所述第二多个数据字段中的每一个的所述部分包括4位。
12.如权利要求9所述的处理器,其中,存储位掩码的所述第二多个数据字段中的每一个的所述部分包括8位。
13.一种方法,包括:
在第一矢量寄存器的数目为n的多个数据字段的每一个中存储针对存储器中的数据元素的偏移;
在处理器中执行用于矢量地址冲突检测的SIMD指令;以及
对于在所述第一矢量寄存器中的数目为n的多个数据字段中的每一个数据字段,将它的相对应的偏移与所述数目为n的多个数据字段的每个较不重要的数据字段进行比较,以确定它们是否保存着匹配的偏移,以及
将冲突掩码存储在第一矢量目的寄存器中的数目为n的第二多个数据字段中的每一个相对应的数据字段的一部分中,所述冲突掩码指示哪些较不重要的数据字段保存着与所述相对应的数据字段匹配的偏移。
14.如权利要求13所述的方法,其中,所述第二多个数据字段中的每一个保存32位。
15.如权利要求14所述的方法,其中,所述第二多个数据字段中的每一个相对应的数据字段的所述部分包括多达4位。
16.如权利要求14所述的方法,其中,所述第二多个数据字段中的每一个相对应的数据字段的所述部分包括多达8位。
17.如权利要求14所述的方法,其中,所述第二多个数据字段中的每一个相对应的数据字段的所述部分包括多达16位。
18.如权利要求13所述的方法,其中,所述第二多个数据字段中的每一个保存64位。
19.如权利要求18所述的方法,其中,所述第二多个数据字段中的每一个相对应的数据字段的所述部分包括多达2位。
20.如权利要求18所述的方法,其中,所述第二多个数据字段中的每一个相对应的数据字段的所述部分包括多达4位。
21.如权利要求18所述的方法,其中,所述第二多个数据字段中的每一个相对应的数据字段的所述部分包括多达8位。
22.一种用于记录功能描述材料的机器可读介质,所述功能描述材料包括能够执行的SIMD冲突指令,所述能够执行的SIMD冲突指令如果代表机器的线程被执行,则使所述机器用于:
将在第一寄存器中的第一多个数据字段中的每一个数据字段中的偏移与所述多个数据字段中的每个较不重要的数据字段中的偏移进行比较,以确定它们是否保存着匹配的偏移;
在每一个都用于保存掩码、并且在所述第一寄存器中具有相对应的数据字段的第一目的寄存器中的第二多个数据字段中的每一个数据字段中,将与保存着和在该相对应的数据字段中的偏移相匹配的偏移的、所述第一寄存器中的较不重要的数据字段相对应的任何掩码位设置为第一值,以及
将在所述目的寄存器中的任何其它位设置为第二值。
23.如权利要求22所述的机器可读介质,包括第二能够执行的SIMD指令,其中,所述第二能够执行的SIMD指令是SIMD矢量种群计数指令,所述SIMD矢量种群计数指令至少部分地用于根据存储在所述第一目的寄存器的相对应的数据字段中的所述掩码来生成在第二目的寄存器中的一组迭代计数。
24.如权利要求22所述的机器可读介质,其中,所述第一值是一。
25.如权利要求24所述的机器可读介质,其中,所述第二值是零。
26.如权利要求22所述的机器可读介质,其中,所述第二多个数据字段中的每一个保存32位。
27.如权利要求22所述的机器可读介质,其中,所述第二多个数据字段中的每一个保存64位。
28.如权利要求22所述的机器可读介质,其中,所述第一多个数据字段包括2个数据字段。
29.如权利要求22所述的机器可读介质,其中,所述第一多个数据字段包括4个数据字段。
30.如权利要求22所述的机器可读介质,其中,所述第一多个数据字段包括8个数据字段。
31.如权利要求22所述的机器可读介质,其中,所述第一多个数据字段包括16个数据字段。
32.一种处理系统,包括:
存储器;以及
多个处理器,每一个处理器包括:
第一寄存器,其包括第一多个数据字段,其中,在所述第一寄存器中的第一多个数据字段中的每一个与针对在存储器中的数据元素的偏移相对应;
目的寄存器,其包括与所述第一多个数据字段相对应的第二多个数据字段,其中,在所述目的寄存器中的第二多个数据字段中的每一个的一部分用于存储具有针对所述第一多个数据字段中的每一个的掩码位的位掩码;
解码级,其对指定矢量冲突操作和数据字段尺寸的第一指令进行解码;以及
一个或多个执行单元,其响应于所解码的第一指令,用于:
读取在所述第一寄存器中的数据字段中的每一个的值;
对于在所述第一寄存器中的第一多个数据字段中的每一个数据字段,将它的相对应的偏移与所述多个数据字段中的每个较不重要的数据字段进行比较,以确定它们是否保存着匹配的偏移,以及
对于与在所述第一寄存器中的数据字段相对应的、在所述目的寄存器中的第二多个数据字段中的每一个数据字段,将与保存着和在所述第一寄存器中的该相对应的数据字段相匹配的偏移的、在所述第一寄存器中的较不重要的数据字段相对应的任何掩码位设置为第一值,并将在所述目的寄存器中的任何其它位设置为第二值。
33.如权利要求32所述的处理系统,其中,所述第一值是一。
34.如权利要求33所述的处理系统,其中,所述第二值是零。
35.如权利要求32所述的处理系统,其中,所述第一指令是矢量冲突指令,用于测试在所述第一寄存器中的第一多个数据字段中的每一个数据字段中的偏移,以确定与更接近所述第一寄存器的最低有效位的所述第一多个数据字段中的所有其它数据字段的相等性。
36.如权利要求35所述的处理系统,其中,所述第二多个数据字段中的每一个保存32位。
37.如权利要求35所述的处理系统,其中,所述第二多个数据字段中的每一个保存64位。
CN201380062559.0A 2012-12-29 2013-06-30 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑 Active CN104919416B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/731,006 US9411584B2 (en) 2012-12-29 2012-12-29 Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US13/731,006 2012-12-29
PCT/US2013/048837 WO2014105214A1 (en) 2012-12-29 2013-06-30 Methods, apparatus, instructions and logic to provide vector address conflict detection functionality

Publications (2)

Publication Number Publication Date
CN104919416A true CN104919416A (zh) 2015-09-16
CN104919416B CN104919416B (zh) 2017-09-05

Family

ID=51018689

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380062559.0A Active CN104919416B (zh) 2012-12-29 2013-06-30 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑

Country Status (5)

Country Link
US (1) US9411584B2 (zh)
KR (2) KR101767025B1 (zh)
CN (1) CN104919416B (zh)
DE (1) DE112013005416T5 (zh)
WO (1) WO2014105214A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017107125A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Conflict mask generation
WO2017107124A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Scatter reduction instruction
CN108292269A (zh) * 2015-12-30 2018-07-17 英特尔公司 用于监视地址冲突的计数器
CN115718622A (zh) * 2022-11-25 2023-02-28 苏州睿芯通量科技有限公司 一种arm架构下的数据处理方法、装置及电子设备

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10175990B2 (en) * 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
US10866807B2 (en) 2011-12-22 2020-12-15 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
CN104011646B (zh) 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
US10223112B2 (en) 2011-12-22 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
US9184957B2 (en) 2012-12-27 2015-11-10 Intel Corporation High speed receivers circuits and methods
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US9851970B2 (en) 2014-12-23 2017-12-26 Intel Corporation Method and apparatus for performing reduction operations on a set of vector elements
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
TWI724066B (zh) * 2015-12-24 2021-04-11 美商英特爾股份有限公司 分散縮減指令
CN105681925A (zh) * 2016-01-04 2016-06-15 青岛海信电器股份有限公司 菜单数值的数值确定方法及装置
EP3451238A4 (en) * 2016-04-29 2020-01-01 Cambricon Technologies Corporation Limited DEVICE AND METHOD FOR CARRYING OUT A POOLING OPERATION
WO2018182445A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements
WO2019005165A1 (en) * 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
CN111970514A (zh) * 2020-08-27 2020-11-20 深圳职业技术学院 军用音视频编码芯片
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
CN114090079B (zh) * 2021-11-16 2023-04-21 海光信息技术股份有限公司 串操作方法、串操作装置以及存储介质
FR3133459B1 (fr) * 2022-03-11 2024-03-22 Commissariat Energie Atomique Générateur d’adresses pour un calculateur à architecture de type « instruction unique, données multiples »
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4777593A (en) * 1983-12-26 1988-10-11 Hitachi, Ltd. Vector processing apparatus including means for identifying the occurrence of exceptions in the processing of vector elements
US6289433B1 (en) * 1992-03-31 2001-09-11 Transmeta Corporation Superscalar RISC instruction scheduling
CN1952911A (zh) * 2005-10-21 2007-04-25 英特尔公司 实现矢量存储器操作
CN101488083A (zh) * 2007-12-26 2009-07-22 英特尔公司 用于转换向量数据的方法、装置和指令
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor

Family Cites Families (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4953101A (en) 1987-11-24 1990-08-28 Digital Equipment Corporation Software configurable memory architecture for data processing system having graphics capability
EP0340453B1 (en) 1988-04-01 1997-06-11 Nec Corporation Instruction handling sequence control system
US4918600A (en) 1988-08-01 1990-04-17 Board Of Regents, University Of Texas System Dynamic address mapping for conflict-free vector access
WO1994003860A1 (en) * 1992-08-07 1994-02-17 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
US5509129A (en) * 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US5541865A (en) * 1993-12-30 1996-07-30 Intel Corporation Method and apparatus for performing a population count operation
US6157955A (en) 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
JP3869947B2 (ja) 1998-08-04 2007-01-17 株式会社日立製作所 並列処理プロセッサ、および、並列処理方法
JP5285828B2 (ja) 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US6591345B1 (en) 2000-11-28 2003-07-08 Hewlett-Packard Development Company, L.P. Method for ensuring maximum bandwidth on accesses to strided vectors in a bank-interleaved cache
US7032082B1 (en) 2001-08-31 2006-04-18 Juniper Networks, Inc. Centralized memory allocation with write pointer drift correction
JP2003196084A (ja) 2001-12-25 2003-07-11 Toshiba Corp リードモディファイライトユニットを有するシステム
US20040073773A1 (en) * 2002-02-06 2004-04-15 Victor Demjanenko Vector processor architecture and methods performed therein
US6804759B2 (en) * 2002-03-14 2004-10-12 International Business Machines Corporation Method and apparatus for detecting pipeline address conflict using compare of byte addresses
DE60316151T2 (de) 2002-05-24 2009-10-22 Nxp B.V. Zugriff zum breiten speicher
GB2391083B (en) 2002-07-19 2006-03-01 Picochip Designs Ltd Processor array
US6944744B2 (en) 2002-08-27 2005-09-13 Advanced Micro Devices, Inc. Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor
AU2003900733A0 (en) 2003-02-19 2003-03-06 Canon Kabushiki Kaisha Dynamic Reordering of Memory Requests
US20040193838A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Vector instructions composed from scalar instructions
US7366873B1 (en) 2003-08-18 2008-04-29 Cray, Inc. Indirectly addressed vector load-operate-store method and apparatus
US7421565B1 (en) * 2003-08-18 2008-09-02 Cray Inc. Method and apparatus for indirectly addressed vector load-add -store across multi-processors
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
US7617496B2 (en) 2004-04-23 2009-11-10 Apple Inc. Macroscalar processor architecture
US7395419B1 (en) 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
JP2008513903A (ja) 2004-09-21 2008-05-01 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ シャッフル演算のためのマイクロプロセッサデバイス及び方法
JP2007334563A (ja) 2006-06-14 2007-12-27 Nec Corp マスク付きベクトル演算処理装置
DE602006006990D1 (de) 2006-06-28 2009-07-09 St Microelectronics Nv SIMD-Prozessorarchitektur mit gruppierten Verarbeitungseinheiten
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US7627723B1 (en) * 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
US7620797B2 (en) 2006-11-01 2009-11-17 Apple Inc. Instructions for efficiently accessing unaligned vectors
US7624251B2 (en) 2006-11-01 2009-11-24 Apple Inc. Instructions for efficiently accessing unaligned partial vectors
US8060728B2 (en) 2007-05-14 2011-11-15 Apple Inc. Generating stop indicators during vector processing
US8019977B2 (en) 2007-05-14 2011-09-13 Apple Inc. Generating predicate values during vector processing
US8078847B2 (en) 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
JP4913685B2 (ja) 2007-07-04 2012-04-11 株式会社リコー Simd型マイクロプロセッサおよびsimd型マイクロプロセッサの制御方法
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8600120B2 (en) 2008-01-03 2013-12-03 Apple Inc. Personal computing device control using face detection and recognition
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8446426B2 (en) 2008-04-28 2013-05-21 Apple Inc. Technique for visually compositing a group of graphical objects
US8271832B2 (en) 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US20100325399A1 (en) 2008-08-15 2010-12-23 Apple Inc. Vector test instruction for processing vectors
US8417921B2 (en) 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
US8209525B2 (en) 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US20110035568A1 (en) 2008-08-15 2011-02-10 Apple Inc. Select first and select last instructions for processing vectors
US8959316B2 (en) 2008-08-15 2015-02-17 Apple Inc. Actual instruction and actual-fault instructions for processing vectors
US8176299B2 (en) 2008-09-24 2012-05-08 Apple Inc. Generating stop indicators based on conditional data dependency in vector processors
US8181001B2 (en) 2008-09-24 2012-05-15 Apple Inc. Conditional data-dependency resolution in vector processors
US8745360B2 (en) 2008-09-24 2014-06-03 Apple Inc. Generating predicate values based on conditional data dependency in vector processors
US8310494B2 (en) 2008-09-30 2012-11-13 Apple Inc. Method for reducing graphics rendering failures
US7728742B2 (en) 2008-09-30 2010-06-01 Apple Inc. Method and apparatus for compressing and decompressing data
US7800519B2 (en) 2008-09-30 2010-09-21 Apple Inc. Method and apparatus for compressing and decompressing data
GB2464292A (en) 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US8868847B2 (en) 2009-03-11 2014-10-21 Apple Inc. Multi-core processor snoop filtering
US8627042B2 (en) * 2009-12-30 2014-01-07 International Business Machines Corporation Data parallel function call for determining if called routine is data parallel
US8683185B2 (en) * 2010-07-26 2014-03-25 International Business Machines Corporation Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set
US8688957B2 (en) * 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US8527708B2 (en) * 2011-01-05 2013-09-03 International Business Machines Corporation Detecting address conflicts in a cache memory system
GB2489914B (en) 2011-04-04 2019-12-18 Advanced Risc Mach Ltd A data processing apparatus and method for performing vector operations
US9280342B2 (en) 2011-07-20 2016-03-08 Oracle International Corporation Vector operations for compressing selected vector elements
US20130151822A1 (en) * 2011-12-09 2013-06-13 International Business Machines Corporation Efficient Enqueuing of Values in SIMD Engines with Permute Unit
US9703558B2 (en) 2011-12-23 2017-07-11 Intel Corporation Systems, apparatuses, and methods for setting an output mask in a destination writemask register from a source write mask register using an input writemask and immediate
US9575753B2 (en) * 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files
US9619229B2 (en) * 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4777593A (en) * 1983-12-26 1988-10-11 Hitachi, Ltd. Vector processing apparatus including means for identifying the occurrence of exceptions in the processing of vector elements
US6289433B1 (en) * 1992-03-31 2001-09-11 Transmeta Corporation Superscalar RISC instruction scheduling
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
CN1952911A (zh) * 2005-10-21 2007-04-25 英特尔公司 实现矢量存储器操作
CN101488083A (zh) * 2007-12-26 2009-07-22 英特尔公司 用于转换向量数据的方法、装置和指令

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017107125A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Conflict mask generation
WO2017107124A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Scatter reduction instruction
US10185562B2 (en) 2015-12-24 2019-01-22 Intel Corporation Conflict mask generation
US10191749B2 (en) 2015-12-24 2019-01-29 Intel Corporation Scatter reduction instruction
US10635447B2 (en) 2015-12-24 2020-04-28 Intel Corporation Scatter reduction instruction
US10691454B2 (en) 2015-12-24 2020-06-23 Intel Corporation Conflict mask generation
CN108292269A (zh) * 2015-12-30 2018-07-17 英特尔公司 用于监视地址冲突的计数器
CN115718622A (zh) * 2022-11-25 2023-02-28 苏州睿芯通量科技有限公司 一种arm架构下的数据处理方法、装置及电子设备
CN115718622B (zh) * 2022-11-25 2023-10-13 苏州睿芯通量科技有限公司 一种arm架构下的数据处理方法、装置及电子设备

Also Published As

Publication number Publication date
US9411584B2 (en) 2016-08-09
CN104919416B (zh) 2017-09-05
US20140189308A1 (en) 2014-07-03
KR101767025B1 (ko) 2017-08-09
DE112013005416T5 (de) 2015-07-30
KR20150101996A (ko) 2015-09-04
WO2014105214A1 (en) 2014-07-03
KR20160133016A (ko) 2016-11-21

Similar Documents

Publication Publication Date Title
US10545761B2 (en) Methods, apparatus, instructions and logic to provide permute controls with leading zero count functionality
CN104919416A (zh) 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑
US9696993B2 (en) Instructions and logic to vectorize conditional loops
JP6930702B2 (ja) プロセッサ
CN107729048B (zh) 提供向量压缩和旋转功能的指令和逻辑
KR102512315B1 (ko) 원자적 범위 연산들을 제공하기 위한 명령어들 및 로직
US9411592B2 (en) Vector address conflict resolution with vector population count functionality
CN104915181A (zh) 条件存储器错误帮助抑制
KR102472894B1 (ko) 벡터 패킹된 투플 교차 비교 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
US9459871B2 (en) System of improved loop detection and execution
US9715388B2 (en) Instruction and logic to monitor loop trip count and remove loop optimizations
US10157063B2 (en) Instruction and logic for optimization level aware branch prediction
US9336156B2 (en) Method and apparatus for cache line state update in sectored cache with line state tracker

Legal Events

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