CN108369510A - 用于以无序加载的置换的指令和逻辑 - Google Patents

用于以无序加载的置换的指令和逻辑 Download PDF

Info

Publication number
CN108369510A
CN108369510A CN201680074233.3A CN201680074233A CN108369510A CN 108369510 A CN108369510 A CN 108369510A CN 201680074233 A CN201680074233 A CN 201680074233A CN 108369510 A CN108369510 A CN 108369510A
Authority
CN
China
Prior art keywords
vector
index
instruction
data
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201680074233.3A
Other languages
English (en)
Inventor
E.奥尔德-艾哈迈德-瓦尔
S.赛尔
J.胡
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 CN108369510A publication Critical patent/CN108369510A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride

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)
  • Executing Machine-Instructions (AREA)

Abstract

处理器包含用于执行指令和逻辑以确定指令将要求存储器中从源数据转换的跨越数据的核。跨越数据将要包含要加载到相同寄存器中以用于执行指令的来自源数据中的多个结构的对应索引元素。核还包含用于将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中的逻辑。多个预备向量寄存器要加载有元素的第一索引布局。预备向量寄存器的公共寄存器要加载有元素的第二索引布局。核还包含用于向预备向量寄存器的内容应用置换指令以使来自多个结构的对应索引元素被加载到相应源向量寄存器中的逻辑。

Description

用于以无序加载的置换的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器以及关联的指令集架构的领域,指令集架构当由处理器或其它处理逻辑执行时执行逻辑、数学或其它函数运算。
背景技术
多处理器系统正在变得越来越普遍。多处理器系统的应用包含动态域分区一直到桌面计算。为了利用多处理器系统,要执行的代码可被分成多个线程以便由各种处理实体执行。每个线程可以彼此并行执行。指令当它们在处理器上接收时可被解码成对于在处理器上执行是原生的或者更加原生的项或指令字。处理器可在片上系统中实现。组织成三到五个元素的数组的数据结构可被用在媒体应用、高性能计算应用以及分子动力学应用中。
附图说明
在附图的图中作为示例而非限制示出了实施例:
图1A是按照本公开的实施例用可包含执行指令的执行单元的处理器形成的示范计算机系统的框图;
图1B示出了按照本公开的实施例的数据处理系统;
图1C示出了用于执行文本字符串比较操作的数据处理系统的其它实施例;
图2是按照本公开的实施例可包含执行指令的逻辑电路的处理器的微架构的框图;
图3A示出了按照本公开的实施例的多媒体寄存器中的各种打包数据类型表示;
图3B示出了按照本公开的实施例的可能寄存器中的数据存储格式;
图3C示出了按照本公开的实施例的多媒体寄存器中的各种有符号和无符号的打包数据类型表示;
图3D示出了操作编码格式的实施例;
图3E示出了按照本公开的实施例的具有40位或更多位的另一可能操作编码格式;
图3F示出了按照本公开的实施例的又一可能操作编码格式;
图4A是示出按照本公开实施例的有序流水线和寄存器重命名阶段、无序发布/执行流水线的框图;
图4B是示出按照本公开实施例的要包含在处理器中的有序架构核以及寄存器重命名逻辑、无序发布/执行逻辑的框图;
图5A是按照本公开实施例的处理器的框图;
图5B是按照本公开实施例的核的示例实现的框图;
图6是按照本公开实施例的系统的框图;
图7是按照本公开实施例的第二系统的框图;
图8是按照本公开实施例的第三系统的框图;
图9是按照本公开实施例的片上系统的框图;
图10示出了按照本公开的实施例的可执行至少一个指令的含有中央处理单元和图形处理单元的处理器;
图11是示出按照本公开实施例的IP核的开发的框图;
图12示出根据本公开的实施例,第一类型的指令可如何由不同类型的处理器仿真;
图13示出根据本公开的实施例的对比将源指令集中的二进制指令转换成目标指令集中二进制指令的软件指令转换器的使用的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更详细框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子装置的框图;
图18是根据本公开实施例用于操作或指令的序列置换的逻辑和指令的示例系统的图示;
图19图示了按照本公开实施例执行向量操作的数据处理系统的示例处理器核。
图20是图示按照本公开实施例的示例扩展向量寄存器堆的框图;
图21是根据本公开实施例的数据转换结果的图示;
图22是根据本公开实施例的混合和置换指令的操作的图示;
图23是根据本公开实施例的置换指令的操作的图示;
图24是根据本公开实施例使用对于8个结构的阵列的多个采集的数据转换操作的图示;
图25是根据本公开实施例对于8个结构的阵列的数据转换的朴素操作的图示;
图26是按照本公开实施例使用置换操作执行数据转换的系统的操作的图示;
图27是根据本公开实施例描绘成使用置换操作执行数据转换的系统的操作的更详细视图;
图28是按照本公开实施例使用无序加载和较少置换操作执行数据转换的系统的另外操作的图示;
图29是根据本公开实施例使用置换操作执行数据转换的系统的操作的更详细视图;
图30是按照本公开实施例使用甚至更少的置换操作执行数据转换的系统的示例操作的图示;
图31图示了根据本公开实施例用于执行置换操作以完成数据转换的示例方法;以及
图32图示了根据本公开实施例执行置换操作以完成数据转换的另一示例方法。
具体实施方式
如下描述描述了用于在处理设备上执行操作的置换序列的处理逻辑和指令的实施例。置换序列可以是跨越操作(诸如跨越5)的一部分。此类处理设备可包含无序处理器。在如下描述中,阐述了众多特定细节,诸如处理逻辑、处理器类型、微架构条件、事件、启动(enablement)机制等,以便提供本公开实施例的更透彻理解。然而,本领域技术人员将认识到,没有此类特定细节也可实践实施例。此外,一些众所周知的结构、电路等未详细示出,以避免不必要地使本公开的实施例混淆。
尽管如下实施例参考处理器进行描述,但其它实施例可应用于其它类型集成电路和逻辑器件。本公开实施例的类似技术和教导可应用于可受益于更高流水线吞吐量和改进性能的其它类型电路或半导体器件。本公开实施例的教导可应用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可应用于其中可执行数据操纵或管理的任何处理器和机器。此外,如下描述提供了示例,并且附图为了示出目的示出了各种示例。然而,这些示例不应被理解为限制意义,因为它们仅仅意图提供本公开实施例的示例,而不是提供本公开的实施例的所有可能实现的详尽列表。
尽管以下示例在执行单元和逻辑电路的上下文中描述了指令处置和分布,但本公开的其它实施例可通过存储在机器可读有形介质上的数据或指令实现,所述指令当由机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,与本公开实施例关联的功能体现在机器可执行指令中。指令可用于使可用指令编程的通用或专用处理器执行本公开的步骤。本公开的实施例可提供为计算机程序产品或软件,该产品或软件可包括机器或计算机可读介质,其上存储有可用于编程计算机(或其它电子装置)以执行根据本公开的实施例的一个或更多个操作的指令。更进一步,本公开的实施例的步骤可由包含用于执行所述步骤的固定功能逻辑的特定硬件组件执行,或者由编程的计算机组件和固定功能硬件组件的任何组合执行。
用于对逻辑编程以执行本公开的实施例的指令可被存储在系统中的存储器内,诸如DRAM、高速缓存、闪速存储器或其它存储装置内。更进一步,指令可经由网络或通过其它计算机可读介质分布。从而,机器可读介质可包含用于存储或传送由机器(例如计算机)可读形式的信息的任何机制,但其不限于软盘、光盘、紧凑盘只读存储器(CD-ROM)、以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪速存储器或在因特网上经由电、光、声或其它形式传播信号(例如载波、红外信号、数字信号等)传送信息中使用的有形机器可读存储装置。相应地,计算机可读介质可包含适合于存储或传送由机器(例如计算机)可读形式的电子指令或信息的任何类型有形机器可读介质。
设计从创建到模拟到制造可经过各种阶段。表示设计的数据可用多种方式表示该设计。首先,如在模拟中可能有用的,硬件可使用硬件描述语言或另一功能描述语言表示。附加地,在设计过程的某些阶段,可产生具有逻辑和/或晶体管栅的电路级模型。更进一步,设计在某一阶段可达到用硬件模型表示各种器件的物理布局的数据级。在其中使用一些半导体制造技术的情况下,表示硬件模型的数据可以是规定在用于产生集成电路的掩膜的不同掩膜层上存在或缺乏各种特征的数据。在设计的任何表示中,数据都可存储在任何形式的机器可读介质中。存储器或者磁或光存储装置(诸如盘)可以是机器可读介质,以存储经由调制或以其它方式生成以传送信息的光波或电波传送的此类信息。在传送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重新传送而言,可进行新的拷贝。从而,通信提供商或网络提供商可在有形机器可读介质上至少暂时存储体现本公开实施例的技术的制品,诸如被编码到载波中的信息。
在现代处理器中,可使用若干不同执行单元来处理和执行各种代码和指令。一些指令可能更快地完成,而其它指令可能花了若干时钟周期完成。指令吞吐量越快,处理器的总体性能越好。从而,使许多指令尽可能快地执行会是有利的。然而,可存在具有更大复杂性并且在执行时间和处理器资源方面要求更大的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
当在因特网、文本和多媒体应用中使用更多计算机系统时,已经随时间引入了附加处理器支持。在一个实施例中,指令集可与一个或多个计算机架构关联,包含数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构实现,微架构可包含用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微架构的处理器至少可共享部分公共指令集。例如,Intel® Pentium 4处理器、Intel® Core™处理器以及来自加利福尼亚州,Sunnyvale 的Advanced Micro devices, Inc的处理器实现了几乎相同版本的x86指令集(具有已经对于较新版本被添加的一些扩展),但具有不同的内部设计。类似地,由其它处理器开发公司(诸如ARM Holding, Ltd、MIPS或他们的许可方或采纳方)设计的处理器至少可共享公共指令集的一部分,但可包含不同处理器设计。例如,ISA的相同寄存器架构可使用新或公知的技术在不同微架构中以不同方式实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重新排序缓冲器(ROB)和引退寄存器堆)的一个或更多个动态分配的物理寄存器。在一个实施例中,寄存器可包括一个或更多个寄存器、寄存器架构、寄存器堆或可以或可以不由软件编程器可寻址的其它寄存器集。
指令可包含一个或多个指令格式。在一个实施例中,除了其它之外,指令格式还可指示要规定的各种字段(位数、位的位置等)、要执行的操作以及在其上将执行操作的操作数。在另外实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定的指令格式的指令模板可被定义成具有指令格式字段的不同子集,和/或定义成具有不同解译的给定字段。在一个实施例中,指令可使用指令格式(并且如果定义了,则在那个指令格式的指令模板中的给定一个模板中)表述,并且规定或指示操作以及操作将在其上进行操作的操作数。
科学、金融、自动向量化通用、RMS(识别、挖掘和合成)及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压、语音识别算法和音频操纵)可要求对大量数据项执行相同操作。在一个实施例中,单指令多数据(SIMD)指使得处理器对多个数据元素执行操作的指令的类型。在逻辑上可将寄存器中的位划分成多个固定大小或可变大小数据元素(每个元素表示单独的值)的SIMD技术可使用在处理器中。例如,在一个实施例中,可将64位寄存器中的位组织为包含4个单独16位数据元素的源操作数,每个元素表示单独的16位值。此类型的数据可称为“打包”(packed)数据类型或“向量”数据类型,并且此数据类型的操作数可称为打包数据操作数或向量操作数。在一个实施例中,打包数据项或向量可以是在单个寄存器内存储的打包数据元素的序列,并且打包数据操作数或向量操作数可以是SIMD指令(或“打包数据指令”或“向量指令”)的源或目的地操作数。在一个实施例中,SIMD指令指定要对两个源向量操作数执行的单向量操作,以生成相同或不同大小的具有相同或不同数量的数据元素和以相同或不同的数据元素顺序的目的地向量操作数(也称为结果向量操作数)。
例如由具有包括x86、MMX™、流播SIMD扩展(SSE)、SSE2、SSE3、SSE4.1及SSE4.2指令的指令集的Intel® Core™处理器,诸如ARM Cortex®系列处理器的具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM处理器,以及诸如由中国科学院的计算技术研究所(ICT)开发的龙芯(Loongson)系列处理器的MIPS处理器所采用的SIMD技术已经在应用性能方面实现了相当大的改进(Core™和MMX™是加利福尼亚州Santa Clara的IntelCorporation的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是表示对应数据或操作的源和目的地的常规术语。在一些实施例中,它们可通过具有与描绘的那些名称或功能不同的名称或功能的寄存器、存储器或其它存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域并以此类推。在其它实施例中,两个或更多个SRC和DEST存储区域可对应于相同存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,例如通过将对第一和第二源数据执行的操作的结果写回到用作目的地寄存器的所述两个源寄存器中的一个,源寄存器之一也可充当目的地寄存器。
图1A是根据本公开的实施例的用可包括执行单元以执行指令的处理器形成的示范计算机系统的框图。根据本公开(例如本文描述的实施例中的),系统100可包括诸如处理器102的组件,以采用包括执行用于处理数据的算法的逻辑的执行单元。系统100可表示基于根据加利福尼亚州Santa Clara的Intel Corporation可用的PENTIUM® III、PENTIUM®4、Xeon™、Itanium®、XScale™和/或StrongARM™微处理器的处理系统,尽管也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行从华盛顿Redmond的Microsoft Corporation可得到的Windows™操作系统的某个版本,尽管也可使用其它操作系统(例如,UNIX和Linux)、嵌入式软件和/或图形用户界面。因此,本公开的实施例不限于硬件电路和软件的任何特定组合。
实施例并不限于计算机系统。本公开的实施例可在诸如手持式装置和嵌入式应用的其它装置中使用。手持式装置的一些示例包括蜂窝电话、因特网协议装置、数码相机、个人数字助理(PDA)及手持式PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或可执行根据至少一个实施例的一个或更多个指令的任何其它系统。
计算机系统100可包含处理器102,处理器102可包含一个或多个执行单元108以执行按照本公开一个实施例执行至少一个指令的算法。一个实施例可在单个处理器桌上型计算机或服务器系统的上下文中描述,而其它实施例可包含在多处理器系统中。系统100可以是“集线器”系统架构的示例。系统100可包含用于处理数据信号的处理器102。处理器102可包含复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任何其它处理装置,诸如例如数字信号处理器。在一个实施例中,处理器102可耦合到处理器总线110,其可在处理器102与系统100中的其它组件之间传送数据信号。系统100的元件可执行本领域技术人员众所周知的常规功能。
在一个实施例中,处理器102可包含一级(L1)内部高速缓冲存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在另一实施例中,高速缓冲存储器可驻留在处理器102外部。取决于具体实现和需要,其它实施例也可包含内部和外部高速缓存二者的组合。寄存器堆106可将不同类型的数据存储在各种寄存器中,包含整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器。
执行单元108(包含执行整数和浮点运算的逻辑)也驻留在处理器102中。处理器102也可包含存储某些宏指令的微代码的微代码(ucode)ROM。在一个实施例中,执行单元108可包含处置打包指令集109的逻辑。通过在通用处理器102的指令集中包括打包指令集109,连同执行指令的关联电路,可使用通用处理器102中的打包数据执行由许多多媒体应用使用的操作。从而,通过使用处理器的数据总线的完全宽度来对打包数据执行操作,可加速和更有效地执行许多多媒体应用。这可消除跨处理器的数据总线传输更小数据单元来一次一个数据元素执行一个或更多个操作的需要。
执行单元108的实施例也可用在微控制器、嵌入式处理器、图形装置、DSP以及其它类型逻辑电路中。系统100可包含存储器120。存储器120可实现为动态随机存取存储器(DRAM)装置、静态随机存取存储器(SRAM)装置、闪速存储器装置或其它存储器装置。存储器120可存储由数据信号表示的可由处理器102执行的指令119和/或数据121。
系统逻辑芯片116可耦合到处理器总线110和存储器120。系统逻辑芯片116可包含存储器控制器集线器(MCH)。处理器102可经由处理器总线110与MCH 116通信。MCH 116可提供到存储器120的高带宽存储器路径118,其用于指令119和数据121的存储以及用于图形命令、数据和结构(texture)的存储。MCH 116可在处理器102、存储器120和系统100中的其它组件之间引导数据信号,并在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合到图形控制器112的图形端口。MCH116可通过存储器接口118耦合到存储器120。图形卡112可通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100可使用专有集线器接口总线122将MCH 116耦合到I/O控制器集线器(ICH)130。在一个实施例中,ICH 130可经由本地I/O总线提供到一些I/O装置的直接连接。本地I/O总线可包含用于将外设连接到存储器120、芯片集和处理器102的高速I/O总线。示例可包含音频控制器129、固件集线器(闪速BIOS)128、无线收发器126、数据存储装置124、含有用户输入接口125(其包含键盘接口)的遗留I/O控制器123、串行扩展端口127(诸如通用串行总线(USB))和网络控制器134。数据存储装置124可包括硬盘驱动器、软盘驱动器、CD-ROM装置、闪速存储器装置或其它大容量存储装置。
对于系统的另一实施例,按照一个实施例的指令可与片上系统一起使用。片上系统的一个实施例由处理器和存储器组成。用于一个此类系统的存储器可包含闪速存储器。闪速存储器可位于与处理器和其它系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器的其它逻辑块也可位于片上系统上。
图1B示出了实现本公开的实施例的原理的数据处理系统140。本领域技术人员将容易认识到,本文描述的实施例可通过备选处理系统操作,而不脱离本公开实施例的范围。
按照一个实施例,计算机系统140包括用于执行至少一个指令的处理核159。在一个实施例中,处理核159表示任何类型架构的处理单元,包含但不限于CISC、RISC或VLIW型架构。处理核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桥154以便经由I/O总线153与各种I/O装置通信。此类I/O装置例如可包含但不限于通用异步接收器/传送器(UART)155、通用串行总线(USB) 156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例规定移动、网络和/或无线通信以及可执行包含文本字符串比较操作的SIMD操作的处理核159。处理核159可采用各种音频、视频、成像和通信算法编程,所述算法包含:离散变换,诸如Walsh-Hadamard变换,快速傅里叶变换(FFT)、离散余弦变换(DCT)以及它们的相应逆变换;压缩/解压技术,诸如色彩空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)功能,诸如脉冲译码调制(PCM)。
图1C示出了执行SIMD文本字符串比较操作的数据处理系统的其它实施例。在一个实施例中,数据处理系统160可包含主处理器166、SIMD协处理器161、高速缓冲存储器167和输入/输出系统168。输入/输出系统168可选地可耦合到无线接口169。SIMD协处理器161可执行包含按照一个实施例的指令的操作。在一个实施例中,处理核170可适合于以一个或多个工艺技术的制造,并且通过充分详细地在机器可读介质上表示,处理核170可适合于促进制造所有或部分数据处理系统160(包含处理核170)。
在一个实施例中,SIMD协处理器161包括执行单元162和一组寄存器堆164。主处理器166的一个实施例包括解码器165以识别指令集163中的指令(包含按照一个实施例的指令)以用于由执行单元162执行。在其它实施例中,SIMD协处理器161还包括至少部分解码器165(示出为165B)以解码指令集163中的指令。处理核170还可包含对理解本公开实施例可不必要的附加电路(未示出)。
在操作中,主处理器166执行数据处理指令流,其控制通用类型的数据处理操作(包含与高速缓冲存储器167和输入/输出系统168的交互)。嵌入在数据处理指令流内的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为应该由附连的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。从协处理器总线171,可由任何附连的SIMD协处理器接收这些指令。在此情况下,SIMD协处理器161可接受并执行预期用于它的任何接收的SIMD协处理器指令。
数据可经由无线接口169接收以便由SIMD协处理器指令处理。对于一个示例,语音通信可以以数字信号形式被接收,其可由SIMD协处理器指令处理以重新生成代表语音通信的数字音频样本。对于另一个示例,压缩的音频和/或视频可以数字位流形式被接收,其可由SIMD协处理器指令处理以重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可被集成到单个处理核170中,处理核170包括执行单元162、一组寄存器堆164、以及识别指令集163中的指令(包含按照一个实施例的指令)的解码器165。
图2是按照本公开的实施例的可包含执行指令的逻辑电路的处理器200的微架构的框图。在一些实施例中,可实现按照一个实施例的指令,以对具有字节、字、双字、四字等大小以及诸如单和双精度整数和浮点数据类型的数据类型的数据元素进行操作。在一个实施例中,有序前端201可实现处理器200的一部分,该部分可获得要执行的指令,并且有序前端201准备所述指令以稍后在处理器流水线中进行使用。前端201可包含几个单元。在一个实施例中,指令预获取器226从存储器中获取指令,并将指令馈送到指令解码器228,其又解码或解译这些指令。例如,在一个实施例中,解码器将接收的指令解码成机器可执行的称为“微指令”或“微操作”(也称为microop或uop)的一个或多个操作。在其它实施例中,解码器将指令解析成操作码和对应的数据以及控制字段,它们可由微架构使用以执行按照一个实施例的操作。在一个实施例中,追踪(trace)高速缓存230可将解码的uop汇编成uop队列234中的程序排序的序列或追踪以便执行。当追踪高速缓存230遇到复杂指令时,微代码ROM232提供完成该操作所需的uop。
一些指令可被转换成单个微-op,而其它指令需要几个微-op来完成整个操作。在一个实施例中,如果需要多于四个微-op来完成指令,则解码器228可访问微代码ROM 232以执行指令。在一个实施例中,指令可被解码成小数量的微-op,以便在指令解码器228进行处理。在另一实施例中,指令可被存储在微代码ROM 232内,如果需要若干微-op来完成操作的话。追踪高速缓存230指的是入口点可编程逻辑阵列(PLA),其用来确定针对读取微代码序列的正确微指令指针,以完成来自微代码ROM 232的按照一个实施例的一个或多个指令。在微代码ROM 232完成对指令的微-op进行排序后,机器的前端201可恢复从追踪高速缓存230获取微-op。
无序执行引擎203可准备指令以用于执行。无序执行逻辑具有多个缓冲器,以在指令沿流水线向下并且被调度用于执行时,平滑处理和重新排序指令的流以优化性能。分配器/寄存器重命名器215中的分配器逻辑分配每个uop为了执行而所需要的机器缓冲器和资源。分配器/寄存器重命名器215中的寄存器重命名逻辑将逻辑寄存器重命名到寄存器堆中的条目上。在指令调度器(存储器调度器209、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206)前面,分配器215还为两个uop队列(一个用于存储器操作(存储器uop队列207),并且一个用于非存储器操作(整数/浮点uop队列205))之一中的每个uop分配条目。Uop调度器202、204、206基于其相关性输入寄存器操作数源的准备度和uop完成其操作需要的执行资源的可用性,确定uop何时准备就绪执行。一个实施例的快速调度器202可在主时钟周期的每半个周期上进行调度,而其它调度器可每主处理器时钟周期仅调度一次。调度器对于分派端口进行裁决以调度uop以便执行。
寄存器堆208、210可布置在调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器堆208、210中的每个分别执行整数运算和浮点运算。每个寄存器堆208、210可包含旁路网络,其可向新的相关uop进行旁路或转发尚未写入寄存器堆中的刚刚完成的结果。整数寄存器堆208和浮点寄存器堆210可相互传递数据。在一个实施例中,整数寄存器堆208可被分成两个单独的寄存器堆,一个寄存器堆用于数据的低阶32位,而第二寄存器堆用于数据的高阶32位。浮点寄存器堆210可包含128位宽条目,因为浮点指令通常具有从64位到128位宽的操作数。
执行块211可含有执行单元212、214、216、218、220、222、224。执行单元212、214、216、218、220、222、224可执行指令。执行块211可包含存储微指令需要执行的整数和浮点数据操作数值的寄存器堆208、210。在一个实施例中,处理器200可包括若干执行单元:地址生成单元(AGU) 212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一实施例中,浮点执行块222、224可执行浮点、MMX、SIMD和SSE或其它运算。在又一个实施例中,浮点ALU 222可包含64位×64位浮点除法器以执行除法、平方根和余数微-op。在各种实施例中,涉及浮点值的指令可用浮点硬件处置。在一个实施例中,ALU运算可传到高速ALU执行单元216、218。高速ALU 216、218可以通过时钟周期一半的有效等待时间执行快速运算。在一个实施例中,最复杂的整数操作去到慢速ALU 220,因为慢速ALU220可包括用于长等待时间类型操作的整数执行硬件,如乘法器、位移、标记逻辑和分支处理。存储器加载/存储操作由AGU 212、214执行。在一个实施例中,整数ALU 216、218、220可对64位数据操作数执行整数运算。在其它实施例中,可实现ALU 216、218、220以支持各种数据位大小,包含16、32、128、256等。类似地,可实现浮点单元222、224以支持具有各种宽度位的一系列操作数。在一个实施例中,浮点单元222、224可结合SIMD和多媒体指令对128位宽打包数据操作数进行操作。
在一个实施例中,在父载荷已经完成执行之前,uop调度器202、204、206分派相关操作。由于在处理器200中可推测性地调度和执行uop,故处理器200还可包含处置存储器丢失的逻辑。如果数据加载在数据高速缓存中丢失,则流水线中可存在执行中(in flight)相关操作,其为调度器留下了暂时不正确的数据。重放机制跟踪和重新执行使用不正确数据的指令。可能只需要重放相关操作,并且可允许完成独立操作。处理器的一个实施例的调度器和重放机制也可设计成捕捉用于文本字符串比较运算的指令序列。
术语“寄存器”可指代可用作标识操作数的部分指令的板载处理器存储位置。换而言之,寄存器可以是从处理器的外部可使用的那些寄存器(从编程器的角度而言)。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可存储数据,提供数据,并且执行本文中描述的功能。本文中描述的寄存器可由处理器内的电路使用任何数量的不同技术实现,诸如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含用于打包数据的8个多媒体SIMD寄存器。对于下面的讨论,可将寄存器理解为设计成保持打包数据的数据寄存器,诸如来自加利福尼亚州Santa Clara的IntelCorporation的以MMX技术实现的微处理器中的64位宽MMX™寄存器(在一些实例中也称为“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位宽或其它大小的操作数操作。此示例的打包字格式320可以为128位长,并且包含8个打包字数据元素。每个打包字包含16位的信息。图3A的打包双字格式330可以为128位长,并且包含4个打包双字数据元素。每个打包双字数据元素包含32位的信息。打包四字可以为128位长,并且包含2个打包四字数据元素。
图3B示出根据本公开的实施例的可能寄存器中的数据存储格式。每个打包数据可包括多于一个独立数据元素。示出了三个打包数据格式;打包半精度型(half)341、打包单精度型342和打包双精度型343。打包半精度型341、打包单精度型342和打包双精度型343的一个实施例包含固定点数据元素。对于另一实施例,打包半精度型341、打包单精度型342和打包双精度型343中的一个或更多个可包含浮点数据元素。打包半精度型341的一个实施例可以为128位长,其包含8个16位数据元素。打包单精度型342的一个实施例可以为128位长,并且包含4个32位数据元素。打包双精度型343的一个实施例可以为128位长,并且包含2个64位数据元素。将领会的是,此类打包数据格式可进一步扩展到其它寄存器长度,例如,96位、160位、192位、224位、256位或更多。
图3C示出根据本公开的实施例的在多媒体寄存器中的各种有符号和无符号的打包数据类型表示。无符号的打包字节表示344示出在SIMD寄存器中的无符号的打包字节的存储。每个字节数据元素的信息可存储在针对字节0的位7到位0、针对字节1的位15到位8、针对字节2的位23到位16及最后针对字节15的位120到位127中。因此,在寄存器中可使用所有可用位。此存储布置可增大处理器的存储效率。此外,利用访问的16个数据元素,现在可以并行方式对16个数据元素执行一个操作。有符号的打包字节表示345示出有符号的打包字节的存储。要注意的是,每个字节数据元素的第8位可以是符号指示符。无符号的打包字表示346示出在SIMD寄存器中可如何存储字7到字0。有符号的打包字表示347可类似于无符号的打包字寄存器中的表示346。要注意的是,每个字数据元素的第16位可以是符号指示符。无符号的打包双字表示348显示如何存储双字数据元素。有符号的打包双字表示349可类似于无符号的打包双字寄存器中的表示348。要注意的是,必需的符号位可以是每个双字数据元素的第32位。
图3D示出操作编码(操作码)的实施例。此外,格式360可包括寄存器/存储器操作数寻址模式,其与万维网(www) at intel.com/design/litcentr上从加利福尼亚州圣克拉拉Intel Corporation可获得的“IA-32 Intel架构软件开发员手册第2卷:指令集参考”(IA-32 Intel Architecture Software Developer's Manual Volume 2: InstructionSet Reference)中描述的操作码格式的类型相对应。在一个实施例中,指令可通过字段361和362中的一个或更多个字段编码。可标识直到每指令两个操作数位置,包括直到两个源操作数标识符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和由可选比例-索引-基础和位移字节部分地指定的寄存器到寄存器、存储器到寄存器、寄存器接(by)存储器、寄存器接寄存器、寄存器接中间物、寄存器到存储器寻址。
图3F示出根据本公开的实施例的又一可能操作编码(操作码)格式。64位单指令多数据(SIMD)算术运算可通过协处理器数据处理(CDP)指令被执行。操作编码(操作码)格式380描绘具有CDP操作码字段382和389的一个此类CDP指令。CDP指令的类型,对于另一实施例,操作可通过字段383、384、387和388的一个或更多个字段编码。可标识直到每指令三个操作数位置,包括直到两个源操作数标识符385、390和一个目的地操作数标识符386。协处理器的一个实施例可对8、16、32和64位值进行操作。在一个实施例中,可对整数数据元素执行指令。在一些实施例中,可使用条件字段381,有条件地执行指令。对于一些实施例,源数据大小可由字段383编码。在一些实施例中,可对SIMD字段进行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可由字段384编码。
图4A是根据本公开的实施例的示出有序流水线和寄存器重命名阶段、无序发布/执行流水线的框图。图4B是根据本公开的实施例的示出有序架构核和寄存器重命名逻辑、无序发布/执行流水线(要被包括在处理器中)的框图。图4A中的实线框示出有序流水线,而虚线框示出寄存器重命名、无序发布/执行流水线。类似地,图4B中的实线框示出有序架构逻辑,而虚线框示出寄存器重命名逻辑和无序发布/执行逻辑。
在图4A中,处理器流水线400可包括获取阶段402、长度解码阶段404、解码阶段406、分配阶段408、重命名阶段410、调度(也称为分派或发布)阶段412、寄存器读取/存储器读取阶段414、执行阶段416、写回/存储器写入阶段418、异常处理阶段422及提交阶段424。
在图4B中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示在那些单元之间数据流的方向。图4B显示处理器核490,其包括耦合到执行引擎单元450的前端单元430,并且两者均可耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或备选核类型。在一个实施例中,核490可以是专用核,诸如,例如网络或通信核、压缩引擎、图形核或诸如此类。
前端单元430可包括耦合到指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可耦合到指令转化后备缓冲器(TLB) 436。TLB 436可耦合到指令获取单元438,其耦合到解码单元440。解码单元440可将指令解码,并且生成作为输出的一个或更多个微操作、微代码入口点、微指令、其它指令或其它控制信号,它们可从原始指令解码或者以其它方式反映原始指令或者可从原始指令得到。解码器可使用各种不同机制实现。适合机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,指令高速缓存单元434可还耦合到存储器单元470中的2级(L2)高速缓存单元476。解码单元440可耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可包括耦合到引退单元454和一个或更多个调度器单元456的集合的重命名/分配器单元452。调度器单元456表示任何数量的不同调度器,包括预留站、中央指令窗口等。调度器单元456可耦合到物理寄存器堆单元458。每个物理寄存器堆单元458表示一个或更多个物理寄存器堆,这些寄存器堆中的不同寄存器堆存储一个或更多个不同数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、等,状态(例如,作为要执行的下一指令的地址的指令指针)等。物理寄存器堆单元458可由引退单元454重叠以示出其中可实现寄存器重命名和无序执行的各种方式(例如,使用一个或更多个重排序缓冲器和一个或更多个引退寄存器堆;使用一个或更多个将来文件(file)、一个或更多个历史缓冲器和一个或更多个引退寄存器堆;使用寄存器映射和寄存器池等)。通常,架构寄存器可从处理器外部或者从程序员的角度而言是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器只要如本文中所述存储和提供数据,它们便是适合的。适合寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。引退单元454和物理寄存器堆单元458可耦合到执行集群460。执行集群460可包括一个或更多个执行单元462的集合和一个或更多个存储器存取单元464的集合。执行单元462可执行各种操作(例如,移位、加法、减法、乘法),并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)进行执行。虽然一些实施例可包括专用于特定功能或功能的集合的多个执行单元,但其它实施例可只包括一个执行单元或全部执行所有功能的多个执行单元。调度器单元456、物理寄存器堆单元458和执行集群460示为可能是多个,这是因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器存取流水线,每个流水线具有其自己的调度器单元、物理寄存器堆单元和/或执行集群 - 并且在单独的存储器存取流水线的情况下,可实现其中仅此流水线的执行集群具有存储器存取单元464的某些实施例)。还应理解的是,在使用单独流水线的情况下,一个或更多个这些流水线可以是无序发布/执行,并且其余的流水线是有序的。
存储器存取单元464的集合可耦合到存储器单元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指令集(其中对于较新版本已添加一些扩展);加利福尼亚州Sunnyvale的MIPS Technologies的MIPS指令集;加利福尼亚州Sunnyvale的ARM Holdings的ARM指令集(具有诸如NEON的可选另外扩展))。
应理解的是,核可以以多种方式支持多线程(执行两个或更多个并行的操作或线程的集合)。例如通过包括时间片多线程、同时多线程(其中,单个物理核提供用于物理核在同时进行多线程的每个线程的逻辑核)或其组合,可执行多线程支持。此类组合例如可包括时间片获取和解码及之后的同时多线程,诸如在Intel®超线程技术中一样。
虽然寄存器重命名可在无序执行的上下文中描述,但应理解的是,可在有序架构中使用寄存器重命名。虽然处理器的所示实施例也可包括单独的指令和数据高速缓存单元434/474及共享L2高速缓存单元476,但其它实施例可具有用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存,或多个级的内部高速缓存。在一些实施例中,系统可包括内部高速缓存和可在核和/或处理器外的外部高速缓存的组合。在其它实施例中,所有高速缓存可在核和/或处理器的外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可包括多核处理器。处理器500可包括以通信方式耦合到一个或更多个核502的系统代理510。此外,核502和系统代理510可以通信方式耦合到一个或更多个高速缓存506。核502、系统代理510和高速缓存506可经一个或更多个存储器控制单元552以通信方式耦合。此外,核502、系统代理510和高速缓存506可经存储器控制单元552以通信方式耦合到图形模块560。
处理器500可包括用于将核502、系统代理510和高速缓存506及图形模块560互连的任何适合机制。在一个实施例中,处理器500可包括基于环形的互连单元508以将核502、系统代理510和高速缓存506及图形模块560互连。在其它实施例中,处理器500可包括用于将此类单元互连的任何数量的公知技术。基于环形的互连单元508可利用存储器控制单元552以促进互连。
处理器500可包括存储器层级,该层级包括核内的一个或更多个级的高速缓存、诸如高速缓存506的一个或更多个共享高速缓存单元或耦合到集成存储器控制器单元552的集合的外部存储器(未示出)。高速缓存506可包括任何适合的高速缓存。在一个实施例中,高速缓存506可包括诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存的一个或更多个中间级高速缓存、末级高速缓存(LLC)和/或其组合。
在各种实施例中,一个或更多个核502可执行多线程。系统代理510可包括用于协调和操作核502的组件。系统代理510例如可包括功率控制单元(PCU)。PCU可以是或者包括对于调节核502的功率状态所需的逻辑和组件。系统代理510可包括用于驱动一个或更多个外部连接的显示器或图形模块560的显示引擎512。系统代理510可包括用于针对图形的通信总线的接口514。在一个实施例中,接口514可通过PCI高速 (PCIe)来实现。在其它的实施例中,接口514可通过PCI高速图形(PEG)来实现。系统代理510可包括直接媒体接口(DMI)516。DMI 516可在计算机系统的母板或其它部分上的不同桥之间提供链路。系统代理510可包括用于提供PCIe链路到计算系统的其它元素的PCIe桥518。PCIe桥518可使用存储器控制器520和一致性逻辑522实现。
核502可以以任何适合的方式实现。核502可在架构和/或指令集方面是同构或异构的。在一个实施例中,一些核502可以是有序的,而其它核可以是无序的。在另一实施例中,两个或更多个核502可执行相同指令集,而其它核可只执行该指令集的子集或不同指令集。
处理器500可包括诸如可从加利福尼亚州Santa Clara的Intel Corporation获得的Core™ i3、i5、i7、2 Duo和Quad、Xeon™、Itanium™、XScale™或StrongARM™处理器等通用处理器。处理器500可从诸如ARM Holdings, Ltd、MIPS的另一公司提供。处理器500可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器或诸如此类。处理器500可在一个或更多个芯片上实现。处理器500可以是使用诸如例如BiCMOS、COMS或NMOS的多个处理技术的任何技术的一个或更多个衬底的一部分,和/或可在衬底上实现。
在一个实施例中,高速缓存506的一个给定高速缓存可由核502的多个核共享。在另一实施例中,高速缓存506的一个给定高速缓存可专用于核502之一。高速缓存506到核502的指派可由高速缓存控制器或其它适合机制处理。通过实现给定高速缓存506的时间片,可由两个或更多个核502共享高速缓存506的一个给定高速缓存。
图形模块560可实现集成图形处理子系统。在一个实施例中,图形模块560可包括图形处理器。此外,图形模块560可包括媒体引擎565。媒体引擎565可提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例实现的框图。核502可包括以通信方式耦合到无序引擎580的前端570。核502可通过高速缓存层级503,以通信方式耦合到处理器500的其它部分。
前端570可以以任何适合的方式实现,例如,如上所述部分或完全由前端201实现。在一个实施例中,前端570可通过高速缓存层级503与处理器500的其它部分进行通信。在另外实施例中,前端570可从处理器500的部分获取指令,并且在指令传递到无序执行引擎580时准备处理器流水线中以后要使用的指令。
无序执行引擎580可以以任何适合的方式实现,例如,如上所述部分或完全通过无序执行引擎203来实现。无序执行引擎580可准备从前端570接收到的指令以供执行。无序执行引擎580可包括分配模块582。在一个实施例中,分配模块582可分配处理器500的资源或诸如寄存器或缓冲器的其它资源以执行给定指令。分配模块582可在调度器中进行分配,如存储器调度器、快速调度器或浮点调度器。此类调度器可在图5B中由资源调度器584表示。分配模块582可完全或部分通过结合图2描述的分配逻辑来实现。资源调度器584可基于给定资源的源的准备度和执行指令需要的执行资源的可用性,确定指令何时准备就绪以执行。资源调度器584可例如通过如上所述的调度器202、204、206来实现。资源调度器584可对一个或更多个资源调度指令的执行。在一个实施例中,此类资源可在核502的内部,并且例如可示出为资源586。在另一实施例中,此类资源可在核502的外部,并且例如可由高速缓存层级503访问。资源例如可包括存储器、高速缓存、寄存器堆或寄存器。核502内部的资源可由图5B中的资源586表示。在必需时,可例如通过高速缓存层级503,协调写入资源586或从中读取的值和处理器500的其它部分。在指令是指派的资源时,可将它们置于重新排序缓冲器588中。重新排序缓冲器588可在指令执行时跟踪指令,并且可基于处理器500的任何适合准则,有选择地将其执行重新排序。在一个实施例中,重新排序缓冲器588可标识可独立执行的指令或一系列指令。此类指令或一系列指令可与其它此类指令并行执行。核502中的并行执行可通过任何适合数量的单独执行块或虚拟处理器执行。在一个实施例中,给定核502内的多个虚拟处理器可访问诸如存储器、寄存器和高速缓存的共享资源。在其它实施例中,处理器500内的多个处理实体可访问共享资源。
高速缓存层级503可以以任何适合的方式实现。例如,高速缓存层级503可包括诸如高速缓存572、574的一个或更多个更低或中级高速缓存。在一个实施例中,高速缓存层级503可包括以通信方式耦合到高速缓存572、574的LLC 595。在另一实施例中,LLC 595可在对处理器500的所有处理实体可访问的模块590中实现。在另外的实施例中,模块590可在来自Intel, Inc的处理器的非核心模块中实现。模块590可包括对于执行核502所必需,但可能不在核502内实现的处理器500的部分或子系统。除LLC 595外,模块590例如可包括硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。通过模块590,并且更具体地说,通过LLC 595,可对可用于处理器500的RAM 599进行访问。此外,核502的其它实例可类似地访问模块590。可部分通过模块590,促进核502的实例的协调。
图6-8可示出适合于包含处理器500的示范系统,而图9可示出可包含一个或多个核502的示范性片上系统(SoC)。在本领域已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程设计工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置和各种其它电子装置的其它系统设计和实现也是适合的。一般而言,结合处理器和/或本文所公开的其它执行逻辑的大量系统或电子装置一般可以是适合的。
图6示出了按照本公开实施例的系统600的框图。系统600可包含一个或多个处理器610、615,它们可耦合到图形存储器控制器集线器(GMCH) 620。在图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。外部图形装置660可包含耦合到ICH650的分立图形装置,连同另一外设装置670。
在其它实施例中,在系统600中也可存在附加的或不同的处理器。例如,附加处理器610、615可包含可与处理器610相同的附加处理器、可与处理器610异质或不对称的附加处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。在品质度量谱(包含架构、微架构、热、功耗特性等)方面,在物理资源610、615之间可能存在各种差异。这些差异在处理器610、615之间可有效地将它们自己标明为不对称并且异质。对于至少一个实施例,各种处理器610、615可驻留在同一管芯封装中。
图7示出了按照本公开实施例的第二系统700的框图。如图7中所示,多处理器系统700可包含点对点互连系统,并且可包经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每个可以如一个或更多个处理器610,615一样,是某一版本的处理器500。
虽然图7可示出两个处理器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高速总线的总线,或另一个第三代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中的相同的元件承载相同的附图标记,并且已经从图8中省略了图7的某些方面,以便避免使图8的其它方面混淆。
图8示出处理器770、780可分别包含集成存储器和I/O控制逻辑(“CL”) 872和882。对于至少一个实施例,CL 872、882可包含集成存储器控制器单元,诸如上面结合图5和图7所描述的。此外,CL 872、882也可包含I/O控制逻辑。图8不仅示出了存储器732、734可耦合到CL 872、882,而且I/O装置814也可耦合到控制逻辑872、882。传统I/O装置815可耦合到芯片集790。
图9示出了按照本公开实施例的SoC 900的框图。图5中的相同元件承载相同附图标记。还有,虚线框可表示更高级SoC上的可选特征。互连单元902可耦合到:应用处理器910,其可包含一个或多个核502A-N的集合以及共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;一组或一个或多个媒体处理器920,其可包含集成图形逻辑908、用于提供静止和/或视频相机功能性的图像处理器924、用于提供硬件音频加速的音频处理器926以及用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及用于耦合到一个或多个外部显示器的显示单元940。
图10示出了按照本公开的实施例的可执行至少一个指令的含有中央处理单元(CPU)和图形处理单元(GPU)的处理器。在一个实施例中,执行根据至少一个实施例的操作的指令可由CPU执行。在另一实施例中,指令可由GPU执行。在又一实施例中,指令可通过由GPU和CPU执行的操作组合执行。例如,在一个实施例中,按照一个实施例的指令可被接收和解码以便在CPU上执行。然而,解码指令内的一个或多个操作可由CPU执行,并且结果返回到GPU用于指令的最后引退。相反,在一些实施例中,CPU可充当主处理器,并且GPU充当协处理器。
在一些实施例中,受益于高度并行吞吐量处理器的指令可由GPU执行,而受益于处理器(其受益于深流水线架构)的性能的指令可由CPU执行。例如,图形、科学应用、金融应用和其它并行工作负荷可受益于GPU的性能,并被相应地执行,而更多序列应用(诸如操作系统内核或应用代码)可更适合于CPU。
在图10中,处理器1000包含CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示装置1040、存储器接口控制器1045、MIPI控制器1050、闪速存储器控制器1055、双数据速率(DDR)控制器1060、安全性引擎1065和I2S/I2C控制器1070。其它逻辑和电路可包含在图10的处理器中,包含更多CPU和GPU以及其它外设接口控制器。
至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的代表性数据实现,其当由机器读取时使机器制造执行本文描述的技术的逻辑。称为“IP核”的此类表示可存储在有形机器可读介质(“带”)上,并供应给各种消费者或制造设施,以加载到实际上制造逻辑或处理器的制造机器中。例如,诸如由ARM Holdings,Ltd开发的Cortex™族处理器和中国科学院计算技术研究所(ICT)开发的龙芯IP核的IP核可许可或销售到各种客户或被许可人,如Texas Instruments、Qualcomm、Apple或Samsung,并且在由这些客户或被许可人生产的处理器中实现。
图11示出了按照本公开实施例示出开发IP核的框图。存储装置1100可包含模拟软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可经由存储器1140(例如硬盘)、有线连接(例如因特网)1150或无线连接1160提供给存储装置1100。由模拟工具和模型生成的IP核信息然后可被传送到制造设施1165,其中它可由第三方制造以执行按照至少一个实施例的至少一个指令。
在一些实施例中,一个或多个指令可对应于第一类型或架构(例如x86),并且在不同类型或架构(例如ARM)的处理器上转化或仿真。根据一个实施例,指令因此可在任何处理器或处理器类型(包含ARM、x86、MIPS、GPU)或其它处理器类型或架构上执行。
图12示出了按照本公开实施例,可如何由不同类型的处理器仿真第一类型的指令。在图12中,程序1205含有可与根据一个实施例的指令执行相同或基本上相同功能的一些指令。然而,程序1205的指令可属于与处理器1215不同或不兼容的类型和/或格式,意味着,程序1205中的类型的指令可能不能够由处理器1215本地执行。然而,在仿真逻辑1210的帮助下,程序1205的指令可被转化成可由处理器1215本地执行的指令。在一个实施例中,仿真逻辑可实施在硬件中。在另一实施例中,仿真逻辑可实施在有形、机器可读介质中,其含有将程序1205中的类型的指令转化成由处理器1215本地可执行的类型。在其它实施例中,仿真逻辑可以是固定功能或可编程硬件以及存储在有形、机器可读介质上的程序的组合。在一个实施例中,处理器含有仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器外部,并且可由第三方提供。在一个实施例中,处理器可通过执行在处理器中含有的或与处理器关联的微代码或固件来加载实施在含有软件的有形、机器可读介质中的模拟逻辑。
图13示出了按照本公开的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示出的实施例中,指令转换器可以是软件指令转换器,尽管指令转换器可以用软件、固件、硬件或它们的各种组合实现。图13示出可使用x86编译器1304编译高级语言1302的程序以生成x86二进制代码1306,其可由具有至少一个x86指令集核1316的处理器本地执行。具有至少一个x86指令集核的处理器1316表示可通过兼容执行或以其它方式处理(1) Intel x86指令集核的指令集的实质部分或(2)定向为在具有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的对象代码版本,执行与具有至少一个x86指令集核的Intel处理器基本上相同功能,以便实现与具有至少一个x86指令集核的Intel处理器基本上相同结果的任何处理器。x86编译器1304表示可操作以生成x86二进制代码1306(例如对象代码)的编译器,二进制代码1306可在具有或没有附加连锁处理的情况下在具有至少一个x86指令集核1316的处理器上执行。类似地,图13示出采用高级语言1302的程序可使用备选指令集编译器1308编译以生成备选指令集二进制代码1310,其可由没有至少一个x86指令集核1314的处理器(例如,具有执行加利福尼亚州Sunnyvale的MIPS Technologies的MIPS指令集,和/或执行加利福尼亚州Sunnyvale的ARM Holdings的ARM指令集的核的处理器)本地执行。指令转换器1312可用于将x86二进制代码1306转换成可由没有x86指令集核1314的处理器本地执行的代码。这个转换的代码可能不与备选指令集二进制代码1310相同;然而,转换的代码将完成一般操作,并且由来自备选指令集的指令组成。从而,指令转换器1312表示通过仿真、模拟或任何其它过程,允许不具有x86指令集处理器或核的处理器或其它电子装置执行x86二进制代码1306的软件、固件、硬件或其组合。
图14是按照本公开实施例的处理器的指令集架构1400的框图。指令集架构1400可包含任何适合数量或种类的组件。
例如,指令集架构1400可包含处理实体,诸如一个或多个核1406、1407和图形处理单元1415。核1406、1407可通过任何适合的机制(诸如通过总线或高速缓存)以通信方式耦合到其余指令集架构1400。在一个实施例中,核1406、1407可通过L2高速缓存控制1408以通信方式耦合,L2高速缓存控制1408可包含总线接口单元1409和L2高速缓存1411。核1406、1407和图形处理单元1415可通过互连1410以通信方式彼此耦合,并耦合到指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可使用视频代码1420(其定义其中具体视频信号将被编码和解码以便输出的方式)。
指令集架构1400还可包含任何数量或种类的接口、控制器或用于与电子装置或系统的其它部分对接或通信的其它机制。此类机制例如可促进与外设、通信装置、其它处理器或存储器的交互。在图14的示例中,指令集架构1400可包含液晶显示器(LCD)视频接口1425、订户接口模块(SIM)接口1430、引导ROM接口1435、同步动态随机存取存储器(SDRAM)控制器1440、闪存控制器1445和串行外设接口(SPI)主单元1450。LCD视频接口1425例如可从GPU 1415并且例如通过移动工业处理器接口(MIPI)1490或高清多媒体接口(HDMI)1495向显示器提供视频信号的输出。此类显示器例如可包含LCD。SIM接口1430可提供对或从SIM卡或装置的访问。SDRAM控制器1440可提供对或从诸如SDRAM芯片或模块1460的存储器的访问。闪存控制器1445可提供对或从诸如闪存存储器1465或RAM的其它实例的存储器的访问。SPI主单元1450可提供对或从诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实现诸如802.11的通信标准的无线模块1485的通信模块的访问。
图15是按照本公开实施例的处理器的指令集架构1500的更详细框图。指令架构1500可实现指令集架构1400的一个或多个方面。更进一步,指令集架构1500可示出用于执行处理器内指令的模块和机制。
指令架构1500可包含以通信方式耦合到一个或多个执行实体1565的存储器系统1540。更进一步,指令架构1500可包含以通信方式耦合到执行实体1565和存储器系统1540的高速缓存和总线接口单元(诸如单元1510)。在一个实施例中,将指令加载到执行实体1565可由一个或多个执行阶段执行。此类阶段例如可包含指令预获取阶段1530、双指令解码阶段1550、寄存器重命名阶段1555、发布阶段1560和写回阶段1570。
在一个实施例中,存储器系统1540可包含执行的指令指针1580。执行的指令指针1580可存储标识一批指令内最旧的、未指派的指令的值。最旧的指令可对应于最低程序指令(PO)值。PO可包含唯一数量的指令。此类指令可以是由多个指令串(strand)表示的线程内的单个指令。PO可在排序指令中用于确保代码的正确执行语义。PO可通过诸如评估指令中编码的PO的增量而不是绝对值的机制来重构。此类重构的PO可被称为“RPO”。尽管本文可提到PO,但此类PO可与RPO互换使用。指令串可包含是取决于彼此的数据的指令序列。在编译时间,指令串可由二进制转化器布置。执行指令串的硬件可按根据各种指令的PO的次序执行给定指令串的指令。线程可包含多个指令串,使得不同指令串的指令可取决于彼此。给定指令串的PO可以是指令串中尚未从发布阶段分派执行的最旧的指令的PO。相应地,给定多个指令串的线程,每个指令串包含按PO排序的指令,执行的指令指针1580可存储线程中最旧的——由最低号码示出的——PO。
在另一个实施例中,存储器系统1540可包含引退指针1582。引退指针1582可存储标识最后引退的指令的PO的值。引退指针1582例如可由引退单元454设置。如果尚没有指令引退,则引退指针1582可包含空值。
执行实体1565可包含处理器通过其可执行指令的任何适合数量和种类的机制。在图15的示例中,执行实体1565可包含ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,此类实体可利用在给定地址1569内含有的信息。执行实体1565与阶段1530、1550、1555、1560、1570组合可共同形成执行单元。
单元1510可用任何适合的方式实现。在一个实施例中,单元1510可执行高速缓存控制。在此类实施例中,单元1510从而可包含高速缓存1525。在另外实施例中,高速缓存1525可实现为具有任何适合大小(诸如0、128k、256k、512k、1M或2M字节的存储器)的L2统一高速缓存。在另一、另外的实施例中,高速缓存1525可实现在纠错代码存储器中。在另一实施例中,单元1510可执行到处理器或电子装置的其它部分的总线对接。在此类实施例中,单元1510从而可包含用于通过互连、处理器内总线、处理器间总线或其它通信总线、端口或线路通信的总线接口单元1520。总线接口单元1520可提供对接以便例如执行生成存储器和输入/输出地址,以便在执行实体1565与指令架构1500外部的系统部分之间传送数据。
为了进一步促进其功能,总线接口单元1520可包含用于生成中断和到处理器或电子装置的其它部分的其它通信的中断控制和分布单元1511。在一个实施例中,总线接口单元1520可包含处置针对多个处理核的高速缓存访问和一致性的探听控制单元1512。在另外的实施例中,为了提供此类功能性,探听控制单元1512可包含处置不同高速缓存之间信息交换的高速缓存到高速缓存传送单元。在另一、另外实施例中,探听控制单元1512可包含一个或多个探听过滤器1514,其监视其它高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不用必须直接执行此类监视。单元1510可包含用于同步指令架构1500的动作的任何适合数量的定时器1515。还有,单元1510可包含AC端口1516。
存储器系统1540可包含用于存储对于指令架构1500的处理需要的信息的任何适合的数量和种类的机制。在一个实施例中,存储器系统1540可包含用于存储信息(诸如写入到存储器或寄存器或从存储器或寄存器读回的缓冲器)的载荷存储单元1546。在另一实施例中,存储器系统1540可包含转化后备缓冲器(TLB)1545,其提供了物理地址与虚拟地址之间的地址值的查找。在又一实施例中,存储器系统1540可包含用于促进访问虚拟存储器的存储器管理单元(MMU)1544。在又一实施例中,存储器系统1540可包含预获取器1543,用于在指令实际需要被执行之前从存储器请求此类指令以便减少等待时间。
执行指令的指令架构1500的操作可通过不同阶段执行。例如,使用单元1510指令预获取阶段1530可通过预获取器1543访问指令。检索的指令可被存储在指令高速缓存1532中。预获取阶段1530可实现用于快速环路模式的选项1531,其中执行形成环路的一系列指令,环路足够小以在给定高速缓存内拟合。在一个实施例中,执行此类执行例如可无需从指令高速缓存1532访问附加指令。预获取什么指令的确定例如可由分支预测单元1535进行,单元1535可访问全局历史1536中的执行指示、目标地址1537的指示或确定接下来将执行代码的分支1557中的哪个的返回栈1538的内容。此类分支有可能作为结果预获取。分支1557可通过如下面所描述的其它操作阶段产生。指令预获取阶段1530可提供指令及有关将来指令的任何预测到双指令解码阶段。
双指令解码阶段1550可将接收的指令转化成可执行的基于微代码的指令。双指令解码阶段1550每时钟周期可同时解码两个指令。更进一步,双指令解码阶段1550可将其结果传到寄存器重命名阶段1555。此外,双指令解码阶段1550可从其解码和微代码的最终执行中确定任何结果分支。此类结果可输入到分支1557中。
寄存器重命名阶段1555可将对虚拟寄存器或其它资源的引用转化成对物理寄存器或资源的引用。寄存器重命名阶段1555可包含寄存器池1556中此类映射的指示。寄存器重命名阶段1555可更改所接收的指令,并将结果发送到发布阶段1560。
发布阶段1560可向执行实体1565发布或分派命令。此类发布可按无序方式执行。在一个实施例中,多个指令可在执行之前在发布阶段1560保持。发布阶段1560可包含用于保持此类多个命令的指令队列1561。可基于任何可接受的判据,诸如用于执行给定指令的资源的可用性或适用性,由发布阶段1560向具体处理实体1565发布指令。在一个实施例中,发布阶段1560可重新排序指令队列1561内的指令,使得所接收的第一指令可能不是所执行的第一指令。基于指令队列1561的排序,附加分支信息可被提供给分支1557。发布阶段1560可将指令传到执行实体1565以用于执行。
在执行时,写回阶段1570可将数据写入到寄存器、队列或指令集架构1500的其它结构中,以传递给定命令的完成。取决于在发布阶段1560中布置的指令次序,写回阶段1570的操作可实现要被执行的附加指令。指令集架构1500的执行可由追踪单元1575监视或调试。
图16是按照本公开实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600例如可示出图15的指令架构1500的操作。
执行流水线1600可包含步骤或操作的任何适合的组合。在1605,可进行接下来要执行的分支的预测。在一个实施例中,此类预测可基于先前指令的执行及其结果。在1610,对应于预测的执行分支的指令可被加载到指令高速缓存中。在1615,可获取指令高速缓存中的一个或多个此类指令以便执行。在1620,已经获取的指令可被解码成微代码或更特定的机器语言。在一个实施例中,可同时解码多个指令。在1625,可重新指配解码指令内对寄存器或其它资源的引用。例如,可引用对应物理寄存器替换对虚拟寄存器的引用。在1630,指令可被分派给队列以便执行。在1640,可执行指令。可按任何适合的方式执行此类执行。在1650,可向适合的执行实体发布指令。其中执行指令的方式可取决于执行指令的特定实体。例如,在1655,ALU可执行算术函数。ALU可针对其操作利用单个时钟周期以及两个移位器。在一个实施例中,可采用两个ALU,并且从而在1655可执行两个指令。在1660,可进行结果分支的确定。程序计数器可用于指定分支将进行到其的目的地。1660可在单个时钟周期内执行。在1665,浮点算术可由一个或多个FPU执行。浮点操作可需要执行多个时钟周期,诸如2个到10个周期。在1670,可执行乘法和除法运算。此类运算可在4个时钟周期中执行。在1675,可执行对寄存器或流水线1600其它部分的加载和存储操作。操作可包含加载和存储地址。此类运算可在4个时钟周期中执行。在1680,写回操作可根据需要由1655-1675的结果操作执行。
图17是根据本公开的实施例的用于利用处理器1710的电子装置1700的框图。电子装置1700例如可包括笔记本、超级本、计算机、塔式服务器、机架服务器、刀片服务器、膝上型计算机、桌上型计算机、平板、移动装置、电话、嵌入式计算机或任何其它适合的电子装置。
电子装置1700可包括以通信方式耦合到任何适合数量或种类的组件、外设、模块或装置的处理器1710。此类耦合可通过任何适合种类的总线或接口来实现,如I2C总线、系统管理总线(SMBus)、低引脚计数(LPC)总线、SPI、高清晰音频(HDA)总线、串行高级技术附件(SATA)总线、USB总线(版本1、2、3)或通用异步接收器/传送器(UART)总线。
此类组件例如可包括显示器1724、触摸屏1725、触摸板1730、近场通信(NFC)单元1745、传感器集线器1740、热传感器1746、高速芯片集(EC)1735、可信平台模块(TPM)1738、BlOS/固件/闪存存储器1722、数字信号处理器1760、诸如固态磁盘(SSD)或硬盘驱动器(HDD)的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)1755、诸如USB 3.0摄像头的摄像头1754、或例如以LPDDR3标准实现的低功率双倍数据率(LPDDR)存储器单元1715。这些组件每个可以以任何适合的方式实现。
此外,在各种实施例中,其它组件可通过上面讨论的组件以通信方式耦合到处理器1710。例如,加速计1741、环境光传感器(ALS)1742、罗盘1743和陀螺仪1744可以以通信方式耦合到传感器集线器1740。热传感器1739、风扇1737、键盘1736和触摸板1730可以以通信方式耦合到EC 1735。扬声器1763、耳机1764和麦克风1765可以以通信方式耦合到音频单元1762,音频单元又可以通信方式耦合到DSP 1760。音频单元1762例如可包括音频编解码器和D类放大器。SIM卡1757可以以通信方式耦合到WWAN单元1756。诸如WLAN单元1750和蓝牙单元1752以及WWAN单元1756的组件可以以下一代规格(next ;generation form factor)(NGFF)实现。
图18是根据本公开实施例用于操作或指令的序列置换的逻辑和指令的示例系统1800的图示;本公开的实施例涉及用于执行置换操作的指令和处理逻辑。在一个实施例中,可使用无序加载减少或最小化对于某些数据转换所需的置换操作的数量。在又一实施例中,可通过使用能部分或者全部(通过掩蔽)将索引向量再用为目的地向量的置换操作(允许它实质上担任三源置换指令),来减少对于某些数据转换所需的置换操作的数量。
促使通过置换执行的数据转换的操作可实现指令跨越,其中多个操作被同时应用于结构的不同元素。例如,操作可部分实现跨越5操作,尽管本公开的原理可被应用于不同数量元素上的跨越操作。在一个实施例中,操作可能在相同类型的5个元素上进行。阵列内的每个不同结构可由不同着色或颜色指代,并且给定结构内的每个元素可由其编号(0...4)示出。
更确切地说,当将结构阵列(AOS)数据格式转换成阵列结构(SOA)数据格式时,可出现对于实现跨越操作的需要。此类操作在图21中简要示出。给定存储器中或者高速缓存中的阵列2102,用于5个单独结构的数据可被接连地(无论物理上或者虚拟上)布置在存储器中。在一个实施例中,每个结构(结构1...结构8)可具有与彼此相同的格式。8个结构例如各可以是5元素结构,其中每个元素例如是双精度型。在其它示例中,结构的每个元素可能是浮点型、单精度型或其它数据类型。每个元素可属于相同数据类型。阵列2102可由其存储器中的基本位置r引用。
可执行将AOS转换到SOA的过程。系统1800可以以有效的方式执行此类转换。
作为结果,阵列结构2104可导致:每个阵列(阵列1...阵列4)可被加载到不同目的地中,诸如寄存器或存储器或高速缓存位置。每个阵列例如可包含来自结构的所有第一元素、来自结构的所有第二元素、来自结构的所有第三元素、来自结构的所有第四元素、或者来自结构的所有第五元素。
通过将阵列结构2104布置到不同寄存器中,每个具有来自结构阵列2102的所有结构的所有具体索引的元素,可以以增大的效率在每个寄存器上执行附加操作。例如,在执行代码的循环(loop)中,每个结构的第一元素可能被添加到每个结构的第二元素,或者每个结构的第三元素可能被分析。通过将所有此类元素隔离到单个寄存器或其它位置中,能执行向量操作。此类向量操作使用SIMD技术可能在时钟周期中的单个时间,在阵列的所有元素上执行添加、分析或其它执行。将AOS到SOA格式的变换可允许诸如这些的向量化操作。
返回到图18,系统1800可执行在图21中所示的AOS-SOA转换。在一个实施例中,系统1800可按顺序利用置换操作以便执行AOS-SOA转换。在另外的实施例中,当与使用置换序列的其它系统比较时,系统1800可通过使用能有选择地将索引向量的部分或全部再用为目的地向量的置换功能的特定组合来利用优化的或改进的置换序列。在又一实施例中,系统1800可利用无序(OOO)加载来减少或最小化执行AOS-SOA转换所需的置换数。
AOS-SOA转换可在任何适合的触发器上进行。在一个实施例中,系统1800可在要执行此类转换的指令流1802中的特定指令上执行AOS-SOA转换。在另一实施例中,系统1800可推论出,AOS-SOA应该基于来自指令流1802的另一指令的被提议的执行来执行。例如,在确定要执行跨越操作、向量操作或者跨越数据上的操作时,系统1800可识别出,用被转换成跨越数据并执行AOS-SOA转换的数据将更有效地执行此类执行。系统1800的任何适合的部分都可以确定要执行AOS-SOA转换,诸如前端、解码器、动态转换器,或其它适合的部分,诸如即时解译器或编译器。
在一些系统中,AOS-SOA转换可由采集指令执行。在其它系统中,AOS-SOA转换可由加载、混合和置换指令执行。然而,系统1800可使用置换指令(其减少了所需要的置换指令的总数)而有效地执行转换。
系统1800可包含处理器、SoC、集成电路或其它机制。例如,系统1800可包含处理器1804。尽管处理器1804被示出和描述为图18中的示例,但可使用任何适合的机制。处理器1804可包含用于执行以向量寄存器为目标的向量操作的任何适合的机制,包含在存储在含有多个元素的向量寄存器中的结构上操作的那些机制。在一个实施例中,此类机制可用硬件实现。处理器1804可完全或部分由在图1-17中描述的元件实现。
在处理器1804上要执行的指令可包含在指令流1802中。指令流1802例如可由编译器、即时解译器或者其它适合的机制(其可能被包含在系统1800中或者可能不包含在系统1800中)生成,或者可由导致指令流1802的代码的起草方指派。例如,编译器可获得应用代码,并生成以指令流1802形式的可执行代码。处理器1804可从指令流1802接收指令。指令流1802可以以任何适合的方式加载到处理器1804中。例如,要由处理器1804执行的指令可从存储装置、从其它机器或者从其它存储器(诸如存储器系统1830)加载。指令可到达,并且在常驻存储器(诸如RAM)中可用,其中从存储装置中获取指令以由处理器1804执行。可从例如通过常驻存储器获取指令。在一个实施例中,指令流1802可包含将触发AOS-SOA转换的指令1822。
处理器1804可包含前端1806,其可包含指令获取流水线阶段和解码流水线阶段。前端1806可用获取单元1808接收指令,并使用解码单元1810对来自指令流1802的指令解码。解码的指令可被分派、分配和调度以用于通过流水线的分配阶段(诸如分配器1814)执行,并分配给特定执行单元1816以便执行。要由处理器1804执行的一个或更多个特定指令可被包含在针对由处理器1804的执行而定义的库中。在另一实施例中,特定指令可由处理器1804的具体部分触发。例如,处理器1804可识别指令流1802中用软件执行向量操作的尝试,并且可向执行单元1816的具体单元发布指令。
在执行期间,对数据或附加指令(包含驻留在存储器系统1830中的数据或指令)的访问可通过存储器子系统1820进行。而且,来自执行的结果可被存储在存储器子系统1820中,并且随后可被转储清除到存储器的其它部分。存储器子系统1820例如可包含存储器、RAM或高速缓存层级,其可包含一个或更多个1级(L1)高速缓存或2级(L2)高速缓存,它们中的一些可由多个核1812或处理器1804共享。在由执行单元1816执行之后,指令可由引退单元1818中的写回阶段或引退阶段引退。此类执行流水线的各种部分可由一个或更多个核1812执行。
执行向量指令的执行单元1816可以任何适合的方式实现。在一个实施例中,执行单元1816可包含或者可以通信方式耦合到存储对于执行一个或更多个向量操作所必需的信息的存储器元件。在一个实施例中,执行单元1816可包含用于在跨越5或者其它数据上执行跨越操作的电路。例如,执行单元1816可包含用于在给定时钟周期内同时在多个数据元素上实现指令的电路。
在本公开的实施例中,处理器1804的指令集架构可实现被定义为Intel®高级向量扩展512(Intel® AVX-512)指令的一个或更多个扩展向量指令。处理器1804可隐式地或者通过特定指令的执行和解码识别出,要执行这些扩展向量操作之一。在此类情况下,扩展向量操作可被定向到执行单元1816中的具体一个以便执行指令。在一个实施例中,指令集架构可包含对于512位SIMD操作的支持。例如,由执行单元1816实现的指令集架构可包含32个向量寄存器,其中的每个都是512位宽,以及支持高达512位宽的向量。由执行单元1816实现的指令集架构可包含用于目的地操作数的有效融合和有条件执行的8个专用掩码寄存器。至少一些扩展向量指令可包含对于广播的支持。至少一些扩展向量指令可包含对于嵌入式掩蔽的支持以实现预测。
至少一些扩展向量指令可将相同操作同时应用到存储在向量寄存器中的向量的每个元素。其它扩展向量指令可将相同操作应用到多个源向量寄存器中的对应元素。例如,扩展向量指令可向存储在向量寄存器中的打包数据项的个体数据元素中的每个应用相同操作。在另一示例中,扩展向量指令可以规定,要在两个源向量操作数的相应数据元素上执行单个向量操作以生成目的地向量操作数。
在本公开的实施例中,至少一些扩展向量指令可由处理器核内的SIMD协处理器执行。例如,核1812内的其中一个或更多个执行单元1816可实现SIMD协处理器的功能性。SIMD协处理器可完全或者部分由在图1-17中描述的元件实现。在一个实施例中,在指令流1802内由处理器1804接收的扩展向量指令可被定向到实现SIMD协处理器功能性的执行单元1816。
在执行期间,响应于可受益于跨越数据的操作,系统1800可执行促使AOS-SOA转换1830的指令。此类转换的示例操作可在以下图中示出。
AOS-SOA转换的一些方面可利用置换指令。置换指令可有选择地标识存储在目的地向量中的两个或更多源向量的元素的任何组合。而且,元素的组合可按任何期望的次序存储。为了执行此类操作,可规定索引向量,其中索引向量的每个元素针对目的地向量的元素规定组合源之间的哪个元素将被存储在目的地向量中。
可使用若干形式的置换指令。例如,两个源置换指令(诸如VPERMT2D)可包含1个掩码和3个其它算子或参数。例如可使用VPERMT2D {掩码} 源1, 索引, 源 2调用VPERMT2D,尽管参数的次序可采取任何适合的布置。源1、索引和源2可以全都是相同大小的向量。可使用掩码有选择地写到目的地。从而,如果掩码全都是“1”,则所有结果都将被写,但二进制掩码可被设置成使得有选择地写置换的子集。置换操作将从源1和源2的组合中选择值以写到目的地。源或者索引还可充当置换的目的地。例如,源1可被用作目的地。在其它示例中,VPERMT2可以改写源寄存器上的结果,而VPERMI2可以改写索引寄存器上的结果。索引的元素可以规定源1和源2的哪些元素要被写到目的地。在给定定位处的索引的给定元素可以规定源1和源2中的哪个(哪些)要被写到在给定定位处的目的地中的位置处的目的地。索引的元素可以规定将被写到目的地的源1和源2的组合内的偏移。
例如,考虑对VPERMT2D {掩码 = 01111111} {源1 = zmm0 = {a b c d e f g h}{索引 = zmm31 = {-1 11 6 1 15 10 5 0} {源2 = zmm1 = i j k l m n o p}的调用。源1 (zmm0)的前7个元素将根据掩码来写。更进一步,索引可以规定将被写到目的地的源1和源2的组合内的偏移(从右到左)。组合可包含源2到源1的级联,或者{i j k l m n o p a bc d e f g h}。从而,索引可以规定,将用源2和源1的组合的第0元素或者“h”写目的地的第0元素。索引可以规定,将用源2和源1的组合的第5元素或者“c”写目的地的第1元素。索引可以规定(基于0的编号),将用源2和源1的组合的第10元素或者“n”写目的地的第2元素。索引可以规定(基于0的编号),将用源2和源1的组合的第15元素或者“i”写目的地的第3元素。索引可以规定(基于0的编号),将用源2和源1的组合的第1元素或者“g”写目的地的第4元素。索引可以规定(基于0的编号),将用源2和源1的组合的第6元素或者“b”写目的地的第5元素。索引可以规定(基于0的编号),将用源2和源1的组合的第11元素或者“m”写目的地的第6元素。索引可以规定(基于0的编号),目的地的第7元素不会被写,因为它用“-1”规定。从而,作为结果,置换将得出存储在源1中的{_ m b g i n c h},zmm0寄存器。
不同置换操作提供显著灵活性。例如,在图22中示出的不同置换操作能用于从不同寄存器中选择相同元素(“x”元素),其中跨源的此类元素的位置是已知的。
在本公开中,可示出示例伪代码、指令和参数。然而,在适用时可替换并适用其它伪代码、指令和参数。指令可包含用于示例目的的Intel®指令。
图19图示了按照本公开实施例,执行SIMD操作的数据处理系统的示例处理器核1900。处理器1900可完全或部分由在图1-18中描述的元件实现。在一个实施例中,处理器核1900可包含主处理器1920和SIMD协处理器1910。SIMD协处理器1910可完全或者部分由在图1-17中描述的元件实现。在一个实施例中,SIMD协处理器1910可在图18中图示的执行单元1816之一的至少部分处实现。在一个实施例中,SIMD协处理器1910可包含SIMD执行单元1912和扩展向量寄存器堆1914。SIMD协处理器1910可执行扩展SIMD指令集1916的操作。扩展SIMD指令集1916可包含一个或更多个扩展向量指令。这些扩展向量指令可控制包含与驻留在扩展向量寄存器堆1914中的数据交互的数据处理操作。
在一个实施例中,主处理器1920可包含解码器1922以识别扩展SIMD指令集1916的指令以便由SIMD协处理器1910执行。在其它实施例中,SIMD协处理器1910可包含至少一部分解码器(未示出)以对扩展SIMD指令集1916的指令解码。处理核1900还可包含对理解本公开实施例可能不必要的附加电路(未示出)。
在本公开的实施例中,主处理器1920可执行控制通用类型的数据处理操作(包含与高速缓存1924和/或寄存器堆1926交互)的数据处理指令流。嵌入在数据处理指令流内的可以是扩展SIMD指令集1916的SIMD协处理器指令。主处理器1920的解码器1922可将这些SIMD协处理器指令识别为属于应该由附连的SIMD协处理器1910执行的类型。相应地,主处理器1920可在协处理器总线1915上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。任何附连的SIMD协处理器都可从协处理器总线1915接收这些指令。在图19中图示的示例实施例中,SIMD协处理器1910可接受并执行打算用于在SIMD协处理器1910上执行的任何接收的SIMD协处理器指令。
在一个实施例中,主处理器1920和SIMD协处理器1920可被集成到单个处理器核1900中,所述单个处理器核1900包含执行单元、一组寄存器堆和解码器以识别出扩展SIMD指令集1916的指令。
在图18和19中描绘的示例实现仅仅是说明性的,并不意图在本文针对执行扩展向量操作而描述的机制的实现上进行限制。
图20是图示按照本公开实施例的示例扩展向量寄存器堆1914的框图。扩展向量寄存器堆1914可包含32个SIMD寄存器(ZMM0 - ZMM31),其中的每个都是512位宽。其中每个ZMM寄存器的较低256位被混叠(aliase)到相应256位YMM寄存器。其中每个YMM寄存器的较低128位被混叠到相应128位XMM寄存器。例如,寄存器ZMM0(显示为2001)的位255到0被混叠到寄存器YMM0,并且寄存器ZMM0的位127到0被混叠到寄存器XMM0。类似地,寄存器ZMM1(显示为2002)的位255到0被混叠到寄存器YMM1,寄存器ZMM1的位127到0被混叠到寄存器XMM1,寄存器ZMM2(显示为2003)的位255到0被混叠到寄存器YMM2,寄存器ZMM2的位127到0被混叠到寄存器XMM2,以此类推。
在一个实施例中,扩展SIMD指令集1916中的扩展向量指令可操作在扩展向量寄存器堆1814中的任何寄存器上,包含寄存器ZMM0-ZMM31、寄存器YMM0-YMM15和寄存器XMM0-XMM7。在另一实施例中,在开发Intel® AVX-512指令集架构之前实现的遗留SIMD指令可操作在扩展向量寄存器堆1914中的YMM或XMM寄存器的子集上。例如,在一些实施例中,由一些遗留SIMD指令的访问可被局限于寄存器YMM0-YMM15或寄存器XMM0-XMM7。
在本公开的实施例中,指令集架构可支持访问高达4个指令操作数的扩展向量指令。例如,在至少一些实施例中,扩展向量指令可访问在图20中显示为源或目的地操作数的32个扩展向量寄存器ZMM0 - ZMM31中的任一个。在一些实施例中,扩展向量指令可访问8个专用掩码寄存器中的任一个。在一些实施例中,扩展向量指令可访问作为源或目的地操作数的16个通用寄存器中的任一个。
在本公开的实施例中,扩展向量指令的编码可包含规定要执行具体向量操作的操作码。扩展向量指令的编码可包含标识8个专用掩码寄存器k0-k7中的任一个的编码。所标识的掩码寄存器的每位可掌控向量操作的行为(当它被应用于相应源向量元素或目的地向量元素时)。例如,在一个实施例中,这些掩码寄存器(k1-k7)中的7个可用于有条件地掌控扩展向量指令的按数据元素的计算操作。在此示例中,如果对应的掩码位未设置,则不针对给定向量元素执行该操作。在另一实施例中,掩码寄存器k1-k7可用于有条件地掌控对扩展向量指令的目的地操作数的按元素的更新。在此示例中,如果对应的掩码位未设置,则不用操作结果更新给定目的地元素。
在一个实施例中,扩展向量指令的编码可包含规定要应用于扩展向量指令的目的地(结果)向量的掩蔽类型的编码。例如,此编码可规定融合掩蔽还是零掩蔽被应用于向量操作的执行。如果这个编码规定融合掩蔽,则掩码寄存器中的其对应位未被设置的任何目的地向量元素的值可被保持在目的地向量中。如果这个编码规定零掩蔽,则掩码寄存器中的其对应位未被设置的任何目的地向量元素的值可用目的地向量中的零值取代。在一个示例实施例中,掩码寄存器k0不被用作用于向量操作的预测操作数。在此示例中,将在其它方面选择掩码k0的编码值可替代地选择全1的隐式掩码值,由此有效地禁用掩蔽。在此示例中,掩码寄存器k0可用于采取一个或更多个掩码寄存器作为源或目的地操作数的任何指令。
下面示出了扩展向量指令的语法和使用的一个示例:
VADDPS zmm1, zmm2, zmm3。
在一个实施例中,上面示出的指令将向源向量寄存器zmm2和zmm3的所有元素应用向量相加操作。在一个实施例中,上面示出的指令会将结果向量存储在目的地向量寄存器zmm1中。备选地,下面示出了有条件应用向量操作的指令:
VADDPS zmm1 {k1} {z}, zmm2, zmm3。
在此示例中,指令将向对于其设置掩码寄存器k1中的对应位的源向量寄存器zmm2和zmm3的元素应用向量相加操作。在此示例中,如果设置了{z}修改符,则存储在对应于未设置的掩码寄存器k1中的位的目的地向量寄存器zmm1中的结果向量的元素值可用0值替代。否则,如果未设置{z}修改符,或者如果未规定{z}修改符,则存储在对应于未设置的掩码寄存器k1中的位的目的地向量寄存器zmm1中的结果向量的元素值可被保持。
在一个实施例中,一些扩展向量指令的编码可包含规定使用嵌入式广播的编码。如果对于从存储器加载数据并执行一些计算或数据移动操作的指令包含规定使用嵌入式广播的编码,则可跨有效源操作数的所有元素广播来自存储器的单个源元素。例如,由于在应用于源向量的所有元素的计算中要使用相同标量操作数时,可对于向量指令规定嵌入式广播。在一个实施例中,扩展向量指令的编码可包含规定被打包到源向量寄存器中或者被打包到目的地向量寄存器中的数据元素的大小的编码。例如,编码可以规定每个数据元素是字节、字、双字或者四字等。在另一实施例中,扩展向量指令的编码可包含规定被打包到源向量寄存器中或者被打包到目的地向量寄存器中的数据元素的数据类型的编码。例如,编码可规定数据表示单精度或者双精度整数,或者多个支持的浮点数据类型中的任何类型。
在一个实施例中,扩展向量指令的编码可包含规定采用其以访问源或目的地操作数的存储器地址或者存储器寻址模式的编码。在另一实施例中,扩展向量指令的编码可包含规定作为指令操作数的标量整数或标量浮点数的编码。虽然本文描述了若干特定扩展向量指令和它们的编码,但这些仅仅是在本公开实施例中可实现的扩展向量指令的示例。在其它实施例中,在指令集架构中可实现更少数的或者不同的扩展向量指令,并且它们的编码可包含更多、更少或者不同的信息以控制它们的执行。
在各种应用中可使用被组织在能单独访问的3到5个元素的数组中的数据结构。例如,RGB(红-绿-蓝)是在媒体应用中使用的许多编码方案中的常见格式。存储这种类型信息的数据结构可由3个数据元素(R分量、G分量和B分量)构成,它们被接连存储,并且是相同大小(例如,它们全都可以是32位整数)。对于编码高性能计算应用中的数据公用的格式包含共同表示多维空间内定位的两个或更多坐标值。例如,数据结构可存储表示2D空间内定位的X和Y坐标,或者可存储表示3D空间内定位的X、Y和Z坐标。具有较高数量元素的其它公共数据结构可出现在这些和其它类型应用中。
在一些情况下,这些类型的数据结构可被组织为阵列。在本公开的实施例中,这些数据结构中的多个数据结构可被存储在单个向量寄存器(诸如上面描述的XMM、YMM或ZMM向量寄存器中的一个)中。在一个实施例中,由于此类数据结构内的各个数据元素可能不会彼此紧接地存储在数据结构本身中,这些元素可被重新组织到随后能在SIMD循环中使用的相似元素的向量中。应用可包含以相同方式在一种类型的所有数据元素上操作的指令和以不同方式在不同类型的所有数据元素上操作的指令。在一个示例中,对于各包含RGB颜色空间中的R分量、G分量和B分量的数据结构的阵列,可向阵列(每个数据结构)的每一行中的R分量应用与向量阵列的每一行中的G分量或B分量应用的计算操作不同的计算操作。
在又一示例中,许多分子动力学应用操作在由XYZW数据结构的阵列构成的邻居列表上。在此示例中,每个数据结构都可包含X分量、Y分量、Z分量和W分量。在本公开的实施例中,为了操作在这些类型分量的各个分量上,可使用一个或更多个偶数或奇数向量GET指令来将X值、Y值、Z值和W值从XYZW数据结构的阵列提取到包含相同类型元素的单独向量中。作为结果,其中一个向量可包含所有X值,一个可包含所有Y值,一个可包含所有Z值,并且一个可包含所有W值。在一些情况下,在这些单独向量内的至少一些数据元素上操作之后,应用可包含作为整体在XYZW数据结构上操作的指令。例如,在更新单独向量中的X、Y、Z或W值中的至少一些值之后,应用可包含访问其中一个数据结构以作为整体在XYZW数据结构上检索或者操作的指令。在此情况下,可调用一个或更多个其它指令,以便将XYZW值往回存储在它们的原始格式中。
在本公开的实施例中,可促使AOS到SOA转换的指令可由处理器核(诸如系统1800中的核1812)或者由SIMD协处理器(诸如SIMD协处理器1910)实现,该指令可包含执行偶数向量GET操作或奇数向量GET操作的指令。指令可将提取到含有数据结构的不同数据元素的相应向量中的数据元素存储在存储器中。在一个实施例中,这些指令可用于从数据结构中提取数据元素,其中数据结构的数据元素被一起存储在一个或更多个源向量寄存器内的接连位置中。在一个实施例中,多元素数据结构中的每个都可表示阵列的行。
在本公开的实施例中,向量寄存器内的不同“道”可用于持有不同类型的数据元素。在一个实施例中,每条道可持有单个类型的多个数据元素。在另一实施例中,在单条道中持有的数据元素可以不属于相同类型,但它们可由应用在其上以相同方式操作。例如,一条道可持有X值,一条道可持有Y值,以此类推。在此上下文中,术语“道”可指的是持有要以相同方式对待的多个数据元素的向量寄存器的部分,而不是持有单个数据元素的向量寄存器的部分。在另一实施例中,向量寄存器内的不同“道”可用于持有不同数据结构的数据元素。在此上下文中,术语“道”可指的是持有单个数据结构的多个数据元素的向量寄存器的部分。在此示例中,存储在每条道中的数据元素可属于两个或更多不同类型。在其中向量寄存器是512位宽的一个实施例中,可存在4条128位道。例如,512位向量寄存器内的最低阶128位可被称为第一道,接下来128位可被称为第二道,以此类推。在此示例中,每个128位道可存储两个64位数据元素、四个32位数据元素、八个16位数据元素或四个8位数据元素。在其中向量寄存器是512位宽的另一实施例中,可能存在两个256位道,其中的每个存储相应数据结构的数据元素。在此示例中,每个256位道可存储每个高达128位的多个数据元素。
图21是根据本公开实施例的AOS-SOA转换1830的结果的图示。如上所述,给定存储器中或者高速缓存中的阵列2102,用于5个单独结构的数据可被接连地(无论物理上或者虚拟上)布置在存储器中。在一个实施例中,每个结构(结构1...结构8)可具有与彼此相同的格式。8个结构例如各可以是5元素结构,其中每个元素例如是双精度型。在其它示例中,结构的每个元素可能是浮点型、单精度型或其它数据类型。每个元素可属于相同数据类型。阵列2102可由其存储器中的基本位置r引用。
可执行将AOS转换到SOA的过程。系统1800可以以有效的方式执行此类转换。
作为结果,阵列结构2104可导致:每个阵列(阵列1...阵列4)可被加载到不同目的地中,诸如寄存器或存储器或高速缓存位置。每个阵列例如可包含来自结构的所有第一元素、来自结构的所有第二元素、来自结构的所有第三元素、来自结构的所有第四元素、或者来自结构的所有第五元素。
通过将阵列结构2104布置到不同寄存器中,每个具有来自结构阵列2102的所有结构的所有具体索引的元素,可以以增大的效率在每个寄存器上执行附加操作。例如,在执行代码的循环中,每个结构的第一元素可能被添加到每个结构的第二元素,或者每个结构的第三元素可能被分析。通过将所有此类元素隔离到单个寄存器或其它位置中,能执行向量操作。此类向量操作使用SIMD技术可能在时钟周期中的单个时间,在阵列的所有元素上执行添加、分析或其它执行。将AOS到SOA格式的变换可允许诸如这些的向量化操作。
图22是根据本公开实施例的混合和置换指令的操作的图示。混合和置换指令可用于执行AOS到SOA转换的各个方面。
例如,给定源zmm1和zmm0,每个都具有标识为x坐标、y坐标、z坐标和w坐标元素的寄存器元素,置换指令可用于将x坐标和y坐标元素置换到目的地寄存器中。目的地寄存器可包含源zmm0。因为在源中仅存在7个x坐标和y坐标元素,因此向目的地的最后一个元素的写可被掩蔽掉(掩码 = 0x7F)。索引(存储在zmm31中)可定义来自zmm1和zmm0的组合的元素中的哪些要被存储在zmm0中,以及按什么次序。例如,索引向量可包含用于要存储在目的地寄存器的最低有效定位的x坐标元素以及要被存储在目的地寄存器的下一有效部分的y坐标元素的对应定位。作为结果,可以调用VPERMT2D {0x7F} zmm0,zmm31 zmm1,导致zmm0存储结果(如图22所示)。
在另一示例中,给定源zmm1和zmm0,每个都具有标识为x坐标、y坐标、z坐标和w坐标元素的寄存器元素,置换指令可用于将元素置换到目的地寄存器中。然而,元素的次序可能不是任意可选择的。对于源中的每个相对定位,来自源的元素必须被选择成被写到目的地。掩码可针对源中的给定相对定位定义哪个源将被写到目的地。作为结果,可以调用VBLENDMPD {0x9c} zmm2,zmm0,zmm1,导致zmm2存储结果(如图22所示)。
置换操作可用于执行部分或所有AOS-SOA转换。这些在随后的附图中更详尽地描述。图22图示了在更小比例上的此类操作。
假设目标是获得存储在寄存器zmm0、zmm1、zmm2和zmm3中的x坐标。由于每个寄存器都包含来自多于一个结构的内容,每个寄存器可能包含从存储器加载的内容,并且可含有多于一个x坐标。每个寄存器的内容都可将x坐标(虽然x坐标来自各种结构)包含在每个寄存器中的相同相对定位中。这些定位例如可以是给定索引中的第0和第5位置。相应地,给定不同置换功能的灵活性,单个索引向量(存储在zmm4中)可用于执行各种置换操作。索引向量可以定义,对于任两个源的组合,x值都位于相同位置(索引0、5、8、13)中。索引向量可重复这些值,并且依赖于置换操作的有选择使用(通过掩蔽),从而达到目的地向量的正确合成。
例如,可以调用VPERMT2D以使用索引zmm4将zmm2和zmm3置换到zmm2中。更进一步,因为这两个源寄存器是源的左半部,因此它们的结果可被存储在最终目的地的左半部。相应地,置换操作可用{0xF0}掩蔽,使得zmm2的左半部用来自zmm2和zmm3的x坐标填充。可以调用VPERMI2D以使用索引zmm4将zmm0和zmm1置换到zmm4中。因为这两个源寄存器是源的右半部,因此它们的结果可被存储在最终目的地的右半部。相应地,置换操作可用{0x0F}掩蔽,使得zmm4的右半部用来自zmm0和zmm1的x坐标填充。值得注意的是,zmm2和zmm4中的每个结果都包含按次序来自它们的相应源的x坐标。zmm2和zmm4中的两种结果可被混合。可以调用诸如VLENDMPD的混合操作以将zmm4和zmm2混合到zmm5中。混合可使用{0xF0}的掩码来指示,对于右半部,应该使用zmm4值,而对于左半部,应该使用zmm2值。结果可以是来自在zmm5中排序的源的x坐标的集合。
图23是根据本公开实施例的置换指令的操作的图示。置换指令可用于执行AOS到SOA转换的各个方面。置换指令的操作可以是改进在图22中示出的混合和置换指令的操作,使得可使用两个置换指令,代替两个置换指令和一个混合指令,来完成相同任务。
在一个实施例中,执行AOS到SOA转换的方面的置换指令的操作可依赖于将索引向量再用于存储结果的置换指令的特征。通过有选择地将结果仅存储在一部分索引向量中,并保持索引向量的剩余部分,可保存操作。如上面所论述的,因为给定坐标(诸如x坐标)的相同相对定位可跨多个源存在,反映了要转换的AOS的部分,因此索引向量可能重复它自身的一部分(诸如{13 8 5 0 13 8 5 0}),并且可掩蔽(诸如用0x0F或0xF0)置换操作以达到具有所有x坐标的目的地向量。在此类情况下,可以消除重复的索引向量的那部分,并且可使用针对剩余部分掩蔽的置换操作。相反,可使用掩码,用索引值改写不需要的数据元素。相同写掩码可与置换指令一起使用,其将索引寄存器改写为目的地,从而保持一些数据值并用来自其它源寄存器的数据组合改写不需要的索引值。因而,由VPERMI指令中的“i”指代的置换指令的具体变体可允许存放与索引控制值混合的数据值的写的融合,从而将两源指令有效地转换成三源置换指令。
例如,给定图22的相同源向量zmm0-zmm3以及类似的索引向量{13 8 5 0 13 8 50},用zmm0和zmm1作为源并且zmm4作为索引对VPERM2I进行调用。这个置换指令可将置换结果写到作为目的地的索引向量。置换操作可被掩蔽(用0x0F),以仅写到索引向量zmm4的4个最低有效元素,从而保持现有值。因为zmm4包含其索引的重复(指示源的任何组合的第0、第5、第8和第13位置将包含x坐标),因此对于随后的置换操作,索引向量zmm4的一半将会是足够的。从而,可利用zmm4的一半将可用的知识而再次使用zmm4。置换操作从而可将zmm0和zmm1的组合的第0、第5、第8和第13元素——确切地说来自三个源寄存器的x坐标——拷贝到zmm4(索引向量)的最低有效4个位置。由于zmm4的4个最高有效位置已经在置换操作中掩蔽掉,因此将保持它们。
所得到的zmm4寄存器将充当用于对VPERM2I的另一调用的索引向量源。zmm4寄存器也将是置换操作的目的地。由于用0xF0掩蔽置换操作,其它源zmm2和zmm3可根据zmm4的左半部的值而被置换。从而,将保持zmm4中的最低有效4个位置,其存储来自zmm0和zmm4的x坐标。当zmm4中的最高有效4个位置中的索引值被改写时,将存储来自zmm2和zmm3的附加元素(x坐标)。作为结果,zmm4将包含按次序来自所有4个源的x坐标。这个结果可与图22中的相同,但用两个置换操作而不是两个置换和一个混合操作进行。
这个操作的原理可被应用在下面进一步论述的操作中。
如在图23中所示出的,可转换结构阵列中的不同元素的数组,使得所得到的寄存器包含所有相同类型的元素。这些在图23中被作为x-、y-、z-、w-和v-元素或坐标引用。这些可通过字母引用以避免与在索引向量中规定的偏移数混淆。
图24是对于8个结构的阵列使用多个采集的AOS到SOA转换的操作的图示,其中每个结构包含使用采集操作的5个元素,诸如双精度型。
在图24中示出的转换可示出用采集指令执行转换的传统序列。如与图21一样,顶行可示出其中0...4的枚举可标识每个向量的等效元素的存储器中的结构布局。不同的颜色或着色可指示在存储器中连续布局的不同结构。每个结构元素可以是5个双精度型,得出40个字节。对于总共320字节的数据,可考虑8个此类元素。最后结果将具有在第一寄存器中的所有第0元素,在第二寄存器中的所有第1分量,以此类推。
AOS可通过使用5个采集指令而被加载到寄存器中。可使用5个KNORB操作来设置掩码。
首先,可创建采集索引。可用伪代码创建它们:
对于gather0的索引在AOS中可标识每个“0”元素的相对位置。对于gather1的索引在AOS中可标识每个“1”元素的相对位置。对于gather2的索引在AOS中可标识每个“2”元素的相对位置。对于gather3的索引在AOS中可标识每个“3”元素的相对位置。对于gather5的索引在AOS中可标识每个“4”元素的相对位置。
给定这些,KNORW可被调用以生成掩码,跟随有对VGATHERDPD的5个调用。对VGATHERDPD的每个调用可基于提供给每个调用的索引来采集打包值(在此情况下属于双精度型)。可使用提供的索引(r8+ [ymm5->ymm9]*8)来标识在将从其中采集值并将值加载到相应寄存器中的存储器中的具体位置(来自基址r8,由双精度型的大小定标)。调用可用如下伪代码中表述为:
图25是对于8个结构的阵列的AOS到SOA转换的操作的图示,其中每个结构包含使用采集操作的5个元素,诸如双精度型。在图25中示出的转换可被称为用采集操作的未实验的(naive)实现,因为此类转换可能不像在后面的附图中示出的其它转换那么有效。图25中的操作可实现在图24中示出的转换。
给定存储器中的8个双精度型的AOS,可进行5个加载操作以将数据加载到寄存器中。虽然每个结构可能包含5个元素,但可以以8的倍数进行加载操作。因而,不是将8个结构加载到其中每个寄存器包含未使用空间的5个寄存器中,而是8个结构可被加载到5个寄存器中。一些结构可跨多个寄存器而被拆分。AOS到SOA转换然后可尝试对这8个寄存器的内容分类,使得结构的所有(8个)第一元素在公共寄存器中,结构的所有第二元素在公共寄存器中,以此类推。在其它示例中,其中将处理具有另一数量的元素(诸如4个)的结构,可能将需要4个寄存器来存储结果。
可执行5个附加加载以将数据从存储器加载到寄存器中。然而,可用掩码执行这些加载,使得给定存储器区段的仅其中一些内容被加载到相应寄存器中。可根据那些需要将来自给定分段的正确元素(诸如第一、第二、第三、第四或第五)过滤到寄存器中来选择特定掩码。因为给定寄存器将仅包含相同索引的元素(也就是,所有第一元素、所有第二元素等),因此掩码被选择成仅将该元素过滤到对应寄存器中。在一些情况下,诸如在本图中,可在所有这些加载操作中使用相同掩码。例如,可观察到,对于这些具体结构,掩码{01000010}可唯一标识针对不同存储器分段的不同索引元素(第一元素、第二元素等)。从而,将这个相同掩码应用于从存储器加载的原始存储器分段将得出索引元素的应用。然后将该掩码应用于适当的寄存器可拷贝所需元素(也就是,第一、第二或其它元素)。
对于不同掩码和源组合可重复相同过程,直到寄存器各填充有相应元素(第一元素或第二元素,以此类推)。可用具有第二掩码的5个加载、具有第三掩码的5个加载和具有第四掩码的5个加载,重复该过程,以实现正确的加载组合。结果可以是,每个寄存器仅填充有结构的原始阵列的第一元素、第二元素、第三元素、第四元素或第五元素中的相应元素。然而,给定寄存器内的元素可能不以它们在原始阵列中排序的相同方式排序。
相应地,可执行若干置换操作以将寄存器内容重新排序成匹配结构阵列的原始次序。例如,可执行5个置换操作。根据需要,可使用临时寄存器。可针对每个置换需要单独的索引向量以提供原始阵列的次序。作为结果,可根据原始阵列的次序重新排序每个寄存器的内容。结果可以是导致SOA的转换的AOS。阵列可在每个相应寄存器中表示。结构可以是阵列的组合。
总的来说,图25的操作可包含25个移动或加载操作,连同5个置换。下面示出了针对图25的示例伪代码。
图26是按照本公开实施例使用置换操作执行转换的系统1800的操作的图示。可使用相同AOS源。图26中采用置换指令的操作可比在图25中示出的采用许多移动操作的操作更有效。
首先,阵列的8个结构可被加载(不对齐)到之前示出的5个寄存器中。寄存器可包含mm0...mm4。此过程可采取5个加载操作。要置换的其中一些数据可被加载到另一寄存器中。那个寄存器然后用索引向量被部分改写。索引向量可使用一半的可用空间。产生结果的置换操作将用掩码执行,使得具有原始数据元素的那一半不被改写,而是相反被保持。这可用VPERMI指令执行,并且可使用其索引向量参数作为目的地向量。然后,使用与写掩码相同的掩码将索引加载到索引向量寄存器,使得仅索引向量寄存器中的索引值被改写。
将这种技术使用在用5个加载从存储器加载到每个寄存器中的数据上,其中跨寄存器保持原始次序,可能需要总共14个置换操作来执行AOS-SOA转换。为了执行这14个置换操作,可能需要总共13个不同索引向量和3个不同掩码。
图27是根据本公开实施例在图26中描绘成使用置换操作执行转换的系统1800的操作的更详细视图。图27还图示了一些索引向量的创建,其中索引向量包含要被用作用于置换的参数的偏移以及要保持的一些数据。如在图27中所示出的,可转换结构阵列中的不同元素的数组,使得所得到的寄存器包含所有相同类型的元素。这些在图27中被作为x-、y-、z-、w-和v-元素或坐标引用。这些可通过字母引用以避免与在索引向量中规定的偏移数混淆。前面图26中的转换等效于这些,但图26中的“0”元素已经被指派为“x”元素,“1”元素被指派为“y”元素,以此类推。
图27中的系统1800的操作可基于有选择地改写索引向量参数的分量的一些置换操作的能力。通过有选择地改写索引向量的部分,索引向量可继续充当索引向量,并且包含作为基线的附加源信息。用于掩蔽索引向量的写的相同掩码可在下一置换中用于掩蔽置换的操作。可再次使用索引。图23中示出了此类置换指令的操作。图27中的系统1800的操作可比在图26中示出的操作更有效。
索引向量可被初始化为:
例如,使用mm7索引向量,mm7可被创建为mm3到mm2中的置换。作为结果,mm7可合并来自这些寄存器的“w”和“v”元素。
寄存器mm2可使用向量索引mm6与mm1置换,将结果存储到mm6中。作为结果,mm6可合并来自这些寄存器的“x”和“y”元素。
因为寄存器mm2已经将其“x”、“y”、“w”和“v”元素置换到其它位置中,所以它仅需要保留其“z”元素。相应地,寄存器mm2可既充当“z”元素的源并用其它索引值加载,又可充当用于随后置换的索引向量。尤其,它可充当用于置换操作的索引向量,其中“z”元素将被合并。可获得效率,其中寄存器mm2不需要充当置换中的典型源,但可作为实际存在的第三源被添加上去用于另一置换操作以合并来自另两个向量的“z”元素。例如,mm2可用标识mm3和mm4中的“z”元素位置的偏移值加载。寄存器mm2可用其位置(在其它方面不持有“z”元素)中的索引向量加载。随后,mm2可被用作置换来自mm3和mm4的“z”元素的索引向量。置换可具有匹配存储在mm2中的索引向量元素的写掩码,诸如{0xB0}。然后,来自mm4和mm3的“z”元素可被存储到mm2中,改写索引元素,但保持已经在mm2内的“z”元素。
寄存器mm0和mm1可与mm5中的索引向量置换,以将其中的“v”和“w”元素合并到mm5中。所得到的寄存器mm5本身可与mm7置换,这包含来自mm2和mm3的“v”和“w”的合并。这种置换可用新索引向量mm13执行。然而,mm13可能未大到足以持有来自4个原始源寄存器的所有“v”和“w”元素。相应地,桥接原始mm2-mm3的“v”和“w”集合可被丢弃,但在其它置换操作中合并。可用将结果存储回到mm5中的置换指令执行结果。
寄存器mm7和mm4可与mm9中的新索引向量置换,以将其中的“v”和“w”元素合并到mm9中。具有“v”和“w”元素的该寄存器mm9可包含桥接从mm5中丢失的原始mm2-mm3的“v”和“w”元素组合。更进一步,mm9和mm5可各包含从其它寄存器中丢失的“v”和“w”元素。相应地,这些寄存器可根据不同索引向量置换两次,以返回具有所有“v”元素或所有“w”元素的寄存器。例如,mm9和mm5可由索引向量mm11置换,将所有“v”元素存储在mm11中。在另一示例中,mm9和mm5可由索引向量mm10置换,将所有“w”元素存储到mm10中。这些可被拷贝回至在完成转换时所需的mm0...mm4的原始寄存器形式。
寄存器mm3和mm4可被置换以获得“z”元素。这些可根据mm2的内容置换,如上所示,mm2本身可能已经被置换成保持“z”元素。更进一步,mm2可能已经用引用来自mm3和mm4的“z”元素的索引值填充在不包含“z”元素的索引中。相应地,mm3和mm4可用mm2作为其索引进行置换,并将结果存储回到mm2中。而且,置换可用掩码执行,其中掩码(0xB0)保护在mm2中已经存在的“z”元素。更进一步,掩码还可保护在mm2中未使用的索引元素以从mm3或mm4中获得“z”元素。实际上,这些索引元素这样一来在置换结束时,mm2可包含从原始mm2、mm3和mm4合并的“z”元素。更进一步,mm2仍可保留两个索引元素以指示与mm1和mm0的随后置换中的定位以获得它们的“z”元素。
所得到的mm2可包含从在原始mm2、mm3和mm4上的置换操作合并的“z”元素。更进一步,mm2可包含用于标识mm1和mm0中“z”元素的定位的索引。从而,mm2可被用作用于mm1和mm0置换的向量索引,以合并来自这些附加寄存器的“z”元素。置换可基于mm2内的索引和“z”元素的位置来应用掩码(0xBD)。掩码的结果可以是,现有“z”元素被保持,而指示mm1和mm0中“z”元素位置的索引用此类“z”元素改写。结果可以是用来自原始阵列的“z”元素填充mm2。然而,“z”元素的次序可能不匹配在原始阵列中所呈现的次序。可在mm2上用向量索引调用置换操作以对其中的“z”元素重新排序。所得到的mm2可以是“z”阵列。这些可被拷贝回至在完成转换时所需的mm0...mm4的原始寄存器。
如上面所论述的,mm6可包含从mm1和原始mm2置换的“x”和“y”元素。更进一步,可使用mm8中的新向量索引,从mm0和mm6置换“x”和“y”元素。该结果可被存储在mm8中。当mm8没有用于存储来自原始mm1、mm2和mm0的所有“x”和“y”元素的空间时,结果可以从原始mm2的第二半中省略“x”和“y”元素。然而,这些可从单独置换功能中的mm6恢复,如下面所描述。
寄存器mm3可被转换成用于与mm4和mm6“x”和“y”元素置换操作使用的索引向量。然而,使用对于索引向量值的其它定位,mm3仍可保留它自己的“x”和“y”元素。加载或移动功能可被掩蔽(0x39),以仅编辑mm3中的非“x”和非“y”元素。在其它方面可从新索引向量mm15加载索引向量值。结果仍可作为mm3引用。
所得到的mm3可被用作用于针对于“x”和“y”元素的mm4和mm6的置换的索引向量和源。可使用相同掩码(0x39)来执行将置换写回到mm3中,使得来自mm4和mm6的“x”和“y”元素可被合并到mm3中(在之前充当索引值的位置处)。此版本的mm3可包含来自原始mm4、原始mm3和mm2的原始第二半的“x”和“y”元素。
同时,mm8可包含来自其它原始寄存器内容的“x”和“y”元素。相应地,mm3和mm8可用两个不同的置换操作置换,每个都具有它自己的索引,以得出“x”元素阵列和“y”元素阵列。寄存器内容根据需要可被拷贝回到mm0...mm4的原始寄存器。
相应地,AOS-SOA转换可以是完整的。
执行这种转换的伪代码可被规定为:
图28是按照本公开实施例使用无序加载和较少置换操作执行转换的系统1800的另外操作的图示。图28中的系统1800的操作可扩增在图27中示出的操作。
图28中的系统1800的操作可基于将数据从阵列以无序方式加载到寄存器中。这种加载可不同于在图27中以及其它转换示例和实施例中示出的加载。该加载可以是无序的,在于一旦第一寄存器用来自阵列的内容加载,下一寄存器就可能用与之前加载的内容不毗连的内容加载。在一个实施例中,可针对寄存器加载内容,其中内容在结构的第一相应元素处开始。
例如,结构阵列可包含8个结构,每个结构具有5个元素,其在图28中指代为“4 3 21 0”。加载操作可加载8个元素。从而,给定加载操作能加载整个结构和另一结构的一部分。在转换的先前示例中,随后的加载操作从先前加载操作在其处停止的那点加载内容。然而,在一个实施例中,可针对前4个加载从每个结构中的相同相对元素加载内容。作为结果,在加载的内容中可存在间隙。确切地说,元素“3”和“4”每隔一个结构被中断。中断的这些元素替代地可被集体地加载到单个寄存器中。
作为结果,mm0至mm3可具有同样的相对索引。可取决于结构和阵列的具体大小而使用其它加载方案。然而,如果它们被设计成使得多个寄存器在加载之后包含相同的同样相对索引,则每个都可根据图28的教导执行。因为多个寄存器包含相同的同样相对索引,因此置换操作数可被减少。虽然图27使用14个置换操作来执行,但图26可使用10个置换操作完成相同转换。然而,加载操作数可能需要被增加以完成在图28中示出的原始加载。每个结构的跳过的“4”和“5”元素可要求此类附加加载操作。例如,可能需要总共8个加载。
图29是根据本公开实施例在图28中描绘成使用置换操作执行转换的系统1800的操作的更详细视图。元素在图29中被作为x-、y-、z-、w-和v-元素或坐标引用。这些可通过字母引用以避免与在索引向量中规定的偏移数混淆。前面图28中的转换等效于这些,但图28中的“0”元素已经被指派为“x”元素,“1”元素被指派为“y”元素,以此类推。
为了执行加载,可执行没有掩蔽的4个加载。阵列的前8个元素可使用加载操作被加载到mm0。从而,mm0可包含包括“z y x v w z y x”的不同结构的元素。可调用不对齐加载,以加载阵列的第三结构的前5个元素和第四结构的前3个元素。可调用另一加载,以加载阵列的第五结构的前5个元素和第六阵列的前3个元素。可调用又一加载,以加载阵列的第七结构的前5个元素和第八结构的前3个元素。这些中的每个(mm0...mm3)可包含包括“z yx v w z y x”的不同结构的元素。
加载还可包含加载在上面描述的OOO加载中跳过的元素。这些包含阵列中每偶数结构的元素“w”和“v”。这些可用4个加载操作加载,其中每个加载操作使用掩码来标识包含丢失的“w”和“v”元素的阵列分段的部分。可对mm4进行加载操作。
置换数量可被简化,因为mm0、mm1、mm2和mm3在其中各具有布置在相同相对位置处的相同元素。相应地,索引向量(诸如定义为 “12 8 5 0 12 8 5 0”的mm9)可以定义mm0、mm1、mm2和mm3中任一对内的“x”元素的相应位置。而且,该索引向量可在置换期间被有选择地改写,以允许它成为对于随后置换的源。
例如,mm0和mm1可被置换成使得将其中的“x”元素合并到mm9的右半部中。可通过使用诸如(0x0F)的掩码来进行有选择的写。mm9的左半部可维持对于“x”元素的向量索引值,其可能被用在mm0、mm1、mm2和mm3的任何组合中。从而,所得到的mm9可被再次用作用于置换的向量索引和实际存在的源,以将来自mm2和mm3的“x”元素合并回到mm9中。置换可使用掩码(0xF0)有选择地写到mm9的左半部,从而保持来自先前置换操作的“x”的之前写的元素。结果可以是,mm9包含完整的“x”元素阵列。这用两个置换操作、向量索引和两个掩码完成。
针对“x”元素在mm0、mm1、mm2和mm3上执行的过程可针对“y”元素和“z”元素在mm0、mm1、mm2和mm3上重复,从而得出完整的“y”元素和“z”元素阵列。每个此类过程可要求两个置换操作和向量索引。用于每个过程的向量索引可以是唯一的,其中每个向量索引标识寄存器内的“y”和“z”元素的相应位置。虽然每个此类过程可能还要求两个掩码,但曾用于“x”置换操作的相同掩码可被再用于“y”和“z”置换操作。
可以重复针对“x”、“y”和“z”元素在mm0、mm1、mm2和mm3上执行的过程,但将“v”和“w”值合并到一个寄存器中。用于置换功能的向量索引可以标识“v”和“w”(分别是4和5)的位置。作为结果,mm4可包含来自4个结构的“v”和“w”分量,而在mm0...mm3上执行的置换功能的结果(例如mm5)可包含来自这些寄存器内的结构的“v”和“w”分量。相应地,mm4和mm5可用两个单独VPERM指令和两个索引来置换,每个标识寄存器组合内的“v”和“w”的位置。一个此类置换可得出“v”元素阵列,而另一置换可得出“w”元素阵列。
数据转换从而可以是完整的。
执行这种转换的伪代码可被规定为:
图30是按照本公开实施例使用甚至更少的置换操作来执行数据转换的系统1800的示例操作的图示。在图28-29中示出的操作通过在置换之前通过以具体方式布置数据来减少所需的置换操作的数量而更有效地进行;类似地,在图30中示出的操作可通过在置换之前通过以又一种方式布置数据来减少所需的加载和置换操作的数量而更有效地可进行。在一个实施例中,可通过加载向量寄存器中带有间隙的数据来加载数据,以减少总体的加载和数据置换操作。虽然在图30中示出了具体示例数量和种类的间隙,但可使用其它。
在一个实施例中,数据最初可被加载到寄存器中以便进行带有间隙的数据转换,该间隙与在其最终位置中的某些元素的向量定位对齐。这可使用6个移动或加载操作(VMOVUPS—来自存储器或高速缓存,不对寄存器之间的移动计数,因为这些具有显著较少的等待时间)来执行。这些可使用掩码来完成间隙和偏移。这可比在图28-29中需要的加载操作少。
如图30中所示,数据可从阵列加载到6个寄存器中。在mm0和mm1结尾处的间隙可被舍弃。相应地,额外寄存器mm5可能被需要以处理最后两个元素的溢出。而且,在对应于数据转换之后的其最终定位的加载之后,间隙可引起mm2中的“2”元素的对齐。由于这个元素已经被加载在其最终位置中,因此置换没必要用于抽取用于在数据转换之后将持有“2”元素的阵列的这个元素。置换操作仍可被应用于合并来自mm3和mm4的“2”元素以及来自mm1和mm0的那些元素。
在mm2用其它寄存器置换以将其中的“0”、“1”、“3”和“4”元素合并到其它寄存器之后,mm2可用于充当用于置换操作的向量索引和实际存在的源以合并来自mm0、mm1、mm3和mm4的“2”元素。寄存器mm2可用标识这些其它寄存器中“2”元素的位置的向量索引值来加载。mm2中的已经设置的“2”元素可通过掩蔽保持,而在合并期间,向量索引元素可用从其它寄存器写的“2”元素回收。
如图30所示,mm5在初始加载之后包含“4”和“3”元素的单个实例。mm5中的剩余空间可用于填充mm0...mm4组合中的“4”和“3”的相对位置的索引。从而,mm5可能充当用于这些其它寄存器的置换的向量索引和实际存在的源。结果可被存储在mm5本身内,其被有选择地写以保持“4”和“3”元素,同时改写已经使用的索引值。
在先前图中示出的向量置换操作可被应用于合并各个寄存器内的相应标识的元素,从而得到阵列。
执行这种转换的伪代码可被规定为:
vmovups zmm9, zmmword ptr [r8+0x130] //将最后的“3”和“4”加载到mm9中
vmovups zmm10, zmmword ptr [r8] //将最低的8个元素加载到mm10
vmovups zmm13, zmmword ptr [r8+0x38]
//以第二个“1”开始将8个元素加载到mm13
vmovups zmm7, zmmword ptr [r8+0x70]
//以第三个“4”开始将8个元素加载到mm7
vmovups zmm5, zmmword ptr [r8+0xb0]
//以第五个“2”开始将8个元素加载到mm5
vmovapd zmm9{k4}, zmmword ptr [rip+0x79a8]
//用索引加载mm9,保存现有“3”和“4”
vmovups zmm6, zmmword ptr [r8+0xf0]
//以第7个“0”开始将8个元素加载到mm6
vpermi2pd zmm9{k4}, zmm13, zmm7
//根据mm9中的索引置换来自mm7和mm13的“3”和“4”
//保持mm9中的“3”和“4”
vmovaps zmm12, zmm10
//保存mm10到mm12
vpermt2pd zmm12, zmm4, zmm7
//根据mm4中的索引置换mm7和mm12中的值
vmovapd zmm7{k3}, zmmword ptr [rip+0x79fb]
//从mm7创建索引向量,保存未置换的值
vpermi2pd zmm7{k3}, zmm10, zmm13
//根据mm7,将来自mm13和mm10的值置换到mm7中
//保持mm7中的现有元素
vmovapd zmm10{k2}, zmmword ptr [rip+0x7a2b]
//从mm10创建索引向量,保存未置换的值
vmovapd zmm13{k2}, zmmword ptr [rip+0x7a61]
//从mm13创建索引向量,保存未置换的值
vmovapd zmm7{k1}, zmmword ptr [rip+0x7a97]
//从mm7创建索引向量,保存未置换的值
vpermi2pd zmm10{k2}, zmm5, zmm6
//根据mm10中的索引将mm5和mm6置换到mm10中,
//保持mm10中的现有元素
vpermi2pd zmm13{k2}, zmm5, zmm6
//根据mm13中的索引将mm5和mm6置换到mm13中,
//保持mm13中的现有元素
vpermi2pd zmm7{k1}, zmm5, zmm6
//根据mm7中的索引将mm5和mm6置换到mm7中,
//保持mm7中的现有元素
vmovaps zmm8, zmm10 //保存mm10到mm8
vmovaps zmm11, zmm12 //保存mm12到mm11
vpermt2pd zmm8, zmm3, zmm9
//根据标识需要置换的元素的位置的新向量置换mm8和mm9
vpermt2pd zmm10, zmm2, zmm9
//根据标识需要置换的元素的位置的新向量置换mm8和mm9
vpermt2pd zmm11, zmm1, zmm13
//根据标识需要置换的元素的位置的新向量置换mm11和mm13
vpermt2pd zmm13, zmm0, zmm12
//根据标识需要置换的元素的位置的新向量置换mm13和mm12
图31图示了根据本公开实施例用于执行置换操作以完成AOS到SOA转换的示例方法3100。方法3100可由在图1-30中示出的任何适合的元件实现。方法3100可由任何适合的标准发起,并且可在任何适合的点发起操作。在一个实施例中,方法3100可在3105发起操作。方法3100可包含比图示的那些步骤更多或更少的步骤。而且,方法3100可按与下面图示的那些次序不同的次序执行其步骤。方法3100可终止于任何适合的步骤。而且,方法3100可在任何适合的步骤重复操作。方法3100可执行与方法3100的其它步骤并行或者与其它方法的步骤并行的任何其步骤。更进一步,方法3100可执行多次以执行要求需要被转换的跨越数据的多个操作。
在3105,在一个实施例中,可加载指令,并且在3110,可对指令解码。
在3115,可以确定指令要求数据的AOS-SOA转换。此类数据可包含跨越数据。在一个实施例中,跨越数据可包含跨越5数据。该指令可被确定成要求此类数据,因为要执行在该数据上的向量操作。数据转换可产生采取适当格式的数据,使得可在时钟周期中同时向一堆数据的每个元素应用向量化操作。该指令确切地说可标识,要执行AOS-SOA转换,或者可从期望中推论以执行需要AOS-SOA的指令。
在3120,要转换的阵列可被加载到寄存器中。在一个实施例中,阵列中的结构可被加载到寄存器中,使得尽可能多的寄存器具有相同元素布局。例如,“1”元素全都在相同的相对定位中,“2”元素全都在相同的相对定位中,等等。加载操作可用掩码执行。加载操作可从在其它方面将已经被加载的每隔一个寄存器中断绝某些元素。这些可被称为过剩元素。对于每隔一个寄存器,过剩元素可以是相同的。
在3125,可使用掩码加载操作,将过剩元素加载到公共寄存器中。因而,可执行大量加载操作。此公共寄存器可具有与带有公共元素布局的寄存器不同的元素布局。
在3130,可针对公共元素布局生成索引向量。可创建标识用于给定元素的公共元素布局中的相对定位的索引向量。该索引向量可被用作用于置换功能的部分源和索引向量以合并给定元素。在3135,可使用这些索引向量在具有公共布局的寄存器上执行置换。3135可根据需要重复,以生成与过剩元素当中的那些公共布局不同的公共布局内的元素阵列。这些生成的阵列可表示数据转换的部分输出。
在3140,可生成公共寄存器和过剩元素中间的元素的索引向量。索引向量也可充当实际存在的源。在3145,可在来自3135的各种适当结果和公共寄存器的组合上执行置换。过剩元素当中的元素可被合并成阵列。这些生成的阵列可表示数据转换的剩余输出。
在3150,可执行在不同寄存器上的执行。由于给定寄存器将与向量指令一起使用以便执行,可并行在每个元素上执行。必要时可以存储结果。在3155,可以确定是否要对相同转换的数据执行随后的向量执行。如果是,则方法3100可返回3150。否则,方法3100可继续进行3160。
在3160,可以确定对于其它跨越5数据是否需要附加执行。如果是,则方法3100可继续进行3120。否则,在3165,可使指令引退。方法3100可以可选地重复或终止。
图32图示了根据本公开实施例用于执行置换操作以完成AOS到SOA转换的另一示例方法3200。方法3200可由在图1-30中示出的任何适合的元件实现。方法3200可由任何适合的标准发起,并且可在任何适合的点发起操作。在一个实施例中,方法3200可在3205发起操作。方法3200可包含比图示的那些步骤更多或更少的步骤。而且,方法3200可按与下面图示的那些次序不同的次序执行其步骤。方法3200可终止于任何适合的步骤。而且,方法3200可在任何适合的步骤重复操作。方法3200可执行与方法3200的其它步骤并行或者与其它方法的步骤并行的任何其步骤。更进一步,方法3200可执行多次以执行要求需要被转换的跨越数据的多个操作。
在3205,在一个实施例中,可加载指令,并且在3210,可对指令解码。
在3215,可以确定指令要求数据的AOS-SOA转换。此类数据可包含跨越数据。在一个实施例中,跨越数据可包含跨越5数据。该指令可被确定成要求此类数据,因为要执行在该数据上的向量操作。数据转换可产生采取适当格式的数据,使得可在时钟周期中同时向一堆数据的每个元素应用向量化操作。该指令确切地说可标识,要执行AOS-SOA转换,或者可从期望中推论以执行需要AOS-SOA的指令。
在3220,要转换的阵列可准备以加载到寄存器中。可鉴于数据的最后转换,评估阵列到寄存器的映射。可标识一个或更多个元素,它们最初能被加载到在给定位置处的给定向量寄存器中,其匹配将包含数据转换之后的元素的相同定位和向量寄存器。在3225,可执行加载操作以将阵列加载到寄存器中,使得标识的元素被加载到指定寄存器和定位。此类加载操作可能要求在各种寄存器中移位数据或者留下间隙,使得发生对齐。在3230,可执行置换操作以将来自每个寄存器的给定元素合并到单个寄存器中。这些元素阵列可被生成,并用于向量执行。然而,对齐的元素可能不要求置换操作。
在3250,可执行在不同寄存器上的执行。由于给定寄存器将与向量指令一起使用以便执行,可并行在每个元素上执行。必要时可以存储结果。在3255,可以确定是否要对相同转换的数据执行随后的向量执行。如果是,则方法3200可返回3250。否则,方法3200可继续进行3260。
在3260,可以确定对于其它跨越5数据是否需要附加执行。如果是,则方法3200可继续进行3220。否则,在3265,可使指令引退。方法3200可以可选地重复或终止。
本文公开的机制的实施例可以用硬件、软件、固件或此类实现方法的组合来实现。本公开的实施例可实现为在包括至少一个处理器、存储系统(包含易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置的可编程系统上执行的计算机程序或程序代码。
程序代码可应用于输入指令以执行本文描述的功能并生成输出信息。输出信息可以以已知方式应用于一个或多个输出装置。为了此申请的目的,处理系统可包含具有处理器的任何系统,处理器诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可用高级面向过程或面向对象的编程语言实现,以与处理系统通信。程序代码也可用汇编语言或机器语言实现(如果期望的话)。实际上,本文描述的机制在范围上不限于任何具体编程语言。在任何情况下,语言都可以是编译语言或解译语言。
至少一个实施例的一个或多个方面可由存储在表示处理器内各种逻辑的机器可读介质上的代表性指令实现,这些指令当由机器读取时使机器制造执行本文描述的技术的逻辑。称为“IP核”的此类表示可存储在有形、机器可读介质上,并供应给各种消费者或制造设施,以加载到实际上制造逻辑或处理器的制造机器中。
此类机器可读存储介质可包含但不限于由机器或装置制造或形成的制品的非暂态、有形布置,包含存储介质,诸如硬盘、任何其它类型盘,包含软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑盘可重写(CD-RW)以及磁光盘、半导体器件,诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡或适合于存储电子指令的任何其它类型介质。
相应地,本公开的实施例还可包含非暂态、有形机器可读介质,其含有指令或含有设计数据(诸如硬件描述语言(HDL),其定义本文描述的结构、电路、设备、处理器和/或系统特征)。此类实施例也可称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令集。例如,指令转换器可转化(例如使用静态二进制转化、动态二进制转化,包含动态编译)、变形、仿真或以其它的方式将指令转换成要由核处理的一个或多个其它指令。指令转换器可用软件、硬件、固件或它们的组合实现。指令转换器可以在处理器上、在处理器外或者部分在处理器上且部分在处理器外。
从而,公开了用于执行根据至少一个实施例的一个或多个指令的技术。虽然已经在附图中描述和示出了某些示范实施例,但要理解的是,此类实施例仅仅是说明性的并且不对其它实施例进行约束,并且此类实施例不限于所示出和描述的特定构造和布置,因为本领域技术人员在学习本公开时可想到各种其它修改。在诸如其中增长快速并且进一步进步不容易预见的此类的技术领域中,所公开的实施例在布置和细节上可容易地修改(如通过实现技术进步所促进的)而并不脱离本公开的原理或所附权利要求书的范围。
本公开的一些实施例包含处理器。处理器可包含接收指令的前端、对指令解码的解码器、执行指令的核以及使指令引退的引退单元。与以上任何实施例组合时,核可包含确定指令将要求在存储器中从源数据转换的跨越数据的逻辑。与以上任何实施例组合时,跨越数据将包含要加载到相同寄存器中以用于执行指令的来自源数据中的多个结构的对应索引元素。与以上任何实施例组合时,核包含将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中的逻辑。与以上任何实施例组合时,多个预备向量寄存器要加载有元素的第一索引布局。与以上任何实施例组合时,所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局。与以上任何实施例组合时,核包含向预备向量寄存器的内容应用置换指令以使来自多个结构的对应索引元素被加载到相应源向量寄存器中的逻辑。与以上任何实施例组合时,所述核进一步包含在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令的逻辑。与以上任何实施例组合时,所述核进一步包含基于元素的所述第一索引布局创建索引向量的逻辑,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素。与以上任何实施例组合时,所述核进一步包含有选择地将第一置换指令的结果存储在所述索引向量中的逻辑,所述第一置换指令在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容。与以上任何实施例组合时,所述核进一步包含有选择地保持所述索引值的索引以便随后使用所述索引向量的逻辑。与以上任何实施例组合时,所述核进一步包含有选择地保持用于第二置换指令的索引向量的索引的逻辑。与以上任何实施例组合时,核进一步包含应用第二置换指令的逻辑,所述第二置换指令带有所述索引向量的所保持的索引以指示要置换的所述公共向量寄存器以及第三预备向量寄存器的元素。与以上任何实施例组合时,所述跨越数据要包含8个向量寄存器,每个向量包含与其它向量对应的5个元素。与以上任何实施例组合时,8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,所述核进一步包含创建要与置换指令一起使用的6个索引向量以得出所述源向量寄存器的内容的逻辑。
本公开的一些实施例可包含一种系统。所述系统可包含接收指令的前端、对指令解码的解码器、执行指令的核以及使指令引退的引退单元。与以上任何实施例组合时,核可包含确定指令将要求在存储器中从源数据转换的跨越数据的逻辑。与以上任何实施例组合时,跨越数据将包含要加载到相同寄存器中以用于执行指令的来自源数据中的多个结构的对应索引元素。与以上任何实施例组合时,核包含将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中的逻辑。与以上任何实施例组合时,多个预备向量寄存器要加载有元素的第一索引布局。与以上任何实施例组合时,所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局。与以上任何实施例组合时,核包含向预备向量寄存器的内容应用置换指令以使来自多个结构的对应索引元素被加载到相应源向量寄存器中的逻辑。与以上任何实施例组合时,所述核进一步包含在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令的逻辑。与以上任何实施例组合时,所述核进一步包含基于元素的所述第一索引布局创建索引向量的逻辑,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素。与以上任何实施例组合时,所述核进一步包含有选择地将第一置换指令的结果存储在所述索引向量中的逻辑,所述第一置换指令在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容。与以上任何实施例组合时,所述核进一步包含有选择地保持所述索引值的索引以便随后使用所述索引向量的逻辑。与以上任何实施例组合时,所述核进一步包含有选择地保持用于第二置换指令的索引向量的索引的逻辑。与以上任何实施例组合时,核进一步包含应用第二置换指令的逻辑,所述第二置换指令带有所述索引向量的所保持的索引以指示要置换的所述公共向量寄存器以及第三预备向量寄存器的元素。与以上任何实施例组合时,所述跨越数据要包含8个向量寄存器,每个向量包含与其它向量对应的5个元素。与以上任何实施例组合时,8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,所述核进一步包含创建要与置换指令一起使用的6个索引向量以得出所述源向量寄存器的内容的逻辑。
本公开的一些实施例可包含一种设备。该设备可包含用于接收指令、对指令解码以及执行指令的部件。与以上任何实施例组合时,该设备可包含用于确定指令将要求在存储器中从源数据转换的跨越数据的部件。与以上任何实施例组合时,跨越数据将包含要加载到相同寄存器中以用于执行指令的来自源数据中的多个结构的对应索引元素。与以上任何实施例组合时,该设备可包含用于将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中的部件。与以上任何实施例组合时,多个预备向量寄存器要加载有元素的第一索引布局。与以上任何实施例组合时,所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局。与以上任何实施例组合时,该设备可包含用于向预备向量寄存器的内容应用置换指令以使来自多个结构的对应索引元素被加载到相应源向量寄存器中的部件。与以上任何实施例组合时,该设备可包含用于在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令的部件。与以上任何实施例组合时,该设备可包含用于基于元素的所述第一索引布局创建索引向量的部件,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素。与以上任何实施例组合时,该设备可包含用于有选择地将第一置换指令的结果存储在所述索引向量中的部件,所述第一置换指令在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容。与以上任何实施例组合时,该设备可包含用于有选择地保持所述索引值的索引以便随后使用所述索引向量的部件。与以上任何实施例组合时,该设备可包含用于有选择地保持用于第二置换指令的索引向量的索引的部件。与以上任何实施例组合时,该设备可包含用于应用第二置换指令的部件,所述第二置换指令带有所述索引向量的所保持的索引以指示要置换的所述公共向量寄存器以及第三预备向量寄存器的元素。与以上任何实施例组合时,所述跨越数据要包含8个向量寄存器,每个向量包含与其它向量对应的5个元素。与以上任何实施例组合时,8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,该设备可包含用于创建要与置换指令一起使用的6个索引向量以得出所述源向量寄存器的内容的部件。
本公开的一些实施例可包含一种方法。该方法可包含接收指令、对指令解码以及执行指令。与以上任何实施例组合时,该方法可包含确定指令将要求在存储器中从源数据转换的跨越数据。与以上任何实施例组合时,跨越数据将包含要加载到相同寄存器中以用于执行指令的来自源数据中的多个结构的对应索引元素。与以上任何实施例组合时,该方法可包含将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中。与以上任何实施例组合时,多个预备向量寄存器要加载有元素的第一索引布局。与以上任何实施例组合时,所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局。与以上任何实施例组合时,该方法可包含向预备向量寄存器的内容应用置换指令以使来自多个结构的对应索引元素被加载到相应源向量寄存器中。与以上任何实施例组合时,该方法可包含在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令。与以上任何实施例组合时,该方法可包含基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素。与以上任何实施例组合时,该方法可包含有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容。与以上任何实施例组合时,该方法可包含有选择地保持所述索引值的索引以便随后使用所述索引向量。与以上任何实施例组合时,该方法可包含有选择地保持用于第二置换指令的索引向量的索引。与以上任何实施例组合时,该方法可包含应用第二置换指令,所述第二置换指令带有所述索引向量的所保持的索引以指示要置换的所述公共向量寄存器以及第三预备向量寄存器的元素。与以上任何实施例组合时,所述跨越数据要包含8个向量寄存器,每个向量包含与其它向量对应的5个元素。与以上任何实施例组合时,8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。与以上任何实施例组合时,该方法可包含创建要与置换指令一起使用的6个索引向量以得出所述源向量寄存器的内容。

Claims (21)

1.一种处理器,包括:
前端,用于接收指令;
解码器,用于对所述指令解码;
核,用于执行所述指令,所述核包含:
第一逻辑,用于确定所述指令将要求在存储器中从源数据转换的跨越数据,所述跨越数据用于包含要加载到相同寄存器中以用于执行所述指令的来自所述源数据中的多个结构的对应索引元素;
第二逻辑,用于将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中;其中:
多个所述预备向量寄存器要加载有元素的所述第一索引布局;以及
所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局;
第三逻辑,用于向所述预备向量寄存器的内容应用置换指令以使来自所述多个结构的对应索引元素被加载到相应源向量寄存器中;以及
引退单元,用于使所述指令引退。
2.如权利要求1所述的处理器,其中所述核进一步包含:第四逻辑,其用于在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令。
3.如权利要求1所述的处理器,其中所述核进一步包含:
第四逻辑,用于基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素;
第五逻辑,用于有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令用于在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容;
第六逻辑,用于有选择地保持所述索引值的索引以便随后使用所述索引向量。
4.如权利要求1所述的处理器,其中所述核进一步包含:
第四逻辑,用于基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素;
第五逻辑,用于有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令用于在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容;
第六逻辑,用于有选择地保持用于第二置换指令的所述索引向量的索引;以及
第七逻辑,用于应用第二置换指令,其中带有所述索引向量的所保持的索引以指示要被置换的所述公共向量寄存器以及第三预备向量寄存器的元素。
5.如权利要求1所述的处理器,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。
6.如权利要求1所述的处理器,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。
7.如权利要求1所述的处理器,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
所述核进一步包含:第四逻辑,其用于创建要与置换指令一起使用的6个索引向量以得出所述源向量寄存器的内容。
8.一种系统,包括:
前端,用于接收指令;
解码器,用于对所述指令解码;
核,用于执行所述指令,包含:
第一逻辑,用于确定所述指令将要求在存储器中从源数据转换的跨越数据,所述跨越数据用于包含要加载到相同寄存器中以用于执行所述指令的来自所述源数据中的多个结构的对应索引元素;
第二逻辑,用于将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中;其中:
多个所述预备向量寄存器要加载有元素的所述第一索引布局;以及
所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局;
第三逻辑,用于向所述预备向量寄存器的内容应用置换指令以使来自所述多个结构的对应索引元素被加载到相应源向量寄存器中;以及
引退单元,用于使所述指令引退。
9.如权利要求8所述的系统,其中所述核进一步包含:第四逻辑,其用于在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令。
10.如权利要求8所述的系统,其中所述核进一步包含:
第四逻辑,用于基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素;
第五逻辑,用于有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令用于在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容;
第六逻辑,用于有选择地保持所述索引值的索引以便随后使用所述索引向量。
11.如权利要求8所述的系统,其中所述核进一步包含:
第四逻辑,用于基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素;
第五逻辑,用于有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令用于在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容;
第六逻辑,用于有选择地保持用于第二置换指令的所述索引向量的索引;以及
第七逻辑,用于应用第二置换指令,其中带有所述索引向量的所保持的索引以指示要被置换的所述公共向量寄存器以及第三预备向量寄存器的元素。
12.如权利要求8所述的系统,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。
13.如权利要求8所述的系统,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。
14.如权利要求8所述的系统,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
所述核进一步包含:第四逻辑,其用于创建要与置换指令一起使用的6个索引向量以得出所述源向量寄存器的内容。
15.一种方法,在处理器内包括:
接收指令;
对所述指令解码;
执行所述指令,包含:
确定所述指令将要求在存储器中从源数据转换的跨越数据,所述跨越数据用于包含要加载到相同寄存器中以用于执行所述指令的来自所述源数据中的多个结构的对应索引元素;
将源数据加载到带有元素的第一索引布局和元素的第二索引布局的多个预备向量寄存器中;其中:
多个所述预备向量寄存器要加载有元素的所述第一索引布局;以及
所述预备向量寄存器的公共寄存器要加载有元素的所述第二索引布局;以及
向所述预备向量寄存器的内容应用置换指令以使来自所述多个结构的对应索引元素被加载到相应源向量寄存器中。
16.如权利要求15所述的方法,进一步包括:在完成源数据到跨越数据的转换时在一个或更多个源向量寄存器上执行所述指令。
17.如权利要求15所述的方法,进一步包括:
基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素;
有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令用于在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容;
有选择地保持所述索引值的索引以便随后使用所述索引向量。
18.如权利要求15所述的方法,其中所述核进一步包含:
基于元素的所述第一索引布局创建索引向量,元素的所述第一索引布局带有索引以指示要存储两个预备向量寄存器的哪些元素;
有选择地将第一置换指令的结果存储在所述索引向量中,所述第一置换指令在第一预备向量寄存器与第二预备向量寄存器之间置换元素的所述第一索引布局中的内容;
有选择地保持用于第二置换指令的所述索引向量的索引;以及
应用第二置换指令,其中带有所述索引向量的所保持的索引以指示要置换的所述公共向量寄存器以及第三预备向量寄存器的元素。
19.如权利要求15所述的方法,其中:
所述跨越数据要包含8个向量寄存器,每个向量用于包含与其它向量对应的5个元素;以及
8个置换操作要被应用于所述预备向量寄存器的内容以得出所述相应源向量寄存器的内容。
20.如权利要求15所述的方法,其中:
所述跨越数据要包含8个向量寄存器,每个向量包含与其它向量对应的5个元素;以及
2个置换操作要被应用于所述公共向量寄存器的内容以得出所述相应源向量寄存器的内容。
21.一种设备,包括用于执行如权利要求15-20中任一项所述的方法的部件。
CN201680074233.3A 2015-12-18 2016-11-15 用于以无序加载的置换的指令和逻辑 Pending CN108369510A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/975390 2015-12-18
US14/975,390 US20170177345A1 (en) 2015-12-18 2015-12-18 Instruction and Logic for Permute with Out of Order Loading
PCT/US2016/061950 WO2017105709A1 (en) 2015-12-18 2016-11-15 Instruction and logic for permute with out of order loading

Publications (1)

Publication Number Publication Date
CN108369510A true CN108369510A (zh) 2018-08-03

Family

ID=59057275

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680074233.3A Pending CN108369510A (zh) 2015-12-18 2016-11-15 用于以无序加载的置换的指令和逻辑

Country Status (5)

Country Link
US (1) US20170177345A1 (zh)
EP (1) EP3391193A4 (zh)
CN (1) CN108369510A (zh)
TW (1) TW201723812A (zh)
WO (1) WO2017105709A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022032476A1 (zh) * 2020-08-11 2022-02-17 厦门雅基软件有限公司 网页游戏的数据处理方法、装置、电子设备及计算机可读存储介质

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
EP3080668B1 (de) * 2013-12-09 2017-06-14 dSPACE digital signal processing and control engineering GmbH Verfahren zur beeinflussung eines steuerprogramms eines steuergeräts
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US10838734B2 (en) * 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6446198B1 (en) * 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US7725678B2 (en) * 2005-02-17 2010-05-25 Texas Instruments Incorporated Method and apparatus for producing an index vector for use in performing a vector permute operation
US7783860B2 (en) * 2007-07-31 2010-08-24 International Business Machines Corporation Load misaligned vector with permute and mask insert
CN104025038A (zh) * 2011-12-23 2014-09-03 英特尔公司 用于执行置换操作的装置和方法
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US8959275B2 (en) * 2012-10-08 2015-02-17 International Business Machines Corporation Byte selection and steering logic for combined byte shift and byte permute vector unit

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022032476A1 (zh) * 2020-08-11 2022-02-17 厦门雅基软件有限公司 网页游戏的数据处理方法、装置、电子设备及计算机可读存储介质

Also Published As

Publication number Publication date
EP3391193A1 (en) 2018-10-24
US20170177345A1 (en) 2017-06-22
TW201723812A (zh) 2017-07-01
EP3391193A4 (en) 2019-08-21
WO2017105709A1 (en) 2017-06-22

Similar Documents

Publication Publication Date Title
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN104919416B (zh) 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑
CN103793201B (zh) 提供向量压缩和旋转功能的指令和逻辑
TWI731892B (zh) 用於以通道為基礎的跨步儲存操作之指令及邏輯
CN105453071B (zh) 用来提供向量族群计数功能的方法、设备、指令和逻辑
CN105359129B (zh) 用于提供用于基因组测序和比对的族群计数功能的方法、装置、指令以及逻辑
CN107003921A (zh) 具有有限状态机控制的可重配置测试访问端口
CN108369513A (zh) 用于加载-索引-和-收集操作的指令和逻辑
CN108292215A (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369516A (zh) 用于加载-索引和预取-分散操作的指令和逻辑
TWI720056B (zh) 用於設置多重向量元素操作之指令及邏輯
CN108292293A (zh) 用于得到多个向量元素操作的指令和逻辑
CN108292229A (zh) 用于重新出现的相邻聚集的指令和逻辑
CN108351835A (zh) 用于高速缓存控制操作的指令和逻辑
TWI738679B (zh) 處理器、運算系統及用以執行運算操作之方法
CN108292232A (zh) 用于加载索引和分散操作的指令和逻辑
CN108369510A (zh) 用于以无序加载的置换的指令和逻辑
CN108351784A (zh) 用于在乱序处理器中进行有序处理的指令和逻辑
CN106575219A (zh) 针对用于处理运算的向量格式的指令和逻辑技术领域
CN108369518A (zh) 用于位字段寻址和插入的指令和逻辑
CN108351785A (zh) 用于部分减少操作的指令和逻辑
CN108369571A (zh) 用于偶数和奇数向量get操作的指令和逻辑
CN107003839A (zh) 用于移位和乘法器的指令和逻辑
CN108431770A (zh) 用于加速集合运算的硬件内容关联数据结构
CN107077421A (zh) 用于页表游走改变位的指令和逻辑

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20180803

WD01 Invention patent application deemed withdrawn after publication