CN117083596A - 用于绝对差总和的指令和逻辑 - Google Patents

用于绝对差总和的指令和逻辑 Download PDF

Info

Publication number
CN117083596A
CN117083596A CN202280025004.8A CN202280025004A CN117083596A CN 117083596 A CN117083596 A CN 117083596A CN 202280025004 A CN202280025004 A CN 202280025004A CN 117083596 A CN117083596 A CN 117083596A
Authority
CN
China
Prior art keywords
vector
processor
offset
instruction
sad
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
CN202280025004.8A
Other languages
English (en)
Inventor
D·艾加瓦尔
M·艾斯皮格
R·凡伦天
M·查尼
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 CN117083596A publication Critical patent/CN117083596A/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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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]
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Advance Control (AREA)
  • Power Sources (AREA)

Abstract

在实施例中,处理器包括:取得电路,该取得电路用于取得指令,该指令包括绝对差总和(SAD)指令;解码电路,该解码电路用于对SAD指令进行解码;以及执行电路,该执行电路用于在经解码的SAD指令的执行期间基于多个输入向量来生成SAD输出向量,该SAD输出向量包括多个绝对差值。其他实施例被描述以及被要求保护。

Description

用于绝对差总和的指令和逻辑
技术领域
实施例总体上涉及计算机处理器。更具体地,实施例涉及当由处理器或其他处理逻辑执行时执行绝对差总和操作的处理逻辑、微处理器和相关联的指令集体系结构。
背景技术
指令集或指令集体系结构(instruction set architecture,ISA)是计算机体系结构中与编程有关的部分,并且可包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理以及外部输入和输出(input and output,I/O)。ISA区别于微体系结构,微体系结构是实现指令集的处理器的内部设计。具有不同微体系结构的处理器可共享共同的指令集。在一些示例中,ISA可包括用于存储器操作、算术操作、逻辑操作、控制操作等等的指令。
附图说明
图1是根据本发明的实施例的系统的部分的框图。
图2是根据本发明的实施例的处理器的框图。
图3是根据本发明的另一实施例的多域处理器的框图。
图4是包括多个核心的处理器的实施例。
图5是根据本发明的一个实施例的处理器核心的微体系结构的框图。
图6是根据另一实施例的处理器核心的微体系结构的框图。
图7是根据又一实施例的处理器核心的微体系结构的框图。
图8是根据更进一步的实施例的处理器核心的微体系结构的框图。
图9是根据本发明的另一实施例的处理器的框图。
图10是根据本发明的实施例的代表性SoC的框图。
图11是根据本发明的实施例的另一示例SoC的框图。
图12是可以与实施例一起使用的示例系统的框图。
图13是可以与实施例一起使用的另一示例系统的框图。
图14是代表性计算机系统的框图。
图15A-图15B是根据本发明的实施例的系统的框图。
图16是图示根据实施例的用于制造集成电路以执行操作的IP核心开发系统的框图。
图17A-图17B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。
图18A-图18D是图示根据本发明的实施例的示例性专用向量友好指令格式的框图。
图19是根据本发明的一个实施例的寄存器体系结构的框图。
图20A是图示根据本发明的实施例的示例性有序管线和示例性的寄存器重命名、乱序发出/执行管线两者的框图。
图20B是图示根据本发明的实施例的要被包括在处理器中的体系结构核心的示例性实施例和示例性的寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图21A-图21B图示更具体的示例性有序核心体系结构的框图,该核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个逻辑块。
图22是根据本发明的实施例的可具有多于一个的核心、可具有集成存储器控制器、并且可具有集成图形的处理器的框图。
图23-图24是示例性计算机体系结构的框图。
图25是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
图26是根据一个或多个实施例的示例计算系统的示图。
图27是根据一个或多个实施例的计算系统的图示。
图28A-图28B是根据一个或多个实施例的示例操作的图示。
图29是根据一个或多个实施例的示例方法的流程图。
图30是根据一个或多个实施例的示例存储介质的图示。
具体实施方式
以下说明描述用于由处理器、虚拟机、封装、计算机系统或其他处理装置执行的用于绝对差总和计算的指令和处理逻辑。在以下描述中,陈述了诸如处理逻辑、处理器类型、微体系结构状况、事件、启用机制等众多特定细节,以提供对本公开的实施例的更透彻理解。然而,本领域技术人员将领会,可在没有这些特定细节的情况下实施实施例。另外,一些公知的结构、电路和其他特征未被详细示出,以避免不必要地使本公开的实施例变得模糊。
一些计算机应用可能涉及绝对差总和(sum of absolute differences,SAD)计算。例如,图像处理应用可通过在跨两个图像的像素集合之间执行SAD计算来确定两个图像之间的相似度。此类计算可用于视频处理中的过滤和运动估计应用。常规地,这些SAD计算可能要求使用多个分立的指令来执行各种数据组织和操纵步骤,并且可能涉及相当大量的编程时间和工作量。另外,此类常规技术可能消耗相当大量的计算资源,并且可能由此降低计算系统中的性能。
根据一些实施例,指令集体系结构(ISA)中的指令可被提供以执行多个SAD计算。在一些实施例中,单个SAD指令可被执行,以生成包括多个SAD值的向量。因此,使用SAD指令可加速并简化编程软件应用的任务。此外,相较于常规技术(例如,使用包括多个分立的指令的代码函数),处理器可以以相对更快且高效的方式来执行SAD指令,并且由此可改善程序执行的性能。此外,在一些实施例中,SAD指令可以以允许处理相比于采用常规方法能够处理的更多的输入向量的方式来对偏移值进行编码。下文参考图26-图30进一步描述了一些实施例的各种细节。进一步地,下文参考图1-图25描述了示例性系统和体系结构。
示例性系统和体系结构
虽然下列实施例是参考特定实现方式来描述的,但实施例不限于此方面。具体而言,构想了可将本文中所描述的实施例的类似的技术和教导应用到其他类型的电路、半导体器件、处理器、系统等。例如,所公开的实施例能以任一类型的计算机系统来实现,包括服务器计算机(例如,塔式服务器、机架服务器、刀片服务器、微服务器等等)、通信系统、存储系统、具有任何配置的桌面型计算机、膝上型计算机、笔记本、以及平板计算机(包括2:1平板、平板手机等等)。
另外,所公开的实施例还可以在其他设备中使用,这些设备诸如手持式设备、片上系统(systems on chip,SoC)以及嵌入式应用。手持式设备的一些示例包括:诸如智能电话之类的蜂窝电话、网际协议设备、数码相机、个人数字助理(personal digital assistant,PDA)、以及手持式PC。嵌入式应用可典型地包括:微控制器、数字信号处理器(DSP)、网络计算机(network computer,NetPC)、机顶盒、网络集线器、广域网(wide area network,WAN)交换机、可穿戴设备、或能够执行下文所教导的功能和操作的任何其他系统。此外,实施例可在具有标准语音功能的移动终端(诸如移动电话、智能电话和平板电话)中实现和/或在不具有标准无线语音功能通信能力的非移动终端(诸如许多可穿戴设备、平板计算机、笔记本、桌面型计算机、微服务器、服务器等等)中实现。
现在参考图1,所示出的是根据本发明的实施例的系统的部分的框图。如图1中所示,系统100可包括各种组件,包括被示出为多核心处理器的处理器110。处理器110可经由外部电压调节器160耦合至电源150,该外部电压调节器160可执行第一电压转换,以向处理器110提供主调节电压Vreg(V调节)。
如所见,处理器110可以是包括多个核心120a-120n的单管芯处理器。另外,每个核心可与集成电压调节器(integrated voltage regulator,IVR)125a-125n相关联,IVR125a-125n接收主调节电压,并生成要被提供至与该IVR相关联的处理器的一个或多个代理的操作电压。因此,可提供IVR实现方式,从而允许对电压的细粒度控制,并由此允许对每个单独的核心的功率和性能的细粒度控制。由此,每个核心可以以独立的电压和频率操作,从而实现极大的灵活性,并且为平衡功耗与性能提供广泛机会。在一些实施例中,对多个IVR的使用实现将组件分组到分开的功率平面中,使得功率由IVR调节并且由IVR将功率仅提供给组中的那些组件。在功率管理期间,当处理器被置于某个低功率状态时,一个IVR的给定的功率平面可被掉电或断电,而另一IVR的另一功率平面保持为活跃的或完全供电的。类似地,核心120可包括独立时钟生成电路(诸如一个或多个锁相环(phase lock loop,PLL))或与独立时钟生成电路相关联,以独立地控制每个核心120的操作频率。
仍参考图1,处理器内可存在附加组件,这些附加组件包括输入/输出接口(interface,IF)132、另一接口134以及集成存储器控制器(integrated memorycontroller,IMC)136。如所见,这些组件中的每个组件可由另一集成电压调节器125x供电。在一个实施例中,接口132可实现用于快速路径互连(Quick Path Interconnect,QPI)互连的操作,其在包括多个层的缓存一致性协议中提供点到点(point-to-point,PtP)链路,该多个层包括物理层、链路层和协议层。进而,接口134可经由外围组件互连快速(Peripheral Component Interconnect Express,PCIeTM)协议来进行通信。
还示出了功率控制单元(power control unit,PCU)138,PCU 138可包括电路,该电路包括用于执行与处理器110有关的功率管理操作的硬件、软件和/或固件。如所见,PCU138经由数字接口162向外部电压调节器160提供控制信息,以使得该电压调节器生成适当的经调节的电压。PCU 138还经由另一数字接口163向IVR 125提供控制信息,以控制所生成的操作电压(或以引起相对应的IVR在低功率模式下被禁用)。在各实施例中,PCU 138可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),和/或功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。
在图1中,PCU 138被图示为作为处理器的单独逻辑而存在。在其他情况下,PCU138可在核心120中的给定的一个或多个核心120上执行。在一些情况下,PCU 138可被实现为被配置成用于执行其自身的专用功率管理代码(有时被称为P代码)的(专用的或通用的)微控制器或其他控制逻辑。在进一步其他的实施例中,要由PCU 138执行的功率管理操作可在处理器外部被实现,诸如,通过单独的功率管理集成电路(power managementintegrated circuit,PMIC)或处理器外部的另一组件的方式被实现。在进一步其他的实施例中,要由PCU 138执行的功率管理操作可在BIOS或其他系统软件内被实现。
实施例可尤其适合于其中多个核心中的每个核心能够以独立的电压和频率点操作的多核心处理器。如本文中所使用,术语“域”被用于意指以同一电压和频率点操作的硬件和/或逻辑的集合。另外,多核心处理器可以进一步包括其他非核心处理引擎,诸如固定功能单元、图形引擎等等。此类处理器可以包括除核心之外的独立的域,诸如与图形引擎相关联的一个或多个域(在本文中被称为图形域)以及与非核心电路相关联的一个或多个域(在本文中被称为系统代理)。虽然多域处理器的许多实现方式可以被形成在单个半导体管芯上,但其他实现方式可以由其中不同的域可存在于单个封装的不同半导体管芯上的多芯片封装来实现。
虽然为了便于图示而未被示出,但要理解,处理器110内可存在附加组件,诸如非核心逻辑以及诸如内部存储器之类的其他组件,例如,缓存存储器层次体系的一个或多个级别等等。此外,尽管在图1的实现方式中被示出为具有集成电压调节器,但实施例不限于此。例如,其他经调节的电压可从外部电压调节器160或者经调节的电压的一个或多个附加外部源被提供至片上资源。
注意,本文中所描述的功率管理技术可以独立于基于操作系统(operatingsystem,OS)的功率管理(OS-based power management,OSPM)机制并且与该基于操作系统的功率管理机制互补。根据一种示例OSPM技术,处理器可以以各种性能状态或水平(所谓的P状态,即,从P0到PN)操作。一般而言,P1性能状态可以与OS能够请求的最高保证性能状态相对应。除了此种P1状态之外,OS还可以进一步请求更高的性能状态,即P0状态。此种P0状态由此可以是这样的一种投机性、超频、或睿频(turbo)模式状态:其中,当功率和/或热预算可用时,处理器硬件可以将处理器或其至少部分配置成以高于保证频率的频率进行操作。在许多实现方式中,处理器可以包括高于P1保证最大频率、超过特定处理器的最大峰值频率、如在制造期间被烧制或以其他方式写入到处理器中的所谓的仓频率(binfrequency)。另外,根据一种OSPM机制,处理器可以以各种功率状态或水平操作。就功率状态而言,OSPM机制可指定不同的功耗状态,一般被称为C状态,C0、C1至Cn状态。当核心活跃时,其在C0状态下运行,并且当核心空闲时,其可被置于核心低功率状态,也被称为核心非零C状态(例如,C1-C6状态),其中每个C状态均处于低功耗水平(使得C6是相比于C1更深的低功率状态,等等)。
要理解,在不同的实施例中,可单独地或组合地使用许多不同类型的功率管理技术。作为代表性示例,功率控制器可通过某种形式的动态电压频率缩放(dynamic voltagefrequency scaling,DVFS)来控制要进行功率管理的处理器,在DVFS中,一个或多个核心或其他处理器逻辑的操作电压和/或操作频率可以动态地被控制,以在某些情形下降低功耗。在示例中,DVFS可使用可从加利福尼亚州圣克拉拉市的英特尔公司获得的增强型英特尔SpeedStepTM技术来执行,以在最低的功耗水平下提供最佳性能。在另一示例中,DVFS可使用英特尔TurboBoostTM技术来执行,以使得一个或多个核心或其他计算引擎能够基于状况(例如,工作负载和可用性)而以高于保证操作频率的操作频率来操作。
可在某些示例中使用的另一功率管理技术是不同计算引擎之间工作负载的动态交换。例如,处理器可包括以不同的功耗水平操作的非对称核心或其他处理引擎,使得在功率受约束的情形下,一个或多个工作负载可以动态地被切换,以在较低功率的核心或其他计算引擎上执行。另一示例性功率管理技术是硬件轮停(hardware duty cycling,HDC),其可使得核心和/或其他计算引擎根据占空比而周期性地被启用和禁用,使得一个或多个核心在占空比的非活跃期间成为非活跃的,并在占空比的活跃期间成为活跃的。
功率管理技术还可在操作环境中存在约束时被使用。例如,当遇到功率和/或热约束时,可通过降低操作频率和/或电压来降低功率。其他功率管理技术包括扼制指令执行率或限制指令的调度。更进一步地,给定的指令集体系结构的指令包括关于功率管理操作的表达或隐含的指示是可能的。虽然以各种特定示例来描述,但要理解,在特定实施例中可使用许多其他功率管理技术。
实施例可以在针对各种市场的处理器中被实现,这些处理器包括服务器处理器、桌面型电脑处理器、移动处理器等等。现在参考图2,示出的是根据本发明的实施例的处理器的框图。如图2中所示,处理器200可以是包括多个核心210a-210n的多核心处理器。在一个实施例中,每个此类核心可具有独立的功率域,并且可以被配置成用于基于工作负载来进入和退出活跃状态和/或最大性能状态。一个或多个核心210可以是与其他核心异构的,例如,具有不同的微体系结构、指令集体系结构、管线深度、功率和性能能力。各个核心可经由互连215被耦合至包括各种组件的系统代理220。如所见,系统代理220可包括共享缓存230,该共享缓存230可以是最后一级缓存。另外,系统代理可包括用于例如经由存储器总线来与系统存储器(图2中未示出)进行通信的集成存储器控制器240。系统代理220还包括各种接口250和功率控制单元255,该功率控制单元255可包括用于执行本文中所描述的功率管理技术的逻辑。
另外,通过接口250a-250n,可以进行到各种片外组件(诸如外围设备、大容量存储装置等等)的连接。尽管以图2的实施例中的此种特定的实现方式示出,但本发明的范围不限于此方面。
现在参考图3,示出的是根据本发明的另一实施例的多域处理器的框图。如图3的实施例中所示,处理器300包括多个域。具体而言,核心域310可以包括多个核心3100-310n,图形域320可以包括一个或多个图形引擎,并且可进一步存在系统代理域350。在一些实施例中,系统代理域350可以在相比于核心域独立的频率下执行,并且可始终保持通电,以处置功率控制事件和功率管理,使得域310和320可以被控制,以动态地进入和退出高功率状态和低功率状态。域310和320中的每一者可在不同的电压和/或功率下操作。注意,尽管仅被示出为具有三个域,但要理解,本发明的范围不限于此方面,并且在其他实施例中可以存在附加的域。例如,可存在多个核心域,该多个核心域各自包括至少一个核心。
一般而言,除了各种执行单元和附加处理元件之外,核心310a-310n中的每一者还可进一步包括低级别缓存。进而,各个核心可彼此耦合并耦合至共享缓存存储器,该共享缓存存储器由最后一级缓存(last level cache,LLC)3400-340n的多个单元形成。在各实施例中,LLC 340可在核心和图形引擎以及各种媒体处理电路之间被共享。如所见,环形互连330由此将核心耦合在一起,并且提供核心、图形域320、以及系统代理域350之间的互连。在一个实施例中,互连330可以是核心域的部分。然而,在其他实施例中,环形互连可以具有其自身的域。
如进一步所见,系统代理域350可包括显示控制器352,该显示控制器352可提供对相关联的显示器的控制和到相关联的显示器的接口。如进一步所见,系统代理域350可包括功率控制单元355,该功率控制单元355可以包括用于执行本文中所描述的功率管理技术的逻辑。
如在图3中进一步所见,处理器300可以进一步包括集成存储器控制器(IMC)370,该IMC 370可以提供到系统存储器的接口,该系统存储器诸如动态随机存取存储器(dynamic random access memory,DRAM)。可存在多个接口3800-380n,以实现处理器与其他电路之间的互连。例如,在一个实施例中,可提供至少一个直接媒体接口(direct mediainterface,DMI)接口以及一个或多个PCIeTM接口。更进一步地,为了提供诸如附加处理器之类的其他代理或其他电路之间的通信,一个或多个QPI接口也可被提供。虽然在图3的实施例中以此种高级别示出,但要理解,本发明的范围不限于此方面。
参考图4,图示包括多个核心的处理器的实施例。处理器400包括任何处理器或处理设备,诸如,微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持式处理器、应用处理器、协处理器、片上系统(system on a chip,SoC)、或用于执行代码的其他设备。在一个实施例中,处理器400包括至少两个核心——核心401和402,它们可包括非对称核心或对称核心(所图示的实施例)。然而,处理器400可包括可以是对称的或非对称的、任何数量的处理元件。
在一个实施例中,处理元件是指用于支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、进程单元、上下文、上下文单元、逻辑处理器、硬件线程、核心和/或能够保持处理器的状态(诸如执行状态或体系结构状态)的任何其他元件。换言之,在一个实施例中,处理元件是指能够独立地与代码(诸如,软件线程、操作系统、应用或其他代码)相关联的任何硬件。物理处理器典型地是指集成电路,该集成电路潜在地包括任何数量的其他处理元件,诸如,核心或硬件线程。
核心通常指的是位于集成电路上的、能够维持独立体系结构状态的逻辑,其中每个独立维持的体系结构状态与至少一些专用执行资源相关联。相比于核心,硬件线程通常是指位于集成电路上的、能够维持独立的体系结构状态的任何逻辑,其中独立维持的体系结构状态共享对执行资源的访问。如所见,当某些资源是共享的而其他资源专用于体系结构状态时,硬件线程与核心的命名法之间的界线重叠。但核心和硬件线程常常被操作系统视为单独的逻辑处理器,其中,操作系统能够单独地在每一个逻辑处理器上调度操作。
如在图4中所图示,物理处理器400包括两个核心——核心401和402。在此,核心401和402被认为是对称的核心,即,具有相同的配置、功能单元和/或逻辑的核心。在另一实施例中,核心401包括乱序处理器核心,而核心402包括有序处理器核心。然而,核心401和402可以从任何类型的核心中被单独地选出,这些核心诸如原生核心、受软件管理的核心、适于执行原生指令集体系结构(Instruction Set Architecture,ISA)的核心、适于执行经转译ISA的核心、协同设计的核心或其他已知的核心。但是,为进一步讨论,下文进一步详细地描述核心401中所图示的功能单元,因为核心402中的单元以类似方式操作。
如所描绘,核心401包括两个体系结构状态寄存器401a和401b,这两个体系结构状态寄存器401a和401b可与两个硬件线程(也被称为硬件线程槽)相关联。因此,在一个实施例中,诸如操作系统之类的软件实体潜在地将处理器400视为四个单独的处理器,即,能够并发地执行四个软件线程的四个逻辑处理器或处理元件。如上所述,第一线程与体系结构状态寄存器401a相关联,第二线程与体系结构状态寄存器401b相关联,第三线程可与体系结构状态寄存器402a相关联,并且第四线程可与体系结构状态寄存器402b相关联。在此,体系结构状态寄存器(401a、401b、402a和402b)可与处理元件、线程槽或线程单元相关联,如上文所述。如所图示,体系结构状态寄存器401a被复制在体系结构状态寄存器401b中,因此各个体系结构状态/上下文能够针对逻辑处理器401a和逻辑处理器401b被存储。在核心401中,其他较小资源也可针对线程401a和401b被复制,这些较小资源诸如,指令指针、以及分配器和重命名器块430中的重命名逻辑。可以通过分区来共享诸如重排序/引退单元435中的重排序缓冲器、分支目标缓冲器(branch target buffer,BTB)和指令转译后备缓冲器(instruction translation lookaside buffer,I-LTB)420、加载/存储缓冲器、以及队列之类的一些资源。可以潜在地完全共享诸如通用内部寄存器、(一个或多个)页表基址寄存器、低级别数据缓存和数据TLB 450、(一个或多个)执行单元440、以及重排序/引退单元435的多个部分之类的其他资源。
处理器400通常包括可以被完全共享、可以通过分区被共享、或可以由处理元件专用/专用于处理元件的其他资源。在图4中,图示出具有处理器的说明性逻辑单元/资源的纯示例性处理器的实施例。注意,处理器可包括或省略这些功能单元中的任何功能单元,并包括未描绘出的任何其他已知的功能单元、逻辑或固件。如所图示,核心401包括简化的、代表性的乱序(out-of-order,OOO)处理器核心。但是,在不同实施例中,可利用有序处理器。
核心401进一步包括解码模块425,该解码模块425耦合至取得单元120以对所取得的元素进行解码。在一个实施例中,取得逻辑包括分别与线程槽401a、401b相关联的各个定序器。通常,核心401与第一ISA相关联,该第一ISA定义/指定在处理器400上可执行的指令。通常,作为第一ISA的部分的机器代码指令包括指令的引用/指定将被执行的指令或操作的部分(被称为操作码)。解码模块425包括从这些指令的操作码识别这些指令并继续在管线中传递经解码的指令以用于如第一ISA所定义地进行处理的电路。例如,在一个实施例中,解码器模块425包括被设计成用于或适于识别诸如事务性指令之类的特定指令的逻辑。作为由解码器模块425进行识别的结果,体系结构或核心401采取特定的、预定义的动作来执行与适当指令相关联的任务。重要的是应注意,可响应于单个或多个指令来执行本文中所描述的任务、块、操作和方法中的任何一个;该单个或多个指令中的一些可以是新指令或旧指令。
在一个示例中,分配器和重命名器块430包括用于保留资源的分配器,该资源诸如用于存储指令处理结果的寄存器堆。然而,线程401a和401b潜在地能够进行乱序执行,其中,分配器和重命名器块430还保留诸如用于追踪指令结果的重排序缓冲器之类的其他资源。重命名器块430还可包括寄存器重命名器,该寄存器重命名器用于将程序/指令引用寄存器重命名为处理器400内部的其他寄存器。重排序/引退单元435包括用于支持乱序执行和稍后的、被乱序执行的指令的有序引退的组件,诸如上文提及的重排序缓冲器、加载缓冲器和存储缓冲器。
在一个实施例中,调度器和(一个或多个)执行单元块440包括用于在执行单元上调度指令/操作的调度器单元。例如,浮点指令被调度在具有可用的浮点执行单元的执行单元的端口上。还包括与执行单元相关联的寄存器堆,以存储信息指令处理结果。示例性执行单元包括浮点执行单元、整数执行单元、跳转执行单元、加载执行单元、存储执行单元以及其他已知的执行单元。
较低级别的数据缓存和数据转译后备缓冲器(data translation buffer,D-TLB)450被耦合至(一个或多个)执行单元440。数据缓存用于存储最近使用/操作的元素(诸如,数据操作对象),这些元素潜在地在存储器一致性状态下被保持。D-TLB用于存储最近的虚拟/线性至物理地址转译。作为特定示例,处理器可以包括页表结构,该页表结构用于将物理存储器分解成多个虚拟页。
在此,核心401和402共享对高级别或进一步远离的缓存410的访问,这是对最近取得元素的缓存的访问。注意,较高级别或进一步远离指的是缓存级别增加或进一步远离于(一个或多个)执行单元。在一个实施例中,较高级别的缓存410是最后一级数据缓存(处理器400上的存储器层次体系中的最后一级缓存),诸如,第二级或第三级数据缓存。然而,较高级别的缓存410并不限于此,因为它可以与指令缓存相关联或包括指令缓存。替代地,追踪缓存(一类指令缓存)可以耦合在解码器模块425之后,用于存储最近被解码的追踪。
在所描绘的配置中,处理器400还包括总线接口405和功率控制单元460,该功率控制单元460可执行根据本发明的实施例的功率管理。在该场景中,总线接口405用于与处理器400外部的设备通信,该设备诸如系统存储器和其他组件。
系统控制器470可向诸如一个或多个存储器之类的其他设备提供接口。在示例中,总线接口405包括与存储器控制器的环形互连,以用于向存储器提供接口,并且包括与图形控制器的环形互连,以用于向图形处理器提供接口。在SoC环境中,可以将甚至更多的设备(诸如,网络接口、协处理器、存储器、图形处理器以及任何其他已知计算机设备/接口)集成在单个管芯或集成电路上,以提供具有高功能和低功耗的小形状因子。
现在参考图5,示出的是根据本发明的一个实施例的处理器核心的微体系结构的框图。如图5中所示,处理器核心500可以是多阶段管线式乱序处理器。核心500可基于接收到的操作电压而在各种电压下操作,这些接收到的操作电压可以从集成电压调节器或外部电压调节器被接收。
如在图5中所见,核心500包括前端单元510,该前端单元510可用于取得要被执行的指令并准备这些指令以供在处理器管线中的稍后使用。例如,前端单元510可包括取得单元501、指令缓存503、以及指令解码器505。在一些实现方式中,前端单元510可进一步包括追踪缓存,连同伪代码存储装置以及微操作存储装置。取得单元501可例如从存储器或指令缓存503取得宏指令,并将这些宏指令馈送至指令解码器505以将其解码为基元,即,用于由处理器执行的微操作。
耦合在前端单元510与执行单元520之间的是乱序(out-of-order,OOO)引擎515,该乱序引擎515可用于接收微指令并准备这些微指令以供执行。更具体地,OOO引擎515可包括用于对微指令流重排序并分配执行所需的各种资源、并且用于提供逻辑寄存器到各种寄存器堆(诸如寄存器堆530和扩展寄存器堆535)内的存储位置上的重命名的各种缓冲器。寄存器堆530可包括用于整数操作和浮点操作的分开的寄存器堆。出于配置、控制和附加操作的目的,机器特定寄存器(machine specific register,MSR)集合538也可能存在,并且可由核心500内(和核心外部)的各种逻辑访问的。
在执行单元520中可存在各种资源,包括例如,各种整数、浮点和单指令多数据(single instruction multipledata,SIMD)逻辑单元,以及其他专用硬件。例如,此类执行单元可包括一个或多个算术逻辑单元(arithmetic logic unit,ALU)522以及一个或多个向量执行单元524,以及其他此类执行单元。
来自执行单元的结果可被提供至引退单元,即,重排序缓冲器(reorder buffer,ROB)540。更具体地,ROB 540可包括用于接收与被执行的指令相关联的信息的各种阵列和逻辑。该信息随后由ROB 540进行检查,以确定指令是否可以被有效地引退并且结果数据是否被提交至处理器的体系结构状态,或者是否发生阻止指令的正确引退的一个或多个异常。当然,ROB 540可处置与引退相关联的其他操作。
如图5中所示,ROB 540被耦合至缓存550,在一个实施例中,缓存550可以是低级别缓存(例如,L1缓存),但本发明的范围不限于此方面。而且,执行单元520可以直接被耦合至缓存550。从缓存550,可以发生与较高级别缓存、系统存储器等等的数据通信。尽管在图5的实施例中以该高级别示出,但要理解,本发明的范围不限于此方面。例如,尽管图5的实现方式是关于乱序机器(诸如x86指令集体系结构(ISA))的,但本发明的范围不限于此方面。即,其他实施例可在有序处理器、精简指令集计算(reduced instruction setcomputing,RISC)处理器(诸如基于ARM的处理器)、或者能够经由仿真引擎和相关联的逻辑电路来仿真不同的ISA的指令和操作的另一类型的ISA的处理器。
现在参考图6,示出的是根据另一实施例的处理器核心的微体系结构的框图。在图6的实施例中,核心600可以是不同的微体系结构的低功率核心,诸如基于凌动TM(AtomTM)的处理器,其具有被设计用于降低功耗的相对有限的管线深度。如所见,核心600包括指令缓存610,该指令缓存610被耦合以向指令解码器615提供指令。分支预测器605可被耦合至指令缓存610。注意,指令缓存610可进一步被耦合至缓存存储器的另一级别,诸如L2缓存(为了便于图6中的图示而未被示出)。进而,指令解码器615向发出队列(issue queue,IQ)620提供经解码的指令,以供存储并递送至给定的执行管线。微代码ROM 618被耦合至指令解码器615。
浮点管线630包括浮点(floating point,FP)寄存器堆632,其可包括具有给定比特宽度(诸如128比特、256比特或512比特)的多个体系结构寄存器。管线630包括浮点调度器634,该浮点调度器634用于调度指令以供在管线的多个执行单元中的一个执行单元上执行。在实施例中,此类执行单元包括算术逻辑单元(arithmetic logic unit,ALU)635、混洗单元636、以及浮点(FP)加法器638。进而,这些执行单元中生成的结果可被提供回到缓冲器和/或寄存器堆632中的寄存器。当然要理解的是,尽管被示出为具有这几个示例执行单元,但在另一实施例中,可能存在附加的或不同的浮点执行单元。
还可提供整数管线640。在所示出的实施例中,管线640包括整数(integer,INT)寄存器堆642,其可包括具有给定比特宽度(诸如128比特或256比特)的多个体系结构寄存器。管线640包括整数执行(integer execution,IE)调度器644,该整数执行调度器644用于调度指令以供在管线的多个执行单元中的一个执行单元上执行。在所示出的实施例中,此类执行单元包括ALU 645、移位器单元646、以及跳转执行单元(jump execution unit,JEU)648。进而,这些执行单元中生成的结果可被提供回到缓冲器和/或寄存器堆642中的寄存器。当然要理解的是,尽管被示出为具有这几个示例执行单元,但在另一实施例中,可能存在附加的或不同的整数执行单元。
存储器执行(memory execution,ME)调度器650可调度存储器操作,以供在地址生成单元(address generation unit,AGU)652中执行,该AGU 652也耦合至TLB 654。如所见,这些结构可耦合至数据缓存660,该数据缓存660可以是L0和/或L1数据缓存,该L0和/或L1数据缓进而耦合至缓存存储器层次体系的附加级别,包括L2缓存存储器。
为了提供对乱序执行的支持,除了被配置成用于对经乱序执行的指令重排序以供有序引退的重排序缓冲器680之外,还可提供分配器/重命名器670。虽然被示出为具有图6的图示中的此种特定的管线体系结构,但要理解,许多变型和替代方案是可能的。
注意,在具有非对称核心的处理器中,诸如根据图5和图6的微体系结构,工作负载可出于功率管理原因而在核心之间动态地被交换,这是因为这些核心虽然具有不同的管线设计和深度但可能具有相同的或相关的ISA。此类动态核心交换可以以对用户应用而言透明的(并且可能地,对内核而言也透明的)方式被执行。
参考图7,示出的是根据又一实施例的处理器核心的微体系结构的框图。如图7中所图示,核心700可包括用于以非常低的功耗水平执行的多阶段有序管线。作为一个此类示例,核心700可具有根据可从加利福尼亚州桑尼威尔的ARM控股有限公司获得的ARM CortexA53设计的微体系结构。在实现方式中,可提供被配置成用于既执行32比特代码又执行64比特代码的8阶段管线。核心700包括取得单元710,该取得单元710被配置成用于取得指令并将其提供至解码单元715,该解码单元715可对指令解码,该指令例如给定ISA(诸如ARMv8ISA)的宏指令。要进一步注意的是,队列730可耦合至解码单元715,以存储经解码的指令。经解码的指令被提供至发出逻辑725,在发出逻辑725处,经解码的指令可向多个执行单元中给定的执行单元被发出。
进一步参考图7,发出逻辑725可向多个执行单元中的一个执行单元发出指令。在所示出的实施例中,这些执行单元包括整数单元735、乘法单元740、浮点/向量单元750、双发出单元760、以及加载/存储单元770。这些不同的执行单元的结果可被提供至写回(writeback,WB)单元780。要理解,尽管为了便于图示而仅示出单个写回单元,但在一些实现方式中,单独的写回单元可与执行单元中的每个执行单元相关联。此外,要理解,尽管图7中示出的单元和逻辑中的每个单元和逻辑以高级别表示,但特定的实现方式可包括更多的或不同的结构。使用具有如图7中的管线那样的管线的一个或多个核心来设计的处理器可被实现在许多不同的终端产品中,从移动设备延伸到服务器系统。
参考图8,示出的是根据更进一步的实施例的处理器核心的微体系结构的框图。如图8中所图示,核心800可包括用于以非常高的性能水平执行(其可以以比图7的核心700更高的功耗水平发生)的多阶段、多发出、乱序管线。作为一个此类示例,处理器800可具有根据ARM Cortex A57设计的微体系结构。在实现方式中,可提供被配置成用于既执行32比特代码又执行64比特代码的15(或更大)阶段管线。另外,管线可提供3(或更大)宽且3(或更大)发出操作。核心800包括取得单元810,该取得单元810被配置成用于取得指令并将其提供至耦合至缓存820的解码器/重命名器/调遣器单元815。单元815可对指令(例如,ARMv8指令集体系结构的宏指令)进行解码,对指令内的存储器引用进行重命名,并且(最终)将指令调遣至所选的执行单元。经解码的指令可被存储在队列825中。注意,尽管为了便于图8中的图示示出单个队列结构,但要理解,可针对多种不同类型的执行单元中的每一者提供单独的队列。
图8中还示出了发出逻辑830,队列825中所存储的经解码的指令可从该发出逻辑830被发出至所选的执行单元。发出逻辑830还可在发出逻辑830耦合到的多种不同类型的执行单元中的每个执行单元具有单独的发出逻辑的特定实施例中被实现。
经解码的指令可被发出至多个执行单元中给定的执行单元。在所示出的实施例中,这些执行单元包括一个或多个整数单元835、乘法单元840、浮点/向量单元850、分支单元860、以及加载/存储单元870。在实施例中,浮点/向量单元850可被配置成用于处置SIMD或者128或256比特的向量数据。更进一步地,浮点/向量执行单元850可执行IEEE-754双精度浮点操作。这些不同的执行单元的结果可被提供至写回单元880。注意,在一些实现方式中,单独的写回单元可与执行单元中的每个执行单元相关联。此外,要理解,尽管图8中示出的单元和逻辑中的每个单元和逻辑以高级别表示,但特定的实现方式可包括更多的或不同的结构。
注意,在具有非对称核心的处理器中,诸如根据图7和图8的微体系结构,工作负载可出于功率管理原因而动态地被交换,这是因为这些核心虽然具有不同的管线设计和深度但可能具有相同的或相关的ISA。此类动态核心交换可以以对用户应用而言透明的(并且可能地,对内核而言也透明的)方式被执行。
使用具有如图5-图8中的任何一者或多者中的管线那样的管线的一个或多个核心来设计的处理器可被实现在许多不同的终端产品中,从移动设备延伸到服务器系统。现在参考图9,示出的是根据本发明的另一实施例的处理器的框图。在图9的实施例中,处理器900可以是包括多个域的SoC,该多个域中的每个域可被控制以在独立的操作电压和操作频率下操作。作为特定的说明性示例,处理器900可以是基于体系结构核心TM的处理器(诸如,i3、i5、i7)或者是可从英特尔公司获得的另一此类处理器。然而,在其他实施例中,可替代地存在诸如可从加利福尼亚州桑尼威尔的超微半导体有限公司(AdvancedMicro Device,AMD)获得的、来自ARM控股公司或其被许可方的基于ARM的设计、来自加利福尼亚州桑尼威尔的MIPS技术公司或其被许可方或采购方的基于MIPS的设计的其他低功率处理器,诸如苹果A7处理器、高通骁龙处理器或德州仪器公司OMAP处理器。此类SoC可被用于低功率系统中,该低功率系统诸如智能电话、平板计算机、平板电话计算机、超级本TM计算机或其他便携式计算设备,其可包含具有基于异构系统体系结构的处理器设计的异构系统。
在图9中示出的高级视图中,处理器900包括多个核心单元9100-910n。每个核心单元可包括一个或多个处理器核心、一个或多个缓存存储器、以及其他电路。每个核心单元910可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);MIPS指令集;ARM指令集(具有诸如NEON之类的可选的附加扩展))或者其他指令集或其组合。注意,核心单元中的一些核心单元可以是异构资源(例如,具有不同的设计)。另外,每个此类核心可被耦合至缓存存储器(未示出),在实施例中,该缓存存储器可以是共享的第二级(level two,L2)缓存存储器。非易失性存储装置930可用于存储各种程序和其他数据。例如,此种存储装置可用于存储微代码的至少部分、诸如BIOS之类的引导信息、其他系统软件等等。
每个核心单元910还可包括用于实现到处理器的附加电路的互连的接口,诸如总线接口。在实施例中,每个核心单元910耦合至一致性结构,该一致性结构可充当主要的缓存一致性管芯上互连,其进而耦合至存储器控制器935。进而,存储器控制器935控制与诸如DRAM之类的存储器(为了便于图9中的图示而未被示出)的通信。
除了核心单元之外,在处理器内还存在附加的处理引擎,包括至少一个图形单元920,其可包括一个或多个图形处理单元(graphics processing unit,GPU),用于执行图形处理以及可能用于执行图形处理器上的通用操作(所谓的GPGPU操作)。另外,可存在至少一个图形信号处理器925。信号处理器925可被配置成用于处理从一个或多个捕获设备接收到的传入图像数据,该一个或多个捕获设备在SoC内部或是片外的。
可存在其他加速器。在图9的图示中,视频译码器950可执行译码操作,包括对视频信息的编码和解码,例如提供对高清视频内容的硬件加速支持。显示控制器955可进一步被提供以加速显示操作,包括提供对系统的内部和外部显示器的支持。另外,可存在安全处理器945,用于执行诸如安全引导操作、各种密码操作等等之类的安全操作。
单元中的每一个可使其功耗经由功率管理器940被控制,该功率管理器940可包括用于执行本文中所描述的各种功率管理技术的控制逻辑。
在一些实施例中,处理器900可进一步包括非一致性结构,该非一致性结构耦合至一致性结构,各种外围设备可耦合至该一致性结构。一个或多个接口960a-960d使得能够与一个或多个片外设备通信。此类通信可经由各种通信协议来进行,这些通信协议诸如PCIeTM、GPIO、USB、I2C、UART、MIPI、SDIO、DDR、SPI、HDMI以及其他类型的通信协议。虽然在图9的实施例中以此种高级别示出,但要理解,本发明的范围不限于此方面。
现在参考图10,示出的是代表性SoC的框图。在所示出的实施例中,SoC 1000可以是被配置成用于要被优化以供并入智能电话或其他低功率设备(诸如平板计算机或其他便携式计算设备)的低功率操作的多核心SoC。作为示例,SoC 1000可以使用非对称的或不同类型的核心来实现,这些非对称的或不同类型的核心诸如较高功率核心和/或较低功率核心的组合,例如乱序核心和有序核心的组合。在不同的实施例中,这些核心可以基于体系结构TM核心设计或ARM体系结构设计。在另外的其他实施例中,可以在给定的SoC中实现英特尔和ARM核心的混合。
如图10中所见,SoC 1000包括具有多个第一核心10120-10123的第一核心域1010。在示例中,这些核心可以是低功率核心,诸如有序核心。在一个实施例中,这些第一核心可被实现为ARM Cortex A53核心。进而,这些核心耦合至核心域1010的缓存存储器1015。另外,SoC 1000包括第二核心域1020。在图10的图示中,第二核心域1020具有多个第二核心1022a-1022d。在示例中,相比于第一核心1012,这些核心可以是更高的功耗的核心。在实施例中,第二核心可以是乱序核心,其可被实现为ARM Cortex A57核心。进而,这些核心耦合至核心域1020的缓存存储器1025。注意,尽管图10中示出的示例在每个域中包括4个核心,但要理解,在其他示例中,给定域中可能存在更多或更少的核心。
进一步参考图10,还提供图形域1030,该图形域1030可包括被配置成用于独立地执行例如由核心域1010和1020的一个或多个核心提供的图形工作负载的一个或多个图形处理单元(raphics processing unit,GPU)。作为示例,除了提供图形和显示渲染操作外,GPU域1030还可用于提供对各种屏幕大小的显示支持。
如所见,各个域耦合至一致性互连1040,在实施例中,该一致性互连1040可以是缓存一致性互连结构,其进而耦合至集成存储器控制器1050。在一些示例中,一致性互连1040可包括共享缓存存储器,诸如L3缓存。在实施例中,存储器控制1050可以是用于提供与片外存储器进行通信的多个信道的直接存储器控制器,该多个信道诸如DRAM的多个信道(为了便于图10中的图示而未被示出)。
在不同的示例中,核心域的数量可有所不同。例如,对于适合于并入移动计算设备的低功率SoC,可存在诸如图10中所示出的有限数量的核心域。更进一步地,在此类低功率SoC中,包括较高功率的核心的核心域1020可具有较少数量的此类核心。例如,在一个实现方式中,两个核心1022可被提供,从而实现在降低的功耗水平下的操作。另外,不同的核心域也可被耦合至中断控制器,以实现不同域之间的工作负载的动态交换。
在另外的其他实施例中,可存在更大数量的核心域,并且可存在附加的操作IP逻辑,这是因为SoC可以被缩放至更高的性能(和功率)水平以供并入其他计算设备,这些计算设备诸如桌面型电脑、服务器、高性能计算系统、基站等等。作为一个此类示例,各自具有给定数量的乱序核心的4个核心域可被提供。更进一步地,除了操作GPU支持(作为示例,其可采取GPGPU的形式)之外,用于提供对特定功能(例如,web服务、网络处理、切换等等)提供优化的硬件支持的一个或多个加速器也可被提供。另外,可存在输入/输出接口,以将此类加速器耦合至片外组件。
现在参考图11,示出的是另一示例SoC的框图。在图11的实施例中,SoC 1100可包括用于为多媒体应用、通信和其他功能实现高性能的各种电路。由此,SoC 1100适合于并入各种各样的便携式设备和其他设备中,这些便携式设备和其他设备诸如智能电话、平板计算机、智能电视等等。在所示出的示例中,SoC 1100包括中央处理器单元(centralprocessor unit,CPU)域1110。在实施例中,在CPU域1110中可能存在多个单独的处理器核心。作为一个示例,CPU域1110可以是具有4个多线程核心的四核心处理器。此类处理器可以是同构或异构处理器,例如低功率处理器核心和高功率处理器核心的混合。
进而,GPU域1120被提供以在一个或多个GPU中执行高级图形处理,从而处置图形和计算API。除了在多媒体指令的执行期间可能发生的高级计算之外,DSP单元1130还可提供一个或多个低功率DSP以用于处置低功率多媒体应用,这些低功率多媒体应用诸如音乐回放、视频/音频等等。进而,通信单元1140可包括用于经由各种无线协议来提供连接性的各种组件,这些无线通信协议诸如蜂窝通信(包括3G/4G LTE)、无线局域协议(诸如蓝牙TM)、IEEE 802.11等等。
更进一步地,多媒体处理器1150可用于执行高清视频和音频内容的捕获和回放,包括对用户手势的处理。传感器单元1160可包括多个传感器和/或传感器控制器,用于对给定平台中存在的各种片外传感器提供接口。图像信号处理器(image signal processor,ISP)1170可就来自平台的一个或多个相机(包括静止和视频相机)的所捕获内容执行图像处理。
显示处理器1180可提供对连接至具有给定像素密度的高清显示器的支持,包括无线地传输内容以供在此类显示器上回放的能力。更进一步地,位置单元1190可包括具有对多个全球定位系统(Global Positioning System,GPS)星座的支持的GPS接收器,以向应用提供使用此类GPS接收器获得的高度准确的定位信息。要理解,尽管被示出为具有图11的示例中的此种特定的组件集合,但许多变型和替代方式是可能的。
现在参考图12,所示出的是可以与实施例一起使用的示例系统的框图。如所见,系统1200可以是智能电话或其他无线通信器。基带处理器1205被配置成用于执行关于要从系统被传送或由该系统接收的通信信号的各种信号处理。基带处理器1205进而被耦合至应用处理器1210,该应用处理器1210可以是系统的主CPU,除了用于执行诸如许多公知的社交媒体与多媒体应用之类的用户应用之外,该应用处理器1210还用于执行OS以及其他系统软件。应用处理器1210可进一步被配置成用于为设备执行各种其他计算操作。
进而,应用处理器1210可以耦合至用户接口/显示器1220,例如,触摸屏显示器。另外,应用处理器1210可耦合至存储器系统,该存储器系统包括非易失性存储器(即,闪存1230)和系统存储器(即,动态随机存取存储器(DRAM)1235)。如进一步所见,应用处理器1210进一步耦合至捕获设备1241,该捕获设备1241诸如可以记录视频和/或静止图像的一个或多个图像捕获设备。
仍然参考图12,包括订户身份模块并且可能包括安全存储装置和密码处理器的通用集成电路卡(universal integrated circuit card,UICC)1240也耦合至应用处理器1210。系统1200可进一步包括可耦合至应用处理器1210的安全处理器1250。多个传感器1225可耦合至应用处理器1210,以实现诸如加速度计和其他环境信息之类的各种感测到的信息的输入。音频输出设备1295可提供用于例如以语音通信、播放的或流式传输的音频数据等的形式输出声音的接口。
如进一步所图示,近场通信(near field communication,NFC)非接触式接口1260被提供,其经由NFC天线1265在NFC近场中通信。尽管分开的天线在图12中被示出,但要理解的是,在一些实现方式中,一根天线或不同组的天线可以被提供以实现各种无线功能。
功率管理集成电路(PMIC)1215耦合至应用处理器1210,以执行平台级功率管理。为此,PMIC 1215可向应用处理器1210发出功率管理请求,以进入所期望的某些低功率状态。此外,基于平台约束,PMIC 1215还可控制系统1200的其他组件的功率水平。
为了使得通信能够被传送和接收,各种电路可被耦合在基带处理器1205与天线1290之间。具体而言,可存在射频(radio frequency,RF)收发机1270和无线局域网(wireless local area network,WLAN)收发机1275。一般而言,RF收发机1270可用于根据诸如3G或4G无线通信协议之类的给定的无线通信协议(诸如,根据码分多址(codedivision multiple access,CDMA)、全球移动通信系统(global system for mobilecommunication,GSM)、长期演进(long term evolution,LTE)或其他协议)来接收和传送无线数据和呼叫。另外,可存在GPS传感器1280。诸如无线电信号(例如,AM/FM和其他信号)的接收或传送之类的其他无线通信也可被提供。另外,经由WLAN收发机1275,局域无线通信也可以被实现。
现在参考图13,所示出的是可以与实施例一起使用的另一示例系统的框图。在图13的图示中,系统1300可以是移动低功率系统,诸如平板计算机、2:1平板设备、平板电话或其他可转换或独立式平板系统。如所图示,存在SoC 1310,并且SoC 1310可被配置成作为设备的应用处理器来操作。
各种设备可耦合至SoC 1310。在所示的图示中,存储器子系统包括耦合至SoC1310的闪存1340和DRAM 1345。另外,触摸面板1320被耦合至SoC 1310,以提供显示能力并经由触摸进行用户输入,包括在触摸面板1320的显示器上提供虚拟键盘。为了提供有线网络连接性,SoC 1310耦合至以太网接口1330。外围中枢1325被耦合至SoC 1310,以使得能够对各种外围设备提供接口,诸如可通过各种端口或其他连接器中的任一者耦合至系统1300。
除了SoC 1310内的内部功率管理电路和功能之外,PMIC 1380也耦合至SoC 1310,以提供基于平台的功率管理,例如基于系统是通过电池供电的还是经由AC适配器1395通过AC功率供电的。除了此种基于功率源的功率管理之外,PMIC 1380还可进一步基于环境和使用状况来执行平台功率管理活动。更进一步地,PMIC 1380可将控制和状态信息传输至SoC1310,以引起SoC 1310内的各种功率管理动作。
仍参考图13,为了提供无线能力,WLAN单元1350被耦合至SoC1310并进而被耦合至天线1355。在各实现方式中,WLAN单元1350可根据一个或多个无线协议来提供通信。
如进一步所图示,多个传感器1360可耦合至SoC 1310。这些传感器可包括各种加速度计、环境和其他传感器,包括用户手势传感器。最后,音频编解码器1365被耦合至和SoC1310,以提供到音频输出设备1370的接口。当然要理解的是,尽管以图13中的此种特定的实现方式示出,但许多变型和替代方案是可能的。
现在参考图14,所示出的是代表性计算机系统1400的框图,该代表性计算机系统1400诸如笔记本、超级本TM或其他小形状因子系统。在一个实施例中,处理器1410包括微处理器、多核心处理器、多线程处理器、超低电压处理器、嵌入式处理器、或其他已知的处理元件。在所图示的实现方式中,处理器1410充当主处理单元以及用于与系统1400的各种组件中的许多组件进行通信的中央枢纽,并且可包括如本文中所描述的功率管理电路。作为一个示例,处理器1410被实现为SoC。
在一个实施例中,处理器1410与系统存储器1415通信。作为说明性示例,系统存储器1415经由用于提供给定的系统存储器量的多个存储器设备或模块来实现。
为了提供对诸如数据、应用、一个或多个操作系统等等之类的信息的持久性存储,大容量存储装置1420也可耦合至处理器1410。在各实施例中,为了实现更轻薄的系统设计并且为了改善系统响应性,此种大容量存储装置可经由SAD来实现,或者大容量存储装置可主要使用硬盘驱动器(hard disk drive,HDD)来实现,其中具有较少量的SAD存储装置来充当SAD缓存,以实现上下文状态和其他此类信息在掉电事件期间的非易失性存储,使得在系统活动的重新发起期间可以发生快速上电。如图14所示,闪存设备1422可以例如经由串行外围接口(serial peripheral interface,SPI)被耦合至处理器1410。该闪存设备可以提供对系统软件以及系统的其他固件的非易失性存储,系统软件包括基本输入/输出软件(basic input/output software,BIOS)。
系统1400内可以存在各种输入/输出(I/O)设备。在图14的实施例中具体示出的是显示器1424,显示器1424可以是进一步提供触摸屏1425的高清LCD或LED面板。在一个实施例中,显示器1424可以经由显示互连被耦合至处理器1410,该显示互连可被实现为高性能图形互连。触摸屏1425可以经由另一互连被耦合至处理器1410,在实施例中,该另一互连可以是I2C互连。如图14中进一步所示,除触摸屏1425之外,通过触摸进行的用户输入也可以经由触板1430发生,触板1430可以被配置在底盘内,并且还可以与触摸屏1425耦合到同一I2C互连。
出于感知计算和其他目的,各种传感器可以存在于系统内,并且可以以不同的方式被耦合到处理器1410。某些惯性传感器和环境传感器可通过传感器中枢1440(例如经由I2C互连)耦合到处理器1410。在图14中示出的实施例中,这些传感器可以包括加速度计1441、环境光传感器(ambient light sensor,ALS)1442、罗盘1443以及陀螺仪1444。其他环境传感器可包括一个或多个热传感器1446,在一些实施例中,这些热传感器1446经由系统管理总线(system management bus,SMBus)总线耦合至处理器1410。
同样如图14中所见,各种外围设备可经由低引脚数(low pin count,LPC)互连耦合至处理器1410。在所示的实施例中,可以通过嵌入式控制器1435来耦合各个组件。此类组件可包括(例如,经由PS2接口耦合的)键盘1436、风扇1437以及热传感器1439。在一些实施例中,触板1430还可以经由PS2接口耦合至EC 1435。另外,诸如受信任平台模块(trustedplatform module,TPM)1438之类的安全处理器也可经由此种LPC互连耦合至处理器1410。
系统1400可以以各种方式(包括以无线方式)与外部设备通信。在图14中示出的实施例中,存在各种无线模块,这些无线模块中的每个无线模块都可以对应于针对特定的无线通信协议而配置的无线电装置。用于在短距离(诸如,近场)内进行无线通信的一种方式可以经由NFC单元1445,在一个实施例中,该NFC单元1445可以经由SMBus与处理器1410进行通信。注意,经由该NFC单元1445,彼此紧邻的设备可以进行通信。
如图14中进一步所见,附加的无线单元可包括其他短距离无线引擎,包括WLAN单元1450和蓝牙TM单元1452。使用WLAN单元1450,Wi-FiTM通信可以被实现,而经由蓝牙TM单元1452,短距离蓝牙TM通信可以发生。这些单元可以经由给定的链路来与处理器1410通信。
另外,无线广域通信(例如,根据蜂窝式或其他无线广域协议)可以经由WWAN单元1456进行,该WWAN单元1456进而可以耦合至订户身份模块(subscriber identity module,SIM)1457。另外,为了实现位置信息的接收和使用,还可以存在GPS模块1455。注意,在图14中示出的实施例中,WWAN单元1456和诸如相机模块1454之类的集成捕获设备可经由给定的链路来进行通信。
为了提供音频输入和输出,可以经由数字信号处理器(DSP)1460来实现音频处理器,DSP 1460可经由高清音频(high definition audio,HDA)链路耦合至处理器1410。类似地,DSP 1460可以与集成的编码器/解码器(coder/decoder,CODEC)和放大器1462进行通信,该集成的编码器/解码器和放大器1462进而可以耦合至可以在底盘内实现的输出扬声器1463。类似地,放大器和CODEC 1462可以被耦合以从麦克风1465接收音频输入,在实施例中,该麦克风1465可以经由双阵列麦克风(诸如,数字麦克风阵列)来实现,以提供高质量音频输入从而实现对系统内的各种操作的语音激活的控制。还要注意,可以将音频输出从放大器/CODEC 1462提供到头戴式耳机插孔1464。虽然在图14的实施例中被示出为具有这些特定的组件,但要理解,本发明的范围不限于此方面。
实施例可采用许多不同的系统类型来实现。现在参考图15A,示出的是根据本发明的实施例的系统的框图。如图15A中所示,多处理器系统1500是点到点互连系统,并且包括经由点到点互连1550耦合的第一处理器1570和第二处理器1580。如图15A中所示,处理器1570和1580中的每一个可以是包括第一和第二处理器核心(即,处理器核心1574a和1574b以及处理器核心1584a和1584b)的多核心处理器,但处理器中可能潜在地存在更多的核心。这些处理器中的每个处理器包括用于执行如本文中所描述的基于处理器的功率管理的PCU或其他功率管理逻辑。
仍然参考图15A,第一处理器1570进一步包括集成存储器控制器(IMC)1572以及点到点(point-to-point,P-P)接口1576和1578。类似地,第二处理器1580包括IMC 1582以及P-P接口1586和1588。如图15A中所示,IMC 1572和1582将处理器耦合到相应的存储器(即,存储器1532和存储器1534),这些存储器可以是被本地附连到相应处理器的系统存储器(例如,DRAM)的部分。第一处理器1570和第二处理器1580可以分别经由P-P互连1562和1564耦合至芯片组1590。如图15A中所示,芯片组1590包括P-P接口1594和1598。
此外,芯片组1590包括用于通过P-P互连1539将芯片组1590与高性能图形引擎1538耦合的接口1592。芯片组1590进而可以经由接口1596耦合至第一总线1516。如图15A中所示,各种输入/输出(input/output,I/O)设备1514可连同总线桥1518一起耦合至第一总线1516,该总线桥1518将第一总线1516耦合至第二总线1520。在一个实施例中,各种设备可耦合至第二总线1520,这些设备包括例如,键盘/鼠标1522、通信设备1526以及数据存储单元1528,该数据存储单元1528诸如可包括代码1530的盘驱动器或者其他大容量存储设备。进一步地,音频I/O 1524可耦合至第二总线1520。实施例可以被并入其他类型的系统中,这些系统包括移动设备,诸如智能蜂窝电话、平板计算机、上网本、超级本TM等等。
现在参考图15B,所示出的是根据本发明的实施例的更具体的第二示例性系统1501的框图。图15A和图15B中的相同元件使用相同的附图标记,并且且在图15B中省略了图15A的某些方面以避免使图15B的其他方面模糊。
图15B图示出处理器1570、1580可分别包括集成存储器和I/O控制逻辑(controllogic,“CL”)1571和1581。因此,控制逻辑1571和1581包括集成存储器控制器单元并包括I/O控制逻辑。图15B图示出不仅存储器1532、1534耦合至控制逻辑1571和1581,而且I/O设备1513也耦合至控制逻辑1571和1581。传统I/O设备1515被耦合到芯片组1590。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性代码实现,该机器可读介质表示和/或限定集成电路(诸如,处理器)内的逻辑。例如,机器可读介质可包括表示处理器内的各种逻辑的指令。当由机器读取时,指令可使机器制造用于执行本文中所描述的技术的逻辑。此类表示(被称为“IP核心”)是集成电路的逻辑的可重复使用单元,这些可重复使用单元可以作为描述集成电路的组织的硬件模型而被存储在有形的机器可读介质上。可以将硬件模型供应至在制造集成电路的制造机器上加载硬件模型的各客户或制造设施。可以制造集成电路,使得电路执行与本文中描述的实施例中的任一实施例相关联地描述的操作。
图16是图示根据实施例的可被用于制造集成电路以执行操作的IP核心开发系统1600的框图。IP核心开发系统1600可被用于生成可被并入到较大的设计中或被用于构建整个集成电路(例如,SoC集成电路)的模块化的、可重复使用的设计。设计设施1630能够生成采用高级编程语言(例如,C/C++)的IP核心设计的软件仿真1610。软件仿真1610可以被用于设计、测试和验证IP核心的行为。随后可从仿真模型创建或合成寄存器传输级(registertransfer level,RTL)设计。RTL设计1615是对硬件寄存器之间的数字信号的流进行建模的集成电路(包括使用经建模的数字信号来执行的相关联的逻辑)的行为的抽象。除了RTL设计1615之外,逻辑级或晶体管级的较低级别设计也可被创建、设计或合成。由此,初始设计和仿真的特定细节可有所不同。
可由设计设施进一步将RTL设计1615或等效方案合成到硬件模型1620中,该硬件模型1620可以采用硬件描述语言(hardware description language,HDL)或物理设计数据的某种其他表示。HDL可以进一步被仿真或测试以验证IP核心设计。IP核心设计可使用非易失性存储器1640(例如,硬盘、闪存、或任何非易失性存储介质)被存储以递送到第三方制造设施1665。替代地,可以通过有线连接1650或无线连接1660(例如,经由因特网)传输IP核心设计。制造设施1665随后可制造至少部分地基于IP核心设计的集成电路。所制造的集成电路能够被配置成用于执行根据本文中描述的组件和/或过程的操作。
下文描述的图17A-图25详述了用于实现本文中所描述的组件和/或过程的实施例的示例性体系结构和系统。在一些实施例中,本文中所描述的一个或多个硬件组件和/或指令如下文所详述地被仿真,或被实现为软件模块。
上文所详述的(一个或多个)指令的实施例可以以“通用向量友好指令格式”来体现,这在下文进行详述。在其他实施例中,不利用此类格式,并且使用另一指令格式,然而,下文对于写入掩码寄存器、各种数据变换(混合、广播等)、寻址等的描述一般适用于上文对(一个或多个)指令的实施例的描述。附加地,在下文中详述示例性系统、体系结构和管线。上文中(一个或多个)指令的实施例可在此类系统、体系结构和管线上执行,但是不限于详细描述的那些系统、体系结构和管线。
指令集可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,比特的数量、比特的位置)以指定将要执行的操作(例如,操作码)以及将对其执行该操作的(一个或多个)操作对象和/或(一个或多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的比特的位置,因为较少的字段被包括)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,ISA的每一个指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作对象的字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作对象(源1/目的地以及源2)的操作对象字段;并且该ADD指令在指令流中出现将使得在操作对象字段中具有选择特定操作对象的特定的内容。已经推出和/或发布了被称为高级向量扩展(Advanced Vector Extension,AVX)(AVX1和AVX2)和利用向量扩展(Vector Extension,VEX)编码方案的SIMD扩展集(参见例如2014年9月的64和IA-32体系结构软件开发者手册;并且参见2014年10月的高级向量扩展编程参考)。
示例性指令格式
本文中所描述的(一个或多个)指令的实施例能以不同的格式体现。另外,在下文中详述示例性系统、体系结构和管线。(一个或多个)指令的实施例可在此类系统、体系结构和管线上执行,但是不限于详述的那些系统、体系结构和管线。
通用向量友好指令格式
向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量操作。
图17A-图17B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图17A是图示根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图17B是图示根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式1700定义A类和B类指令模板,这两者都包括无存储器访问1705的指令模板和存储器访问1720的指令模板。在向量友好指令格式的上下文中的术语“通用”是指不束缚于任何特定指令集的指令格式。
尽管将描述其中向量友好指令格式支持以下情况的本发明的实施例:64字节向量操作对象长度(或大小)与32比特(4字节)或64比特(8字节)数据元素宽度(或大小)(并且由此,64字节向量由16个双字大小的元素组成,或者替代地由8个四字大小的元素组成);64字节向量操作对象长度(或大小)与16比特(2字节)或8比特(1字节)数据元素宽度(或大小);32字节向量操作对象长度(或大小)与32比特(4字节)、64比特(8字节)、16比特(2字节)或8比特(1字节)数据元素宽度(或大小);以及16字节向量操作对象长度(或大小)与32比特(4字节)、64比特(8字节)、16比特(2字节)、或8比特(1字节)数据元素宽度(或大小);但是替代实施例可支持更大、更小和/或不同的向量操作对象大小(例如,256字节向量操作对象)与更大、更小或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)。
图17A中的A类指令模板包括:1)在无存储器访问1705的指令模板内,示出无存储器访问的完全舍入控制型操作1710的指令模板、以及无存储器访问的数据变换型操作1715的指令模板;以及2)在存储器访问1720的指令模板内,示出存储器访问的时效性1725的指令模板和存储器访问的非时效性1730的指令模板。图17B中的B类指令模板包括:1)在无存储器访问1705的指令模板内,示出无存储器访问的写入掩码控制的部分舍入控制型操作1712的指令模板以及无存储器访问的写入掩码控制的vsize型操作1717的指令模板;以及2)在存储器访问1720的指令模板内,示出存储器访问的写入掩码控制1727的指令模板。
通用向量友好指令格式1700包括以下列出的按照在图17A-图17B中图示的顺序的如下字段。
格式字段1740——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是可选的。
基础操作字段1742——其内容区分不同的基础操作。
寄存器索引字段1744——其内容直接或者通过地址生成来指定源或目的地操作对象在寄存器中或者在存储器中的位置。这些字段包括足够数量的比特以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。尽管在一个实施例中N可最多三个源寄存器和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持最多两个源,其中这些源中的一个源还用作目的地;可支持最多三个源,其中这些源中的一个源还用作目的地;可支持最多两个源和一个目的地)。
修饰符(modifier)字段1746——其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问1705的指令模板与存储器访问1720的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段1750——其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字段被分成类字段1768、α字段1752和β字段1754。扩充操作字段1750允许在单个指令而非2个、3个或4个指令中执行多组共同的操作。
缩放字段1760——其内容允许用于存储器地址生成(例如,用于使用(2缩放*索引+基址)的地址生成)的索引字段的内容的按比例缩放。
位移字段1762A——其内容用作存储器地址生成的一部分(例如,用于使用(2缩放*索引+基址+位移)的地址生成)。
位移因数字段1762B(注意,位移字段1762A直接在位移因数字段1762B上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;它指定将按比例缩放存储器访问的大小(N)的位移因数——其中N是存储器访问中的字节数量(例如,用于使用(2缩放*索引+基址+按比例缩放的位移)的地址生成)。忽略冗余的低阶比特,并且因此将位移因数字段的内容乘以存储器操作对象总大小(N)以生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段1774(稍后在本文中描述)和数据操纵字段1754C确定。位移字段1762A和位移因数字段1762B不用于无存储器访问1705的指令模板和/或不同的实施例可实现这两者中的仅一个或不实现这两者中的任一个,在这个意义上,位移字段1762A和位移因数字段1762B是可选的。
数据元素宽度字段1764——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中只用于指令中的一些指令)。如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上,该字段是可选的。
写入掩码字段1770——其内容逐数据元素位置地控制目的地向量操作对象中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写入掩蔽,而B类指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码比特具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码比特具有0值时被设为0。该功能的子集是控制正被执行的操作的向量长度的能力(即,从第一个到最后一个正被修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写入掩码字段1770允许部分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写入掩码字段1770的内容选择了多个写入掩码寄存器中的包含要使用的写入掩码的一个写入掩码寄存器(并且由此,写入掩码字段1770的内容间接地标识要执行的掩蔽)的本发明的实施例,但是替代实施例替代地或附加地允许掩码写字段1770的内容直接指定要执行的掩蔽。
立即数字段1772——其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上,该字段是可选的。
类字段1768——其内容在不同类的指令之间进行区分。参考图17A-图17B,该字段的内容在A类和B类指令之间进行选择。在图17A-图17B中,圆角方形用于指示特定的值存在于字段中(例如,在图17A-图17B中分别用于类字段1768的A类1768A和B类1768B)。
A类指令模板
在A类非存储器访问1705的指令模板的情况下,α字段1752被解释为其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作1710和无存储器访问的数据变换型操作1715的指令模板分别指定舍入1752A.1和数据变换1752A.2)的RS字段1752A,而β字段1754区分要执行所指定类型的操作中的哪一种。在无存储器访问1705的指令模板中,缩放字段1760、位移字段1762A和位移缩放字段1762B不存在。
无存储器访问的指令模板——完全舍入控制型操作
在无存储器访问的完全舍入控制型操作1710的指令模板中,β字段1754被解释为其(一个或多个)内容提供静态舍入的舍入控制字段1754A。尽管在本发明的所述实施例中舍入控制字段1754A包括抑制所有浮点异常(suppress all floating point exception,SAE)字段1756和舍入操作控制字段1758,但是替代实施例可支持这两个概念,可将这两个概念编码为同一字段,或仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段1758)。
SAE字段1756——其内容区分是否禁用异常事件报告;当SAE字段1756的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序。
舍入操作控制字段1758——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段1758允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1758的内容覆盖(override)该寄存器值。
无存储器访问的指令模板-数据变换型操作
在无存储器访问的数据变换型操作1715的指令模板中,β字段1754被解释为数据变换字段1754B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
在A类存储器访问1720的指令模板的情况下,α字段1752被解释为驱逐提示字段1752B,其内容区分要使用驱逐提示中的哪一个(在图17A中,对于存储器访问时效性1725的指令模板和存储器访问非时效性1730的指令模板分别指定时效性的1752B.1和非时效性的1752B.2),而β字段1754被解释为数据操纵字段1754C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换以及目的地的向下转换)。存储器访问1720的指令模板包括缩放字段1760,并可选地包括位移字段1762A或位移缩放字段1762B。
向量存储器指令使用转换支持来执行来自存储器的向量加载以及向存储器的向量存储。如同寻常的向量指令,向量存储器指令以数据元素式的方式从/向存储器传输数据,其中实际被传输的元素由被选为写入掩码的向量掩码的内容规定。
存储器访问的指令模板——时效性的
时效性的数据是可能足够快地被重新使用以从缓存操作受益的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
存储器访问的指令模板——非时效性的
非时效性的数据是不太可能足够快地被重新使用以从第一级缓存中的缓存操作受益且应当被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段1752被解释为写入掩码控制(Z)字段1752C,其内容区分由写入掩码字段1770控制的写入掩蔽应当是合并还是归零。
在B类非存储器访问1705的指令模板的情况下,β字段1754的一部分被解释为RL字段1757A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的写入掩码控制部分舍入控制型操作1712的指令模板和无存储器访问的写入掩码控制向量长度(vector length,VSIZE)型操作1717的指令模板分别指定舍入1757A.1和VSIZE1757A.2),而β字段1754的其余部分区分要执行所指定类型的操作中的哪一种。在无存储器访问1705的指令模板中,缩放字段1760、位移字段1762A和位移缩放字段1762B不存在。
在无存储器访问的写入掩码控制部分舍入控制型操作1712的指令模板中,β字段1754的其余部分被解释为舍入操作字段1759A,并且禁用异常事件报告(给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序)。
舍入操作控制字段1759A——正如舍入操作控制字段1758,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段1759A允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1758的内容覆盖该寄存器值。
在无存储器访问的写入掩码控制VSIZE型操作1717的指令模板中,β字段1754的其余部分被解释为向量长度字段1759B,其内容区分要执行多个数据向量长度中的哪一个(例如,128字节、256字节或512字节)。
在B类存储器访问1720的指令模板的情况下,β字段1754的一部分被解释为广播字段1757B,其内容区分是否要执行广播型数据操纵操作,而β字段1754的其余部分被解释为向量长度字段1759B。存储器访问1720的指令模板包括缩放字段1760,并可选地包括位移字段1762A或位移缩放字段1762B。
针对通用向量友好指令格式1700,示出完整操作码字段1774包括格式字段1740、基础操作字段1742和数据元素宽度字段1764。尽管示出了其中完整操作码字段1774包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段1774包括少于所有的这些字段。完整操作码字段1774提供操作代码(操作码)。
扩充操作字段1750、数据元素宽度字段1764和写入掩码字段1770允许逐指令地以通用向量友好指令格式指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核心可支持仅A类、仅B类、或者可支持这两类。举例而言,旨在用于通用计算的高性能通用乱序核心可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核心可仅支持A类,并且旨在用于通用计算和图形和/或科学(吞吐量)计算两者的核心可支持A类和B类两者(当然,具有来自这两类的模板和指令的一些混合、但是并非来自这两类的所有模板和指令的核心在本发明的范围内)。同样,单个处理器可包括多个核心,这多个核心全部都支持相同的类,或者其中不同的核心支持不同的类。举例而言,在具有单独的图形核心和通用核心的处理器中,图形核心中的旨在主要用于图形和/或科学计算的一个核心可仅支持A类,而通用核心中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核心。当然,在本发明的不同实施例中,来自一类的特征也可在其他类中实现。将使以高级语言编写的程序成为(例如,及时编译或静态编译)各种不同的可执行形式,这些可执行形式包括:1)仅具有由用于执行的目标处理器支持的(一个或多个)类的指令的形式;或者2)具有替代例程并具有控制流代码的形式,该替代例程使用所有类的指令的不同组合来编写,该控制流代码选择这些例程以基于由当前正在执行代码的处理器支持的指令来执行。
示例性专用向量友好指令格式
图18A-图18C是图示根据本发明的实施例的示例性专用向量友好指令格式的框图。图18A示出专用向量友好指令格式1800,其指定各字段的位置、大小、解释和次序、以及那些字段中的一些字段的值,在这个意义上,该专用向量友好指令格式1800是专用的。专用向量友好指令格式1800可用于扩展x86指令集,并且由此字段中的一些字段与如在现有的x86指令集及其扩展(例如,AVX)中所使用的那些字段类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示来自图17A-图17B的字段,来自图18A-图18C的字段映射到来自图17A-图17B的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式1700的上下文中参考专用向量友好指令格式1800描述了本发明的实施例,但是本发明不限于专用向量友好指令格式1800,除非另有声明。例如,通用向量友好指令格式1700构想了各种字段的各种可能的大小,而专用向量友好指令格式1800示出为具有特定大小的字段。作为具体示例,尽管在专用向量友好指令格式1800中数据元素宽度字段1764被图示为一比特字段,但是本发明不限于此(即,通用向量友好指令格式1700构想数据元素宽度字段1764的其他大小)。
通用向量友好指令格式1700包括以下列出的按照图18A中图示的顺序的如下字段。
EVEX前缀(字节0-3)1802——以四字节形式进行编码。
格式字段1740(EVEX字节0,比特[7:0])——第一字节(EVEX字节0)是格式字段1740,并且它包含0x62(在本发明的一个实施例中,为用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个比特字段。
REX字段1805(EVEX字节1,比特[7-5])——由EVEX.R比特字段(EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特[6]–X)以及(EVEX字节1,比特[5]–B)组成。EVEX.R、EVEX.X和EVEX.B比特字段提供与对应的VEX比特字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个比特(rrr、xxx和bbb)进行编码,由此可通过对EVEX.R、EVEX.X和EVEX.B相加来形成Rrrr、Xxxx和Bbbb。
REX’字段1810——这是REX’字段1810的第一部分,并且是用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’比特字段(EVEX字节1,比特[4]–R’)。在本发明的一个实施例中,该比特与以下指示的其他比特一起以比特反转的格式存储以(在公知x86的32比特模式下)与BOUND指令进行区分,该BOUND指令的实操作码字节是62,但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储该指示的比特以及以下其他指示的比特。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.R’、EVEX.R以及来自其他字段的其他RRR来形成R’Rrrr。
操作码映射字段1815(EVEX字节1,比特[3:0]–mmmm)——其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段1764(EVEX字节2,比特[7]–W)——由记号EVEX.W表示。EVEX.W用于定义数据类型(32比特数据元素或64比特数据元素)的粒度(大小)。
EVEX.vvvv 1820(EVEX字节2,比特[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作对象进行编码,并且对具有两个或更多个源操作对象的指令有效;2)EVEX.vvvv对针对特定向量位移以1补码的形式指定的目的地寄存器操作对象进行编码;或者3)EVEX.vvvv不对任何操作对象进行编码,该字段被预留,并且应当包含1111b。由此,EVEX.vvvv字段1820对以反转(1补码)的形式存储的第一源寄存器指定符的4个低阶比特进行编码。取决于该指令,额外不同的EVEX比特字段用于将指定符大小扩展到32个寄存器。
EVEX.U 1768类字段(EVEX字节2,比特[2]-U)——如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1825(EVEX字节2,比特[1:0]-pp)——提供了用于基础操作字段的附加比特。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SIMD前缀的益处(EVEX前缀仅需要2比特,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码成SIMD前缀编码字段;并且在运行时在被提供给解码器的PLA之前被扩展成传统SIMD前缀(因此,在无需修改的情况下,PLA既可执行传统格式的这些传统指令又可执行EVEX格式的这些传统指令)。虽然较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是为了一致性,特定实施例以类似的方式扩展,但允许由这些传统SIMD前缀指定的不同含义。替代实施例可重新设计PLA以支持2比特SIMD前缀编码,并且由此不需要扩展。
α字段1752(EVEX字节3,比特[7]–EH,也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制、以及EVEX.N;也以α图示)——如先前所述,该字段是针对上下文的。
β字段1754(EVEX字节3,比特[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,还以βββ图示)——如前所述,此字段是针对上下文的。
REX’字段1810——这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’比特字段(EVEX字节3,比特[3]–V’)。该比特以比特反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写入掩码字段1770(EVEX字节3,比特[2:0]-kkk)——其内容指定写入掩码寄存器中的寄存器的索引,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写入掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线到所有对象的写入掩码或绕过掩蔽硬件的硬件来实现)。
实操作码字段1830(字节4)还被称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段1840(字节5)包括MOD字段1842、Reg字段1844和R/M字段1846。如先前所述的,MOD字段1842的内容将存储器访问操作和非存储器访问操作区分开。Reg字段1844的作用可被归结为两种情形:对目的地寄存器操作对象或源寄存器操作对象进行编码;或者被视为操作码扩展,并且不用于对任何指令操作对象进行编码。R/M字段1846的作用可包括如下:对引用存储器地址的指令操作对象进行编码;或者对目的地寄存器操作对象或源寄存器操作对象进行编码。
缩放、索引、基址(Sacle,Index,Base,SIB)字节(字节6)——如先前所述的,缩放字段1850的内容用于存储器地址生成。SIB.xxx 1854和SIB.bbb 1856——先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段1762A(字节7-10)——当MOD字段1842包含10时,字节7-10是位移字段1762A,并且它与传统32比特位移(disp32)一样地工作,并且以字节粒度工作。
位移因数字段1762B(字节7)——当MOD字段1842包含01时,字节7是位移因数字段1762B。该字段的位置与以字节粒度工作的传统x86指令集8比特位移(disp8)的位置相同。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移之间寻址;在64字节缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8比特;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段1762B是disp8的重新解释;当使用位移因数字段1762B时,通过将位移因数字段的内容乘以存储器操作对象访问的大小(N)来确定实际位移。该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。此类经压缩的位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移的冗余低阶比特不需要被编码。换句话说,位移因数字段1762B替代传统x86指令集8比特位移。由此,位移因数字段1762B以与x86指令集8比特位移相同的方式被编码(因此,在ModRM/SIB编码规则中没有变化),唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度方面没有变化,而仅在有硬件对位移值的解释方面有变化(这需要将位移按比例缩放存储器操作对象的大小以获得字节式地址偏移)。立即数字段1772如先前所述地操作。
完整操作码字段
图18B是图示根据本发明的一个实施例的构成完整操作码字段1774的具有专用向量友好指令格式1800的字段的框图。具体地,完整操作码字段1774包括格式字段1740、基础操作字段1742和数据元素宽度(W)字段1764。基础操作字段1742包括前缀编码字段1825、操作码映射字段1815和实操作码字段1830。
寄存器索引字段
图18C是图示根据本发明的一个实施例的构成寄存器索引字段1744的具有专用向量友好指令格式1800的字段的框图。具体地,寄存器索引字段1744包括REX字段1805、REX’字段1810、MODR/M.reg字段1844、MODR/M.r/m字段1846、VVVV字段1820、xxx字段1854和bbb字段1856。
扩充操作字段
图18D是图示根据本发明的一个实施例的构成扩充操作字段1750的具有专用向量友好指令格式1800的字段的框图。当类(U)字段1768包含0时,它表明EVEX.U0(A类1768A);当它包含1时,它表明EVEX.U1(B类1768B)。当U=0且MOD字段1842包含11(表明无存储器访问操作)时,α字段1752(EVEX字节3,比特[7]–EH)被解释为rs字段1752A。当rs字段1752A包含1(舍入1752A.1)时,β字段1754(EVEX字节3,比特[6:4]–SSS)被解释为舍入控制字段1754A。舍入控制字段1754A包括一比特SAE字段1756和两比特舍入操作字段1758。当rs字段1752A包含0(数据变换1752A.2)时,β字段1754(EVEX字节3,比特[6:4]–SSS)被解释为三比特数据变换字段1754B。当U=0且MOD字段1842包含00、01或10(表明存储器访问操作)时,α字段1752(EVEX字节3,比特[7]–EH)被解释为驱逐提示(EH)字段1752B,并且β字段1754(EVEX字节3,比特[6:4]–SSS)被解释为三比特数据操纵字段1754C。
当U=1时,α字段1752(EVEX字节3,比特[7]–EH)被解释为写入掩码控制(Z)字段1752C。当U=1且MOD字段1842包含11(表明无存储器访问操作)时,β字段1754的一部分(EVEX字节3,比特[4]–S0)被解释为RL字段1757A;当它包含1(舍入1757A.1)时,β字段1754的其余部分(EVEX字节3,比特[6-5]–S2-1)被解释为舍入操作字段1759A,而当RL字段1757A包含0(VSIZE 1757.A2)时,β字段1754的其余部分(EVEX字节3,比特[6-5]-S2-1)被解释为向量长度字段1759B(EVEX字节3,比特[6-5]–L1-0)。当U=1且MOD字段1842包含00、01或10(表明存储器访问操作)时,β字段1754(EVEX字节3,比特[6:4]–SSS)被解释为向量长度字段1759B(EVEX字节3,比特[6-5]–L1-0)和广播字段1757B(EVEX字节3,比特[4]–B)。
示例性寄存器体系结构
图19是根据本发明的一个实施例的寄存器体系结构1900的框图。在所图示的实施例中,有32个512比特宽的向量寄存器1910;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较低阶256个比特覆盖(overlay)在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128个比特(ymm寄存器的较低阶128个比特)覆盖在寄存器xmm0-15上。专用向量友好指令格式1800对这些被覆盖的寄存器堆操作,如在以下表格中所图示。
换句话说,向量长度字段1759B在最大长度与一个或多个其他较短长度之间进行选择,其中每一个此类较短长度是前一长度的一半,并且不具有向量长度字段1759B的指令模板在最大向量长度上操作。此外,在一个实施例中,专用向量友好指令格式1800的B类指令模板对紧缩(packed)或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置要么保持与在指令之前相同,要么归零。
写入掩码寄存器1915——在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每一写入掩码寄存器的大小是64比特。在替代实施例中,写入掩码寄存器1915的大小是16比特。如先前所述,在本发明的一个实施例中,向量掩码寄存器k0无法用作写入掩码;当将正常指示k0的编码用作写入掩码时,它选择硬连线的写入掩码0xFFFF,从而有效地禁止写入掩蔽用于那个指令。
通用寄存器1925——在所示出的实施例中,有十六个64比特通用寄存器,这些寄存器与现有的x86寻址模式一起使用以对存储器操作对象寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器堆(x87栈)1945,在其上面重叠了MMX紧缩整数平坦寄存器堆1950——在所图示的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80比特浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器来对64比特紧缩整数数据执行操作,以及为在MMX与XMM寄存器之间执行的一些操作保存操作对象。
本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核心体系结构、处理器和计算机体系结构
处理器核心能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核心的实现可以包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用乱序核心;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用乱序核心;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核心。此类不同的处理器导致不同的计算机系统体系结构,这些计算机系统体系结构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核心,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)片上系统,其可以将所描述的CPU(有时被称为(一个或多个)应用核心或(一个或多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核心体系结构,随后描述示例性处理器和计算机体系结构。
示例性核心体系结构
有序和乱序核心框图
图20A是图示根据本发明的各实施例的示例性有序管线和示例性的寄存器重命名的乱序发出/执行管线的框图。图20B是示出根据本发明的各实施例的要包括在处理器中的有序体系结构核心的示例性实施例和示例性的寄存器重命名的乱序发出/执行体系结构核心的框图。图20A-图20B中的实线框图示有序管线和有序核心,而虚线框的可选增加图示寄存器重命名的、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图20A中,处理器管线2000包括取得(fetch)阶段2002、长度解码阶段2004、解码阶段2006、分配阶段2008、重命名阶段2010、调度(也被称为调遣或发出)阶段2012、寄存器读取/存储器读取阶段2014、执行阶段2016、写回/存储器写入阶段2018、异常处置阶段2022和提交阶段2024。
图20B示出处理器核心2090,该处理器核心2090包括前端单元2030,该前端单元2030耦合到执行引擎单元2050,并且前端单元2030和执行引擎单元2050两者都耦合到存储器单元2070。核心2090可以是精简指令集计算(reduced instruciton set computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或混合或替代性核心类型。作为又一选项,核心2090可以是专用核心,诸如例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processing unit,GPGPU)核心、图形核心,等等。
前端单元2030包括分支预测单元2032,该分支预测单元2032耦合到指令缓存单元2034,该指令缓存单元2034耦合到指令转译后备缓冲器(translation loodaside buffer,TLB)2036,该指令转译后备缓冲器2036耦合到指令取得单元2038,该指令取得单元2038耦合到解码单元2040。解码单元2040(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元2040可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(programmablelogic array,PLA)、微代码只读存储器(read only memory,ROM)等。在一个实施例中,核心2090包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元2040中,或以其他方式在前端单元2030内)。解码单元2040耦合到执行引擎单元2050中的重命名/分配器单元2052。
执行引擎单元2050包括重命名/分配器单元2052,该重命名/分配器单元2052耦合到引退单元2054和一个或多个调度器单元的集合2056。(一个或多个)调度器单元2056表示任何数量的不同调度器,包括预留站、中央指令窗等。(一个或多个)调度器单元2056耦合到(一个或多个)物理寄存器堆单元2058。(一个或多个)物理寄存器堆单元2058中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一个指令的地址的指令指针)等等。在一个实施例中,(一个或多个)物理寄存器堆单元2058包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供体系结构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元2058由引退单元2054重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)未来的堆、(一个或多个)历史缓冲器、(一个或多个)引退寄存器堆;使用寄存器图谱和寄存器池,等等)。引退单元2054和(一个或多个)物理寄存器堆单元2058耦合到(一个或多个)执行集群2060。(一个或多个)执行集群2060包括一个或多个执行单元的集合2062以及一个或多个存储器访问单元的集合2064。执行单元2062可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(一个或多个)调度器单元2056、(一个或多个)物理寄存器堆单元2058和(一个或多个)执行集群2060示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线,和/或各自具有其自身的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群的存储器访问管线——并且在分开的存储器访问管线的情况下,实现其中仅该管线的执行集群具有(一个或多个)存储器访问单元2064的某些实施例)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,并且其余管线可以是有序的。
存储器访问单元的集合2064耦合到存储器单元2070,该存储器单元2070包括数据TLB单元2072,该数据TLB单元2072耦合到数据缓存单元2074,该数据缓存单元2074耦合到第二级(L2)缓存单元2076。在一个示例性实施例中,存储器访问单元2064可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元2070中的数据TLB单元2072。指令缓存单元2034还耦合到存储器单元2070中的第二级(L2)缓存单元2076。L2缓存单元2076耦合到一个或多个其他级别的缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发出/执行核心体系结构可如下所述地实现管线2000:1)指令取得2038执行取得阶段2002和长度解码阶段2004;2)解码单元2040执行解码阶段2006;3)重命名/分配器单元2052执行分配阶段2008和重命名阶段2010;4)(一个或多个)调度器单元2056执行调度阶段2012;5)(一个或多个)物理寄存器堆单元2058和存储器单元2070执行寄存器读取/存储器读取阶段2014;执行集群2060执行执行阶段2016;6)存储器单元2070和(一个或多个)物理寄存器堆单元2058执行写回/存储器写入阶段2018;7)各单元可牵涉到异常处置阶段2022;以及8)引退单元2054和(一个或多个)物理寄存器堆单元2058执行提交阶段2024。
核心2090可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的可选的附加扩展)),其中包括本文中描述的(一个或多个)指令。在一个实施例中,核心2090包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核心可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核心为物理核心正在同时多线程化的线程中的每一个线程提供逻辑核心)、或其组合(例如,时分取得和解码以及此后的诸如超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序体系结构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据缓存单元2034/2074以及共享的L2缓存单元2076,但是替代实施例可以具有用于指令和数据两者的单个内部缓存,诸如例如,第一级(L1)内部缓存或多个级别的内部缓存。在一些实施例中,该系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可以在核心和/或处理器的外部。
具体的示例性有序核心体系结构
图21A-图21B图示更具体的示例性有序核心体系结构的框图,该核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图21A是根据本发明的实施例的单个处理器核心以及它至管芯上互连网络2102的连接及其第二级(L2)缓存的本地子集2104的框图。在一个实施例中,指令解码器2100支持具有紧缩数据指令集扩展的x86指令集。L1缓存2106允许对进入标量和向量单元中的、对缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元2108和向量单元2110使用分开的寄存器集合(分别为标量寄存器2112和向量寄存器2114),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)缓存2106读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2缓存的本地子集2104是全局L2缓存的一部分,该全局L2缓存被划分成多个分开的本地子集,每个处理器核心一个本地子集。每个处理器核心具有到其自身的L2缓存的本地子集2104的直接访问路径。由处理器核心读取的数据被存储在其L2缓存子集2104中,并且可以与其他处理器核心访问其自身的本地L2缓存子集并行地被快速访问。由处理器核心写入的数据被存储在其自身的L2缓存子集2104中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012比特宽。
图21B是根据本发明的实施例的图21A中的处理器核心的一部分的展开图。图21B包括L1缓存2106的L1数据缓存2106A部分,以及关于向量单元2110和向量寄存器2114的更多细节。具体地,向量单元2110是16宽向量处理单元(VPU)(见16宽ALU 1028),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元2120支持对寄存器输入的混合,通过数值转换单元2122A-B支持数值转换,并且通过复制单元2124支持对存储器输入的复制。写入掩码寄存器2126允许谓词所得的向量写入。
图22是根据本发明的实施例的可具有多于一个的核心、可具有集成存储器控制器、以及可具有集成图形器件的处理器2200的框图。图22中的实线框图示具有单个核心2202A、系统代理2210、一个或多个总线控制器单元的集合2216的处理器2200,而虚线框的可选增加图示具有多个核心2202A-N、系统代理单元2210中的一个或多个集成存储器控制器单元的集合2214以及专用逻辑2208的替代处理器2200。
因此,处理器2200的不同实现可包括:1)CPU,其中专用逻辑2208是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心),并且核心2202A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心、这两者的组合);2)协处理器,其中核心2202A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核心;以及3)协处理器,其中核心2202A-N是大量通用有序核心。因此,处理器2200可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(general purpose graphicsprocessing unit,通用图形处理单元)、高吞吐量的集成众核(many integrated core,MIC)协处理器(包括30个或更多核心)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器2200可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次体系包括核心内的一个或多个级别的缓存、一个或多个共享缓存单元的集合2206、以及耦合到集成存储器控制器单元的集合2214的外部存储器(未示出)。共享缓存单元的集合2206可包括一个或多个中间级别的缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的缓存、最后一级缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元2212将集成图形逻辑2208、共享缓存单元的集合2206以及系统代理单元2210/(一个或多个)集成存储器控制器单元2214互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个缓存单元2206与核心2202A-N之间维持一致性。
在一些实施例中,一个或多个核心2202A-N能够实现多线程化。系统代理2210包括协调和操作核心2202A-N的那些组件。系统代理单元2210可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核心2202A-N以及集成图形逻辑2208的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心2202A-N在体系结构指令集方面可以是同构的或异构的;即,核心2202A-N中的两个或更多个核心可能能够执行相同的指令集,而其他核心可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机体系结构
图23-图24是示例性计算机体系结构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图23,所示出的是根据本发明一个实施例的系统2300的框图。系统2300可以包括一个或多个处理器2310、2315,这些处理器耦合到控制器中枢2320。在一个实施例中,控制器中枢2320包括图形存储器控制器中枢(graphics memory controller hub,GMCH)2390和输入/输出中枢(Input/Output Hub,IOH)2350(其可以在分开的芯片上);GMCH2390包括存储器和图形控制器,存储器2340和协处理器2345耦合到该存储器和图形控制器;IOH 2350将输入/输出(,I/O)设备2360耦合到GMCH 2390。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器2340和协处理器2345直接耦合到处理器2310,并且控制器中枢2320与IOH 2350处于单个芯片中。
附加的处理器2315的可选性在图23中通过虚线来表示。每一处理器2310、2315可包括本文中描述的处理核心中的一个或多个,并且可以是处理器2200的某一版本。
存储器2340可以是例如动态随机存取存储器(dynamic randommemory,DRAM)、相变存储器(phase change memory,PCM)或这两者的组合。对于至少一个实施例,控制器中枢2320经由诸如前端总线(frontside bus,FSB)之类的多点分支(multi-drop)总线、诸如快速路径互连(QuickPath Interconnect,QPI)之类的点到点接口、或者类似的连接2395来与(一个或多个)处理器2310、2315进行通信。
在一个实施例中,协处理器2345是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢2320可以包括集成图形加速器。
在物理资源2310、2315之间可以存在包括体系结构、微体系结构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器2310执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器2310将这些协处理器指令识别为具有应当由附连的协处理器2345执行的类型。因此,处理器2310在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发出到协处理器2345。(一个或多个)协处理器2345接受并执行所接收的协处理器指令。
现在参考图24,示出的是根据本发明的实施例的SoC 2400的框图。图22中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的可选的特征。在图24中,(一个或多个)互连单元2402被耦合到:应用处理器2410,其包括一个或多个核心的集合2202A-N的集合以及(一个或多个)共享缓存单元2206;系统代理单元2210;(一个或多个)总线控制器单元2216;(一个或多个)集成存储器控制器单元2214;一个或多个协处理器的集合2420,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(static random access memory,SRAM)单元2430;直接存储器访问(direct memoryaccess,DMA)单元2432;以及用于耦合到一个或多个外部显示器的显示单元2440。在一个实施例中,(一个或多个)协处理器2420包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的机制的实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,程序代码也可用汇编语言或机器语言来实现。实际上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况中,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器内的各种逻辑,该指令在被机器读取时,使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核心”的此类表示可以被存储在有形的机器可读介质上,并且可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可重写致密盘(compact diskrewritable,CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(erasable programmable read-onlymemory,EPROM)、闪存、电可擦除可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM);相变存储器(phase change memory,PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态、有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(Hardware Description Language,HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。此类实施例也可以被称为程序产品。
用于绝对差总和计算的指令和逻辑
图26–示例计算系统
现在参考图26,所示出的是根据一个或多个实施例的计算系统2600的框图。在一些实施例中,系统2600可以是电子设备或组件的全部或部分。例如,系统2600可以是蜂窝电话、计算机、服务器、网络设备、片上系统(SoC)、控制器、无线收发机、电源单元等。此外,在一些实施例中,系统2600可以是诸如数据中心、计算集群等之类的相关或经互连设备的群组的部分。
如图26中所示,系统2600可包括处理器2610、存储器2640和存储装置2670。进一步地,虽然未在图26中示出,但系统2600可包括其他组件。在一个或多个实施例中,存储器2640可以利用任何(一种或多种)类型的计算机存储器(例如,动态随机存取存储器(dynamic random-access memory,DRAM)、静态随机存取存储器(static random-accessmemory,SRAM)、非易失性存储器(non-volatile memory,NVM)、DRAM和NVM的组合等)来实现。存储装置2670可以使用(一个或多个)持久性(例如,非易失性)存储设备中的一个或多个来实现,该(一个或多个)持久性存储设备诸如,(一个或多个)基于盘的存储设备(例如,(一个或多个)硬盘驱动器(HDD))、(一个或多个)固态设备(solid state device,SSD)(例如,闪存设备)、光盘等等。
在一个或多个实施例中,处理器2610可以是硬件处理设备(例如,中央处理单元(central processing unit,CPU)、片上系统(SoC)等等)。如所示,处理器2610可包括任何数量的处理器引擎2620A-2620N(也一般被称为处理引擎2620)。每个处理引擎2620可包括绝对差总和(SAD)电路2630。
在一个或多个实施例中,SAD电路2630可包括执行指令集体系结构(ISA)中定义的SAD指令的功能。在一些实施例中,SAD电路2630可执行单个SAD指令来处理多个输入向量,并且生成包括多个SAD值的输出向量(在本文中被称为“SAD向量”)。例如,SAD指令的输出可被用于运动估计内核、率失真优化模式决策、过滤/检测算法等等。在一些实施例中,相较于常规技术(例如,使用包括多个分立的指令的代码函数),SAD电路2630可以以相对更快且更高效的方式来执行SAD指令,并且由此可改善程序执行的性能。此外,使用SAD可简化并加速对软件应用进行编程的任务。下文参考图27-图32进一步描述了SAD电路2630的各种细节。
图27–示例处理系统
现在参考图27,所示出的是根据一个或多个实施例的示例处理系统2700。处理系统2700可包括各种硬件组件,即取得单元2710、解码单元2720、调度器/分配器单元2730、以及(一个或多个)执行单元2740。在一些实施例中,图27中示出的硬件组件中的所有或一些硬件组件可被包括在处理器(例如,图26中示出的处理器2610)或其任何部分(例如,图26中示出的处理引擎2620和/或SAD电路2630)。
如图27中所示,取得单元2710可取得指令流中所包括的SAD指令。解码单元2720可对SAD指令进行解码。调度/分配单元2730可将SAD指令分配至(一个或多个)执行单元2740中的一个或多个。进一步地,(一个或多个)执行单元2740可使用多个输入向量来执行SAD指令。SAD指令的单个执行可生成一个或多个SAD向量。在一些实施例中,SAD可指定两个或更多个输入向量。每个输入向量可包括多个值。
在一些实施例中,指令集体系结构(ISA)可定义各种类型(例如,比特宽度、数据类型、字大小等等)的多个SAD指令。例如,ISA的128比特SAD指令可处理各自包括16字节(即,128比特)的两个输入向量(在本文中也被称为“向量通道(vector lane)”)。128比特SAD指令可计算输出向量,该输出向量包括第一输入向量中的两个或更多个字节的所选的组和来自第二输入向量的两个或更多个字节的所选的组的四个或更多个绝对差总和。第一和第二输入向量中的起始位置(在本文中被称为“偏移”)可被编码在128比特SAD指令的8比特立即数中。第一和第二输入向量中的两个或更多个字节的所选组可按顺序(例如,按连续次序)、按跨度等等来选择。
在另一示例中,ISA的256比特SAD指令可处理各自包括两个128比特输入向量的两个向量通道。256比特SAD指令可计算各自包括8个绝对差总和的两个输出向量。四个输入向量中的偏移可被编码在256比特SAD指令的8比特立即数中。
在又一示例中,ISA的512比特SAD指令可处理各自包括两个128比特输入向量的四个向量通道。512比特SAD指令可计算各自包括8个绝对差总和的四个输出向量。八个输入向量中的偏移可被编码在256比特SAD指令的8比特立即数中。8比特立即数的编码在下文参考图28A进行讨论。
图28A-图28B–示例SAD操作
现在参考图28A-图28B,所示出的是根据一些实施例的示例SAD操作。示例SAD操作可由SAD电路2630(在图26中示出)来执行。在一些实施例中,图28A-图28B中示出的示例SAD操作可与示例512比特SAD指令的执行相对应。
在一些实施例中,如图28A中所示,512比特SAD指令的执行可处理第一向量通道(被标记为“通道1”),该第一向量通道包括两个128比特输入向量,即,向量A 2810和向量B2811(在图28中示出)。向量2810和2811中的每一者包括16字节(在图28A中被编号为0至15)。此外,如图28B中所示,512比特SAD指令的同一执行还可处理三个附加的向量通道(被标记为“通道2”、“通道3”和“通道4”),这三个附加的向量通道各自包括两个128比特输入向量(即,向量2812和2813、向量2814和2815、以及向量2816和2817)。
在一些实施例中,512比特SAD指令的执行可在8个计算步骤(被标记为“S1”至“S8”)中被执行。每个计算步骤S1-S8可包括:对于两个输入向量中的每个输入向量,使用偏移值来标识包括四个连续字节的窗口部分的起始。例如,如图28A中所示,计算步骤S1包括:使用偏移1(指向字节0)来标识包括向量A 2810中的字节0、1、2和3的第一窗口部分的起始,并且还使用偏移2(指向字节0)来标识包括向量B 2811中的字节0、1、2和3的第二窗口部分的起始。注意,尽管在该示例操作中偏移1和偏移2两者均等于0,但此类偏移值在其他示例操作中可能是不同的。
每个计算步骤还可包括:对于两个窗口部分中的每个有序字节位置(即,第一、第二、第三或第四字节位置),确定两个窗口位置的字节之间的差的绝对值(在本文中也被称为“绝对差”)。随后可对这四个绝对差求和,以获得输出向量的单个字。例如,在计算步骤S1中,每个窗口部分的第一位置中的字节之间(即,向量2810的字节0与向量2811的字节0之间)的绝对差可被确定,每个窗口部分的第二位置之间(即,向量2810的字节1与向量2811的字节1之间)的绝对差可被确定,依此类推。计算步骤S1中确定的四个绝对差可被求和,以生成输出向量2830的字0。
在一些实施例中,每个后续计算步骤(即,S2-S8)可包括:将向量A 2810中的窗口部分的起始递增1个字节。例如,对于计算步骤S2,向量A 2810中的窗口部分现在包括字节1、2、3和4。此外,计算步骤S2可包括确定向量2810的字节1与向量2811的字节0之间的绝对差、向量2810的字节2与向量2811的字节1之间的绝对差,依此类推。计算步骤S2中确定的四个绝对差可被求和,以生成输出向量2830的字1。计算步骤S3至S8能够以与针对计算步骤S2所描述的方式类似的方式被执行,以生成针对通道1的输出向量2830的字2至7。在一些实施例中,输出向量2830可直接被存储,或者可被变换(例如,被求和、被舍入、被截断、被饱和等)以匹配所要求的输出数据宽度。
在一些实施例中,如上文所讨论,对512比特SAD指令的执行还可处理向量通道2-4(在图28B中示出)。例如,通道2-4的处理可包括执行与上文针对通道1(出于清楚性而未在图28B中示出)所描述的那些计算步骤类似的计算步骤S1-S8。然而,在一些实施例中,512比特SAD指令可针对不同的通道指定不同的偏移。例如,如图28B中所示,处理通道2可包括:使用偏移3(指向字节4)来标识包括向量C 2812中的字节4、5、6和7的窗口部分的起始,并且使用偏移4(指向字节0)来标识包括向量D 2813中的字节0、1、2和3的窗口部分的起始。此外,处理通道3可包括使用偏移5和6,并且处理通道4可包括使用偏移7和8。
在一个或多个实施例中,512比特SAD指令可使用8比特立即数2840来指定偏移1-4(例如,针对通道1和2)。每个偏移可通过将立即数2840中的一个或两个比特的比特值乘以乘数(例如,4)来确定。例如,可将立即数2840的比特2的值(例如,“0”)乘以4来获得针对向量A 2810的偏移1(例如,“0”),并且可将立即数2840的比特0-1的值乘以4来获得针对向量B2811的偏移2。在另一示例中,可将立即数2840的比特5的值(例如,“1”)乘以4来获得针对向量C 2812的偏移3(例如,“4”),并且可将立即数2840的比特3-4的值乘以4来获得针对向量D2813的偏移4。
在一些实施例中,偏移5-8的值(例如,针对通道3和4)可被设置为分别等于偏移1-4的值。例如,立即数2840的比特2的值可被用于获得偏移1和5,并且立即数2840的比特0-1的值可被用于获得偏移2和6。此外,立即数2840的比特5的值可被用于获得偏移3和7,并且立即数2840的比特3-4的值可被用于获得偏移4和8。以此种方式,一个或多个实施例可允许在SAD指令的8比特立即数中对8个偏移值进行编码。相应地,一些实施例可允许SAD指令处理四个不同的向量通道,而不要求指令的立即数中的附加比特。
在一些实施例中,针对16比特数据类型来执行512比特SAD指令可引起被计算的连续SAD块的数量被减少至4。相应地,为了跨8个连续SAD块,512比特SAD指令可被修改或扩展为在两个256比特通道上操作。例如,第一和第二128比特通道(即,通道1和2)可被组合为第一256比特通道,并且第三和第四128比特通道(即,通道3和4)可被组合为第二256比特通道。此外,构想了可针对不同的数据类型(例如,浮点、32比特等)以及针对更大的立即数操作对象而执行SAD指令的类似变换或修改。
注意,尽管图28A-图28B图示了示例实现方式,但各实施例不限于此方面。例如,构想了立即数2840可包括任何数量的比特(例如,16比特、32比特等)。在另一示例中,构想了8个输入向量中的偏移可被编码在立即数2840的、与图28A中示出的编码中的那些比特不同的比特中。
图29-示例方法
现在参考图29,所示出的是根据一个或多个实施例的用于使用绝对差总和指令的方法2900的流程图。在各实施例中,方法2900可由可包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理设备上运行的指令)或其组合的处理逻辑执行。在固件或软件实施例中,方法2900可由存储在诸如光学、半导体或磁存储设备之类的非暂态机器可读介质中的计算机执行的指令实现。机器可读介质可存储数据,该数据如果由至少一个机器使用则使得该至少一个机器制造用于执行方法的至少一个集成电路。为了说明起见,方法2900中所涉及的动作可在下文参考图26-图28B来描述,图26-图28B示出了根据一个或多个实施例的示例。然而,本文中所讨论的各实施例的范围不限于此方面。
框2910可包括:取得被包括在软件程序中的绝对差总和(SAD)指令。框2920可包括:对SAD指令进行解码,以获得经解码的SAD指令。例如,参考图27,取得单元2710(例如,在程序执行期间)取得指令流中所包括的SAD指令,并且解码单元2720对SAD指令进行解码。
框2930可包括:执行经解码的SAD指令,以基于多个输入向量来生成SAD输出向量,其中该SAD输出向量包括多个绝对差值。例如,参考图27和图28A-图28B,可由(一个或多个)执行单元2730来执行经解码的SAD指令。在一些实施例中,SAD指令可以是可被执行以处理向量通道1-4的512比特SAD指令,其中每个向量通道包括两个128比特输入向量(即,通道1中的向量2810和2811)。512比特SAD指令的执行可在8个计算步骤S1-S8中被执行,其中,第一计算步骤S1使用偏移值(即,偏移1-8)来标识每个输入向量中的窗口部分的起始。后续计算步骤S2-S8中的每个计算步骤可包括将窗口的起始递增1个字节。此外,计算步骤S1-S8中的每个计算步骤可包括:计算窗口部分的对应字节之间的绝对差,并对这些绝对差求和,以获得输出向量2830的对应字。在一些实施例中,偏移1-4可通过将立即数2840中的一个或两个比特的比特值乘以乘数(例如,4)来确定。此外,偏移5-8可通过分别复制偏移1-4来确定。在框2930之后,方法2900可被完成。
图30-示例存储介质
现在参考图30,所示出的是存储可执行指令3010的存储介质3000。在一些实施例中,存储介质3000可以是非暂态机器可读介质,诸如光学介质、半导体、磁存储设备等等。可执行指令3010可以是可由处理设备执行的。此外,可执行指令3010可由至少一个机器用于制造至少一个集成电路来执行如图29中所示出的方法。
下列条款和/或示例涉及进一步的实施例。
在示例1中,一种用于执行指令的处理器可包括:取得电路,该取得电路用于取得指令,该指令包括绝对差总和(SAD)指令;解码电路,该解码电路用于对SAD指令进行解码;以及执行电路,该执行电路用于在经解码的SAD指令的执行期间基于多个输入向量来生成SAD输出向量,该SAD输出向量包括多个绝对差值。
在示例2中,如示例1所述的主题可以可选地包括:多个输入向量包括被包括在第一向量通道中的第一输入向量和第二输入向量,其中该第一输入向量和第二输入向量包括相等数量的数据单元。
在示例3中,如示例1-2所述的主题可以可选地包括,执行电路用于:基于SAD指令的立即数来确定第一偏移和第二偏移;基于第一偏移来标识第一输入向量的第一窗口部分;以及基于第二偏移来标识第二输入向量的第二窗口部分。
在示例4中,如示例1-3所述的主题可以可选地包括,执行电路用于:针对第一窗口部分中的每个字节,确定第一窗口部分中的字节与第二窗口部分中相对应的字节之间的差的绝对值,以获得绝对差值;对针对第一窗口部分中的字节所获得的绝对差值进行求和,以计算SAD输出向量的第一字节;以及将第一窗口部分的起始位置递增1个字节。
在示例5中,如示例1-4所述的主题可以可选地包括:多个输入向量包括被包括在第二向量通道中的第三输入向量和第四输入向量,并且执行电路用于:基于SAD指令的立即数来确定第三偏移和第四偏移;基于第三偏移来标识第三输入向量的第三窗口部分;以及基于第四偏移来标识第四输入向量的第四窗口部分。
在示例6中,如示例1-5所述的主题可以可选地包括:多个输入向量包括被包括在第三向量通道中的第五输入向量和第六输入向量,并且执行电路用于:基于第一偏移来标识第五输入向量的第五窗口部分;以及基于第二偏移来标识第六输入向量的第六窗口部分。
在示例7中,如示例1-6所述的主题可以可选地包括,执行电路进一步用于:将第一偏移确定为立即数的第一比特集合的值乘以乘数的乘积;将第二偏移确定为立即数的第二比特集合的值乘以乘数的乘积;将第三偏移确定为立即数的第三比特集合的值乘以乘数的乘积;以及将第四偏移确定为立即数的第四比特集合的值乘以乘数的乘积。
在示例8中,如示例1-7所述的主题可以可选地包括:立即数是包括比特0-7的8比特立即数;第一比特集合包括立即数的比特2;第二比特集合包括立即数的比特0和比特1;第三比特集合包括立即数的比特5;第四比特集合包括立即数的比特3和比特4;并且乘数为4。
在示例9中,一种用于执行指令的方法可包括:由处理器取得被包括在软件程序中的绝对差总和(SAD)指令;由处理器对SAD指令进行解码,以获得经解码的SAD指令;以及由处理器执行经解码的SAD指令,以基于多个输入向量来生成SAD输出向量,该SAD输出向量包括多个绝对差值。
在示例10中,如示例9所述的主题可以可选地包括:多个输入向量包括被包括在第一向量通道中的第一输入向量和第二输入向量,其中该第一输入向量和第二输入向量包括相等数量的数据单元。
在示例11中,如示例9-10所述的主题可以可选地包括:基于SAD指令的立即数来确定第一偏移和第二偏移;基于第一偏移来标识第一输入向量的第一窗口部分;以及基于第二偏移来标识第二输入向量的第二窗口部分。
在示例12中,如示例9-11所述的主题可以可选地包括:针对第一窗口部分中的每个字节,确定第一窗口部分中的字节与第二窗口部分中相对应的字节之间的差的绝对值,以获得平方差值;对针对第一窗口部分中的字节所获得的绝对差值进行求和,以计算SAD输出向量的第一字;以及将第一窗口部分的起始位置递增1个字节。
在示例13中,如示例9-12所述的主题可以可选地包括:多个输入向量包括被包括在第二向量通道中的第三输入向量和第四输入向量,并且方法包括:基于SAD指令的立即数来确定第三偏移和第四偏移;基于第三偏移来标识第三输入向量的第三窗口部分;以及基于第四偏移来标识第四输入向量的第四窗口部分。
在示例14中,如示例9-13所述的主题可以可选地包括:将第一偏移确定为立即数的第一比特集合的值乘以乘数的乘积;将第二偏移确定为立即数的第二比特集合的值乘以乘数的乘积;将第三偏移确定为立即数的第三比特集合的值乘以乘数的乘积;以及将第四偏移确定为立即数的第四比特集合的值乘以乘数的乘积。
在示例15中,如示例9-14所述的主题可以可选地包括:SAD指令是512比特SAD指令,多个输入向量中的每个输入向量包括128比特,并且方法包括:基于SAD指令的立即数的比特值来确定第一向量通道和第二向量通道中的第一偏移集合;以及基于第一偏移集合来确定第三向量通道和第四向量通道中的第二偏移集合。
在示例16中,一种计算设备可包括:一个或多个处理器;以及存储器,具有存储于其中的多个指令,该多个指令在由一个或多个处理器执行时,使计算设备执行如示例9至15中的任一项所述的方法。
在示例17中,至少一种机器可读介质,具有存储于其上的数据,该数据如果由至少一个机器使用,则使得该至少一个机器执行如示例9至15中任一项所述的方法。
在示例18中,一种电子设备可包括用于执行如示例9至15中任一项所述的方法的装置。
在示例19中,一种用于执行指令的系统可包括耦合至外部存储器的处理器。处理器可包括:取得电路,该取得电路用于取得指令,该指令包括绝对差总和(SAD)指令;解码电路,该解码电路用于对SAD指令进行解码;以及执行电路,该执行电路用于在经解码的SAD指令的执行期间基于多个输入向量来生成SAD输出向量,该SAD输出向量包括多个绝对差值。
在示例20中,如示例19所述的主题可以可选地包括:多个输入向量包括被包括在第一向量通道中的第一输入向量和第二输入向量,并且该第一输入向量和第二输入向量包括相等数量的数据单元。
在示例21中,如示例19-20所述的主题可以可选地包括,执行电路用于:基于SAD指令的立即数来确定第一偏移和第二偏移;基于第一偏移来标识第一输入向量的第一窗口部分;以及基于第二偏移来标识第二输入向量的第二窗口部分。
在示例22中,如示例19-21所述的主题可以可选地包括执行电路用于:针对第一窗口部分中的每个字节,确定第一窗口部分中的字节与第二窗口部分中相对应的字节之间的差的绝对值,以获得平方差值;对针对第一窗口部分中的字节所获得的绝对差值进行求和,以计算SAD输出向量的第一字节;以及将第一窗口部分的起始位置递增1个字节。
在示例23中,如示例19-22所述的主题可以可选地包括:多个输入向量包括被包括在第二向量通道中的第三输入向量和第四输入向量,并且执行电路用于:基于SAD指令的立即数来确定第三偏移和第四偏移;基于第三偏移来标识第三输入向量的第三窗口部分;以及基于第四偏移来标识第四输入向量的第四窗口部分。
在示例24中,一种用于执行指令的设备可包括:用于取得被包括在软件程序中的绝对差总和(SAD)指令的装置;用于对SAD指令进行解码以获得经解码的SAD指令的装置;以及用于执行经解码的SAD指令以基于多个输入向量来生成SAD输出向量的装置,该SAD输出向量包括多个绝对差值。
在示例25中,如示例24所述的主题可以可选地包括:多个输入向量包括第一向量通道中所包括的第一输入向量和第二输入向量,并且该第一输入向量和第二输入向量包括相等数量的数据单元。
在示例26中,如示例24-25所述的主题可以可选地包括用于以下操作的装置:基于SAD指令的立即数来确定第一偏移和第二偏移;基于第一偏移来标识第一输入向量的第一窗口部分;以及基于第二偏移来标识第二输入向量的第二窗口部分。
在示例27中,如示例24-26所述的主题可以可选地包括用于以下操作的装置:针对第一窗口部分中的每个字节,确定第一窗口部分中的字节与第二窗口部分中相对应的字节之间的差的绝对值,以获得平方差值;对针对第一窗口部分中的字节所获得的绝对差值进行求和,以计算SAD输出向量的第一字;以及将第一窗口部分的起始位置递增1个字节。
在示例28中,如示例24-27所述的主题可以可选地包括多个输入向量包括被包括早第二向量通道中的第三输入向量和第四输入向量,并且可以可选地包括用于以下操作的装置:基于SAD指令的立即数来确定第三偏移和第四偏移;基于第三偏移来标识第三输入向量的第三窗口部分;以及基于第四偏移来标识第四输入向量的第四窗口部分。
在示例29中,如示例24-28所述的主题可以可选地包括用于以下操作的装置:将第一偏移确定为立即数的第一比特集合的值乘以乘数的乘积;将第二偏移确定为立即数的第二比特集合的值乘以乘数的乘积;将第三偏移确定为立即数的第三比特集合的值乘以乘数的乘积;以及将第四偏移确定为立即数的第四比特集合的值乘以乘数的乘积。
在示例30中,如示例24-29所述的主题可以可选地包括SAD指令是512比特SAD指令并且多个输入向量中的每个输入向量包括128比特,并且可以可选地包括用于以下操作的装置:基于SAD指令的立即数的比特值来确定第一向量通道和第二向量通道中的第一偏移集合;以及基于第一偏移集合来确定第三向量通道和第四向量通道中的第二偏移集合。
根据一些实施例,指令集体系结构(ISA)的指令可被提供以执行SAD计算。在一些实施例中,单个SAD指令可被执行,以生成包括多个SAD值的向量。因此,使用SAD可加速并简化编程软件应用的任务。此外,相较于常规技术(例如,使用包括多个分立的指令的代码函数),处理器可以以更快且高效的方式来执行SAD指令,并且由此可改善程序执行的性能。此外,在一些实施例中,SAD指令可以以允许处理相比于采用常规方法能够处理的更多的输入向量的方式来对偏移值编码。
注意,尽管图26-图30图示出各种示例实现方式,但是其他变型是可能的。例如,构想一个或多个实施例可被实现在参考图1-图25所描述的示例设备和系统中。注意,为了说明起见而提供图1-图30中示出的示例,并且图1-图30中示出的示例不旨在限制任何实施例。具体而言,尽管实施例可以为清楚起见而以简化的形式示出,但实施例可包括任何数量和/或布置的组件。例如,构想一些实施例除了示出的那些组件之外还可包括任何数量的组件,并且示出的组件的不同布置可在某些实现方式中出现。此外,构想在图1-图30中示出的示例中的细节可在一个或多个实施例中的任何地方使用。
应理解,以上示例的各种组合是可能的。实施例可在许多不同类型的系统中被使用。例如,在一个实施例中,通信设备可以被布置成用于执行本文中所描述的各种方法和技术。当然,本发明的范围不限于通信设备,并且代替地,其他实施例可以涉及用于处理指令的其他类型的装置、或者一种或多种机器可读介质,该机器可读介质包括指令,响应于在计算设备上执行这些指令,这些指令使该设备执行本文中所描述的方法与技术中的一者或多者。
在本说明书通篇中对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性被包括在本发明中所包含的至少一个实现中。因此,短语“一个实施例”或“在实施例中”的出现不一定指代同一实施例。此外,特定的特征、结构或特性可按照与所示特定实施例不同的其他适当形式来创立,而且所有此类形式可被涵盖在本申请的权利要求中。
尽管已参照有限数量的实施例描述了本发明,但是本领域技术人员将从中领会众多修改和变型。所附权利要求旨在将所有此类修改和变型涵盖为落入本发明的真实精神与范围内。

Claims (23)

1.一种处理器,包括:
取得电路,所述取得电路用于取得指令,所述指令包括绝对差总和(SAD)指令;
解码电路,所述解码电路用于对所述SAD进行解码;以及
执行电路,所述执行电路用于在经解码的SAD指令的执行期间基于多个输入向量来生成SAD输出向量,所述SAD输出向量包括多个绝对差值。
2.如权利要求1所述的处理器,其中,所述多个输入向量包括:被包括在第一向量通道中的第一输入向量和第二输入向量,所述第一输入向量和所述第二输入向量包括相等数量的数据单元。
3.如权利要求2所述的处理器,所述执行电路用于:
基于所述SAD指令的立即数来确定第一偏移和第二偏移;
基于所述第一偏移来标识所述第一输入向量的第一窗口部分;以及
基于所述第二偏移来标识所述第二输入向量的第二窗口部分。
4.如权利要求3所述的处理器,所述执行电路用于:
针对所述第一窗口部分中的每个字节,确定所述第一窗口部分中的字节与所述第二窗口部分中相对应的字节之间的差的绝对值,以获得绝对差值;
对针对所述第一窗口部分中的字节所获得的绝对差值进行求和,以计算所述SAD输出向量的第一字节;以及
将所述第一窗口部分的起始位置递增1个字节。
5.如权利要求3所述的处理器,其中,所述多个输入向量包括:被包括在第二向量通道中的第三输入向量和第四输入向量,并且所述执行电路进一步用于:
基于所述SAD指令的所述立即数来确定第三偏移和第四偏移;
基于所述第三偏移来标识所述第三输入向量的第三窗口部分;以及
基于所述第四偏移来标识所述第四输入向量的第四窗口部分。
6.如权利要求5所述的处理器,其中,所述多个输入向量包括:被包括在第三向量通道中的第五输入向量和第六输入向量,并且所述执行电路进一步用于:
基于所述第一偏移来标识所述第五输入向量的第五窗口部分;以及
基于所述第二偏移来标识所述第六输入向量的第六窗口部分。
7.如权利要求5所述的处理器,所述执行电路进一步用于:
将所述第一偏移确定为所述立即数的第一比特集合的值乘以乘数的乘积;
将所述第二偏移确定为所述立即数的第二比特集合的值乘以所述乘数的乘积;
将所述第三偏移确定为所述立即数的第三比特集合的值乘以所述乘数的乘积;以及
将所述第四偏移确定为所述立即数的第四比特集合的值乘以所述乘数的乘积。
8.如权利要求7所述的处理器,其中:
所述立即数是包括比特0-7的8比特立即数;
所述第一比特集合包括所述立即数的比特2;
所述第二比特集合包括所述立即数的比特0和比特1;
所述第三比特集合包括所述立即数的比特5;
所述第四比特集合包括所述立即数的比特3和比特4;并且
所述乘数为4。
9.一种方法,包括:
由处理器取得被包括在软件程序中的绝对差总和(SAD)指令;
由所述处理器对所述SAD指令进行解码,以获得经解码的SAD指令;以及
由所述处理器执行所述经解码的SAD指令,以基于多个输入向量来生成SAD输出向量,所述SAD输出向量包括多个绝对差值。
10.如权利要求9所述的方法,其中,所述多个输入向量包括:被包括在第一向量通道中的第一输入向量和第二输入向量,所述第一输入向量和所述第二输入向量包括相等数量的数据单元。
11.如权利要求10所述的方法,包括:
基于所述SAD指令的立即数来确定第一偏移和第二偏移;
基于所述第一偏移来标识所述第一输入向量的第一窗口部分;以及
基于所述第二偏移来标识所述第二输入向量的第二窗口部分。
12.如权利要求11所述的方法,包括:
针对所述第一窗口部分中的每个字节,确定所述第一窗口部分中的字节与所述第二窗口部分中的相对应的字节之间的差的绝对值,以获得绝对差值;
对针对所述第一窗口部分中的字节所获得的绝对差值进行求和,以计算所述SAD输出向量的第一字;以及
将所述第一窗口部分的起始位置递增1个字节。
13.如权利要求11所述的方法,其中,所述多个输入向量包括:被包括在第二向量通道中的第三输入向量和第四输入向量,并且所述方法包括:
基于所述SAD指令的所述立即数来确定第三偏移和第四偏移;
基于所述第三偏移来标识所述第三输入向量的第三窗口部分;以及
基于所述第四偏移来标识所述第四输入向量的第四窗口部分。
14.如权利要求13所述的方法,包括:
将所述第一偏移确定为所述立即数的第一比特集合的值乘以乘数的乘积;
将所述第二偏移确定为所述立即数的第二比特集合的值乘以所述乘数的乘积;
将所述第三偏移确定为所述立即数的第三比特集合的值乘以所述乘数的乘积;以及
将所述第四偏移确定为所述立即数的第四比特集合的值乘以所述乘数的乘积。
15.如权利要求9所述的方法,其中,所述SAD指令是512比特SAD指令,其中,所述多个输入向量中的每个输入向量包括128比特,并且所述方法包括:
基于所述SAD指令的立即数的比特值来确定第一向量通道和第二向量通道中的第一偏移集合;以及
基于所述第一偏移集合来确定第三向量通道和第四向量通道中的第二偏移集合。
16.一种计算设备,包括:
一个或多个处理器;以及
存储器,具有存储于其中的多个指令,所述多个指令在由所述一个或多个处理器执行时,使得所述计算设备执行如权利要求9至15中任一项所述的方法。
17.至少一种机器可读介质,具有存储于其上的数据,所述数据如果由至少一个机器使用,则使得所述至少一个机器执行如权利要求9至15中任一项所述的方法。
18.一种电子设备,包括用于执行如权利要求9至15中任一项所述的方法的装置。
19.一种系统,包括:
处理器,所述处理器包括:
取得电路,所述取得电路用于取得指令,所述指令包括绝对差总和(SAD)指令;
解码电路,所述解码电路用于对所述SAD进行解码;以及
执行电路,所述执行电路用于在经解码的SAD指令的执行期间基于多个输入向量来生成SAD输出向量,所述SAD输出向量包括多个绝对差值;以及
外部存储器,所述外部存储器耦合至所述处理器。
20.如权利要求19所述的系统,其中,所述多个输入向量包括:被包括在第一向量通道中的第一输入向量和第二输入向量,所述第一输入向量和所述第二输入向量包括相等数量的数据单元。
21.如权利要求20所述的系统,所述执行电路用于:
基于所述SAD指令的立即数来确定第一偏移和第二偏移;
基于所述第一偏移来标识所述第一输入向量的第一窗口部分;以及
基于所述第二偏移来标识所述第二输入向量的第二窗口部分。
22.如权利要求21所述的系统,所述执行电路用于:
针对所述第一窗口部分中的每个字节,确定所述第一窗口部分中的字节与所述第二窗口部分中的相对应的字节之间的差的绝对值,以获得绝对差值;
对针对所述第一窗口部分中的字节所获得的绝对差值进行求和,以计算所述SAD输出向量的第一字节;以及
将所述第一窗口部分的起始位置递增1个字节。
23.如权利要求21所述的系统,其中,所述多个输入向量包括:被包括在第二向量通道中的第三输入向量和第四输入向量,并且所述执行电路进一步用于:
基于所述SAD指令的所述立即数来确定第三偏移和第四偏移;
基于所述第三偏移来标识所述第三输入向量的第三窗口部分;以及
基于所述第四偏移来标识所述第四输入向量的第四窗口部分。
CN202280025004.8A 2021-03-26 2022-02-18 用于绝对差总和的指令和逻辑 Pending CN117083596A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/214,291 US20220308881A1 (en) 2021-03-26 2021-03-26 Instruction and logic for sum of absolute differences
US17/214,291 2021-03-26
PCT/US2022/016888 WO2022203785A1 (en) 2021-03-26 2022-02-18 Instruction and logic for sum of absolute differences

Publications (1)

Publication Number Publication Date
CN117083596A true CN117083596A (zh) 2023-11-17

Family

ID=83364553

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280025004.8A Pending CN117083596A (zh) 2021-03-26 2022-02-18 用于绝对差总和的指令和逻辑

Country Status (4)

Country Link
US (1) US20220308881A1 (zh)
EP (1) EP4315043A1 (zh)
CN (1) CN117083596A (zh)
WO (1) WO2022203785A1 (zh)

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6738793B2 (en) * 1994-12-01 2004-05-18 Intel Corporation Processor capable of executing packed shift operations
US6377970B1 (en) * 1998-03-31 2002-04-23 Intel Corporation Method and apparatus for computing a sum of packed data elements using SIMD multiply circuitry
US7054895B2 (en) * 2001-06-21 2006-05-30 Ligos Corporation System and method for parallel computing multiple packed-sum absolute differences (PSAD) in response to a single instruction
US7376686B2 (en) * 2003-01-31 2008-05-20 Via Technologies, Inc. Apparatus and method for generating packed sum of absolute differences
US8290044B2 (en) * 2006-05-10 2012-10-16 Qualcomm Incorporation Instruction for producing two independent sums of absolute differences
US8131788B1 (en) * 2007-08-06 2012-03-06 Xilinx, Inc. Determining sum of absolute differences in parallel
US8386545B2 (en) * 2009-10-26 2013-02-26 Via Technologies, Inc. System and method of using common adder circuitry for both a horizontal minimum instruction and a sum of absolute differences instruction
CN104126169B (zh) * 2011-12-22 2018-11-09 英特尔公司 用于在两个向量寄存器的相应打包数据元素之间执行绝对差计算的系统、装置和方法
WO2013095599A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a double blocked sum of absolute differences
US9405535B2 (en) * 2012-11-29 2016-08-02 International Business Machines Corporation Floating point execution unit for calculating packed sum of absolute differences
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
KR101679508B1 (ko) * 2015-04-09 2016-11-24 경희대학교 산학협력단 절대차 합 연산장치 및 방법

Also Published As

Publication number Publication date
US20220308881A1 (en) 2022-09-29
EP4315043A1 (en) 2024-02-07
WO2022203785A1 (en) 2022-09-29

Similar Documents

Publication Publication Date Title
US11093278B2 (en) Modifying processor frequency based on interrupt rate
US20200218677A1 (en) Management of Processor Performance Based on User Interrupts
CN113272889A (zh) 基于用户活动调整显示刷新率
US11886884B2 (en) Branch prediction based on coherence operations in processors
US11216276B2 (en) Controlling power state demotion in a processor
CN113474745A (zh) 在处理器中执行软扼制和硬扼制
WO2019067126A1 (en) CONTROL BLOCKS FOR PROCESSOR FEED MANAGEMENT
US11188138B2 (en) Hardware unit for controlling operating frequency in a processor
US20200004584A1 (en) Hardware Queue Manager for Scheduling Requests in a Processor
US20210064110A1 (en) Control blocks for processor power management
CN113849869A (zh) 为持续性存储器生成密钥
EP4020183A1 (en) Instruction and logic for sum of square differences
CN116266142A (zh) 处理器中的频率预算
US20230100693A1 (en) Prediction of next taken branches in a processor
CN114661349A (zh) 用于代码预取的指令和逻辑
CN117083596A (zh) 用于绝对差总和的指令和逻辑
US20240111598A1 (en) Sequencing circuit for a processor
US11354213B2 (en) Utilization metrics for processing engines
US11514551B2 (en) Configuration profiles for graphics processing unit
EP4109217A2 (en) Power limits for virtual partitions in a processor
US20240012735A1 (en) Processor including monitoring circuitry for virtual counters
CN116303210A (zh) 用于计算机处理器的寄存器接口
CN113396375A (zh) 调整处理器中的扼制阈值

Legal Events

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