CN105359052A - 用于积分图像计算指令的方法和装置 - Google Patents
用于积分图像计算指令的方法和装置 Download PDFInfo
- Publication number
- CN105359052A CN105359052A CN201380062173.XA CN201380062173A CN105359052A CN 105359052 A CN105359052 A CN 105359052A CN 201380062173 A CN201380062173 A CN 201380062173A CN 105359052 A CN105359052 A CN 105359052A
- Authority
- CN
- China
- Prior art keywords
- vector
- instruction
- field
- opposite side
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 239000013598 vector Substances 0.000 claims abstract description 230
- 230000010354 integration Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 61
- 238000010586 diagram Methods 0.000 description 36
- 238000006073 displacement reaction Methods 0.000 description 27
- 238000006243 chemical reaction Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 18
- 210000004027 cell Anatomy 0.000 description 14
- 239000003607 modifier Substances 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 238000007667 floating Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 238000013461 design Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000003756 stirring Methods 0.000 description 5
- 230000002123 temporal effect Effects 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 244000045947 parasite Species 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000001816 cooling Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000002349 favourable effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000003384 imaging method Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 239000011435 rock Substances 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000002789 length control Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000035699 permeability Effects 0.000 description 1
- 230000010363 phase shift Effects 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
- G06F9/3555—Indexed addressing using scaling, e.g. multiplication of index
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
Abstract
本文描述了一种方法,其通过创建第二矢量并创建第三矢量来执行图像积分计算。第二矢量通过执行第一指令来创建,其中第一指令将第一矢量的交替元素加到所述第一矢量的相应的相邻元素并将所得到的和呈现到所述第二矢量中。第一指令还穿过所述相应的相邻元素而到所述第二矢量。第三矢量通过执行第二指令来创建,其中第二指令将所述第二矢量的一侧的元素加到所述第二矢量的另一侧的元素并且穿过所述第二矢量的所述另一侧。
Description
技术领域
本发明的领域涉及计算机处理系统,并且更具体地,涉及积分图像计算指令。
背景技术
图1示出了利用逻辑电路在半导体芯片上来实现的处理核心100的高级框图。处理核心包括管线101。管线由多阶段组成,每个阶段被设计成在完全执行程序代码指令所需要的多步骤过程中执行特定步骤。这些通常至少包括:1)指令提取和解码;2)数据提取;3)执行;4)写回。对通过指令所标识并在先前的阶段(例如,上文的步骤2))中所提取的数据来执行由在另一先前阶段所提取并解码的指令(例如,在上文的步骤1)中)所标识的特定操作。对其进行操作的数据通常是从(通用)寄存器存储空间102提取的。在完成操作时所创建的新数据通常也被“写回”到寄存器存储空间(例如,在上文的阶段4))。
与执行阶段相关联的逻辑电路通常由多个“执行单元”或“功能单元”103_1到103_n组成,“执行单元”或“功能单元”103_1到103_n各自被设计成执行其自身的独特的操作子集(例如,第一功能单元执行整型数学操作,第二功能单元执行浮点指令,第三功能单元执行从/到高速缓存/存储器的加载/存储操作等)。由所有的功能单元执行的所有操作的集合对应于由处理核心100所支持的“指令集”。
两种类型的处理器架构在计算机科学领域被广泛认可:“标量”和“矢量”。标量处理器被设计成执行对单个集合的数据执行操作的指令,而矢量处理器被设计成执行对多个集合的数据执行操作的指令。图2A和图2B呈现了展示出标量处理器与矢量处理器之间的基本差别的比较性示例。
图2A示出了标量AND指令的示例,其中单个操作数集A和B被与在一起以产生单一(或“标量”)结果C(即AB=C)。相比之下,图2B示出了矢量AND指令的示例,其中两个操作数集A/B和D/E被分别与操作以产生矢量结果C、F(即A.AND.B=C并且D.AND.E=F)。关于术语,“矢量”是具有多个“元素”的数据元。例如,矢量V=Q,R,S,T,U具有五个不同的元素:Q,R,S,T及U。示例性矢量V的“大小”是5(因为它具有五个元素)。
图1还示出了不同于通用寄存器空间102的矢量寄存器空间107的存在。具体而言,通用寄存器空间102名义上用于存储标量值。由此,当执行单元中的任何一个执行标量运算时,它们名义上使用调用自(并将结果写回到)通用寄存器存储空间102的操作数。相反,当执行单元中的任何一个执行矢量运算时,它们名义上使用调用自(并将结果写回到)矢量寄存器空间107的操作数。存储器的不同区域可以被类似地分配以用于标量值和矢量值的存储。
也要注意的是掩码逻辑104_1到104_N和105_1到105_N存在于到功能单元103_1到103_N的相应的输入端以及从功能单元103_1到103_N的输出端。在各种实现中,对于矢量运算,实际上仅实现这些层中的一个——尽管这不是一个严格的要求(尽管在图1未示出,但是可以想象,只执行标量而不执行矢量运算的执行单元无需具有任何掩码层)。对于采用掩码的任何矢量指令,输入掩码逻辑104_1到104_N和/或输出掩码逻辑105_1到105_N可以用于控制对哪些元素有效地进行了操作以用于矢量指令。这里,掩码矢量从掩码寄存器空间106读取(例如,连同从矢量寄存器存储空间107读取的输入操作数矢量一起)并被呈现给向掩码逻辑104、105层中的至少一个。
在执行矢量程序代码的过程中,每个矢量指令不需要要求完整的数据字。例如,用于一些指令的输入矢量可能仅是8个元素,用于其它指令的输入矢量可以是16个元素,矢量用于其它指令的输入矢量可以是32个元素等。因此,掩码层104/105用于识别应用于特定指令的完整的矢量数据字的元素集,以使不同的矢量大小跨指令有效。典型地,对于每个矢量指令,保存在掩码寄存器空间106中的特定掩码模式由指令调出,从掩码寄存器空间提取并提供到掩码层104/105中的一个或两个,以针对特定的矢量运算“启用”正确的元素集。
图3a示出了“积分图像”计算。积分图像计算对图像表面区域301上的所有像素值(例如,由具有角坐标(0,0)和(x',y')的矩形区域所定义的)求和。对图像表面区域301上的像素值的求和基本上对应于离散积分的计算,其中像素值对应于在表面区域上被积分的离散函数。
一种技术用于针对沿第二维的每个离散位置而对沿区域301的第一维的所有值求和。例如,如在图3a中所观察到的,针对表面区域301内的y轴上的特定位置,对在表面区域301内沿x轴的所有像素值求和302。针对表面区域301内的每个y轴位置执行该操作产生针对每个y轴位置的和值。然后对这些和值进行求和(基本上在第二(y)轴上)以产生针对整个表面区域301的最终求和值。
问题在于确定积分图像的效率——特别是当计算具有重叠像素值的多个表面区域时。目前,使用了标量序列而不是矢量序列。图3b示出了用于计算针对不同表面区域宽度的和的标量指令执行序列的示例。例如,结果311对应于表面区域宽度二,而结果312对应于表面区域宽度四。在此,ADD运算的严格串行和标量性质导致了需要三个机器周期来计算仅针对四个不同宽度的求和。所述另一种方式,如在图3b中观察到的,在宽度求和中的下一个进展需要等待先前对较小的宽度的加法。
为了处理与图像积分的计算相关联的低效率,替代方法已使用了采用“近似”实际计算的算法的程序代码序列。当需要精确时,近似是不够的。
附图说明
在附图的图中通过示例的而非限制的方式示出了本发明,在附图中,类似的附图标记指示类似的元素,其中:
图1示出了指令执行管线;
图2A、2B涉及矢量处理;
图3A、3B涉及到积分图像计算;
图4示出了针对积分图像计算的两个指令的操作;
图5A示出了用于实现图4的指令的功能单元逻辑设计;
图5B示出了针对图4的指令的流程图;
图5C示出了针对两个不同指令的相应的流程图;
图6A是根据本发明实施例的示出了通用矢量友好指令格式及其A类指令模板的框图;
图6B是根据本发明实施例的示出了通用矢量友好指令格式及其B类指令模板的框图;
图7A-C是根据本发明实施例的示出了示例性特定矢量友好指令格式的框图。
图8是根据本发明的一个实施例的寄存器架构的框图。
图9A是根据本发明实施例的单CPU核心的框图,连同其与管芯上的互连网络的连接以及其2级(L2)高速缓存的本地子集的框图。
图9B是根据本发明实施例的图9A中的CPU核心的一部分的分解图。
图10是根据本发明实施例的示出了示例性无序架构的框图。
图11是根据本发明的一个实施例的系统的框图。
图12是根据本发明的一个实施例的第二系统的框图。
图13是根据本发明实施例的第三系统的框图。
图14是根据本发明实施例的SoC的框图。
图15是根据本发明实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图。
图16是根据本发明实施例的对比了使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
图4示出了针对使用矢量方法来改善依靠严格的串行、标量ADD指令的低效率的两个新指令401、402的程序流。如在图4中所观察的,两个指令401、402都对某些输入矢量元素执行并行的ADD运算并穿过(passthrough)某些输入矢量元素。在两个指令之间,哪些矢量元件被相加和哪些矢量元素被穿过的组合是不同的。
更具体地,第一指令401将每隔一个的元素加到其最右边的邻居上,并穿过每个这样的最右边的邻居。即输入矢量409的元素410、411被加到它们相应的最右边的邻居412、413,以产生结果元素414、415,并且最右边的邻居412、413也被穿过到结果416,以创建具有与穿过项412、413交错的求和项414、415的结果。相比之下,第二指令402将来自其输入矢量416元素的右手侧(最低阶)集417的同一(最高阶)输入元素414加到输入矢量元素的左手侧(最高阶)集419的每个元素上,并且穿过输入元素的右手侧集417。
由此,如在图4中所观察到的,第二指令402的结果420包括在其左手侧421的求和项但穿过在其右手侧422的项。两个指令的结果420(其中第二指令402对第一指令401的结果进行操作)产生针对以自右至左增加图像尺寸为取向的不同宽度的图像区域(对于上面讨论的特定实施例)的和(例如,沿诸如x轴之类的相同轴)。那些或普通技术人员将理解,左与右取向是设计者的选择问题,并且可以在替代实施例中容易地反转。
因此,比较图3b的指令序列与图4的指令序列,要注意的是一个完整的机器周期已经从计算中消除。
图5a示出了针对可以实现上面关于图4所讨论的两个指令的功能单元的逻辑设计。如在图5a中所观察到的,将输入矢量501的元素路由到加法器多路复用器库502,并路由到穿过多路复用器库503。加法器多路复用器库502的输出节点被传递到加法器库504的输入节点。穿过多路复用器库503的控制输入确定针对结果矢量505的相对应元素是来自输入矢量501的穿过项还是来自加法器库504的加法器项。加法器多路复用器库502的控制输入确定针对特定输出矢量505元素位置而对哪些输入矢量元素相加。
加法器库504的加法器将呈现给该加法器的输入项相加并将相对应的和相转发给穿过多路复用器库503。在此,例如,在ROM506中存储的微代码可以提供各种多路复用器,其中具有针对要执行的特定指令的合适的控制输入。这两个指令可利用不同的操作码来指定,或者,利用具有规定要执行哪些特定指令的不同立即操作数的相同操作码来指定。如果不使用微代码,则适当的控制信号可以被产生,例如,将操作码/立即操作数解码成适当的多路复用器控制输入值的硬接线解码器电路。要注意的是,输入矢量块501和输出矢量块505可对应于与指令执行管线相关联的(例如,耦合到指令执行管线的)矢量寄存器的寄存器空间或在指令执行管线内的特定寄存器的寄存器空间。
要注意的是,更为普遍地,加法器和穿过多路复用器库可以分别被看作针对加法器选择电路和穿过选择电路的一种类型的实施例。
为便于说明,在图5a中观察到的特定的接线路线是与在图4中观察到的具体操作“排成一行”。再一次,那些或普通技术人员将能够不同地对结果进行定向和/或形成模式(pattern),和/或不同地对内部操作进行定向和/或形成模式。图5b示出了更通用的功能单元设计,其能够针对任何加法器,将任何两个输入矢量元素相加并穿过任何输入矢量元素。
图5c示出了针对两个不同指令的相应的流程图550、560。对于第一指令550,以交替的方式551来选择被选中用于进行相加的输入矢量元素以及被选中用于进行穿过的输入矢量元素。被选中用于进行相加的输入矢量元素被加到也被选中用于进行穿过的相邻矢量元素552。该结果被呈现为来自加法的求和项与来自穿过项以交替的方式交错。对于第二指令560,来自输入矢量的第一侧的输入元素被选中用于相加到在输入矢量561的另一侧上的输入元素(例如,所有)。第一侧的元素被穿过到结果562,并且来自涉及另一侧的项的加法的求和项被传递到结果563。
要注意的是,上文所讨论的指令序列可以在机器可读介质上被实现为用于由具有执行指令的指令执行管线的计算机来执行的程序代码。程序代码的指令序列可由被设计成例如从更高级别的程序流程描述产生目标代码的编译器生成。
通用矢量友好指令格式
上文详述的指令的实施例可以以在下文详述的“通用矢量友好指令格式”来实施。在其它实施例中,不使用这样的格式而使用另一指令格式,然而,写掩码寄存器的以下描述、各种数据转换(搅拌(swizzle)、广播等)、寻址等一般可应用于上文的对指令的实施例的描述。此外,下文详述了示例性系统、架构和管线。上文的指令的实施例可在这样的系统、架构和管线上执行,但并不局限于详细描述的那些。
矢量友好指令格式是适合于矢量指令的指令格式(例如,存在特定于矢量运算的某些字段)。虽然描述了在其中矢量和标量运算都通过矢量友好指令格式被支持的实施例,但是替代实施例只使用矢量运算的矢量友好指令格式。
示例性通用矢量友好指令格式——图6A-B
图6A-B是根据本发明实施例的示出了通用矢量友好指令格式和其指令模板的方框图。图6A是根据本发明实施例的示出了通用矢量友好指令格式和其A类指令模板的框图;而图6B是根据本发明实施例的示出了通用矢量友好指令格式和其B类指令模板的框图。特别地,针对通用矢量友好指令格式600而定义了A类和B类指令模板,这两者都包括无存储器访问605指令模板和存储器访问620指令模板。在矢量友好指令格式的上下文中的术语通用是指代不与何特定指令集关联的指令格式。虽然将描述在其中矢量友好指令格式的指令对来源于寄存器(无存储器访问605指令模板)或寄存器/存储器(存储器访问620指令模板)的矢量进行操作的实施例,但是本发明的替代实施例可仅支持其中的一个。此外,虽然将描述在其中存在矢量指令格式的加载和存储指令的实施例,但是替代实施例替代地或者另外地具有将矢量移动到寄存器中和将矢量移出寄存器(例如,从存储器到寄存器中、从寄存器到存储器中、在寄存器之间)的不同指令格式的指令。此外,虽然本发明的实施例将被描述为支持两个类别的指令模板,但是替代的实施例可以仅支持这些中的一个或多于两个。
虽然在将描述的本发明的实施例中,矢量友好指令格式支持以下格式: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字节)数据元素宽度(或大小);但是,替代实施例可以支持更多、更少和/或不同的矢量操作数大小(例如,656字节的矢量操作数)且具有更多、更少、或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度。
图6A中的A类指令模板包括:1)在无存储器访问605指令模板存在所示的无存储器访问、全面舍入控制类型操作610指令模板和无存储器访问、数据转换类型操作615指令模板;和2)在存储器访问620指令模板中存在所示的存储器访问、时间625指令模板和存储器访问、非时间630指令模板。图6B中的B类指令模板包括:1)在无存储器访问605指令模板内存在所示的无存储器访问、写掩码控制、部分舍入控制类型操作612指令模板和无存储器访问、写掩码控制、vsize类型操作617指令模板;和2)在存储器访问620指令模板内存在所示的存储器访问、写掩码控制627指令模板。
格式
通用矢量友好指令格式600包括以在图6A-B中示出的顺序在下文列出的以下字段。结合上面的讨论,在实施例中,参照下文在图6A-B和7A-C中在提供的格式细节,可以使用非存储器访问指令类型605或存储器访问指令类型620。如下所述,针对输入矢量操作数和目的地的地址可在寄存器地址字段644中标识。
格式字段640——在这个字段中的特定值(指令格式标识符值)唯一地标识了矢量友好指令格式,并且因此,矢量友好指令格式的指令出现在指令流中。因此,格式字段640的内容将第一指令格式的指令的出现与其它指令格式的指令的出现区分开,从而允许将矢量友好指令格式引入到具有其它指令格式的指令集中。由此,就对于仅具有通用矢量友好指令格式的指令集是不需要的这个意义而言,该字段是可选的。
基础操作字段642——其内容区分不同的基础操作。如本申请中稍后描述的,基础操作字段642可以包括和/或作为操作码字段的一部分。
寄存器索引字段644——其内容如果位于寄存器或存储器中,则直接或通过地址生成,指定源和目的地操作数的位置。这些包括足够数目的比特以从PxQ(例如32x1012)寄存器堆中选择N个寄存器。虽然,在一个实施例中,N可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中之一也作为目的地,可以支持多达三个源,其中这些源中之一也作为目的地,可支持多达两个源和一个目的地)。虽然在一个实施例中P=32,但是替代实施例可以支持更多或更少的寄存器(例如16)。虽然在一个实施例中Q=1012,但是替代实施例可支持更多或更少的比特(例如128、1024)。
修改器字段646——其内容将指定存储器访问的通用矢量指令格式的指令的出现与那些没有指定存储器访问的指令的出现区分开;即在无存储器访问605指令模板与存储器访问620指令模板之间进行区分。存储器访问操作读取和/或写入到存储器分级体系(在一些情况下,使用寄存器中的值指定源和/或目的地地址),而在非存储器访问操作中则不(例如,源和目的地是寄存器)。虽然在一个实施例中,此字段还在三种不同的方式中选择以执行存储器地址计算,但是替代实施例可以支持更多、更少、或不同的方式来执行存储器地址计算。
增加操作字段650——其内容区分除了基本操作之外,还要执行各种不同的操作中的哪一个。此字段为上下文特定的。在本发明的一个实施例中,该字段被划分成类字段668、阿尔法字段652、和贝塔字段654。该增加操作字段允许共同组的操作在单个指令中被执行,而不是在2、3或4个指令中。下面是使用增加字段650来减少所需的指令数的指令的一些示例(其命名法在本文中在稍后更详细描述)。
其中[rax]是要用于地址生成的基址指针,并且其中{}指示由数据操控字段所指定的转换操作(稍后更详细描述此处)。
缩放字段660——其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用2缩放*索引+基础的地址生成)。
位移字段662A——其内容用作存储器地址生成的一部分(例如,用于使用2缩放*索引+基础+位移的地址生成)。
位移因子字段662B(要注意的是,位移字段662A直接并置在位移因子字段662B之上指示使用了一个或另一个)——其内容用作地址生成的一部分;其指定了要缩放存储器访问(N)大小的位移因子——其中N是存储器访问中的字节数(例如,用于使用2缩放*索引+基础+缩放的位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(N),以便生成要在计算有效地址中使用的最终位移。如本申请中稍后描述的,基于完整操作码字段674(在本申请中稍后描述的)和数据操控字段654C,在运行时由处理器硬件确定N的值。就位移字段662A和位移因子字段662B不用于无存储器访问605指令模板和/或不同的实施例仅可实现这两个中的一个或两个都不实现而言,这两个字段是可选的。
数据元素宽度字段664——其内容区分要使用多个数据元素宽度中的哪一个(在针对所有指令的一些实施例中;在仅针对一些指令的其它实施例中)。就如果使用操作码的一些方面仅支持一个数据元素宽度和/或支持多个数据元素宽度,则不需要该字段而言,此字段是可选的。
写掩码字段670——其内容在每数据元素位置的基础上控制目的地矢量操作数中的数据元素位置是否反映了基础操作和增加操作的结果。A类指令模板支持合并写掩码,而B类指令模板支持合并与归零写掩码。当合并时,矢量掩码允许保护目的地中的任何元素集以在执行(由基础操作和增加操作所指定的)任何操作期间免于更新;在其它实施例中,保存目的地中的每个元素的旧值,其中相对应的掩码比特具有0。相反,当归零时,矢量掩码允许目的地中的任何元素集在执行(由基础操作和增加操作所指定的)任何操作期间被归零;在一个实施例中,当相对应的掩码比特具有0值时,目的地的元素被设置为0。该功能的子集是控制被执行的操作的矢量长度能力(即,元素被修改的跨度,从第一个到最后一个);然而,被修改的元素并不一定是连续的。因此,写掩码字段670允许部分矢量操作,这包括加载、存储、算术、逻辑等。此外,该掩码可以用于抑制错误(即,通过对目的地的数据元素位置进行掩码来防止接收可能/将引起故障的任何操作的结果,该故障——例如,假设在存储器中的矢量跨越页边界,并且假设第一页而不是第二页会引起页错误,如果位于第一页上的矢量的所有数据元素被写掩码掩蔽,则该页错误可以被忽略)。另外,写掩码允许包含某些类型的条件语句的“矢量化循环”。虽然描述了本发明的实施例,其中写掩码字段670的内容选择包含要被使用的写掩码的多个写掩码寄存器中一个(并且因此写掩码字段670的内容间接标识了要执行的掩码),但是替代实施例替代或额外允许写掩码字段670的内容直接指定要执行的掩码。另外,当发生如下情况时,归零允许性能改进:1)对目的地操作数也不是源的指令(也叫非三元指令)使用寄存器重命名,这是因为在寄存器重命名管线阶段期间,目的地不再是暗含的源(没有来自当前目标寄存器的数据元素需要被复制到重命名目的地寄存器或者以某种方式与操作一起被携带,这是因为不是操作结果的任何数据元素(任何被掩码的数据元素)将被归零);以及2)在写回阶段期间,这是因为零正在被写入。
立即数字段672——其内容允许指定立即数。就该字段在不支持立即数的通用矢量友好格式的实现中不存在并且其在不使用立即数的指令中不存在的意义而言,此字段是可选的。
指令模板类选择
类字段668——其内容在不同类别的指令之间进行区分。参照图2A-B,该字段的内容在A类与B类指令之间进行选择。在图6A-B中,使用圆角方形来指示特定的值存在于字段中(例如,在图6A-B中,分别针对类字段668的A类668A和B类668B)。
A类的无存储器访问指令模板
在A类的非存储器访问605指令模板的情况下,阿尔法字段652被解释为RS字段652A,其内容区分不同的增加操作类型中的哪一个是要被执行的(例如,分别针对无存储器访问、舍入类型操作610和无存储器访问、数据转换类型操作615指令模板而指定舍入652A.1和数据转换652A.2),而贝塔字段654区分所指定类型的操作中的哪个要被执行。在图6中,圆角框用于指示特定的值是存在的(例如,修改字段646中的无存储器访问646A;针对阿尔法字段652/rs字段652A的舍入652A.1和数据转换652A.2)。在无存储器访问605指令模板中,缩放字段660、位移字段662A和位移缩放字段662B是不存在的。
无存储器访问指令模板——全面舍入控制式操作
在无存储器访问、全面舍入控制式操作610指令模板中,贝塔字段654被解释为舍入控制字段654A,其内容提供静态舍入。虽然在所描述的本发明实施例中,舍入控制字段654A包括抑制所有浮点异常(SAE)字段656和舍入操作控制字段658,但是替代实施例可以支持可以将这些概念都编码到相同字段中或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段658)。
SAE字段656——其内容区分是否禁用异常事件报告;当SAE字段656的内容指示抑制是启用的时,给定的指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序。
舍入操作控制字段658——其内容区分要执行一组舍入操作中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,该舍入操作控制字段658允许在每个指令的基础上改变舍入模式,并且因此当需要时是特别有用的。在本发明的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段650的内容覆盖寄存器值(能够选择舍入模式而无需对这样的控制寄存器执行保存-修改-恢复是有利的)。
无存储器访问指令模板——数据转换类型操作
在无存储器访问数据转换类型操作615指令模板中,贝塔字段654被解释为数据转换字段654B,其内容区分多个数据转换中的哪一个要被执行(例如,无数据转换、搅拌、广播)。
A类存储器访问指令模板
在A类的存储器访问620指令模板的情况下,阿尔法字段652被解释为逐出提示字段652B,其内容区分要使用逐出提示中的哪一个(在图6A中,时间652B.1和非时间652B.2分别被指定用于存储器访问、时间625指令模板和存储器访问、非时间630指令模板),而贝塔字段654被解释为数据操控字段654C,其内容区分多个数据操控操作(也称为基元)中的哪一个要被执行(例如,无操控;广播;源的向上转换;以及目标的向下转换)。存储器访问620指令模板包括缩放字段660,并且可选地包括位移字段662A或位移缩放字段662B。
矢量存储器指令利用转换支持来执行从存储器加载矢量和将矢量存储到存储器。当利用常规的矢量指令时,矢量存储器指令以按数据元素的方式传送来自/去往存储器的数据,其中实际传送的元素由被选择作为写掩码的矢量掩码的内容来指定。在图6A中,圆角方形用来指示特定的值存在于字段中(例如,针对修改字段646的存储器访问646B;针对阿尔法字段652/逐出提示字段652B的时间652B.1和非时间652B.2)
存储器访问指令模板——时间
时间数据是很可能足够快就要被重新使用以受益于高速缓存的数据。然而,这是一个提示,并且不同的处理器可以以不同的方式来实现它,包括完全地忽略该提示。
存储器访问指令模板——非时间
非时间数据是不太可能很快被重新使用以受益于第一级高速缓存中的高速缓存的数据,并且该数据应被给予用于逐出的优先优先级。然而,这是一个提示,并且不同的处理器可以以不同的方式来实现它,包括完全忽略该提示。
B类的指令模板
在B类的指令模板的情况下,阿尔法字段652被解释为写入掩码控制(Z)字段652C,其内容区分由写掩码字段670控制的写入掩码是合并还是归零。
B类的无存储器访问指令模板
在B类的非存储器访问605指令模板的情况下,贝塔字段654的一部分被解释为RL字段657A,其内容区分不同的增加操作类型中的哪一些要被执行(例如,舍入657A.1和矢量长度(VSIZE)657A.2分别指定用于无存储器访问、写掩码控制、部分舍入控制类型操作612指令模板和无存储器访问、写掩码控制、VSIZE类型操作617指令模板),而贝塔字段654的其余部分区分所指定类型的操作中的哪一个要被执行。在图6中,圆角框用于指示特定的值是存在的(例如,在修改字段646中的无存储器访问646A;针对RL字段657A的舍入657A.1以及VSIZE657A.2)。在无存储器访问605指令模板中,缩放字段660、位移字段662A和位移缩放字段662B是不存在的。
无存储器访问指令模板——写掩码控制、部分舍入控制式操作
在无存储器访问、写掩码控制、部分舍入控制式操作610指令模板中,贝塔字段654的其余部分被解释为舍入操作字段659A并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志,并且不提出任何浮点异常处理程序)。
舍入操作控制字段659A——如同舍入操作控制领域658,其内容区分一组舍入操作中的哪一个要执行(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,该舍入操作控制字段659A允许在每个指令的基础上改变舍入模式,并且因此当需要时是特别有用的。在本发明的一个实施例中,其中处理器包括用于指定舍入模式的控制寄存器,舍入操作控制字段650的内容覆盖寄存器值(能够选择舍入模式而无需对这样的控制寄存器执行保存-修改-恢复是有利的)。
无存储器指令模板——写掩码控制、VSIZE类型操作
在无存储器访问、写掩码控制、VSIZE类型操作617指令模板中,贝塔字段654的其余部分被解释为矢量长度字段659B,其内容区分要对多个数据矢量长度中的哪一个执行(例如,128、856、或1012字节)。
B类的存储器访问指令模板
在A类的存储器访问620指令模板的情况下,贝塔字段654的一部分被解释为广播字段657B,其内容区分是否要执行广播类型数据操控操作,而贝塔字段654的其余部分被解释为矢量长度字段659B。存储器访问620指令模板包括缩放字段660,并且可选地包括位移字段662A或位移缩放字段662B。
关于字段的额外评论
关于通用矢量友好指令格式600,完整操作码字段674被示出为包括格式字段640、基础操作字段642、和数据元素宽度字段664。虽然一个实施例被示出为其中完整操作码字段674包括了所有这些字段,但是在不支持所有这些字段的实施例中,完整操作码字段674包括少于所有这些字段的字段。完整操作码字段674提供操作代码。
增加操作字段650、数据元素宽度字段664、和写掩码字段670允许在每指令的基础上以通用矢量友好指令格式来指定这些特征。
写掩码字段和数据元素宽度字段的组合创建了输入的指令,这是因为它们允许基于不同的数据元素宽度而应用掩码。
该指令格式要求相对少的比特数,这是因为其基因其它字段的内容针对不同的目的而重新使用不同的字段。例如,一个角度是修改器字段的内容在图6A-B上的无存储器访问605指令模板与在图6A-B上的存储器访问6250指令模块之间进行选择;而类字段668的内容在那些非存储器访问605指令模板内、在图6A的指令模板610/615与图6B的612/617之间进行选择;而类字段668的内容在那些存储器其访问620指令模板内、在图6A的指令模板628/830与图6B的627之间进行选择。从另一个角度来看,类字段668的内容分别在图6A和B的A类和B类指令模板之间进行选择;而修改器字段的内容在那些A类指令模板内、在图6A的指令模板605与620之间进行选择;而修改器字段的内容在那些B类指令模板内、在图6B的指令模板605与620之间进行选择。在指示A类指令模板的类字段的内容的情况下,修改器字段646的内容(在rs字段652A与EH字段652B之间)选择对阿尔法字段652的解释。以相关的方式,修改器字段646和类字段668的内容选择阿尔法字段被解释为rs字段652A、EH字段652B、还是写掩码控制(Z)字段652C。在指示A类无存储器访问操作的类字段和修改器字段的情况下,增加字段的贝塔字段的解释基于rs字段的内容而变化;而在B类无存储器访问操作的类字段和修改器字段指示的情况下,贝塔字段的解释取决于RL字段的内容。在指示A类存储器访问操作类字段和修改器字段的情况下,增加字段的贝塔字段的解释基于基础操作字段的内容而变化;而在指示B类存储器访问操作的类字段和修改器字段的情况下,增加字段的贝塔字段的广播字段657B的解释基于基础操作字段的内容而改变。因此基础操作字段、修改器字段和增加操作字段的组合允许指定甚至更多种的增加操作。
在A类和B类中找到各种指令模板在不同的情况中是有利的。当由于性能原因而期望归零-写掩码或更小的矢量长度时,A类是有用的。例如,当使用重命名时,归零允许避免假依赖,这是因为我们不再需要人为地与目的地合并;作为另一个示例,当利用矢量掩码来仿真更短的矢量大小时,矢量长度控制减轻了存储-装载转发的问题。当期望如下情况时,B类是有用的:1)允许浮点异常(即,当SAE字段的内容指示没有时)而同时使用舍入-模式控制;2)能够使用上转换、搅拌、交换、和/或下转换;3)对图形数据类型进行操作。例如,上转换、搅拌、交换、下转换、以及图形数据类型减少了当与不同格式的源工作时所需的指令数;作为另一个示例,允许异常的能力提供了与定向的取整-模式的完全IEEE符合。
示例性特定矢量友好指令格式
图7A-C是根据本发明实施例的示出了示例性特定矢量友好指令格式的框图。图7图7A-C示出了特定矢量友好指令格式700,其从其指定了字段的位置、大小、解释和顺序以及针对这些字段中的一些的值的意义上讲,它是特定的。特定矢量友好指令格式700可以用于扩展x86指令集,并且因此一些字段与那些在现有的x86指令集和其扩展部分(例如,AVX)中所使用的字段是相似或相同的。该格式保持与前缀编码字段、真实操作码字节字段、MODR/M字段、SIB字段、位移字段、以及具有扩展的现有x86指令集的立即数字段保持一致。描述了来自图7A-C的字段所映射到的来自图6的字段。
应当理解的是,尽管为了说明的目的,在通用矢量友好指令格式600的上下文中参考特定矢量友好指令格式700描述了本发明的实施例,但是除了所请求保护的之外,本发明并不限于特定矢量友好指令格式700。例如,通用矢量友好指令格式600考虑了针对各种字段的各种可能的大小,虽然特定矢量友好指令格式700被示出为具有特定大小的字段。通过特定示例的方式,虽然数据元素宽度字段664被示出为特定矢量友好指令格式700中的一比特字段,但是本发明并不限于此(即,通用矢量友好指令格式600考虑了数据元素宽度字段664的其它大小)。
格式——图7A-C
通用矢量友好指令格式600包括以在图7A-C所示出的顺序列出的以下字段。
EVEX前缀(字节0-3)
EVEX前缀702——以四字节形式编码。
格式字段640(EVEX字节0,比特[7:0])——第一个字节(EVEX字节0)是格式字段640,并且其包含0x62(在本发明的一个实施例中用于区分矢量友好指令格式的独特值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的多个比特字段。
REX字段705(EVEX字节1,比特[7-5])——由EVEX.R比特字段(EVEX字节1,比特[7]-R)、EVEX.X比特字段(EVEX字节1,比特[6]-X)、和657BEX字节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'字段710——这是REX'字段710的第一部分,并且是用于将扩展的32寄存器组的高16或低16进行编码的EVEX.R'比特字段(EVEX字节1,比特[4]-R')。在本发明中的一个实施例中,该比特连同如下面所指示的其它比特一起以比特反转格式被存储,以从BOUND指令中进行区分(在公知的x8632-比特模式中),BOUND指令的真实操作码字节是62,但不接受在MODR/M字段(下面所描述的)中的MOD字段的值11;本发明的替代实施例不以反转格式存储该比特和下文所指示的其它比特。值1用于将较低的16个寄存器进行编码。换句话说,R'Rrrr通过将EVEX.R',EVEX.R和来自其它字段的其它RRR进行结合而形成。
操作码映射字段715(EVEX字节1,比特[3:0]-mmmm)——其内容编码隐含的先导操作码字节(0F、0F38、或0F3)。
数据元素宽度字段664(EVEX字节2,比特[7]-W)——由符号EVEX.W表示。EVEX.W用于定义数据类型的力粒度(大小)(32-比特数据元素或64-比特数据元素)。
EVEX.vvvv720(EVEX字节2,比特[6:3]-vvvv)——EVEX.vvvv的作用可以包括以下内容:1)EVEX.vvvv将第一源寄存器操作数进行编码、以反转的(1的补码)的形式来指定并且针对具有2个或更多个源操作数的指令是有效的;2)EVEX.vvvv将目的地寄存器操作数编码、针对某些矢量移位而以1的补码的形式来指定;或3)EVEX.vvvv不编码任何操作数,字段被保留并且应包含1111b。因而,EVEX.vvvv字段720对以反转(1的补码)形式存储的第一源寄存器说明符的4个低阶比特进行编码。根据指令,另外的不同EVEX比特字段用于将说明符的大小扩展到32个寄存器。
EVEX.U668类字段(EVEX字节2,比特[2]-U)——如果EVEX.U=0,则其指示A类或EVEX.U0;如果EVEX.U=1,则其指示B类或EVEX.U1。
前缀编码字段725(EVEX字节2,比特[1:0]-pp)——为基础操作字段提供额外的比特。除了以EVEX前缀格式而为遗留SSE指令提供支持之外,这也有益于压缩SIMD前缀(而不是需要一字节来表达SIMD前缀,EVEX前缀仅需要2比特)。在一实施例中,为了支持使用遗留格式和EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的遗留SSE指令,将这些遗留SIMD前缀编码成SIMD前缀编码字段;且在被提供给解码器的PLA之前,在运行时被扩展成遗留SIMD前缀(使得PLA可在没有修改的情况下执行这些遗留指令的遗留格式和EVEX格式两者)。尽管较新的指令可以将EVEX前缀编码字段的内容直接用作操作码扩展,但是某些实施例为了一致性而以类似方式扩展,但是允许由这些遗留SIMD前缀来指定不同含义。替代实施例可重新设计PLA以支持2比特SIMD前缀编码,并且因此不需要扩展。
阿尔法字段652(EVEX字节3,比特[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、和EVEX.N;也用α来示出)——如之前所描述的,该字段是上下文特定的。在本申请中稍后提供额外的描述。
贝塔字段654(EVEX字节3,比特[6:4]-SSS,也被称为EVEX.S2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来示出)——如之前所描述的,该字段是上下文特定的。在本申请中稍后提供额外的描述。
REX'字段710——这是REX'字段的剩余部分并且其是可用于编码扩展的32寄存器组的高16或低16的EVEX.V'比特字段(EVEX字节3,比特[3]-V')。该比特以比特反转的格式存储。值1被用于编码低16寄存器。换句话说,V'VVVV通过EVEX.V'、EVEX.vvvv的组合来形成。
写掩码字段670(EVEX字节3,比特[2:0]-kkk)——如之前所描述的,其内容指定写掩码寄存器中的寄存器索引。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示了没有写掩码被用于特定指令的特殊行为(这可以以各种方式实现,包括使用被硬接线到所有绕过掩码硬件的那些和硬件的写掩码)。
真实操作码字段730(字节4)
这也被称为操作码字节。在该字段中指定部分操作码。
MODR/M字段740(字节5)
修改器字段646(MODR/M.MOD,比特[7-6]-MOD字段742)——如之前所描述的,MOD字段742的内容在存储器访问操作和非存储器访问操作之间进行区分。该字段在后文进一步说明。
MODR/M.reg字段744,比特[5-3]——MODR/M.reg字段的作用可以被概括为两种情况:MODR/M.reg将目标寄存器操作数或源寄存器操作数进行编码,或MODR/M.reg被视为操作码扩展,而不用于编码任何指令操作数。
MODR/M.r/m字段746,比特[2-0]——MODR/M.r/m字段的作用可以包括以下方面:MODR/M.r/m将引用存储器地址的指令操作数编码,或ModR/M.r/m将目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基础(SIB)字节(字节6)
缩放字段660(SIB.SS,比特[7,6])——如之前所描述的,缩放字段660的内容用于存储器地址生成。该字段将在后文进一步描述。
SIB.xxx754(比特[5-3])以及SIB.bbb756(比特[2-0])——之前已经关于寄存器索引Xxxx和Bbbb而引用了这些字段的内容。
位移字节(字节7或字节7-10)
位移字段662A(字节7-10)——当MOD字段742包含10时,字节7-10是位移字段662A,并且其与遗留32比特位移(disp32)一样工作,并且以字节粒度工作。
位移因子字段662B(字节7)——当MOD字段742包含01时,字节7是位移因子字段662B。该字段的位置与遗留x86指令组8比特位移(disp8)的位置相同,它以字节粒度工作。因为disp8是符号扩展的,所以其只能在-128和127字节偏移之间寻址;在64字节高速缓存线方面,disp8使用可仅被设置为四个真正有用的值-128、-64、0和64的8比特;由于通常需要更大范围,所以使用disp32;然而,disp32需要4字节。相比于disp8和disp32,位移因子字段662B是disp8的重新解释;当使用位移因子字段662B时,实际的位移由位移因子字段的内容乘以存储器操作数访问(N)的大小来确定。这种类型的位移被称为disp8*N。这减少了平均指令长度(针对位移所使用的但具有更大范围的单个字节)。这种压缩的位移是基于假设有效位移是存储器访问的粒度的倍数的,并且因此地址偏移的冗余低阶比特不需要被编码。换言之,位移因子字段662B替代遗留x86指令组8比特位移。因而,位移因子字段662B以与x86指令组8比特位移相同的方式被编码(所以在ModRM/SIB编码规则中没有变化),唯一的例外是disp8被过载到disp8*N。换言之,在编码规则或编码长度中没有变化,但仅在由硬件解释位移值方面有变化(这需要将位移缩放存储器操作数的大小以获得按字节的地址偏移)。
立即数
立即数字段672如之前所述的操作。
示例性寄存器架构——图8
图8是根据本发明一个实施例的寄存器架构800的框图。在下文列出了寄存器架构的寄存器堆和寄存器:
矢量寄存器堆810——在所示出的实施例中,存在为812比特宽的32个矢量寄存器;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶656比特在寄存器ymm0-16上被覆盖。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)在寄存器xmm0-15上被覆盖。如在下面表格中所示出的,特定矢量友好指令格式700对这些覆盖的寄存器堆操作。
换句话说,矢量长度字段659B在最大长度与一个或多个其它较短的长度之间进行选择,其中,每一这样的较短的长度是先前长度的一半;并且没有矢量长度字段659B的指令模板对最大矢量长度进行操作。此外,在一个实施例中,特定矢量友好指令格式700的B类指令模板对紧缩(packed)的或标量单/双精度浮点数据和紧缩的或标量整型数据进行操作。标量操作是对在zmm/ymm/xmm寄存器中最低阶数据元素位置执行的操作;根据实施例,较高阶数据元素位置在左边(如与指令之前相同的)或者被归零。
写掩码寄存器815——在所示出的实施例中,存在8个写掩码寄存器(k0至k7),每个64比特大小。如之前所描述的,在本发明的一个实施例中,矢量掩码寄存器K0不能被用作写掩码;当通常指示k0的编码用于写掩码时,其选择硬接线写掩码0xFFFF,这针对该指令有效地禁用了写掩码。
多媒体扩展控制状态寄存器(MXCSR)820——在所示出的实施例中,这个32比特寄存器提供了在浮点运算中使用的状态和控制比特。
通用寄存器825——在所示出的实施例中,有十六个64比特通用寄存器,其连同现有的x86寻址模式一起使用以寻址存储器操作数。由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8到R15来引用这些寄存器。
扩展的标志(EFLAGS)寄存器830——在所示出的实施例中,该32比特寄存器用于记录许多指令的结果。
浮点控制字(FCW)寄存器835和浮点状态字(FSW)寄存器840——在所示出的实施例中,这些寄存器由x87指令集扩展所使用以设置舍入模式,在在FCW情况下的设置异常掩码和标志、并且在FSW的情况下跟踪异常。
标量浮点栈寄存器堆(x87栈)845,其化名为MMX紧缩整型平直寄存器堆850——在所示出的实施例中,x87栈是用于使用x87指令集扩展而对32/64/80比特浮点数据执行标量浮点操作的8元素栈;而MMX寄存器用于对64比特紧缩整型数据执行操作,以及应用针对在MMX与XMM寄存器之间执行的一些操作而保留操作数。
段寄存器855——在所示出的实施例中,存在用来存储用于分段的地址生成的数据的六个16比特寄存器。
RIP寄存器865——在所示出的实施例中,存储指令指针的该64比特寄存器。
本发明的替代实施例可使用更宽或更窄的寄存器。另外,本发明的替代实施例可使用更多、更少、或不同的寄存器堆和寄存器。
示例性有序处理器架构——图9A-9B
图9A-B示出了示例性有序处理器架构的框图。这些示例性实施例是围绕利用宽矢量处理器(VPU)而增加的有序CPU核心的多个实例而设计的。根据e13t应用,核心通过高带宽互连网络与一些固定功能逻辑、存储器I/O接口、和其它必要的I/O逻辑进行通信。例如,作为独立GPU的该实施例的实现通常包括PCIe总线。
图9A是根据本发明的实施例的单个CPU核心的框图,连同其到管芯上的互连网络902的连接以及与级别2(L2)高速缓存904的本地子集的连接一起。指令解码器900支持具有扩展的、包括特定矢量指令格式700的x86指令集。虽然在本发明的一实施例中(为了简化设计)标量单元908和矢量单元910使用分离的寄存器组(分别是标量寄存器912和矢量寄存器914)且在其之间传送的数据被写入存储器,并且接着从级别1(L1)高速缓存906被读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器组或包括允许数据在两个寄存器堆之间传送而不被写回或读回的通信路径)。
L1高速缓存906允许低延迟访问以将存储器高速缓存到标量和矢量单元。与矢量友好指令格式的装载操作指令一起,这意味着在可以将L1高速缓存906类似地当成扩展的寄存器堆。这显著地提高了许多算法的性能,尤其是具有逐出提示字段652B。
L2高速缓存904的本地子集是被分成分离的本地子集的全局L2高速缓存的一部分,其中每个CPU核心具有一个本地子集。每个CPU具有到L2高速缓存904的其自身的本地子集的直接访问路径。由CPU核心读取的数据被存储在其L2高速缓存子集904中,并且可被迅速地访问,与其它CPU访问它们自身的本地L2高速缓存的子集并行。如果需要,则由CPU核心所写入的数据被存储在其自身的L2高速缓存子集904中并且从其它子集中清除。环形网络确保了所共享数据的一致性。
图9B是根据本发明实施例的图9A中的CPU核心的部分的分解图。图9B包括L1高速缓存904的L1数据高速缓存906A部分,以及关于矢量单元910和矢量寄存器914的更多细节。具体地,矢量单元910是16宽矢量处理单元(VPU)(见16宽ALU928),其执行整型、单精度浮点、和双精度浮点指令。VPU支持利用搅拌单元920来搅拌寄存器输入,利用数字转换单元922A-B的数字转换,及利用复制单元924对存储器输入的复制。写掩码寄存器926允许预测所得到的矢量写入。
寄存器数据可以以各种方式被搅拌,例如以支持矩阵乘法。来自存储器的数据可以跨VPU通道而被复制。这是在图形和非图形并行数据处理中是常见的操作,其显著地增加了高速缓存效率。
环形网络是双向的,以允许诸如CPU核心、L2高速缓存和其它的逻辑框的代理在芯片内相互通信。每个环形数据路径为每方向812比特宽。
示例性无序架构——图10
图10是示出了根据本发明实施例的示出了示例性无序架构的框图,且该框图可以被看作诸如上文在图1中所讨论的管线的更具体的描述。具体地,图10示出了公知的示例性无序架构,其已被修改成并入了矢量友好指令格式及其执行。在图10中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示在这些单元之间的数据流的方向。图10包括耦合到执行引擎单元1010以及存储器单元1015的前端单元1005;执行引擎单元1010进一步耦合到存储器单元1015。
前端单元1005包括耦合到级别2(L2)分支预测单元1022的级别1(L1)分支预测单元1020。L1和L2分支预测单元1020和1022耦合到L1指令高速缓存单元1024。L1指令高速缓存单元1024耦合到指令转换后备缓冲器(TLB)1026,指令转换后备缓冲器(TLB)1026进一步耦合到指令提取和预解码单元1028。指令提取和预解码单元1028耦合到指令队列单元1030,指令队列单元1030进一步耦合解码单元1032。解码单元1032包括复杂解码器单元1034和三个简单解码器单元1036、1038和1040。解码单元1032包括微代码ROM单元1042。如之前在上文所描述的,解码单元1032可以在解码阶段部分中操作。L1指令高速缓存单元1024进一步耦合到存储器单元1015中的L2高速缓存单元1048。指令TLB单元1026进一步耦合到在存储器单元1015中的第二级TLB单元1046。解码单元1032、微代码ROM单元1042、和循环流检测器单元1044每个都耦合到执行引擎单元1010中的重命名/分配器单元1056。
执行引擎单元1010包括重命名/分配器单元1056,重命名/分配器单元1056耦合到退出单元1074和统一的调度器单元1058。退出单元1074进一步耦合到执行单元1060并包括重排序缓冲器单元1078。统一的调度器单元1058还耦合到物理寄存器堆单元1076,物理寄存器堆单元1076耦合到执行单元1060。物理寄存器堆单元1076包括矢量寄存器单元1077A、写掩码寄存器单元1077B、和标量寄存器单元1077C;这些寄存器单元可以提供矢量寄存器810、矢量掩码寄存器815、以及通用寄存器825;并且物理寄存器堆单元1076可以包括未示出的额外寄存器堆(例如,MMX紧缩整型平直寄存器堆850的化名是标量浮点栈寄存器堆845)。执行单元1060包括三个混合的标量和矢量单元1062、1064和1072;负载单元1066;存储地址单元1068;存储数据单元1070。负载单元1066、存储地址单元1068、以及存储数据单元1070每个都进一步耦合到存储器单元1015中的数据TLB单元1052。
存储器单元1015包括第二级TLB单元1046,第二级TLB单元1046耦合到数据TLB单元1052。数据TLB单元1052耦合到L1数据高速缓存单元1054。L1数据高速缓存单元1054进一步耦合到L2高速缓存单元1048。在一些实施例中,L2高速缓存单元1048还耦合到在存储单元1015内部和/或外部的L3和更高级的高速缓存单元1050。
通过示例的方式,示例性无序架构可以实现如下所述的过程管线8200:1)指令提取和预解码单元1028执行提取和长度解码阶段;2)解码单元1032执行解码阶段;3)重命名/分配器单元1056执行分配阶段和重命名阶段;4)统一的调度器1058执行调度阶段;5)物理寄存器堆单元1076、重排序缓冲器单元1078、和存储器单元1015执行寄存器读取/存储器读取阶段;执行单元1060进行执行/数据转换阶段;6)存储器单元1015和重排序缓冲器单元1078执行写回/存储器写入阶段1960;7)退出单元1074执行ROB读取阶段;8)在异常处理阶段中可以涉及各个单元;及9)退出单元1074和物理寄存器堆单元1076执行提交(commit)阶段。
示例性单核和多核处理器——图15
图15是根据本发明实施例的具有集成的存储器控制器和图形的单核处理器和多核处理器1500的框图。图15中的实线框示出了具有单个核心1502A的处理器1500、系统代理1510、一组一个或多个总线控制器单元1516,而另外可选的虚线框示出了具有多个核心1502A-N的替代处理器1500、系统代理单元1510中的一组一个或多个集成的存储器控制器单元1514、以及集成的图形逻辑1508。
存储器分级体系包括核心内的一级或多级高速缓存、一组一个或多个共享的高速缓存单元1506、以及耦合到该组集成的存储器控制器单元1514的外部存储器(未示出)。该组共享的高速缓存单元1506可以包括一个或多个中间级高速缓存,例如级别2(L2)、级别3(L3)、级别(L4)、或其它级别的高速缓存、最后一级高速缓存(LLC)、和/或其组合。虽然在一个实施例中,基于环形的互连单元1512将集成的图形逻辑1508、该组共享的高速缓存单元1506、以及系统代理单元1510互连,但是替代实施例可使用任意数量的众所周知的技术来互连这些单元。
在一些实施例中,核心1502A-N中的一个或多个能够进行多线程处理。系统代理1510包括协调和操作核心1502A-N的那些组件。系统代理单元1510可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核心1502A-N和集成的图形逻辑1508的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心1502A-N在架构和/或指令集方面可以是同构或异构的。例如,核心1502A-N中的一些可以是有序的(例如,像图9A和9B中所示的),而其它的是无序的(例如,像图10中所示的)。作为另一示例,核心1502A-N中的两个或更多个可以能够执行相同的指令集,而其它的可以能够仅执行该指令集的子集或不同的指令集。核心中的至少一个能够执行本文中描述的矢量友好指令格式。
处理器可以是通用处理器,如酷睿TMi3、i5、i7、2双核及四核、XeonTM、或ItaniumTM处理器,其可从Calif.,SantaClara的Intel公司获得。替代地,该处理器可以来自其它公司。处理器可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1500可以是使用诸如例如BiCMOS、CMOS或NMOS的多个处理技术中的任意技术的一个或多个基底的一部分或是在该一个或多个基底上实现的。
示例性计算机系统和处理器——图11-13
图11-13是适用于包括处理器1500的示例性系统,而图88是可以包括核心1502中的一个或多个的示例性片上系统(SoC)。在本领域中已知的针对膝上型计算机、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放机、手持设备、和各种其它电子设备的其它系统设计和配置也是适用的。在一般情况下,如本申请中所公开的,能够结合处理器和/或其它执行逻辑的各种各样的系统或电子设备一般是适用的。
现在参照图11,所示的是根据本发明一个实施例的系统1100的框图。系统1100可以包括一个或多个处理器1110、1115,一个或多个处理器1110、1115耦合到图形存储器控制器集线器(GMCH)1120。在图11中利用虚线表示了额外的处理器1115的可选性质。
每个处理器1110、1115可以是处理器1500的某个版本。然而,应该注意的是,集成的图形逻辑和集成的存储器控制单元不太可能存在于处理器1110、1115中。
图11示出了GMCH1120可以耦合到存储器1140,存储器1140可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH1120可以是芯片组或芯片组的一部分。GMCH1120可以与处理器1110、1115通信并且控制处理器11101115与存储器1140之间的交互。GMCH1120还可以充当处理器1110、1115与系统1100的其它元件之间的加速总线接口。对于至少一个实施例,GMCH1120经由多点分支总线(例如前端总线(FSB)1195)与处理器1110、1115进行通信。
此外,GMCH1120耦合到显示器1145(例如,平板显示器)。GMCH1120可以包括集成的图形加速器。GMCH1120还耦合到输入/输出(I/O)控制器集线器(ICH)1150,ICH1150可以用于将各种外围设备耦合到系统1100。例如,在图11的实施例中所示的是外部图形设备1160,外部图形设备1160可以是连同其它外围设备1170一起耦合到ICH1150的离散图形设备。
替代地,额外的或不同的处理器也可存在于系统1100中。例如,额外的处理器1115可以包括与处理器1110相同的额外的处理器、与处理器1110异构或不对称的额外的处理器、加速器(诸如,例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其它处理器。在一系列的包括架构、微架构、热、功率消耗特性等的指标度量方面,物理资源1110、1115之间可能存在各种不同。这些不同可以有效地在处理元件1110、1115之间将表现出其自身的不对称性和异构性。对于至少一个实施例,各种处理元件1110,1115可以驻留在相同的管芯封装中。
现在参照图12,所示的是根据本发明实施例的第二系统1200的框图。如图12中所示,多处理器系统1200是点对点互连系统,并且包括经由点对点互连器1250耦合的第一处理器1270和第二处理器1280。如在图12中所示,处理器1270和1280中的每一个可以是处理器1500的某个版本。
替代地,处理器1270、1280中的一个或多个可以是一个元件而不是处理器,例如加速器或现场可编程门阵列。
虽然所示的仅具有两个处理器1270、1280,但是应当理解的是本发明的范围并不局限于此。在其它实施例中,一个或多个额外的处理元件可以存在于给定的处理器中。
处理器1270还可以包括集成的存储器控制器集线器(IMC)1272和点对点(P-P)的接口1276和1278。类似地,第二处理器1280可以包括IMC1282和P-P接口1286和1288。处理器1270、1280可以使用点对点(PtP)接口电路1278、1288经由PtP接口1250而交换数据。如在图12中所示,IMC1272和1282将处理器耦合到相应的存储器,即存储器1242和存储器1244,存储器1242和存储器1244可以是本地地附接到相应的处理器的主存储器的部分。
处理器1270、1280可以使用点对点接口电路1276、1294、1286、1298通过个体P-P接口1252、1254而与芯片组1290交换数据。芯片组1290还可以经由高性能图形接口1239而与高性能图形电路1238交换数据。
共享高速缓存(未示出)可以被包括在两个处理器以外的任一处理器中,还经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中时,可以将处理器中的任一个或两个的本地高速缓存信息存储在共享的高速缓存中。
芯片组1290可以经由接口1296耦合到第一总线1216。在一个实施例中,第一总线1216可以是外围设备互连(PCI)总线,或诸如PCI快速总线或另一第三代I/O互连总线的总线,尽管本发明的范围并不局限于此。
如在图12中所示,各种I/O设备1214可以连同将第一总线1216耦合到第二总线1220的总线桥1218一起耦合到第一总线1216。在一个实施例中,第二总线1220可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线1220,包含例如键盘/鼠标1222、通信装置1226和诸如可包含代码1230的磁盘驱动器或其它大容量存储设备的数据存储单元1228。此外,音频I/O1224可以耦合到第二总线1220。要注意的是,其它体系结构也是可能的。例如,系统可以实现多点分支总线或其它这种架构而不是图12中的点对点架构。
现在参照图13,所示的是根据本发明实施例的第三系统1300的框图。图12和13中相似的元件具有相似的附图标记,并且为了避免模糊图13的其它方面,已经将图12的某些方面从图13中删去。
图13示出了处理元件1270、1280可以分别包括集成的存储器和I/O控制逻辑(“CL”)1272和1282。对于至少一个实施例,CL1272、1282可以包括存储器控制器集线器逻辑(IMC),例如上文结合图89和12所描述的。此外,CL1272、1282还可以包括I/O控制逻辑。图13示出了不仅存储器1242、1244耦合到CL1272、1282,而且I/O设备1314也耦合到控制逻辑1272、1282。遗留I/O设备1315耦合到芯片组1290。
现在参照图14,所示的是根据本发明实施例的SoC1400的框图。图15中的相似元件具有相似的附图标记。此外,虚线框是在更先进的SoC上的可选特征。在图14中,互连单元1402耦合到:应用处理器1410,应用处理器1410包括一组一个或多个核心1502A-N和共享的高速缓存单元1506;系统代理单元1510;总线控制器单元1516;集成的存储器控制器单元1514;一组或一个或多个媒体处理器1420,媒体处理器1420可以包括集成的图形逻辑1508,用于提供静态和/或视频照相机功能的图像处理器1424,用于提供硬件音频加速的音频处理器1426,以及用于提供视频编码/解码加速的视频处理器1428;静态随机存取存储器(SRAM)单元1430;直接存储器访问(DMA)单元1432;以及用于耦合到一个或多个外部显示器的显示单元1440。
本申请中公开的机制的实施例可以以硬件、软件、固件、或这些实现方式的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。
程序代码可被应用于输入数据以执行本申请中描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器,诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器的任何系统。
可以以高级面向过程或面向对象编程语言来实现程序代码,以与处理系统通信。如果期望的话,则程序代码还可以以汇编或机器语言来实现。实际上,本申请中描述的机制并不受限于任何特定的编程语言的范围。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可以由在机器可读介质上存储的代表性指令来实现,该代表性指令代表了处理器内的各个逻辑,当由机器读取其时,使得该机器制造用于执行本申请中描述的技术的逻辑。这样的代表,被称为“IP核心”,其可以存储在有形的、机器可读介质上,并提供给各个用户或生产设施,以加载到实际制造逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的非瞬时性、有形的制品布置,包括存储介质,例如硬盘、包括软盘、光盘(压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW))、以及磁光盘的其它类型的磁盘、半导体设备例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、磁或光盘、或适于存储电子指令的任何其它类型的媒体。
由此,本发明的实施例还包括非瞬时性有形机器可读介质,其包含矢量友好指令格式的指令或包含设计数据,例如硬件描述语言(HDL),其定义了本申请中描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以被称为程序产品。
在一些情况下,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以转化(例如,使用静态二进制转化、或包含动态编译的动态二进制转化)、变型、仿真、或另外将指令转换成要由核心处理的一个或多个其它指令。指令转换器可以以软件、硬件、固件或其组合实现。指令转换器可以在处理器上、在处理器外、或部分在处理器上且部分在处理器外。
图16是根据本发明实施例的对比了使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示出的实施例中,指令转换器是软件指令转换器,尽管可替代地,指令转换器可以以软件、固件、硬件、或其各种组合来实现。图16示出了高级语言1602的程序可以使用x86编译器1604来编译以生成x86二进制编码1606,x86二进制编码1606可以由具有至少一个x86指令集核心1616的处理器在本地执行(假设被编译的指令中的一些是矢量友好指令格式的)。具有至少一个x86指令集核心1616的处理器代表可以通过兼容地执行或另外处理以下内容而执行与具有至少一个x86指令集核心的Intel处理器基本相同的功能:(1)Intelx86指令集核心的指令集的很大一部分或(2)目标在于在具有至少一个x86指令集核心的Intel处理器上运行的应用程序或其它软件的目标代码版本,以便实现与具有至少一个x86指令集核心的Intel处理器基本相同的结果。x86编译器1604表示可操作以生成x86二进制代码1606(例如,目标代码)的编译器,在有或没有额外的联动处理的情况下,x86二进制代码1606可以在具有至少一个x86指令集核心1616的处理器上被执行。类似地,图90示出了高级语言1602的程序可以使用替代的指令集编译器1608来编译,以生成替代的指令集二进制代码1610,替代的指令集二进制代码1610可以由不具有至少一个x86指令集核心1614的处理器(例如,具有执行CA,Sunnyvale的MIPS科技的MIPS指令集和/或执行CA,Sunnyvale的ARMHoldings的ARM指令集的核心的处理器)在本地执行。指令转换器1612用于将x86二进制码1606转换成可以由不具有x86、指令集核心1614的处理器在本地执行的代码。转换后的代码不太可能与替代的指令集二进制编码1610相同,这是因为难以制作能够这样做的指令转换器;然而,转换后的代码将完成通用操作并由来自替代指令集的指令组成。从而,指令转换器1612表示这样的软件、固件、硬件、或其组合:通过仿真、模拟或任何其它过程而允许不具有x86指令集处理器或核心的处理器或其它电子设备执行x86二进制代码1606。
在本文中所公开的矢量友好指令格式的指令的某些操作可以由硬件组件执行,并且其可以以机器可执行的指令来实施,该指令用于使得或至少导致利用该指令编程的电路或其它硬件组件执行上述操作。电路可以包括通用或专用处理器或逻辑电路,仅举几个示例。操作也可可选地通过硬件和软件的组合来执行。执行逻辑和/或处理器可以包括响应于机器指令或从源自机器指令得到的一个或多个控制信号而存储指令所指定的结果操作数的具体或特定电路或其它逻辑。例如,本文中所公开的指令的实施例可以在图11-16的一个或多个系统中被执行,并且矢量友好指令格式的指令的实施例可以被存储在程序代码中以在系统中被执行。另外,这些图中的处理元件可以利用本申请中详细描述的具体的管线和/或架构中的一个(例如,有序和无序的架构)。例如,有序架构的解码单元可对指令进行解码,将解码的指令传递到矢量或标量单元等。
上面的描述旨在示出本发明的优选实施例。根据上面的讨论,应该显而易见的是,特别是在这种发展速度快并且进一步的进步不容易预见的技术领域中,本发明可以在布置和细节方面由本领域技术人员修改而不偏离在所附权利要求及它们的等同物的范围内的本发明的原理。例如,一种方法的一个或多个操作可被组合或进一步分开。
替代实施例
虽然实施例已经描述了哪个将在本地执行矢量友好指令格式,本发明的替代实施例可以通过在执行不同指令集的处理器(例如,CA,Sunnyvale的MIPS科技的MIPS指令集、执行CA,Sunnyvale的ARMHoldings的ARM指令集的核心的处理器)上运行的仿真层而执行矢量友好指令格式。而且,虽然在图中的流程图显示了由本发明的某些实施例执行的操作的特定顺序,但是应理解的是这样的顺序是示例性的(例如,替代实施例可以以不同的顺序执行操作、组合某些操作、重叠某些操作等)。
在上面的描述中,为了说明的目的,阐述了许多具体细节以便提供对本发明实施例的透彻理解。然而显而易见的是,对于本领域技术人员而言,可以在没有这些具体细节的情况下实施一个或多个其它实施例。提供了所描述的特定实施例是为了示出本发明的实施例而不是为了限制本发明。本发明的范围不是要由上文提供的具体示例来确定而仅由下文的权利要求来确定。
Claims (19)
1.一种装置,包括:
具有功能单元的指令执行管线,所述功能单元包括用于支持第一指令和第二指令的以下内容:
加法器库电路,其用于分别将交替的第一输入矢量元素加到所述第一输入矢量的相应的相邻元素以支持所述第一指令,并且将第二输入矢量的一侧的元素加到所述第二输入矢量的另一侧的元素以支持所述第二指令;以及
穿过选择电路,其选择所述相应的相邻元素以穿过到所述第一指令的结果,并且选择所述输入矢量的所述另一侧的元素以穿过到所述第二指令的结果。
2.根据权利要求1所述的装置,其中,所述功能单元还包括在所述加法器库之前的加法器选择电路,额外的选择电路选择所述第一输入矢量和所述第二输入矢量的相应元素以在所述加法器库电路中相加。
3.根据权利要求2所述的装置,其中,所述加法器选择电路是由第一多路复用器库构成的。
4.根据权利要求3所述的装置,其中,所述穿过选择电路是由第二多路复用器库构成的。
5.根据权利要求4所述的装置,其中,所述第一多路复用器库和所述第二多路复用器库耦合到ROM电路以接收控制输入,所述ROM包含针对所述第一指令和所述第二指令的微代码。
6.根据权利要求1所述的装置,其中,所述第二输入矢量的另一侧的所述元素是所述第二输入矢量的所述另一侧的最高阶元素。
7.根据权利要求6所述的装置,其中,所述第二输入矢量的一侧的所述元素是比所述第二输入矢量的所述另一侧的所述矢量更高阶的。
8.一种方法,包括:
通过以下操作执行图像积分计算:
通过执行第一指令来创建第二矢量,所述第一指令将第一矢量的交替元素加到所述第一矢量的相应的相邻元素并将所得到的和呈现到所述第二矢量中,并且穿过所述相应的相邻元素到所述第二矢量;并且
通过执行第二指令来创建第三矢量,所述第二指令将所述第二矢量的一侧的元素加到所述第二矢量的另一侧的元素并且穿过所述第二矢量的所述另一侧。
9.根据权利要求8所述的方法,其中,所述方法包括,在执行所述第一指令时,将第一控制输入从ROM传递到选择电路,并且,在执行所述第二指令时,将第二控制输入从所述ROM传递到所述选择电路。
10.根据权利要求8所述的方法,其中,所述控制输入确定所述第一矢量的哪些元素被穿过到所述第二矢量,以及,所述第二矢量的哪些元素被穿过到所述第三矢量。
11.根据权利要求8所述的方法,其中,所述第二矢量的另一侧的所述元素是所述第二矢量的所述另一侧的最高阶元素。
12.根据权利要求11所述的方法,其中,所述第二矢量的一侧的所述元素是比所述第二矢量的所述另一侧的所述元素更高阶的。
13.根据权利要求8所述的方法,其中,所述第一指令和所述第二指令由同一功能单元执行。
14.一种包含程序代码的机器可读介质,当由计算机处理所述程序代码时,使得所述计算机执行一种方法,所述方法包括:
通过以下操作执行图像积分计算:
通过执行第一指令来创建第二矢量,所述第一指令将第一矢量的交替元素加到所述第一矢量的相应的相邻元素并将所得到的和呈现到所述第二矢量中,并且穿过所述相应的相邻元素到所述第二矢量;并且
通过执行第二指令来创建第三矢量,所述第二指令将所述第二矢量的一侧的元素加到所述第二矢量的另一侧的元素并且穿过所述第二矢量的所述另一侧。
15.根据权利要求14的机器可读介质,其中,所述方法包括,在执行所述第一指令时,将第一控制输入从ROM传递到选择电路,并且,在执行所述第二指令时,将第二控制输入从所述ROM传递到所述选择电路。
16.根据权利要求14所述的机器可读介质,其中,所述控制输入确定所述第一矢量的哪些元素被穿过到所述第二矢量,以及,所述第二矢量的哪些元素被穿过到所述第三矢量。
17.根据权利要求14所述的机器可读介质,其中,所述第二矢量的另一侧的所述元素是所述第二矢量的所述另一侧的最高阶元素。
18.根据权利要求17所述的机器可读介质,其中,所述第二矢量的一侧的所述元素是比所述第二矢量的所述另一侧的所述元素更高阶的。
19.一种包含程序代码的机器可读介质,当由计算机处理程序代码时,使得所述计算机执行一种方法,所述方法包括:
通过执行以下操作创建用于图像积分计算的目标代码:
创建第一指令,所述第一指令通过将第一矢量的交替元素加到所述第一矢量的相应的相邻元素并将所得到的和呈现到所述第二矢量中,并且穿过所述相应的相邻元素到所述第二矢量来创建第二矢量;以及
创建第二指令,所述第二指令通过将所述第二矢量的一侧的元素加到所述第二矢量的另一侧的元素并且穿过所述第二矢量的所述另一侧来创建第三矢量。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/730,665 | 2012-12-28 | ||
US13/730,665 US9442723B2 (en) | 2012-12-28 | 2012-12-28 | Method and apparatus for integral image computation instructions |
PCT/US2013/046412 WO2014105137A1 (en) | 2012-12-28 | 2013-06-18 | Method and apparatus for integral image computation instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105359052A true CN105359052A (zh) | 2016-02-24 |
CN105359052B CN105359052B (zh) | 2018-06-12 |
Family
ID=51018674
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380062173.XA Expired - Fee Related CN105359052B (zh) | 2012-12-28 | 2013-06-18 | 用于积分图像计算指令的方法、装置、设备、系统及机器可读介质 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9442723B2 (zh) |
KR (2) | KR101722346B1 (zh) |
CN (1) | CN105359052B (zh) |
DE (1) | DE112013005236T5 (zh) |
WO (1) | WO2014105137A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107861757A (zh) * | 2017-11-30 | 2018-03-30 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9442723B2 (en) * | 2012-12-28 | 2016-09-13 | Intel Corporation | Method and apparatus for integral image computation instructions |
DE102014214711B4 (de) | 2014-07-25 | 2023-01-05 | Continental Autonomous Mobility Germany GmbH | Verfahren zum Betrieb eines Assistenzsystems eines Kraftfahrzeugs sowie Assistenzsystem |
US9715432B2 (en) * | 2014-12-23 | 2017-07-25 | Intel Corporation | Memory fault suppression via re-execution and hardware FSM |
US10248876B2 (en) | 2016-06-27 | 2019-04-02 | Texas Instruments Incorporated | Method and apparatus for avoiding non-aligned loads using multiple copies of input data |
US10275243B2 (en) | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
JP2018022339A (ja) * | 2016-08-03 | 2018-02-08 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
WO2018174934A1 (en) | 2017-03-20 | 2018-09-27 | Intel Corporation | Systems, methods, and apparatus for matrix move |
US10372456B2 (en) * | 2017-05-24 | 2019-08-06 | Microsoft Technology Licensing, Llc | Tensor processor instruction set architecture |
WO2019009870A1 (en) | 2017-07-01 | 2019-01-10 | Intel Corporation | SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE |
US11669326B2 (en) | 2017-12-29 | 2023-06-06 | Intel Corporation | Systems, methods, and apparatuses for dot product operations |
US11789729B2 (en) | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
US11023235B2 (en) | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
US11093247B2 (en) | 2017-12-29 | 2021-08-17 | Intel Corporation | Systems and methods to load a tile register pair |
US10664287B2 (en) | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US11093579B2 (en) | 2018-09-05 | 2021-08-17 | Intel Corporation | FP16-S7E8 mixed precision for deep learning and other algorithms |
US11579883B2 (en) | 2018-09-14 | 2023-02-14 | Intel Corporation | Systems and methods for performing horizontal tile operations |
US10970076B2 (en) | 2018-09-14 | 2021-04-06 | Intel Corporation | Systems and methods for performing instructions specifying ternary tile logic operations |
US10719323B2 (en) | 2018-09-27 | 2020-07-21 | Intel Corporation | Systems and methods for performing matrix compress and decompress instructions |
US10866786B2 (en) | 2018-09-27 | 2020-12-15 | Intel Corporation | Systems and methods for performing instructions to transpose rectangular tiles |
US10990396B2 (en) | 2018-09-27 | 2021-04-27 | Intel Corporation | Systems for performing instructions to quickly convert and use tiles as 1D vectors |
US10896043B2 (en) | 2018-09-28 | 2021-01-19 | Intel Corporation | Systems for performing instructions for fast element unpacking into 2-dimensional registers |
US10963256B2 (en) | 2018-09-28 | 2021-03-30 | Intel Corporation | Systems and methods for performing instructions to transform matrices into row-interleaved format |
US10929143B2 (en) | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
US10963246B2 (en) | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
US10929503B2 (en) | 2018-12-21 | 2021-02-23 | Intel Corporation | Apparatus and method for a masked multiply instruction to support neural network pruning operations |
US11886875B2 (en) | 2018-12-26 | 2024-01-30 | Intel Corporation | Systems and methods for performing nibble-sized operations on matrix elements |
US11294671B2 (en) | 2018-12-26 | 2022-04-05 | Intel Corporation | Systems and methods for performing duplicate detection instructions on 2D data |
US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
US10942985B2 (en) | 2018-12-29 | 2021-03-09 | Intel Corporation | Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions |
US10922077B2 (en) | 2018-12-29 | 2021-02-16 | Intel Corporation | Apparatuses, methods, and systems for stencil configuration and computation instructions |
US11016731B2 (en) | 2019-03-29 | 2021-05-25 | Intel Corporation | Using Fuzzy-Jbit location of floating-point multiply-accumulate results |
US11269630B2 (en) | 2019-03-29 | 2022-03-08 | Intel Corporation | Interleaved pipeline of floating-point adders |
US10990397B2 (en) | 2019-03-30 | 2021-04-27 | Intel Corporation | Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator |
US11175891B2 (en) | 2019-03-30 | 2021-11-16 | Intel Corporation | Systems and methods to perform floating-point addition with selected rounding |
US11403097B2 (en) | 2019-06-26 | 2022-08-02 | Intel Corporation | Systems and methods to skip inconsequential matrix operations |
US11334647B2 (en) | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
US11714875B2 (en) | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
US11972230B2 (en) | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
US11941395B2 (en) | 2020-09-26 | 2024-03-26 | Intel Corporation | Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102147866A (zh) * | 2011-04-20 | 2011-08-10 | 上海交通大学 | 基于训练自适应增强和支持矢量机的目标识别方法 |
US20110211233A1 (en) * | 2010-03-01 | 2011-09-01 | Sony Corporation | Image processing device, image processing method and computer program |
US20120166761A1 (en) * | 2010-12-22 | 2012-06-28 | Hughes Christopher J | Vector conflict instructions |
WO2012136975A1 (en) * | 2011-04-04 | 2012-10-11 | Arm Limited | A data processing apparatus and method for performing vector operations |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100455266C (zh) | 2005-03-29 | 2009-01-28 | 深圳迈瑞生物医疗电子股份有限公司 | 宽景成像处理方法 |
KR100866230B1 (ko) | 2007-04-12 | 2008-10-30 | 삼성전자주식회사 | 파노라마 사진 촬영 방법 |
US9442723B2 (en) * | 2012-12-28 | 2016-09-13 | Intel Corporation | Method and apparatus for integral image computation instructions |
-
2012
- 2012-12-28 US US13/730,665 patent/US9442723B2/en active Active
-
2013
- 2013-06-18 KR KR1020157013891A patent/KR101722346B1/ko active IP Right Grant
- 2013-06-18 WO PCT/US2013/046412 patent/WO2014105137A1/en active Application Filing
- 2013-06-18 DE DE112013005236.9T patent/DE112013005236T5/de not_active Withdrawn
- 2013-06-18 KR KR1020177008223A patent/KR101814356B1/ko active IP Right Grant
- 2013-06-18 CN CN201380062173.XA patent/CN105359052B/zh not_active Expired - Fee Related
-
2016
- 2016-09-13 US US15/264,572 patent/US9766897B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110211233A1 (en) * | 2010-03-01 | 2011-09-01 | Sony Corporation | Image processing device, image processing method and computer program |
US20120166761A1 (en) * | 2010-12-22 | 2012-06-28 | Hughes Christopher J | Vector conflict instructions |
WO2012136975A1 (en) * | 2011-04-04 | 2012-10-11 | Arm Limited | A data processing apparatus and method for performing vector operations |
CN102147866A (zh) * | 2011-04-20 | 2011-08-10 | 上海交通大学 | 基于训练自适应增强和支持矢量机的目标识别方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107861757A (zh) * | 2017-11-30 | 2018-03-30 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
CN107861757B (zh) * | 2017-11-30 | 2020-08-25 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
Also Published As
Publication number | Publication date |
---|---|
US20140189291A1 (en) | 2014-07-03 |
KR20150101994A (ko) | 2015-09-04 |
KR20170037685A (ko) | 2017-04-04 |
KR101814356B1 (ko) | 2018-01-04 |
US20170132012A1 (en) | 2017-05-11 |
KR101722346B1 (ko) | 2017-03-31 |
WO2014105137A1 (en) | 2014-07-03 |
CN105359052B (zh) | 2018-06-12 |
US9442723B2 (en) | 2016-09-13 |
DE112013005236T5 (de) | 2015-08-06 |
US9766897B2 (en) | 2017-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105359052A (zh) | 用于积分图像计算指令的方法和装置 | |
CN104823156B (zh) | 用于确定直方图的指令 | |
CN103562855A (zh) | 用于将存储器源扩展到目的地寄存器并将源寄存器压缩到目的地存储器单元中的系统、装置和方法 | |
CN104011664B (zh) | 使用三个标量项的超级乘加(超级madd)指令 | |
CN105278920A (zh) | 用于实现具有迭代依赖条件的迭代的向量环路的指令 | |
CN103562854B (zh) | 用于对齐寄存器的系统、装置和方法 | |
TWI517038B (zh) | 用於在多維度陣列中之元件偏移計算的指令 | |
CN103562856A (zh) | 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法 | |
CN104756068A (zh) | 合并相邻的聚集/分散操作 | |
CN104903850A (zh) | 用于滑动窗口编码算法的指令 | |
US9733935B2 (en) | Super multiply add (super madd) instruction | |
CN104838357A (zh) | 瓦解的多嵌套循环的向量化 | |
CN103502935A (zh) | 向量友好指令格式及其执行 | |
CN104011672A (zh) | 转置指令 | |
CN104137055A (zh) | 点积处理器、方法、系统和指令 | |
CN104335166A (zh) | 用于执行混洗和操作(混洗-操作)的系统、装置和方法 | |
CN104137060A (zh) | 高速缓存协处理单元 | |
CN104350492A (zh) | 在大寄存器空间中利用累加的向量乘法 | |
CN104081336A (zh) | 用于检测向量寄存器内的相同元素的装置和方法 | |
CN105278921A (zh) | 用于在处理具有未对齐数据行的数组期间消除未对齐的存储器访问的指令集 | |
CN104011644A (zh) | 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令 | |
CN104115114A (zh) | 经改进的提取指令的装置和方法 | |
CN104185837A (zh) | 在不同的粒度等级下广播数据值的指令执行单元 | |
CN104025019A (zh) | 用于执行双块绝对差求和的系统、装置和方法 | |
CN104321740A (zh) | 利用操作数基础系统转换和再转换的向量乘法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180612 |
|
CF01 | Termination of patent right due to non-payment of annual fee |