CN103946795B - 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 - Google Patents
用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 Download PDFInfo
- Publication number
- CN103946795B CN103946795B CN201180074918.5A CN201180074918A CN103946795B CN 103946795 B CN103946795 B CN 103946795B CN 201180074918 A CN201180074918 A CN 201180074918A CN 103946795 B CN103946795 B CN 103946795B
- Authority
- CN
- China
- Prior art keywords
- instruction
- circulation
- array
- mask
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 or look ahead
- G06F9/3824—Operand accessing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
循环对齐指令指示数组的基地址作为第一操作数、循环的迭代限制作为第二操作数以及目的地。循环包含迭代,且每一迭代包括该数组的一个数据元素。处理器接收循环对齐指令,解码该指令以便执行,并将执行的结果存储在目的地中。该结果指示在数组的开始处的将要与数组的剩余部分分离地处理的数据元素的数量,以使得数组的剩余部分的基地址与对齐宽度对齐。
Description
发明领域
各实施例涉及计算机处理器体系结构。尤其,各实施例涉及在被执行时引起特定结果的指令。
相关领域的描述
许多处理器具有单指令多数据(SIMD)体系结构。SIMD体系结构通常帮助显著地改善处理速度。在SIMD体系结构中,不同于操作仅一个数据元素或一对数据元素的标量指令,已打包数据指令、向量指令或SIMD指令可以同时地或并行地操作多个数据元素或多对数据元素。处理器可以具有响应于已打包数据指令的并行执行硬件,以便同时地或并行地执行多次操作。
在SIMD体系结构中,可以在一个寄存器或存储器位置内将多个数据元素成打包已打包数据或向量数据。在已打包数据中,可以将寄存器或其他存储位置的比特逻辑上分割成多个固定大小的数据元素的序列。数据元素中的每一可以表示单片数据,该单片数据连同通常具有相同大小的其他数据元素一起被存储在寄存器或存储位置中。例如,256比特宽的寄存器可以具有四个64比特宽的已打包数据元素、八个32比特宽的已打包数据元素、十六个16比特宽的已打包数据元素或三十二个8比特宽的已打包数据元素。已打包数据元素中的每一个可以表示可以分离地或独立于其他数据而操作的分离单片数据(例如,像素的颜色等等)。
代表性地,一种类型的已打包数据指令、向量指令或SIMD指令(例如,已打包加法指令)可以指定以垂直方式对在来自两个源已打包数据操作数的所有相应的数据元素对执行单个已打包数据操作(例如,加法),以便生成目标或结果已打包数据。源已打包数据操作数可以具有相同的大小,可以包含相同宽度的数据元素,且因而可以均包含相同数量的数据元素。两个源已打包数据操作数中的相同的比特位置中的源数据元素可以表示一对相应的数据元素。可以分离地或独立地对这些相应的源数据元素对中的每一个执行已打包数据操作,以便生成匹配数量的结果数据元素,且因而每一对相应的源数据元素可以具有相应的结果数据元素。通常,这样的指令的结果数据元素是以相同的次序,且它们常常具有相同的大小。
除了这种示例性类型的已打包数据指令,存在各种其他类型的已打包数据指令。例如,存在具有仅一个或多于两个的源已打包数据操作数的那些已打包数据指令、以水平方式而不是垂直方式操作的那些已打包数据指令、生成不同大小的结果已打包数据操作数的那些已打包数据指令、具有不同大小的数据元素的那些已打包数据指令和/或具有不同的数据元素次序的那些已打包数据指令。
附图简述
通过参照被用来阐释本发明的各实施例的下列描述和附图,可以最好地理解本发明。附图中:
图1是具有包括一个或多个循环对齐指令的指令集的处理器的示例实施例的框图。
图2A-图2C阐释利用循环对齐指令的结果的经掩码已打包数据操作的示例。
图3是具有执行单元的指令处理装置的示例实施例的框图,该执行单元可用于执行包括一个或多个循环对齐指令的示例实施例的指令。
图4是包括存储一个或多个循环对齐指令的有形非暂态机器可访问的和/或机器可读的存储介质的制品(例如,计算机程序产品)的框图。
图5A和图5B是阐释用于处理循环对齐指令的方法的示例实施例的流程图。
图6是阐释已打包数据操作掩码比特的数量取决于对齐宽度和数据元素宽度的表。
图7是一组已打包数据操作掩码寄存器的示例实施例的框图。
图8A-图8C阐释循环对齐指令及其操作的示例实施例。
图9是根据本发明的一个实施例的系统的框图。
图10是根据本发明的实施例的第二系统的框图。
图11是根据本发明的实施例的第三系统的框图。
图12是根据本发明的实施例的片上系统(SoC)的框图。
图13是根据本发明的各实施例的具有集成存储器控制器和图形设备(graphics)的单核心处理器和多核心处理器的框图。
图14是对比根据本发明的各实施例使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
详细描述
在下列描述中,陈述了众多特定的细节。然而,应理解,无需这些特定的细节就可以实践本发明的各实施例。在其他实例中,没有详细示出公知的电路、结构和技术,以便不模糊对本描述的理解。
图1是具有包括一个或多个循环对齐指令的指令集102的处理器100的示例实施例的框图。处理器100可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、各种以上的异构或完全是其他类型的处理器中的任一种。在一个或多个实施例中,处理器100可以是通用处理器(例如,由加利福尼亚州圣克拉拉市英特尔公司生产的型号的通用微处理器),但不要求这一点。替代地,指令处理装置可以是专用处理器。合适的专用处理器的示例包括但不限于网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)和控制器(例如,微控制器),等等。
处理器100具有指令集体系结构(ISA)101。指令集体系结构101表示处理器100的体系结构与编程相关的部分。指令集体系结构101通常包括原生指令、体系结构寄存器、数据类型、寻址模式、存储器体系结构、中断和异常处理以及处理器100的外部输入和输出(I/O)。指令集体系结构101不同于微体系结构,微体系结构通常表示被选择为实现该指令集体系结构的特定处理器设计技术。具有不同的微体系结构的处理器可以共享公共的指令集体系结构。例如,加利福尼亚州圣克拉拉市英特尔公司的某些微处理器和加利福尼亚州桑尼维尔市超微有限公司的某些微处理器使用显著不同的内部微体系结构来实现x86指令集的相似部分。
指令集体系结构101包括体系结构寄存器(例如,体系结构寄存器堆(registerfile))106。所阐释的体系结构寄存器106包括通用寄存器127和已打包数据寄存器107。通用寄存器127中的每一个可用于存储标量数据元素(也被称为数据元素),且已打包数据寄存器107B中的每一个可用于存储已打包数据、向量数据或SIMD数据(例如,数据元素的数组)。所阐释的体系结构寄存器106也包括掩码寄存器108。掩码寄存器108中的每一个可用于存储已打包数据操作掩码(也被称为“掩码”)。
体系结构寄存器106表示板载处理器存储位置。体系结构寄存器106在此也可以仅是指寄存器。除非以另外方式指定或清楚地明显看出,否则在此使用短语体系结构寄存器、寄存器堆和寄存器来指示对软件和/或程序员可见的(例如,软件可见的)的寄存器和/或由宏指令指定为标识操作数的寄存器。这些寄存器不同于给定的微体系结构中的其他非体系结构寄存器(例如,临时寄存器、重排序缓冲器、隐退寄存器等等)。
所阐释的指令集体系结构101也包括处理器100所支持的指令集102。指令集102包括多种不同类型的指令。指令集102的这些指令表示宏指令(例如,被提供给处理器100以便执行的指令),与微指令或micro-op(例如,从处理器100解码宏指令的解码器129得到的微指令)形成对比。
指令集102包括一个或多个循环对齐指令,例如循环对齐计数(PLCNT)指令105A、循环对齐掩码(PLMSK)指令105B和/或循环剩余部分掩码(KSUBREM)指令105C。PLCNT指令105A是标量生成指令,其可用于引起或致使处理器100生成标量值,例如整数值。该标量值可以被存储在通用寄存器127中。PLMSK指令105B和KSUBREM指令105C是掩码生成指令,其中的每一个都可用于引起或致使处理器100生成可以被存储在掩码寄存器108中的掩码。
在一个实施例中,以上所描述的循环对齐指令中的一个或多个是经掩码已打包数据指令103。经掩码已打包数据指令103可以类似于背景部分所提到的已打包数据指令,但有一些值得注意的差异。类似于前述的已打包数据指令,经掩码已打包数据指令103中的每一个可用于引起或致使处理器100执行由已打包数据指令指示的一个或多个已打包数据操作数对数据元素的已打包数据操作。已打包数据操作数可以被存储在已打包数据寄存器107中。然而,经掩码已打包数据指令103中的每一个可以使用一个或多个掩码寄存器108来掩码、断言或条件地控制已打包数据处理。被存储在掩码寄存器108中的掩码可以表示掩码操作数、断言操作数或条件操作控制操作数。
掩码可用于按每数据元素粒度来掩码或条件地控制已打包数据处理。例如,掩码可用于掩码是否应当将对来自单个源已打包数据操作数的个体数据元素或来自两个源已打包数据操作数的各对相应数据元素执行的经掩码已打包数据指令103的已打包数据操作的结果存储在已打包数据结果中。经掩码已打包数据指令103可以允许分离地且独立于各数据元素而断言或条件地控制每一数据元素或一对相应的数据元素的已打包数据处理。经掩码已打包数据指令103、操作和掩码可以提供某些优点,诸如例如增加的代码密度和/或更高的指令吞吐量。
在替代的实施例中,以上所描述的循环对齐指令中的一个或多个可以是并不必定具有与经掩码已打包数据指令103相同的指令格式的指令;然而,这些指令生成可由经掩码已打包数据指令103使用的结果。在图1中,循环对齐指令的替代的实施例被示出为虚线框。
处理器100也包括执行逻辑109。执行逻辑109可用于执行或处理指令集102的各指令。执行逻辑109可以包括执行单元、功能单元、算术逻辑单元、逻辑单元、算术单元等等。处理器100也包括解码器129,以便将宏指令解码成微指令或微操作(micro-op)以便由执行逻辑109执行。
PLCNT指令105A和PLMSK指令105B计算剥离迭代的数量。剥离迭代是指可以从循环中取出并与循环的剩余迭代分离地执行的循环的初始迭代。循环的“初始”迭代是指循环的最低索引部分(如果循环索引随每一迭代递增)或循环的最高索引部分(如果循环索引随每一迭代递减)。从循环取出一个或多个初始迭代被称为“循环剥离”,这是一种通常为循环优化而执行的技术。在普通场景中,在循环内的计算可以涉及数组。数组的基地址并不必定与由底层处理器用来处理已打包数据的数据存储的宽度(例如已打包数据寄存器107、高速缓存行或其他存储器单元的宽度)对齐。这种数据存储的宽度被称为对齐宽度。未对齐基地址意味着基地址不是对齐宽度的整数倍。为了改善数据访问的效率,编译器可以生成代码以便计算剥离迭代的数量,以便将数组的未对齐数据元素移出该循环。剥离迭代的数量具有与需要移出循环的、或以另外方式需要与数组的剩余部分分离地处理的这些未对齐数据元素相同的数量。数组的剩余部分的基地址(即,开始地址)与对齐宽度对齐;或等效地,是对齐宽度的整数倍。
然而,通常在编译时不能分辨剥离迭代的数量以及最后的向量化循环操作中的剩余迭代的数量,这是由于此时不知道数组元素的地址。借助于在此描述的各指令,在编译时,编译器可以生成PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C,代替执行相同的任务的其他代码序列。因而,编译器可以利用这些循环对齐指令来简化其循环优化任务。在替代的实施例中,循环对齐指令可以由程序员或其他代码生成实体使用。由于循环对齐指令是指令集体系结构101的一部分,处理器100包含接收作为输入的这些指令并将他们解码成微指令或微操作以便由执行逻辑109执行的硬件(例如,解码器129)。
PLCNT指令105A和PLMSK指令105B处理其中数组的开始尚未对齐的场景,而KSUBREM指令105C处理其中在循环的结束处的剩余元素的总大小小于对齐宽度的场景。在其中对齐宽度是向量寄存器的宽度的一个实施例中,这意味着,在最后的向量化循环操作中,剩余元素未充满整个向量寄存器。即是说,当循环中不存在足够的迭代(且数组中存在不足够的数据元素)时,可以使用KSUBREM指令105C来构成完整宽度向量操作。
考虑其中每一循环迭代处理一个数组元素的示例。假设每一分组数据寄存器具有512个比特,这意味着16个双字数据元素可以被打包到寄存器中并作为向量一起处理。如果迭代的总数量是100,且循环的开始与数据存储对齐,在结束处将存在向量化循环中未处理且需要分离地处理的4个剩余数据元素。KSUBREM指令105C计算剩余数据元素的数量,并生成可以与剩余数据元素一起用来改善循环向量化的掩码。
为了进一步阐释循环对齐,考虑它们的使用的表示性示例是有帮助的。图2A是阐释经掩码已打包数据加法操作203的第一表示性示例实施例的框图。响应于经掩码已打包数据指令(例如,图1的经掩码已打包数据指令103中的一个)或作为其结果,可以执行经掩码已打包数据加法操作203。在一种实施例中,掩码202被用于操作203。掩码202可以是由执行图1的PLMSK指令105B的处理器所生成的结果。
在图2A的示例中,经掩码已打包数据加法操作203将标量值(例如,5)添加到对应于已设定掩码比特(例如,1)的源已打包数据201的数据元素中的每一个。假定指定代码序列(对于i=0到21,B(i)=A(i)+5)以便执行,标量值5被添加到数组A的每一数据元素。由于源已打包数据201包含数组A的作为其最低次序数据元素的三个数据元素(即,A(0)、A(1)和A(2)),仅设定掩码202的最低次序的三个比特(例如,设定为1)以便指示应当执行加法,且应存储A(0)、A(1)和A(2)的加法的结果。在一种实施例中,掩码202可以用于加载源已打包数据201并执行经掩码已打包数据加法操作203。替代地,在十六个数据元素(例如,A(0)到A(15))被加载到向量寄存器之后,掩码202可以用来指示应仅对最低次序的三个数据元素执行加法。在任一实施例中,将不对数组A的最高次序的十三个数据元素执行加法;因此,它们被指示为“x”(不关心)。
出于阐释的目的,假设源已打包数据201是512比特宽且数据元素中的每一个是32比特宽(即,双字或“Dword”)。在图2A-图2C的示例中,源已打包数据201的宽度与对齐宽度相同。为了优化数据访问和已打包数据操作,将数组的基地址与对齐宽度对齐是有益的。例如,当被存储在高速缓存中的数组的基地址与高速缓存行宽度对齐时,处理器可以借助于单次取出来取出充满数组数据元素的高速缓存行。进一步,当被存储在已打包数据寄存器中的数组的基地址与已打包数据寄存器宽度对齐时,处理器可以高效地向量化对数组数据元素的操作。
作为示例,高速缓存行的宽度可以是512比特,且对齐宽度可以是向量寄存器的宽度。其中向量寄存器也是512比特宽的处理器中,将充满数据(例如,十六个双字)的高速缓存行加载到向量寄存器将需要一次加载操作。然而,在其中数组A的基地址未与对齐宽度对齐的图2A的示例中,加载数组A的初始十六个双字将需要两次加载操作;第一是来自第一高速缓存行的A(0)到A(2),然后是来自第二高速缓存行的A(3)到A(15)。如果高速缓存行的宽度是512比特且对齐宽度(例如,向量寄存器宽度)是128比特宽,则将已对齐的十六个双字加载到向量寄存器将需要四次加载操作。然而,在图2A的示例中,加载数组A的初始十六个双字将需要五次加载操作。这是因为跨越两个高速缓存行存储初始十六个双字;结果,加载它们将引起额外的加载操作。
在其中数组元素的数量是2的幂的各种应用(例如,图像处理)中,初始未对齐可以引起数组元素的全部随后加载的未对齐。因而,由于初始未对齐,不能借助于已打包数据操作来高效处理整个数组A。因而,在图2A的示例中,掩码202被用来向处理器指出,需要与数组元素的剩余部分分离地处理数组A的那些元素。
相反,图2B示出其中源已打包数据205包含数组A的接下来的十六个元素(即,A(3),A(4),….,A(18))的示例。十六个元素的总宽度与对齐宽度相同。因而,单个已打包数据操作(例如,向量取出、向量加法等等)可以对所有这些十六个元素操作。如果这些十六个元素中的每一个在一个循环迭代中被用作指令的源操作数(例如,对于i=3到18,B(i)=A(i)+5)),可以借助于单个已打包数据操作执行加法。在图2B的示例中,已打包数据操作掩码206被示出为与源已打包数据205一起使用。掩码206的所有十六个掩码比特被设定为指示可以操作数组a的所有十六个数据元素且可以存储操作的结果。用虚线示出掩码206,这是因为在一些实施例中,不使用掩码206是有益的。这是因为,通过将所有1用作掩码比特,对源分组数据205的操作和操作结果的存储与操作中不使用掩码206是相同的。
在图2C的示例中,数组(即,A(19)、A(20)、A(21))的最后的三个数据元素不占据源已打包数据207的完全宽度。即是说,A中剩下不足以填充整个向量寄存器207的元素。由于源已打包数据207包含作为其最低次序数据元素的A(19)、A(20)、A(21),仅设定掩码208的最低次序的三个比特(例如,设定为1)以便指示应当执行加法,且应当应存储A(19)、A(20)、A(21)的加法的结果。掩码208可以是通过处理器执行图1的KSUBREM指令105C所生成的结果。在一种实施例中,数组的结束处缺少数据元素(用于填充整个向量寄存器)可以是在数组的基地址处的初始未对齐的结果。例如,在图像处理应用中,往往图像数组的大小是向量寄存器宽度的整数倍。然而,如果图像数组的开始未对齐,则在循环的结束处可以留下不能填充整个向量寄存器的多个数据元素。
掩码202和208的使用帮助向量化其中数组的数据元素是操作数的循环的执行。在图2A的示例中,可以用其中源已打包数据201与掩码202一起使用的经掩码已打包数据操作来向量化具有循环索引i=0、1和2的迭代。在图2C的示例中,可以用其中源已打包数据207与掩码208一起使用的经掩码已打包数据操作来向量化具有循环索引i=19、20和21的迭代。在一种实施例中,在检测到循环时,编译器可以生成循环优化代码,其包括PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C中的一种或多种。PLCNT指令105A的输出是整数,其指示可以能够从循环取出以便改善向量化的迭代的数量;在图2A的示例中,该数量是三。PLMSK指令105B的输出是可以被应用到源已打包数据201的已打包数据操作掩码(例如,掩码202)。在图2A的示例中,仅设定了掩码202的最低次序的三个元素(例如,1)并清除了其余的元素(例如,0)。KSUBREM指令105C的输出是可以被应用到源已打包数据207的已打包数据操作掩码(例如,掩码208)。在图2C的示例中,仅设定了掩码208的最低次序的三个元素(例如,1)并清除了其余的元素(例如,0)。
所阐释的经掩码已打包数据操作203的指令指示将源已打包数据与标量值相加。其他经掩码已打包数据指令可以指示两个或更多个源已打包数据。经掩码已打包数据操作203的指令也指示已打包数据操作掩码(202、206或208)。已打包数据操作掩码中的每一个包括多个掩码元素、断言元素、条件控制元素或标志。元素或标志可以被包括在与一个或多个相应源数据元素的一一对应中。例如,如本阐释中所示出的,在涉及一个源已打包数据操作数的操作的情况中,对于每一相应的源数据元素,可以存在一个这样的元素或标志。已打包数据操作掩码的每一元素或标志可用于掩码对一个或多个相应的源已打包数据元素的分离的已打包数据操作。例如,每一元素或标志可以掩码对相应的源已打包数据元素的分离的已打包数据操作。
如图中所示,通常每一元素或标志可以是单个比特。该单个比特可以允许指定两种不同的可能性中的一种(例如,执行操作对比不执行操作,存储操作的结果对比不存储操作的结果等等)。替代地,如果期望在多于两个的不同的选项之间选择,那么两个或更多个比特可以用于每一标志或元素。在图2A的示例中,已打包数据操作掩码202包括十六个比特。十六个比特中的每一个具有与源已打包数据201的十六个相应数据元素中的一个的有序对应关系。例如,掩码202的三个最高次序的比特对应于源已打包数据201的相应的三个最高次序的数据元素。在其中源已打包数据具有更少或更多的数据元素的替代实施例中,已打包数据操作掩码可以类似地具有更少或更多的数据元素。
根据所阐释的惯例,在设定了给定的掩码比特(即,1)时,对源已打包数据的相应的数据元素执行已打包数据操作的结果,并将其存储在已打包数据结果的相应数据元素中。相反,在清除了给定的掩码位(即,0)时,则对源已打包数据的相应数据元素忽略(即,不执行)已打包数据操作,或者不允许将结果存储在已打包数据结果的相应数据元素中。相反,另一值(由符号“X”表示)可以被存储在结果数据元素中。例如,存储来自源已打包数据的相应数据元素的数值。在替代的实施例中,可将零或另一预先确定的值存储在已打包数据结果的相应数据元素中。与所阐释的相反的惯例也是可能的,其中,清除了各比特(即,0)以便允许存储结果或者设定(即,1)为不允许存储结果。
在一些实施例中,可以可选地通过对经掩蔽的元素(即,具有相应的已清除掩码比特的数据元素)的已打包数据操作来抑制或不引起异常(例如,异常标志)或违例。在一些实施例中,对于带有存储器操作数的经掩码已打包数据指令,对于经掩码的数据元素,可以可选地抑制存储器故障。这种特征可以帮助实现控制流预测,这是由于掩码可以实际上提供归并行为已打包数据寄存器,但不作要求。
应明白,处理器可以支持多种多样的不同类型的经掩码已打包数据操作。例如,这些经掩码已打包数据操作可以包括具有仅一个、或具有多于两个的源已打包数据的那些经掩码已打包数据操作、生成不同大小的结果已打包数据的那些经掩码已打包数据操作、具有不同大小的数据元素的那些经掩码已打包数据操作和/或具有不同的结果数据元素次序的那些经掩码已打包数据操作及其组合。
图3是具有执行单元317的指令处理装置315的示例实施例的框图,执行单元317可用于执行包括PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的示例实施例的指令。在一些实施例中,指令处理装置315可以是处理器和/或可以被包括在处理器(例如,图1的处理器100或类似的处理器)中。替代地,指令处理装置315可以被包括在不同的处理器或电子系统中。
指令处理装置315接收PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C中的一个或多个。可以从存储器、指令队列、指令取出单元或另一源接收到各指令。指令105A、105B和105C中的每一个可以表示机器指令、宏指令或指令处理装置所识别的控制信号。指令处理装置315可以具有可用于处理指令和/或响应于指令的结果或由指令指定的结果来存储结果的特定的或专用的电路或其他逻辑(例如,与硬件和/或固件组合的软件)。
所阐释的指令处理装置315的实施例包括指令解码器,例如图1的解码器129或类似的解码器。解码器129接收和解码高级机器指令或宏指令,例如所接收的指令105A-105C。解码器129可以生成和输出反映原始的高级指令和/或从其导出的一个或多个低级微操作、微代码入口点、微指令或其他低级指令或控制信号。一个或多个低级指令或控制信号可以通过一个或多个低级(例如,电路级或硬件级)操作实现高级指令的操作。可以使用各种不同的机制来实现解码器129。合适的机制的示例包括但不限于微代码随机存取存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)、被用来实现本领域中已知的解码器的其他机制等等。
替代地,不同于具有解码器129,在一个或多个其他实施例中,指令处理装置315可以改为具有指令仿真器、翻译器、变形器、解释器或其他指令转换逻辑。本领域中已知各种不同类型的指令转换逻辑,且可以以软件、硬件、固件或其组合实现。指令转换逻辑可以接收各指令105A-105C中的一个或多个,将其仿真、翻译、变形、解释或以另外方式转换成一个或多个相应的所导出的指令或控制信号。在进一步的其他实施例中,指令处理装置315可以具有解码器和附加的指令转换逻辑两者。例如,指令处理装置315可以具有将指令105A-105C中的一个或多个转换成一个或多个中间指令的指令转换逻辑,以及将一个或多个中间体指令解码成可由指令处理装置的原生地硬件执行的一个或多个低级指令或控制信号的解码器。指令转换逻辑中的一些或全部可以被定位为与指令处理装置的其余部分分离,例如在分离的管芯上或者在片外存储器中。
再次参见图3,指令处理装置315也包括第一通用(GP)寄存器320和第二通用寄存器321,第一通用(GP)寄存器320可用于存储基地址(基地址是要对齐的数组的开始地址),第二通用寄存器321可用于存储循环限制(循环限制是循环中的迭代的总数量)。第一通用寄存器320和第二通用寄存器321给PLCNT指令105A和PLMSK指令105B提供输入。在一种实施例中,指令处理装置315也包括第三通用寄存器322,其可用于存储当前迭代计数(当前迭代计数指示向量处理停止的位置)。第二通用寄存器321和第三通用寄存器322给KSUBREM指令105C提供输入。如先前所提到的,循环对齐指令可以明确地指定(例如,通过比特或一个或多个字段)或以另外方式指示提供输入的寄存器和目的地。PLCNT指令105A的目的地(PLCNT目的地323)也是通用寄存器。PLMSK指令105B的目的地(PLMSK目的地324)是掩码寄存器108中的一个。KSUBREM指令105C的目的地(KSUBREM目的地325)也是掩码寄存器108中的一个。替代地,目的地存储位置可以是另一寄存器或存储器位置。
在一些实施例中,PLCNT指令105A和PLMSK指令105B中的每一个指定或指示立即值的附加操作数。立即值表示对齐宽度。在替代的实施例中,各指令不指定立即值且改为将预先确定的值(例如,底层微体系结构所允许的最大的对齐宽度,例如512比特)用作对齐宽度。
寄存器320-325均可以表示板载处理器存储位置,例如图1的体系结构寄存器106。寄存器320-325对软件和/或程序员可见(例如,软件可见的),并且/或者可以是由宏指令指示或指定为标识操作数的寄存器。寄存器320-325可以使用公知的技术在不同的微体系结构中以不同的方式实现,且不限于任何已知的特定类型的电路。只要各种不同类型的寄存器能够存储和提供在此描述的数据,它们就是适用的。合适的类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名动态分配的物理寄存器及其组合。
指令处理装置315也包括执行单元317。执行单元317与寄存器320-325耦合。执行单元317也与解码器129耦合。执行单元317可以从解码器129接收反映PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C或从其导出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。
响应于循环对齐指令中的每一个和/或作为其结果,执行单元317可用于将结果存储在目的地中。作为示例,执行单元317可以包括算术逻辑单元、逻辑单元、算术单元、功能单元等等。执行单元317可以包括可用于计算剥离迭代的数量的循环对齐逻辑318。执行单元317和/或循环对齐逻辑318可以包括可用于实现指令(例如,执行一个或多个微指令)的操作的电路或其他执行逻辑(例如,软件、固件、硬件或组合)。
在一些实施例中,执行单元还可用于使得不被用来存储掩码的目的地的比特置零,或替代地给予这些比特另一预先确定的值。
为了避免模糊本描述,已经示出并描述了相对简单的指令处理装置315。应明白,其他实施例可以具有多于一个的执行单元。例如,该装置可以包括多种不同类型的执行单元,诸如例如,算术单元、算术逻辑单元(ALU)、整数单元、浮点数单元等等。这些单元中的至少一个可以响应于在此公开的循环对齐指令的实施例。指令处理装置或处理器的进一步的其他实施例可以具有多个核心、逻辑处理器或执行引擎。可用于执行一个或多个循环对齐指令的执行单元可以被包括在各核心、逻辑处理器或执行引擎中的至少一个、至少两个、多个或全部之内。
指令处理装置315或处理器也可以可选地包括一个或多个其他公知的组件。例如,其他实施例可以包括指令取出逻辑、调度逻辑、分支预测逻辑、指令和数据高速缓存、指令和数据翻译后备缓冲器、预取出缓冲器、微指令队列、微指令定序器、总线接口单元、次级或更高级高速缓存、指令调度逻辑、隐退逻辑、寄存器重命名逻辑等等及其各种组合中的一个或多个。应明白,处理器中存在这样的组件的无数字面不同的组合和配置,且本发明的范围不限于任何已知的这样的组合或配置。
图4是包括存储一个或多个循环对齐指令405(例如,图1的PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C)的有形非暂态机器可读的(例如,机器可访问的)存储介质400的制品(例如,计算机程序产品)的框图。应明白,在存储介质400上也可以存储用于执行在此公开的一个或多次操作或方法的其他指令或指令的序列(例如,将循环对齐指令405的结果用作断言操作数的一个或多个指令、紧密联系的标量或已打包数据指令或使用循环对齐指令405的例程或算法)。
在各种实施例中,有形非暂态机器可读存储介质400可以包括软盘、光存储介质、光盘、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪速存储器、相变存储器或其组合。有形介质可以包括一种或多种有形固态材料,诸如例如半导体材料、相变材料、磁材料、光盘的透光固态材料等等。
合适的机器的示例包括但不限于指令处理设备、指令执行设备、处理器和具有一个或多个指令处理设备、指令执行设备或处理器的各种电子设备。这样的电子设备的多个表示性示例包括但不限于计算机系统、台式机、膝上型计算机、笔记本、服务器、网络设备、路由器、交换机、上网本、机顶盒、移动因特网设备(MID)、蜂窝式电话和媒体播放器。这样的电子设备通常包括与诸如例如一个或多个有形非暂态机器可读存储介质等的一个或多个其他组件耦合的一个或多个处理器。处理器和其他组件的耦合通常通过一个或多个总线和桥(也称为总线控制器)进行。因而,电子设备的存储设备或存储介质可以存储在该电子设备的一个或多个处理器上执行的指令和/或指令序列。
图5A是处理循环对齐指令的示例实施例(例如,图1的PLCNT指令105A和/或PLMSK指令105B)的方法500的示例实施例的流程框图。在各种实施例中,方法500可以由通用处理器、专用处理器(例如,图形处理器或数字信号处理器)或另一类型的数字逻辑设备或指令处理装置执行。在一些实施例中,方法500可以由图1的处理器100或图3的指令处理装置315或类似的处理器或指令处理装置执行。替代地,方法500可以由处理器或指令处理装置的不同实施例执行。此外,图1的处理器100和图3的指令处理装置315可以执行与图5A的方法500的那些实施例相同、相似或不同的操作和方法的实施例。
方法500包括接收诸如PLCNT指令105A或PLMSK指令105B等的循环对齐指令的处理器(框510)。循环对齐指令指定或指示第一源操作数、第二源操作数、目的地和数组的数据元素大小。在一种实施例中,第一源操作数指定在其中存储数组的基地址的第一寄存器,且第二源操作数指定在其中存储循环限制(即是说,循环中的迭代的总数量)的第二寄存器。在一些实施例中,每一数组数据元素的宽度由作为指令名称的一部分的助记符指定(例如,字节的数据元素宽度可以由诸如PLCNTB和PLMSKB等的各指令的名称指示)。在一些实施例中,指令也指定或指示立即值,立即值是数组与其对齐的所请求的对齐宽度。在各种方面中,可以在处理器、指令处理装置或其部分(例如,解码器、指令转换器等等)处接收指令。在各种方面中,可以从处理器外的源(例如,从主存储器、盘或总线或互连)或从处理器上的源(例如,从指令高速缓存)接收循环对齐指令。
然后,解码循环对齐指令以便执行(框520)。解码可以由在处理器内的解码器电路执行。在一些实施例中,可以由以上所描述的指令转换逻辑结合图3中所示出的解码器129来转换循环对齐指令以供解码。
在执行循环对齐指令之后,将执行的结果存储在目的地中(框530)。该结果指示将与数组的剩余部分分离地处理的、在数组的开始处处的数据元素的数量。在数组的剩余部分的基地址(即是说,开始地址)与对齐宽度(例如所请求的对齐宽度)对齐时,实现了循环对齐。
在一种实施例中,该结果将数据元素的数量指示为整数值(例如在PLCNT指令105A的情况中)。在另一实施例中,该结果将数据元素的数量指示为被设定为预先确定的值(例如,1)的掩码元素(例如在PLMSK指令105B的情况中)。
图5B是处理循环对齐指令(例如,图1的KSUBREM指令105C)的示例实施例的方法550的示例实施例的流程框图。在各种实施例中,方法550可以由通用处理器、专用处理器(例如,图形处理器或数字信号处理器)或另一类型的数字逻辑设备或指令处理装置执行。在一些实施例中,方法550可以由图1的处理器100、或图3的指令处理装置315、或类似的处理器或指令处理装置执行。替代地,方法550可以由处理器或指令处理装置的不同的实施例执行。此外,图1的处理器100和图3的指令处理装置315可以执行与图5B的方法505相同、相似或不同的操作和方法的实施例。
方法550包括处理器接收循环对齐指令,例如KSUBREM指令105C(框560)。循环对齐指令指定或指示第一源操作数、第二源操作数、目的地和数组的数据元素大小。在一种实施例中,第一源操作数指定其中存储当前迭代计数(即是说,循环的向量处理的位置)的第一寄存器,而第二源操作数指定其中存储循环限制(即是说,循环中的迭代的总数量)的第二寄存器。在一些实施例中,每一数组数据元素的宽度由作为指令名称的一部分的助记符指定(例如,字节的数据元素宽度可以由诸如KSUMREMB等的各指令的名称指示)。在各种方面中,可以在处理器、指令处理装置或其部分(例如,解码器、指令转换器等等)处接收指令。在各种方面中,可以从处理器外的源(例如,从主存储器、盘或总线或互连)或从处理器上的源(例如,从指令高速缓存)接收循环对齐指令。
然后,解码循环对齐指令以便执行(框570)。解码可以由在处理器内的解码器电路执行。在一些实施例中,可以由以上所描述的指令转换逻辑结合图3中所示出的解码器129转换循环对齐指令以便解码。
在执行循环对齐指令之后,执行的结果被存储在目的地中(框580)。该结果指示与数组的前述部分分离地处理的、在数组的结束处的数据元素的数量。数组的前述部分是向量处理停止并记录当前迭代计数的位置。
在一个实施例中,该结果将数据元素的数量指示为被设定为预先确定的值(例如,1)(例如在KSUBREM指令105C的情况中)的掩码元素。在替代的实施例中,结果也可以将数据元素的数量指定为整数值。
所阐释的方法包括在处理器或指令处理装置外(例如,从软件的角度)可见的操作。在其他实施例中,方法可以可选地包括一个或多个其他操作(例如,在处理器或指令处理装置内部发生的一个或多个操作)。作为示例,在接收到指令之后,可以将指令解码、翻译、仿真或以另外方式转换成一个或多个其他指令或控制信号。可以访问和/或接收第一源操作数和第二源操作数。可以允许执行单元根据指令生成或执行循环对齐,且执行单元可以生成或执行循环对齐。
图6是阐释对于对齐宽度和已打包数据元素宽度的不同组合由PLMSK指令105B和KSUBREM指令105C生成的已打包数据操作掩码比特的数量的表600。已打包数据操作掩码比特的数量是给定的对齐宽度和给定的已打包数据(例如,数组)元素宽度的比例。示出了64比特、128比特、256比特和512比特的对齐宽度,但其他大小也是可能的。考虑了8比特字节(B)、16比特字(W)、32比特双字(D)或单精度浮点数以及64比特四字(Q)或双精度浮点数的已打包数据元素宽度,但其他宽度也是可能的。
图7是一组掩码寄存器700(例如图1的掩码寄存器108)的示例实施例的框图。掩码寄存器700中的每一个可以用来存储已打包数据操作掩码(例如存储在PLMSK目的地324和KSUBREM目的地325中的掩码)。在所阐释的实施例中,该组包括被标记为k0到k7的八个掩码寄存器。替代的实施例可以包括少于八个(例如,两个、四个、六个等等)或多于八个(例如,十六个、二十个、三十二个等等)已打包数据操作掩码寄存器。在所阐释的实施例中,掩码寄存器700中的每一个都是64比特宽。在替代的实施例中,掩码寄存器700的宽度可以是比64比特宽(例如,80比特、128比特等等)或比64比特窄(例如,8比特、16比特、32比特等等)。掩码寄存器700可以使用公知的技术以不同的方式来实现,且不限于任何已知的具体类型的电路。只要各种不同类型的寄存器能够存储和提供在此描述的数据,它们就是适用的。合适的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名动态分配的物理寄存器及其组合。
在一些实施例中,掩码寄存器700可以是分离的、专用的一组体系结构寄存器。在一些实施例中,各指令可以以与不同于被用来编码或指定其他类型的寄存器(例如,图1的掩码寄存器108)不同的比特或一个或多个不同的指令格式的字段组合来编码或指定掩码寄存器。作为示例,经掩码已打包数据指令可以使用三个比特(例如,3比特字段)来编码或指定八个已打包数据操作掩码寄存器k0到k7中的任何一个。在替代的实施例中,当存在更少或更多的已打包数据操作掩码寄存器时,分别可以使用更少或更多的比特。在以一个特定实现中,仅掩码寄存器k1到k7(但不是k0)可以被寻址为断言操作数,以便断言经掩码已打包数据操作。寄存器k0可以被用作常规的源或目的地,但不可以被编码为断言操作数(例如,如果指定了k0,则它具有全部为1或“无掩码”的编码)。在其他实施例中,寄存器中的全部或仅一些可以被编码为断言操作数。
在一些实施例中,寄存器700的最低次序的子集或部分被用于掩码,尽管这不是必须的。如图6中所示出,当对齐宽度是128比特且数据元素宽度是8比特时,使用16个掩码比特。这16个掩码比特可以是被存储在寄存器700中的一个(例如,k1)中的最低次序的16比特。k1的更高次序的部分可以被设定为零或其他预先确定的值。在替代的实施例中,可以可选地使用最高次序的子集或某种其他子集。
图8A-图8C分别阐释PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的实施例及其操作。每一指令的名称可以具有附加到其上的助记符B/W/D/Q以便指示数据元素宽度;例如,B(8比特)、W(16比特)、D(32比特)或Q(64比特)。在这些图中,rax、rbx、rcx表示通用寄存器,且k1表示掩码寄存器。在图8A和图8B的示例中(PLCNT和PLMSK),rax(存储SRC1)是具有数组的基地址的第一源操作数,rcx(存储SRC2)是具有循环限制的第二源操作数,rax(存储DEST)表示结果的目的地。VL表示按字节计的所请求的对齐宽度,w表示数组中的每一数据元素的宽度(即,1、2、4或者8个字节,如由附加到指令名称的B/W/D/Q所指示的)。在一些实施例中,各指令指定可以被用来设定VL的值的立即值;例如,00、01和10,它们分别可以表示128比特、256比特、512比特。可以保留一些立即值;例如,11可以表示1024比特。应理解,任何不同的立即值可以被用来表示不同的对齐宽度。在替代的实施例中,各指令不指定立即值且改为将预先确定的值(例如,底层微体系结构所允许的最大的对齐宽度,例如512比特)用作VL的值。进一步,在图8A和图8B的示例中,alignment_iterations(对齐_迭代)表示实现对齐的迭代的数量。这一数量小于SRC2中所指定的迭代限制。在图2A的示例中,这一数量是三。
如所示出的,PLCNT指令返回对应于alignment_iterations和SRC2(迭代限制)的最小值的计数。PLMSK指令返回已打包数据操作掩码,其等效于PLCNT所返回的计数。图8B的示例示出,可以通过将值1平移n比特且然后减去1来实现掩码,其中n表示(可以由PLCNT生成的)计数。所得到的掩码被存储到目的地中,目的地可以是图7的已打包数据操作掩码寄存器700中的一个。应理解,在此的各示例是说明性的和非限制性,这是由于可以存在用于实现PLCNT和PLMSK的多种不同的方式。
在图8C(KSUBREM)的示例中,rax(存储SRC1)是具有循环限制的第一源操作数,rcx(存储SRC2)是具有循环的循环限制的第二源操作数,rax(存储DEST)表示结果的目的地。VL在这里表示向量元素的数量,且remaining_iterations(剩余_迭代)表示VL的最小值和在SRC2和SRC1之间的差异。可以通过将值1平移n个比特且然后减去1来生成所得到的掩码,其中n是remaining_iterations(剩余_迭代)的值。
在此公开的循环对齐指令是具有一般用途的通用指令。例如,这些指令可以单独地或与其他指令组合以用于计算剥离迭代的数量。在一些实施例中,在此公开的循环对齐指令可以结合密切联系的或关联的已打包数据指令以用来优化循环操作的执行。基于本公开内容也预期其他用途。
示例性计算机系统和处理器——图9-图13
图9-13是示例性计算机系统和处理器。本领域中已知用于膝上型计算机、台式机、手持式PC、个人数字助理、工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、单元电话、便携式媒体播放器、手持式设备和各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够合并在此公开的处理器和/或其他执行逻辑的大量系统或电子设备通常是适用的。
现在参见图9,所示出的是根据本发明的一种实施例的系统1300的框图。系统1300可以包括一个或多个处理器1310、1315,它们耦合到图形存储器控制器中枢(GMCH)1320。图9中用虚线指示附加的处理器1315的可选性质。
每一处理器1310、1315可以是处理器1700的某种版本。然而,应注意,不太可能的情况是集成图形逻辑和集成存储器控制单元将存在于处理器1310、1315中。
图9阐释GMCH1320可以耦合到存储器1340,存储器1340可以是例如动态随机存取存储器(DRAM)。对于至少一种实施例,DRAM可以与非易失性高速缓存相关联。
GMCH1320可以是芯片组,或芯片组的一部分。GMCH1320可以与处理器1310、1315通信并控制在处理器1310、1315和存储器1340之间的交互。GMCH1320也可以充当在处理器1310、1315和系统1300的其他元件之间的加速总线接口。对于至少一种实施例,GMCH1320经由多点总线例如前端总线(FSB)1395与处理器1310、1315通信。
此外,GMCH1320耦合到显示器1345(例如平板显示器)。GMCH1320可以包括集成图形加速器。GMCH1320还耦合到输入/输出(I/O)控制器中枢(ICH)1350,其可以用来将各种外围设备耦合到系统1300。例如在图9的实施例中所示出的是外置图形设备1360,其可以是连同另一外围设备1370耦合到ICH1350的分立的图形设备。
替代地,附加的或不同的处理器也可以存在于系统1300中。例如,附加的处理器1315可以包括与处理器1310相同的附加的处理器、与处理器1310异构或不对称的附加处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器。在物理资源1310、1315之间可以存在包括体系结构、微体系结构、热、功率消耗特性等等的指标度量谱方面的各种差异。这些差异可以有效地将它们本身表现为处理元件1310、1315当中的不对称性和异构性。对于至少一种实施例,各种处理元件1310、1315可以驻留在相同的管芯封装中。
现在参见图10,所示出的是根据本发明的实施例的第二系统1400的框图。如图10中所示出,多处理器系统1400是点对点互连系统,且包括经由点对点互连1450耦合的第一处理器1470和第二处理器1480。如图10中所示出,处理器1470和1480中的每一个可以是处理器1700的某种版本。
替代地,处理器1470、1480中的一个或多个可以是不同于处理器的元件,例如加速器或现场可编程门阵列。
尽管借助仅两个处理器1470、1480示出,但应理解,本发明的范围不限于此。在其他实施例中,一个或多个附加的处理元件可以出现在给定的处理器中。
处理器1470还可以包括集成存储器控制器中枢(IMC)1472和点对点(P-P)接口1476和1478。类似地,第二处理器1480可以包括IMC1482和P-P接口1486和1488。处理器1470、1480可以使用点对点(PtP)接口电路1478、1488经由点对点(PtP)接口1450交换数据。如图10中所示出,IMC1472和1482将处理器耦合到各自的存储器,即存储器1442和存储器1444,它们可以是本地附加到各自的处理器的主存储器的一部分。
处理器1470、1480均可以使用点对点接口电路1476、1494、1486、1498经由个体P-P接口1452、1454与芯片组1490交换数据。芯片组1490也可以经由高性能图形接口1439与高性能图形电路1438交换数据。
共享高速缓存(未示出)可以被包括在两个处理器外的任一处理器中,仍经由P-P互连与各处理器连接,以使得如果一个处理器被置于低功率模式则处理器中的一个或两者的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组1490可以经由接口1496耦合到第一总线1416。在一个实施例中,第一总线1416可以是外围组件互连(PCI)总线,或者是诸如PCI Express总线或另一第三代I/O互连总线等的总线,但本发明的范围不限于此。
如图10中所示出,各种I/O设备1414可以连同总线桥1418一起耦合到第一总线1416,总线桥1418将第一总线1416耦合到第二总线1420。在一种实施例中,第二总线1420可以是低针数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线1420,包括例如键盘/鼠标1422、通信设备1426和诸如盘驱动器或可以包括代码1430的其他大容量存储设备等的数据存储单元1428。进一步,音频I/O1424可以耦合到第二总线1420。注意,其他体系结构是可能的。例如,代替图10的点对点体系结构,系统可以实现多点总线或其他这样的体系结构。
现在参见图11,所示出的是根据本发明的实施例的第三系统1500的框图。图10和图11中类似的元件具有类似的标号,且图11中已经忽略了图10的某些方面,以便避免模糊图11的其他方面。
图11阐释处理元件1470、1480可以分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。对于至少一个实施例,CL1472、1482可以包括存储器控制器中枢逻辑(IMC),例如以上结合图89和14(Figures89and14,原文如此)所描述的存储器控制器中枢逻辑(IMC)。另外。CL1472、1482也可以包括I/O控制逻辑。图15阐释不仅存储器1442、1444耦合到CL1472、1482,而且I/O设备1514也耦合到控制逻辑1472、1482。传统I/O设备1515耦合到芯片组1490。
现在参见图12,所示出的是根据本发明的实施例的SoC1600的框图。图13中的类似的元件具有类似的标号。而且,虚线框是更高级的SoC上的可选功能部件。在图12中,互连单元1602耦合到:应用处理器1610,其包括一组一个或多个核心1702A-N和共享高速缓存单元1706;系统代理单元1710;总线控制器单元1716;集成存储器控制器单元1714;一组或一个或多个媒体处理器1620,其可以包括集成图形逻辑1708、提供静态图像和/或摄像机功能性的图像处理器1624、用于提供硬件音频加速的音频处理器1626和用于提供视频编码/解码加速的视频处理器1628;静态随机存取存储器(SRAM)单元1630;直接存储器存取(DMA)单元1632;以及用于耦合到一个或多个外部显示器的显示单元1640。
在此公开的机制的各实施例可以以硬件、软件、固件或这样的实现方法的组合实现。本发明的各实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
程序代码可以被应用到输入数据,以执行在此描述的功能并生成输出信息。可以以已知的方式将输出信息应用到一个或多个输出设备。出于本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器等的处理器的任何系统。
程序代码可以以高级过程编程语言或对象面向编程语言实现,以便与处理系统通信。如果期望的话,程序代码也可以以汇编语言或机器语言实现。事实上,在此描述的机制在范围上不限于任何特定编程语言。在任何情况中,语言可以是编译语言或解释语言。
至少一种实施例的一个或多个方面可以由被存储在机器可读介质上的表示性指令实现,这些指令表示在处理器内的各种逻辑,在由机器读取时,这些指令引起机器构造执行在此描述的技术的逻辑。被称为“IP核”的这样的表示可以被存储在有形机器可读的介质上,并被提供给各种用户或制造设施,以便加载到实际上构成逻辑或处理器的制造机器。
这样的机器可读的存储介质可以包括而不限于由机器或设备制造或形成的制品的非暂态有形配置,包括存储介质,例如硬盘、任何其他类型的盘(包括软盘、光盘(紧致盘只读存储器(CD-ROM)、可刻录紧致盘(CD-RW))和磁光盘)、半导体设备(例如只读存储器(ROM)、随机存取存储器(RAM)(例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM))、磁或光卡或适用于存储电子指令的任何其他类型的介质。
因此,本发明的各实施例也包括含有指令、向量友好的指令格式或含有设计数据例如硬件描述语言(HDL)的非暂态有形机器可读的介质,硬件描述语言(HDL)定义在此描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可以被称为程序产品。
在一些情况中,指令转换器可以被用来将指令从源指令集转换到目标指令集。例如,指令转换器可以转换(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以另外方式将指令转换成一个或多个其他指令以便由核心处理。指令转换器可以以软件、硬件、固件或其组合实现。指令转换器可以是在处理器上、在处理器外或部分在处理器上且部分在处理器外。
图14是比较根据本发明的各实施例使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所阐释的实施例中,指令转换器是软件指令转换器,但替代地指令转换器可以以软件、固件、硬件或其各种组合实现。图13示出可以使用x86编译器1804来编译以高级语言1802编写的程序,以便生成可以由具有至少一个x86指令集核心1816的处理器原生地执行的x86二进制代码1806(假设指令中的一些是以向量友好的指令格式编译)。具有至少一个x86指令集核心1816的处理器表示可以通过以下方式执行与具有至少一个x86指令集核心的英特尔处理器几乎相同的功能的任何处理器:通过兼容地执行或以另外方式处理(1)英特尔x86指令集核心的指令集的主要部分或(2)针对在具有至少一个x86指令集核心的英特尔处理器上运行以便取得与具有至少一个x86指令集核心的英特尔处理器的应用或其他软件的目标代码版本基本上相同的结果。x86编译器1804表示可用于生成x86二进制代码1806(例如,目标代码)的编译器,x86二进制代码1806可以在具有或没有附加的联接处理的情况下在具有至少一个x86指令集核心1816的处理器上执行。类似地,图14示出可以使用替代指令集编译器1808来编译以高级语言1802编写的程序以便生成替代指令集二进制代码1810,该替代指令集二进制代码1810可以由没有至少一个x86指令集核心1814的处理器(例如,带有执行加利福尼亚州桑尼维尔市的MIPS科技的MIPS指令集和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核心的处理器)原生地执行。指令转换器1812被用来将x86二进制代码1806转换成可以由没有x86指令集核心1814的处理器原生地执行的代码。这种经转换的代码不可能与替代指令集二进制代码1810相同,这是因为难以做成允许这一点的指令转换器;然而,经转换的代码将完成一般的操作并由来自替代指令集的指令构成。因而,指令转换器1812表示通过仿真、模拟或任何其他过程来允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码1806的软件、固件、硬件或其组合。
以在此公开的向量友好的指令格式的指令的某些操作可以由硬件组件执行,且可以以机器可执行指令实现,这些机器可执行指令被用来引起或至少致使借助于执行操作的指令编程电路或其他硬件组件。电路可以包括通用或专用处理器或逻辑电路,等等。各操作也可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可以包括响应于从机器指令导出的机器指令或一个或多个控制信号以便存储指令指定的结果操作数的特定的或具体的电路或其他逻辑。例如,可以在图9-图13的一个或多个系统中执行在此公开的指令的实施例,且以向量友好的指令格式的指令的实施例可以被存储在程序代码中,以便在各系统中执行。另外,这些图的处理元件可以利用在此详述的详细的流水线和/或体系结构中的一种(例如,有序体系结构和乱序体系结构)。例如,有序体系结构的解码单元可以解码指令、将经解码的指令传送到向量或标量单元等等。
上面的描述旨在阐释本发明的优选实施例。从上面的讨论应当明显看出,尤其是在快速增长且难以预见进一步发展的这样的技术领域中,在所附权利要求书及其等效物的范围内,在不偏离本发明的原理的前提下,可以由本领域中的技术人员在安排和细节方面修改本发明。例如,方法的一个或多个操作可以组合起来或者进一步划分。
替代的实施例
尽管已经描述了将原生地执行向量友好的指令格式的实施例,但本发明的替代实施例可以通过在执行不同的指令集的处理器上运行的仿真层来执行向量友好的指令格式(例如,执行加利福尼亚州桑尼维尔市的MIPS科技的MIPS指令集的处理器,执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的处理器)。而且,尽管附图中的各流程图示出由本发明的某些实施例执行的特定次序,但应理解,这样的次序是示例性(例如,替代的实施例可以以不同的次序执行操作、组合某些操作、重叠某些操作等等)。
在上面的描述中,出于解释的目的,陈述了众多特定细节以便提供对本发明的各实施例的彻底理解。然而,本领域技术人员经明显看出,可以在没有这些特定细节的情况下实践一个或多个其它实施例。提供所描述的具体实施例不是为了限制本发明而是为了阐释本发明的各实施例。本发明的范围不由上面提供的特定示例确定而是仅由下面的权利要求确定。
应理解,上面的描述预期是说明性的而非限制性的。在阅读和理解上面的描述之后,本领域中的技术人员将明显看出许多其他实施例。因此,因此应该参照所附的权利要求以及这样的权利要求被赋予的等同物的全部范围来确定本发明的范围。
Claims (19)
1.一种指令处理方法,包括:
由处理器接收循环对齐指令,所述循环对齐指令指示数组的基地址作为第一操作数、循环的循环限制作为第二操作数、和目的地,其中,所述循环包含多个迭代,并且在每一迭代中处理所述数组的数据元素;
由所述处理器的解码器解码所述循环对齐指令以执行;以及
由所述处理器的执行单元执行经解码的所述循环对齐指令,并将所述执行的结果存储在所述目的地中,所述结果指示在所述数组的开始处的将要与所述数组的剩余部分分离地处理的数据元素的数量,以使得所述数组的剩余部分的基地址与对齐宽度对齐,所述对齐宽度是由所述处理器用来处理已打包数据的数据存储的宽度。
2.如权利要求1所述的指令处理方法,其特征在于,所述循环对齐指令是循环对齐计数指令,且所述结果中所指示的所述迭代的数量是整数值。
3.如权利要求1所述的指令处理方法,其特征在于,所述循环对齐指令是循环对齐掩码指令,且所述结果是具有被设定为预先确定的值的多个掩码元素的已打包数据操作掩码,所述已设定掩码元素中的每一个对应于在所述数组的开始处的将要与所述数组的剩余部分分离地处理的所述数据元素中的一个。
4.如权利要求3所述的指令处理方法,其特征在于,所述掩码元素中的每一个是一个比特。
5.如权利要求1所述的指令处理方法,其特征在于,所述循环对齐指令通过助记符标识所述数组的所述数据元素的宽度。
6.如权利要求1所述的指令处理方法,其特征在于,接收循环对齐指令进一步包括:
接收立即值作为第三操作数,所述立即值是指示所述对齐宽度的整数值。
7.一种指令处理装置,包括:
第一寄存器,用于存储数组的基地址;
第二寄存器,用于存储循环的循环限制,其中,所述循环包含多个迭代,并且,在每一迭代中处理所述数组的数据元素;
解码器,与所述第一寄存器和所述第二寄存器耦合,所述解码器用于解码循环对齐指令,所述循环对齐指令指示所述第一寄存器作为第一操作数、所述第二寄存器作为第二操作数、和目的地;以及
执行单元,与所述解码器耦合,所述执行单元用于执行经解码的所述循环对齐指令并将所述执行的结果存储在所述目的地中,所述结果指示在所述数组的开始处的将要与所述数组的剩余部分分离地处理的数据元素的数量,其中,所述数组的剩余部分的基地址与对齐宽度对齐,所述对齐宽度是由所述指令处理装置用来处理已打包数据的数据存储的宽度。
8.如权利要求7所述的指令处理装置,其特征在于,所述循环对齐指令是循环对齐计数指令,且所述结果中所指示的所述迭代的数量是整数值。
9.如权利要求7所述的指令处理装置,其特征在于,所述循环对齐指令是循环对齐掩码指令,且所述结果是具有被设定为预先确定的值的多个掩码元素的已打包数据操作掩码,所述已设定掩码元素中的每一个对应于在所述数组的开始处的将要与所述数组的剩余部分分离地处理的所述数据元素中的一个。
10.如权利要求9所述的指令处理装置,其特征在于,每一已设定掩码比特对应于在所述数组的开始处的所述数据元素中的一个。
11.如权利要求7所述的指令处理装置,其特征在于,所述循环对齐指令标识所述数组的所述数据元素的宽度。
12.如权利要求7所述的指令处理装置,其特征在于,所述循环对齐指令还指示立即值作为第三操作数,所述立即值是指示所述对齐宽度的整数值。
13.一种计算机系统,包括:
互连单元;
处理器,耦合到所述互连单元,所述处理器包括:
第一寄存器,用于存储数组的基地址;
第二寄存器,用于存储循环的循环限制,其中,所述循环包含多个迭代,
并且,在每一迭代中处理所述数组的数据元素;
解码器,与所述第一寄存器和所述第二寄存器耦合,所述解码器用于解码循环对齐指令,所述循环对齐指令指示所述第一寄存器作为第一操作数、所述第二寄存器作为第二操作数、和目的地;以及
执行单元,与所述解码器耦合,所述执行单元用于执行经解码的所述循环对齐指令并将所述执行的结果存储在所述目的地中,所述结果指示在所述
数组的开始处的将要与所述数组的剩余部分分离地处理的数据元素的数量,
其中,所述数组的剩余部分的基地址与对齐宽度对齐,所述对齐宽度是由所述处理器用来处理已打包数据的数据存储的宽度;以及
动态随机存取存储器(DRAM),耦合到所述互连单元。
14.如权利要求13所述的计算机系统,其特征在于,所述循环对齐指令是循环对齐计数指令,且所述结果中所指示的所述迭代的数量是整数值。
15.如权利要求13所述的计算机系统,其特征在于,所述循环对齐指令是循环对齐掩码指令,且所述结果是具有被设定为预先确定的值的多个掩码元素的已打包数据操作掩码,所述已设定掩码元素中的每一个对应于在所述数组的开始处的将要与所述数组的剩余部分分离地处理的所述数据元素中的一个。
16.如权利要求15所述的计算机系统,其特征在于,每一已设定掩码比特对应于在所述数组的开始处的所述数据元素中的一个。
17.如权利要求13所述的计算机系统,其特征在于,所述循环对齐指令进一步指示立即值作为第三操作数,所述立即值是指示所述对齐宽度的整数值。
18.一种机器可读存储介质,所述机器可读存储介质包括代码,所述代码在被执行时使机器执行如权利要求1-6中的任一项所述的方法。
19.一种计算机实现的系统,包括用于执行如权利要求1-6中的任一项所述的指令处理方法的装置。
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| PCT/US2011/064953 WO2013089709A1 (en) | 2011-12-14 | 2011-12-14 | System, apparatus and method for generating a loop alignment count or a loop alignment mask |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN103946795A CN103946795A (zh) | 2014-07-23 |
| CN103946795B true CN103946795B (zh) | 2018-05-15 |
Family
ID=48613002
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201180074918.5A Active CN103946795B (zh) | 2011-12-14 | 2011-12-14 | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US10083032B2 (zh) |
| CN (1) | CN103946795B (zh) |
| TW (1) | TWI553553B (zh) |
| WO (1) | WO2013089709A1 (zh) |
Families Citing this family (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103946795B (zh) * | 2011-12-14 | 2018-05-15 | 英特尔公司 | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 |
| US20140189296A1 (en) * | 2011-12-14 | 2014-07-03 | Elmoustapha Ould-Ahmed-Vall | System, apparatus and method for loop remainder mask instruction |
| US8984499B2 (en) * | 2011-12-15 | 2015-03-17 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a blend table |
| WO2013089749A1 (en) * | 2011-12-15 | 2013-06-20 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table |
| US9582413B2 (en) | 2014-12-04 | 2017-02-28 | International Business Machines Corporation | Alignment based block concurrency for accessing memory |
| KR102343652B1 (ko) * | 2017-05-25 | 2021-12-24 | 삼성전자주식회사 | 벡터 프로세서의 서열 정렬 방법 |
| US11347506B1 (en) * | 2021-01-15 | 2022-05-31 | Arm Limited | Memory copy size determining instruction and data transfer instruction |
| US11954496B2 (en) * | 2021-08-02 | 2024-04-09 | Nvidia Corporation | Reduced memory write requirements in a system on a chip using automatic store predication |
| CN119496603A (zh) * | 2024-10-10 | 2025-02-21 | 中国科学院信息工程研究所 | 基于全同态加密的密态数据并行排序方法及系统 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5936872A (en) * | 1995-09-05 | 1999-08-10 | Intel Corporation | Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations |
| CN1632742A (zh) * | 2003-12-23 | 2005-06-29 | 凌阳科技股份有限公司 | 以处理器执行储存器间资料搬移的自动对齐的装置及方法 |
| CN101206635A (zh) * | 2006-12-22 | 2008-06-25 | 美国博通公司 | 处理器中执行掩码存储操作的方法和集成电路 |
| CN102109977A (zh) * | 2009-12-22 | 2011-06-29 | 英特尔公司 | 位范围隔离指令、方法和装置 |
Family Cites Families (18)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4814976C1 (en) * | 1986-12-23 | 2002-06-04 | Mips Tech Inc | Risc computer with unaligned reference handling and method for the same |
| WO1998006038A1 (en) * | 1996-08-07 | 1998-02-12 | Sun Microsystems, Inc. | Architectural support for software pipelining of loops |
| US5933650A (en) * | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
| HK1048538B (zh) | 2000-03-08 | 2006-08-04 | Sun Microsystems, Inc. | 具有阵列界限检察功能的处理架构 |
| US7366882B2 (en) * | 2001-05-10 | 2008-04-29 | Zohair Sahraoui | Address calculation unit for an object oriented processor having differentiation circuitry for selectively operating micro-instructions |
| US7051168B2 (en) * | 2001-08-28 | 2006-05-23 | International Business Machines Corporation | Method and apparatus for aligning memory write data in a microprocessor |
| JP3698123B2 (ja) | 2002-06-25 | 2005-09-21 | セイコーエプソン株式会社 | 情報処理装置及び電子機器 |
| US20050102495A1 (en) | 2003-11-10 | 2005-05-12 | Wei-Hung Huang | Microcomputer apparatus for executing a given instruction a number of times |
| TWI227440B (en) * | 2003-12-19 | 2005-02-01 | Sunplus Technology Co Ltd | Device and method using a processor to perform automatic alignment for data movement in memory |
| US7290123B2 (en) | 2004-05-20 | 2007-10-30 | Intel Corporation | System, device and method of maintaining in an array loop iteration data related to branch entries of a loop detector |
| US7395531B2 (en) | 2004-06-07 | 2008-07-01 | International Business Machines Corporation | Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements |
| US20060101256A1 (en) | 2004-10-20 | 2006-05-11 | Dwyer Michael K | Looping instructions for a single instruction, multiple data execution engine |
| US20070150705A1 (en) | 2005-12-28 | 2007-06-28 | Intel Corporation | Efficient counting for iterative instructions |
| US8667250B2 (en) * | 2007-12-26 | 2014-03-04 | Intel Corporation | Methods, apparatus, and instructions for converting vector data |
| US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
| US8627304B2 (en) * | 2009-07-28 | 2014-01-07 | International Business Machines Corporation | Vectorization of program code |
| CN103946795B (zh) * | 2011-12-14 | 2018-05-15 | 英特尔公司 | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 |
| US9122475B2 (en) * | 2012-09-28 | 2015-09-01 | Intel Corporation | Instruction for shifting bits left with pulling ones into less significant bits |
-
2011
- 2011-12-14 CN CN201180074918.5A patent/CN103946795B/zh active Active
- 2011-12-14 US US13/993,321 patent/US10083032B2/en not_active Expired - Fee Related
- 2011-12-14 WO PCT/US2011/064953 patent/WO2013089709A1/en active Application Filing
-
2012
- 2012-11-13 TW TW101142190A patent/TWI553553B/zh not_active IP Right Cessation
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5936872A (en) * | 1995-09-05 | 1999-08-10 | Intel Corporation | Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations |
| CN1632742A (zh) * | 2003-12-23 | 2005-06-29 | 凌阳科技股份有限公司 | 以处理器执行储存器间资料搬移的自动对齐的装置及方法 |
| CN101206635A (zh) * | 2006-12-22 | 2008-06-25 | 美国博通公司 | 处理器中执行掩码存储操作的方法和集成电路 |
| CN102109977A (zh) * | 2009-12-22 | 2011-06-29 | 英特尔公司 | 位范围隔离指令、方法和装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN103946795A (zh) | 2014-07-23 |
| WO2013089709A1 (en) | 2013-06-20 |
| TWI553553B (zh) | 2016-10-11 |
| US20140201510A1 (en) | 2014-07-17 |
| US10083032B2 (en) | 2018-09-25 |
| TW201333821A (zh) | 2013-08-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN103946795B (zh) | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 | |
| CN104115113B (zh) | 用于循环剩余掩码指令的系统、装置和方法 | |
| US20250086445A1 (en) | Inner product convolutional neural network accelerator | |
| CN104126168B (zh) | 打包数据重新安排控制索引前体生成处理器、方法、系统及指令 | |
| CN104049953B (zh) | 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品 | |
| CN106547518B (zh) | 用于加速器的低等待时间调用的装置和方法 | |
| CN107368286A (zh) | 用于多精度算术的simd整数乘法累加指令 | |
| CN104335166B (zh) | 用于执行混洗和操作的装置和方法 | |
| CN104603746B (zh) | 由读和写掩码控制的向量移动指令 | |
| CN104094218B (zh) | 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法 | |
| CN104798033B (zh) | 用于混合等待时间‑吞吐量处理器的装置和方法 | |
| CN104011646B (zh) | 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令 | |
| CN104137060B (zh) | 高速缓存协处理单元 | |
| CN104011643B (zh) | 打包数据重新安排控制索引产生处理器、方法、系统及指令 | |
| CN104040482B (zh) | 用于在打包数据元素上执行增量解码的系统、装置和方法 | |
| CN109062608A (zh) | 用于独立数据上递归计算的向量化的读和写掩码更新指令 | |
| CN104903867B (zh) | 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法 | |
| CN104081337B (zh) | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 | |
| CN105612509A (zh) | 用于提供向量子字节解压缩功能性的方法、设备、指令和逻辑 | |
| CN104126170B (zh) | 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令 | |
| CN107924308A (zh) | 数据元素比较处理器、方法、系统和指令 | |
| TW201729078A (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
| CN106406818A (zh) | 打包数据操作掩码串接处理器、方法、系统及指令 | |
| CN103827814A (zh) | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 | |
| CN104025033A (zh) | 利用控制操纵的simd可变移位和循环 |
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 |