CN104115113A - 用于循环剩余掩码指令的系统、装置和方法 - Google Patents
用于循环剩余掩码指令的系统、装置和方法 Download PDFInfo
- Publication number
- CN104115113A CN104115113A CN201180075242.1A CN201180075242A CN104115113A CN 104115113 A CN104115113 A CN 104115113A CN 201180075242 A CN201180075242 A CN 201180075242A CN 104115113 A CN104115113 A CN 104115113A
- Authority
- CN
- China
- Prior art keywords
- instruction
- mask
- array
- processor
- circulation
- 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 description 53
- 238000012856 packing Methods 0.000 claims description 142
- 238000012545 processing Methods 0.000 claims description 60
- 238000003860 storage Methods 0.000 claims description 29
- 230000001343 mnemonic effect Effects 0.000 claims description 10
- 230000008878 coupling Effects 0.000 claims description 7
- 238000010168 coupling process Methods 0.000 claims description 7
- 238000005859 coupling reaction Methods 0.000 claims description 7
- 238000013500 data storage Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 22
- 230000008569 process Effects 0.000 description 19
- 238000013139 quantization Methods 0.000 description 9
- 238000011282 treatment Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 238000004519 manufacturing process Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 5
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 230000001052 transient effect Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 210000004027 cell Anatomy 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000001351 cycling effect Effects 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000002349 favourable effect Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 239000000696 magnetic material Substances 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 239000012782 phase change material Substances 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000011343 solid material Substances 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition 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/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; 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/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; 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 or look ahead
- G06F9/3818—Decoding for concurrent execution
-
- 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 or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
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)
- Complex Calculations (AREA)
- Advance Control (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是根据本发明的实施例的单核处理器和多核处理器的框图,具有集成的存储器控制器和图形器件。
图14是根据本发明的实施例的对比使用软件指令变换器将源指令集中的二进制指令变换成目标指令集中的二进制指令的框图。
具体实施方式
在下面的描述中,阐述了很多具体细节。然而,应当理解,本发明的各实施例可以在不具有这些具体细节的情况下得到实施。在其他实例中,公知的电路、结构和技术未被详细示出以免混淆对本描述的理解。
图1是具有含一个或多个循环对齐指令的指令集102的处理器100的示例实施例的框图。该处理器100可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或完全其他类型的处理器中的任何处理器。在一个或多个实施例中,处理器100可以是通用处理器(例如由美国加利福尼亚州圣克拉拉市的英特尔公司制造的类型的通用微处理器),尽管这不是必需的。替换地,指令处理处理装置可以是专用处理器。合适的专用处理器的示例包括但不限于,网络处理器、通信处理器、加密处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器),仅列举数例。
处理器100具有指令集架构(ISA)101。指令集体系结果101表示与编程相关的处理器100的架构的一部分指令集架构101通常包括本地指令、架构寄存器、数据类型、寻址模式、存储器架构、中断和异常处理以及处理器100的外部输入和输出(I/O)。指令集架构101与微架构不同,微架构通常表示选择用于实现指令集架构的特定处理器设计技术。带有不同的微架构的处理器可以共享共同的指令集架构。例如,加利福尼亚州圣克拉拉的英特尔公司的某些微处理器和加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的某些微处理器使用本质上不同的内部微架构来实现x86指令集的类似部分。
指令集架构101包括架构寄存器(例如,架构寄存器文件)106。所示的架构寄存器106包括通用寄存器127和打包数据寄存器107。通用寄存器127中的每一个可操作用于存储标量数据元素(也被称为数据元素),且打包数据寄存器107B中的每一个可操作用于存储打包数据、矢量数据或SIMD数据(例如,数据元素的阵列)。所示的架构寄存器106还包括掩码寄存器108。掩码寄存器108中的每一个可操作用于存储打包数据操作掩码(也被称为“掩码”)。
架构寄存器106表示板上处理器存储位置。架构寄存器106此处也可以被简称为寄存器。短语架构寄存器、寄存器文件、以及寄存器在本文中用于表示对软件和/或编程器(例如,软件可见的)和/或由宏指令指定来标识操作数(operand)的寄存器,除非另外予以指定或清楚明显可知。这些寄存器与给定微架构(例如,临时寄存器、重排序缓冲器、引退(retirement)寄存器等)中的其他非架构寄存器形成对比。
所示的指令集架构101还包括由处理器100支持的指令集102。指令集102包括若干不同类型的指令。指令集102的这些指令表示宏指令(例如,提供给处理器100以供执行的指令),与微指令或微操作(例如,从处理器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以掩码、断言(predicate)或有条件地控制打包数据处理。存储在掩码寄存器108中的掩码可表示掩码操作数、断言操作数或条件操作控制操作数。
掩码可操作用于按数据元素粒度掩码或有条件地控制打包数据处理。例如,掩码可操作用于对是否将在来自单个源打包数据操作数的个体数据元素或来自两个源打包数据操作数的个体相应数据元素对上执行的经掩码的打包数据指令103的打包数据操作的结果存储在打包数据结果中进行掩码。经掩码的打包数据指令103可允许与数据元素分开地且独立地断言或有条件控制对每个数据元素或每对相对应数据元素的打包数据处理。经掩码的打包数据指令103、操作和掩码可提供某些优点,诸如增加的代码密度和/或较高的指令吞吐量。
在替换实施例中,以上描述的循环对齐指令中的一个或多个可以是不一定具有与经掩码的打包数据指令103相同的指令格式的指令;然而,这些指令生成可由经掩码的打包数据指令103使用的结果。循环对齐指令的替换实施例在图1中被示为虚线框。
处理器100还包括执行逻辑109。执行逻辑109可操作用于执行或处理指令集102的指令。执行逻辑109可包括执行单元、功能单元、算术逻辑单元、逻辑单元、算术单元等。处理器100还包括解码器129,用以将宏指令解码成微指令或微操作以供执行逻辑109执行。
PLCNT指令105A和PLMSK指令105B计算剥离迭代(peel iteration)的数量。剥离迭代指的是可从循环中取出并与循环的剩余迭代分开地执行的循环的最初迭代。循环的“最初”迭代指的是在循环索引随着每次迭代而增加时循环的最低索引部分,或者在循环索引随着每次迭代而减小时循环的最高索引部分。从循环取出一个或多个最初迭代被称为“循环剥离”,这是一种通常针对循环优化而执行的技术。在通常的情况下,循环内的计算可涉及阵列。阵列的基址不一定与处理打包数据的底层处理器的数据存储的宽度(诸如打包数据寄存器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的第一代表性示例实施例的框图。经掩码的打包数据加法操作203可响应于经掩码的打包数据指令(例如,图1的经掩码的打包数据指令103之一)或者作为该指令的结果来执行。在一个实施例中,在操作203中使用掩码202。掩码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比特宽的处理器中,将完整高速缓存线的数据(例如十六个Dword)加载到矢量寄存器将进行一个加载操作。然而,在图2A的示例中,其中阵列A的基址不与对齐宽度对齐,加载阵列A的最初的十六个Dword将进行两个加载操作;来自第一高速缓存线的第一A(0)至A(2),然后来自第二高速缓存线的A(3)至A(15)。如果高速缓存线的宽度是512比特且对齐宽度(例如,矢量寄存器宽度)是128比特宽,则将对齐的十六个Dword加载到矢量寄存器将进行四个加载操作。然而,在图2A的示例中,加载阵列A的最初十六个Dword将进行五个加载操作。这是因为最初的16个Dword跨两条高速缓存线存储;结果,加载它们将导致额外的加载操作。
在阵列元素的数量是2的幂的应用中(例如,图像处理),最初的未对齐可导致阵列元素的所有后续加载的未对齐。因此,由于最初的未对齐,而可能无法有效地利用打包数据操作处理整个阵列A。因此,在图2A的示例中,掩码202用于向处理器指示阵列A的需要与阵列元素的剩余部分分开地处理的那些元素。
相反,图2B示出其中源打包数据205包含阵列A的接下来的十六个元素(即,A(3)、A(4)、….、A(18))的示例。十六个元素的总宽度与对齐宽度相同。因此,单个打包数据操作(例如,矢量获取、矢量加法等)可在全部这些十六个元素上操作。如果这些十六个元素中的每一个在一个循环迭代中用作指令的源操作数(例如,对于i=3至18,B(i)=A(i)+5),则可利用单个打包数据操作执行加法。在图2B的示例中,示出与源打包数据205一起使用打包数据操作掩码206。掩码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的示例中,该数量是3。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)以不允许存储结果。
在一些实施例中,掩码掉(masked-off)元素(即、具有相应的清零的掩码比特的数据元素)上的打包数据操作可任选地抑制或不引起异常(例如,异常标志)或违犯。在一些实施例中,对于具有存储器操作数的经掩码打包数据指令,可任选地针对掩码掉数据元素抑制存储器错误。该特征可有助于实现控制流断言,因为掩码可有效地提供合并状态打包数据寄存器,但不是必须的。
应当理解,处理器可支持宽泛的各种不同类型的经掩码的打包数据操作。例如,这些可包括仅具有一个源打包数据或具有两个以上的源打包数据的操作、生成不同尺寸的结果打包数据的操作、具有不同尺寸的数据元素的操作和/或具有不同的结果数据元素顺序的操作及其组合。
图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相反可具有指令仿真器、转换器、变形器(morpher)、解释器或者其他指令变换逻辑。各种不同类型的指令变换逻辑在本领域中是已知的,并且可在软件、硬件、固件、或者其组合中实现。指令变换逻辑可接收指令105A-105C中的一个或多个,并且仿真、转换、变形、解释、或者以其他方式将指令变换成一个或多个对应的导出指令或控制信号。在又一个其它实施例中,指令处理装置315可具有解码器和附加的指令变换逻辑。例如,指令处理装置315可具有变换逻辑,用以将指令105A-105C中的一个或多个变换成一个或多个中间指令,以及解码器,用以将一个或多个中间指令解码成由指令处理装置的本机硬件执行的一个或多个较低级的指令或控制信号。指令变换逻辑中的一些或全部可位于其余指令处理装置的管芯外,诸如在单独的管芯上或在管芯外的存储器中。
再次参考图3,指令处理装置315还包括第一通用(GP)寄存器320和第二通用寄存器321,第一通用(GP)寄存器320可操作用于存储基址(即要对齐的阵列的开始地址),第二通用(GP)寄存器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中的每一个指定或指示直接数(immediate)值的附加操作数。直接数值表示对齐宽度。在替换实施例中,指令不指定直接数值且替代地使用预定值(例如,下层微架构允许的最大对齐宽度,诸如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是包括有形、非瞬态机器可读(例如,机器可访问)存储介质400的制品(例如,计算机程序产品)的框图,其存储一个或多个循环对齐指令405(例如,图1的PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C)。将意识到还可将用于执行如本文所公开的一个或多个操作或方法的其它指令或指令序列(例如,利用循环对齐指令405的结果作为断言操作数的一个或多个指令、紧密附属的标量或打包数据指令或使用循环对齐指令405的例程或算法)存储在存储介质400上。
在各实施例中,有形、非瞬态机器可读存储介质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)。循环对齐指令指定或指示第一源操作数、第二源操作数、阵列的目的地和数据元素尺寸。在一个实施例中,第一源操作数指定其中存储阵列的基址的第一寄存器,且第二源操作数指定其中存储循环极限(即,循环中迭代的总数)的第二寄存器。在一些实施例中,每个阵列数据元素的宽度由作为指令名称的一部分的助记符号(mnemonic)指定(例如,字节的数据元素宽度可由诸如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的方法550的操作和方法相同、类似或不同的操作和方法的实施例。
方法550包括处理器接收循环对齐指令,诸如KSUBREM指令105C(框560)。循环对齐指令指定或指示第一源操作数、第二源操作数、阵列的目的地和数据元素尺寸。在一个实施例中,第一源操作数指定其中存储当前的迭代计数(即,循环的矢量处理处)的第一寄存器,且第二源操作数指定其中存储循环极限(即,循环中迭代的总数)的第二寄存器。在一些实施例中,每个阵列数据元素的宽度由作为指令名称的一部分的助记符号(mnemonic)指定(例如,字节的数据元素宽度可由诸如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被指定,则其具有全一或“无掩码”编码)。在其他实施例中,寄存器中的全部或仅一些可被编码为断言操作数。
在一些实施例中,寄存器700的最低阶子集或部分被用于进行掩码,但是并不要求如此。如图6所示,当对齐宽度是128比特且数据元素宽度是8比特时,使用16个掩码比特。这些16个掩码比特可以是存储在寄存器700之一(例如k1)中的最低阶的16个比特。K1的最高阶部分可被置位为0或其它预定值。在替代实施例中,可任选地使用最高阶子集或某一其他子集。
图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的值的直接数(immediate);例如00、01和10,它们可分别表示128比特、256比特、512比特。直接数值的一些可被保留;例如,11可表示1024比特。应理解可将任意不同的直接数值用于表示不同的对齐宽度。在替换实施例中,指令不指定直接数且替代地使用预定值(例如,下层微架构允许的最大对齐宽度,诸如512比特)作为VL的值。此外,在图8A和8B的示例中,对齐_迭代表示达到对齐的迭代的数量。该数量小于SRC2中指定的迭代极限。在图2A的示例中,该数量是3。
如图所示,PLCNT指令返回与对齐_迭代和SRC2(迭代极限)的最小值对应的计数。PLMSK指令返回等价于PLCNT返回的计数的打包数据操作掩码。图8B的示例示出可通过将值1移位n个比特然后减1生成的掩码,其中n表示计数(可由PLCNT生成)。将所得到的掩码存储在目的地中,目的地可以是图7的打包数据操作掩码寄存器700之一。应理解本文的示例是说明性的且非限制性的,因为有多种不同的方式来实现PLCNT和PLMSK。
在图8C的示例(KSUBREM)中,rax(存储SRC1)是具有循环极限的第一源操作数,rcx(存储SRC2)是具有循环的循环极限的第二源操作数,rax(存储DEST)表示结果的目的地。VL此处表示矢量元素的数量,且剩余_迭代表示VL的最小值以及SRC2和SRC1之差。所得到的掩码可通过使值1移位n个比特然后减1来生成,其中n是剩余_迭代的值。
本文公开的循环对齐指令是具有一般用途的通用指令。例如,这些指令可单独地或与其它指令组合地使用以计算剥离迭代的数量。在一些实施例中,本文公开的循环对齐指令可与紧密附属的或相关联的打包数据指令结合使用以优化循环操作的执行。还基于本公开构想到其它使用。
示例性计算机系统和处理器-图9-13
图9-13是示例性计算机系统和处理器。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般来说,能够纳入本文中所公开的处理器和/或其它执行逻辑的大量系统和电子设备一般都是合适的。
现在参考图9,所示出的是根据本发明实施例的系统1300的框图。系统1300可包括耦合至图形存储器控制器中枢(GMCH)1320的一个或多个处理器1310、1310。附加处理器1315的可选性质用虚线表示在图9中。
每一处理器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,该输入/输出(I/O)控制器中枢(ICH)1350可用于将各种外围设备耦合至系统1300。在图9的实施例中作为示例示出了外部图形设备1360以及另一外围设备1370,该外部图形设备1360可以是耦合至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控制逻辑(“L”)1472和1482。对于至少一个实施例,CL1472、1482可包括诸如以上结合图8、9和14所描述的存储器控制器中枢逻辑(IMC)。此外。CL1472、1482还可包括I/O控制逻辑。图15不仅解说了耦合至CL1472、1482的存储器1442、1444,而且还解说了同样耦合至控制逻辑1472、1482的I/O设备1514。传统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)之类的半导体器件;诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)之类的随机存取存储器(RAM);可擦除可编程只读存储器(EPROM);闪存;电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
因此,本发明的各实施例还包括非瞬态、有形机器可读介质,该介质包含矢量友好指令格式的指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特性。这些实施例也被称为程序产品。
在某些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上部分在处理器外。
图14是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代该指令转换器可以用软件、固件、硬件或其各种组合来实现。图13示出可以使用x86编译器1804来编译高级语言1802的程序,以便生成可以由具有至少一个x86指令集核1816的处理器本地执行的x86二进制代码1806(假设指令中的一些是以矢量友好指令格式编译)。具有至少一个x86指令集核1816的处理器表示任何处理器,该处理器能够通过兼容地执行或以其它方式处理(1)英特尔x86指令集核的指令集的大部分或(2)旨在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它软件的目标代码版本来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能,以实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1804表示用于生成x86二进制代码1806(例如,对象代码)的编译器,该二进制代码1806可通过或不通过附加的链接处理在具有至少一个x86指令集核1816的处理器上执行。类似地,图14示出高级语言1802的程序可使用替换指令集编译器1808来编译以生成替换指令集二级制代码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 (18)
1.一种方法,包括:
由处理器接收循环剩余掩码指令,所述循环剩余掩码指令指示循环的当前迭代计数作为第一操作数、循环极限作为第二操作数以及目的地,其中所述循环包含多次迭代,且在每次迭代中阵列的数据元素被处理;
解码所述循环剩余掩码指令以供执行;以及
将执行的结果存储在目的地中,所述结果指示所述阵列中在阵列的在前部分的末端之后的要与所述在前部分分开处理的数据元素的数量,在前部分的末端是记录当前迭代计数的位置。
2.如权利要求1所述的方法,其特征在于,循环剩余掩码指令的结果是
具有设定为预定值的若干掩码元素的打包数据操作掩码,设定的掩码元素中的每一个对应于所述阵列中要与所述阵列的在前部分分开处理的数据元素之一。
3.如权利要求2所述的方法,其特征在于,掩码元素中的每一个是比特。
4.如权利要求1所述的方法,其特征在于,所述循环剩余掩码指令通过助记符号(mnemonic)标识阵列的数据元素的宽度。
5.如权利要求1所述的方法,其特征在于,所述对齐宽度是处理器处理打包数据所使用的数据存储的宽度。
6.如权利要求1所述的方法,其特征在于,所述阵列中要与阵列的在前部分分开处理的数据元素的总数量大小小于对齐宽度。
7.一种设备,包括:
存储循环的当前迭代计数的第一寄存器;
存储循环极限的第二寄存器,其中所述循环包含多次迭代,且在每次迭代中阵列的数据元素被处理;
与第一寄存器和第二寄存器耦合的解码器,作为指示第一寄存器、第二寄存器和目的地的循环剩余掩码指令的结果,所述解码器操作用以解码循环剩余掩码指令以供执行;以及
与解码器耦合的执行单元,所述执行单元操作用于将所述循环剩余掩码指令的结果存储在目的地中,所述结果指示所述阵列中在阵列的在前部分的末端之后的要与所述在前部分分开处理的数据元素的数量,在前部分的末端是记录当前迭代计数的位置。
8.如权利要求7所述的设备,其特征在于,循环剩余掩码指令的结果是
具有设定为预定值的若干掩码元素的打包数据操作掩码,设定的掩码元素中的每一个对应于所述阵列中要与所述阵列的在前部分分开处理的数据元素之一。
9.如权利要求8所述的设备,其特征在于,掩码元素中的每一个是比特。
10.如权利要求7所述的设备,其特征在于,所述循环剩余掩码指令通过助记符号(mnemonic)标识阵列的数据元素的宽度。
11.如权利要求7所述的设备,其特征在于,所述对齐宽度是处理器处理打包数据所使用的数据存储的宽度。
12.如权利要求7所述的设备,其特征在于,所述阵列中要与阵列的在前部分分开处理的数据元素的总数量大小小于对齐宽度。
13.一种系统,包括:
互连;
与所述互连耦合的处理器,所述处理器包括:
存储循环的当前迭代计数的第一寄存器、存储循环极限的第二寄存器,其中所述循环包含多次迭代,且在每次迭代中阵列的数据元素被处理;
与第一寄存器和第二寄存器耦合的解码器,作为指示第一寄存器、第二寄存器和目的地的循环剩余掩码指令的结果,所述解码器操作用以解码循环剩余掩码指令以供执行;以及
与解码器耦合的执行单元,所述执行单元操作用于将所述循环剩余掩码指令的结果存储在目的地中,所述结果指示所述阵列中在阵列的在前部分的末端之后的要与所述在前部分分开处理的数据元素的数量,在前部分的末端是记录当前迭代计数的位置;以及
耦合到所述互连的动态随机存取存储器(DRAM)。
14.如权利要求13所述的系统,其特征在于,循环剩余掩码指令的结果是
具有设定为预定值的若干掩码元素的打包数据操作掩码,设定的掩码元素中的每一个对应于所述阵列中要与所述阵列的在前部分分开处理的数据元素之一。
15.如权利要求14所述的系统,其特征在于,掩码元素中的每一个是比特。
16.如权利要求13所述的系统,其特征在于,所述循环剩余掩码指令通过助记符号标识阵列的数据元素的宽度。
17.如权利要求13所述的系统,其特征在于,所述对齐宽度是处理器处理打包数据所使用的数据存储的宽度。
18.如权利要求13所述的系统,其特征在于,所述阵列中要与阵列的在前部分分开处理的数据元素的总数量大小小于对齐宽度。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/064942 WO2013089707A1 (en) | 2011-12-14 | 2011-12-14 | System, apparatus and method for loop remainder mask instruction |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104115113A true CN104115113A (zh) | 2014-10-22 |
CN104115113B CN104115113B (zh) | 2018-06-05 |
Family
ID=48613000
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180075242.1A Active CN104115113B (zh) | 2011-12-14 | 2011-12-14 | 用于循环剩余掩码指令的系统、装置和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20140189296A1 (zh) |
CN (1) | CN104115113B (zh) |
TW (1) | TWI514274B (zh) |
WO (1) | WO2013089707A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110045986A (zh) * | 2018-01-16 | 2019-07-23 | 龙芯中科技术有限公司 | 一种指令处理方法、装置及存储介质 |
CN110134441A (zh) * | 2019-05-23 | 2019-08-16 | 苏州浪潮智能科技有限公司 | Risc-v分支预测方法、装置、电子设备及存储介质 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103959240B (zh) * | 2011-12-15 | 2017-05-17 | 英特尔公司 | 使用混洗表和掩码存储表经由矢量指令优化程序循环的方法 |
US9557993B2 (en) * | 2012-10-23 | 2017-01-31 | Analog Devices Global | Processor architecture and method for simplifying programming single instruction, multiple data within a register |
US9424034B2 (en) | 2013-06-28 | 2016-08-23 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US11544214B2 (en) | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
GB2540941B (en) | 2015-07-31 | 2017-11-15 | Advanced Risc Mach Ltd | Data processing |
EP3125108A1 (en) | 2015-07-31 | 2017-02-01 | ARM Limited | Vector processing using loops of dynamic vector length |
GB2548603B (en) | 2016-03-23 | 2018-09-26 | Advanced Risc Mach Ltd | Program loop control |
GB2548602B (en) * | 2016-03-23 | 2019-10-23 | Advanced Risc Mach Ltd | Program loop control |
GB2548604B (en) | 2016-03-23 | 2018-03-21 | Advanced Risc Mach Ltd | Branch instruction |
US10838720B2 (en) * | 2016-09-23 | 2020-11-17 | Intel Corporation | Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors |
JP2018124877A (ja) * | 2017-02-02 | 2018-08-09 | 富士通株式会社 | コード生成装置、コード生成方法、およびコード生成プログラム |
CN108509013B (zh) * | 2017-02-28 | 2020-06-26 | 华为技术有限公司 | 一种处理指令的方法及装置 |
US11269638B2 (en) | 2017-06-28 | 2022-03-08 | Texas Instruments Incorporated | Exposing valid byte lanes as vector predicates to CPU |
US10740098B2 (en) * | 2018-02-06 | 2020-08-11 | International Business Machines Corporation | Aligning most significant bits of different sized elements in comparison result vectors |
US10579375B2 (en) | 2018-02-06 | 2020-03-03 | International Business Machines Corporation | Method to build reconfigurable variable length comparators |
JP2021039658A (ja) * | 2019-09-05 | 2021-03-11 | 富士通株式会社 | Ac並列化回路、ac並列化方法及び並列情報処理装置 |
GB2597709B (en) * | 2020-07-30 | 2024-08-07 | Advanced Risc Mach Ltd | Register addressing information for data transfer instruction |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1485741A (zh) * | 2002-06-25 | 2004-03-31 | 精工爱普生株式会社 | 信息处理装置以及电子设备 |
US20050102495A1 (en) * | 2003-11-10 | 2005-05-12 | Wei-Hung Huang | Microcomputer apparatus for executing a given instruction a number of times |
US20070150705A1 (en) * | 2005-12-28 | 2007-06-28 | Intel Corporation | Efficient counting for iterative instructions |
CN101048731A (zh) * | 2004-10-20 | 2007-10-03 | 英特尔公司 | 用于单指令、多数据执行引擎的循环指令 |
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 |
Family Cites Families (10)
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 |
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 |
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 |
US7051168B2 (en) * | 2001-08-28 | 2006-05-23 | International Business Machines Corporation | Method and apparatus for aligning memory write data in a microprocessor |
TWI335550B (en) * | 2006-02-06 | 2011-01-01 | Via Tech Inc | Stream processor with variable single instruction multiple data (simd) factor and common special function |
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 US US13/993,323 patent/US20140189296A1/en not_active Abandoned
- 2011-12-14 WO PCT/US2011/064942 patent/WO2013089707A1/en active Application Filing
- 2011-12-14 CN CN201180075242.1A patent/CN104115113B/zh active Active
-
2012
- 2012-11-15 TW TW101142638A patent/TWI514274B/zh not_active IP Right Cessation
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1485741A (zh) * | 2002-06-25 | 2004-03-31 | 精工爱普生株式会社 | 信息处理装置以及电子设备 |
US20050102495A1 (en) * | 2003-11-10 | 2005-05-12 | Wei-Hung Huang | Microcomputer apparatus for executing a given instruction a number of times |
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 |
CN101048731A (zh) * | 2004-10-20 | 2007-10-03 | 英特尔公司 | 用于单指令、多数据执行引擎的循环指令 |
US20070150705A1 (en) * | 2005-12-28 | 2007-06-28 | Intel Corporation | Efficient counting for iterative instructions |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110045986A (zh) * | 2018-01-16 | 2019-07-23 | 龙芯中科技术有限公司 | 一种指令处理方法、装置及存储介质 |
CN110045986B (zh) * | 2018-01-16 | 2021-07-27 | 龙芯中科(北京)信息技术有限公司 | 一种指令处理方法、装置及存储介质 |
CN110134441A (zh) * | 2019-05-23 | 2019-08-16 | 苏州浪潮智能科技有限公司 | Risc-v分支预测方法、装置、电子设备及存储介质 |
CN110134441B (zh) * | 2019-05-23 | 2020-11-10 | 苏州浪潮智能科技有限公司 | Risc-v分支预测方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2013089707A1 (en) | 2013-06-20 |
TW201335845A (zh) | 2013-09-01 |
CN104115113B (zh) | 2018-06-05 |
TWI514274B (zh) | 2015-12-21 |
US20140189296A1 (en) | 2014-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104115113A (zh) | 用于循环剩余掩码指令的系统、装置和方法 | |
CN104115115A (zh) | 用于多精度算术的simd整数乘法累加指令 | |
CN104137055A (zh) | 点积处理器、方法、系统和指令 | |
CN104011657A (zh) | 用于向量计算和累计的装置和方法 | |
CN104011664A (zh) | 使用三个标量项的超级乘加(超级madd)指令 | |
CN104011672A (zh) | 转置指令 | |
CN104011649A (zh) | 用于在simd/向量执行中传播有条件估算值的装置和方法 | |
CN104081336A (zh) | 用于检测向量寄存器内的相同元素的装置和方法 | |
CN104137060A (zh) | 高速缓存协处理单元 | |
CN104011652A (zh) | 打包选择处理器、方法、系统和指令 | |
CN104040488A (zh) | 用于给出相应复数的复共轭的矢量指令 | |
CN104603745A (zh) | 用于独立数据上递归计算的向量化的读和写掩码更新指令 | |
CN104011653A (zh) | 打包数据操作掩码比较处理器、方法、系统及指令 | |
CN105612509A (zh) | 用于提供向量子字节解压缩功能性的方法、设备、指令和逻辑 | |
CN104011663A (zh) | 掩码寄存器上的广播操作 | |
CN103946795A (zh) | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 | |
CN104011665A (zh) | 超级乘加(超级madd)指令 | |
CN104137059A (zh) | 多寄存器分散指令 | |
CN104145245A (zh) | 浮点舍入量确定处理器、方法、系统和指令 | |
CN104603746A (zh) | 由读和写掩码控制的向量移动指令 | |
CN104169867A (zh) | 用于执行掩码寄存器至向量寄存器的转换的系统、装置和方法 | |
CN104081340A (zh) | 用于数据类型的下转换的装置和方法 | |
CN104126167A (zh) | 用于从通用寄存器向向量寄存器进行广播的装置和方法 | |
CN104081337A (zh) | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 | |
CN104903867A (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 |