用于循环剩余掩码指令的系统、装置和方法

文档序号:6485230阅读:212来源:国知局
用于循环剩余掩码指令的系统、装置和方法
【专利摘要】循环剩余掩码指令指示循环的当前迭代计数作为第一操作数,循环的迭代极限作为第二操作数以及目的地。循环包含迭代,且每次迭代包含阵列的数据元素。处理器接收循环剩余掩码指令,解码该指令以供执行,并且将执行的结果存储在目的地中。结果指示阵列中在阵列的在前部分的末端之后要与在前部分分开处理的数据元素的数量,在前部分的末端是记录当前迭代计数的位置。
【专利说明】用于循环剩余掩码指令的系统、装置和方法

【技术领域】
[0001] 实施例涉及计算机处理器架构。具体地,实施例涉及指令在被执行时导致特定的 结果。
[0002] 相关技术的描述
[0003] 许多处理器具有单指令多数据(SMD)架构。该SMD架构通常有助于显著提高处 理速度。在SIMD架构中,与仅在一个数据元素或一对数据元素上操作标量指令不同,打包 数据指令、矢量指令、或SMD指令可在多个数据元素、或多对数据元素上同时或并行地操 作。处理器可具有并行执行硬件,该并行执行硬件响应于打包数据指令来同时或并行地执 行多个操作。
[0004] 在SIMD架构中,可将多个数据元素打包在一个寄存器或存储器位置内作为打包 数据或矢量数据。在矢量数据中,寄存器或其他存储位置的比特可被逻辑地划分成多个固 定大小的数据元素的序列。数据元素中的每一个可表示个体数据片,该个体数据片连同通 常具有相同大小的其他数据元素一起被存储在寄存器或存储位置中。例如,256比特宽寄存 器可具有四个64比特宽打包数据元素,八个32比特宽打包数据元素,十六个16比特宽打 包数据元素,或三十二个8比特宽打包数据元素。每一打包数据元素可表示独立个体的一 段数据(例如,像素颜色等),该段数据可单独地操作或与其他数据独立地操作。
[0005] 代表性地,打包数据指令、矢量指令或SMD指令(例如,打包加法指令)中的一种 类型可指定在来自两个源打包数据操作数的所有相应数据元素对上以垂直方式执行单个 打包数据操作(例如,加法)以生成目的或结果打包数据。这些源打包数据操作数是相同 大小,可包含相同宽度的数据元素,并因此可各自包含相同数量的数据元素。两个源打包数 据操作数中的相同的比特位置中的源数据元素可表示相应的数据元素对。可分开地或独立 地对这些相应的源数据元素对中的每一个执行打包数据操作,以便生成匹配数量的结果数 据元素,且因而每一对相应的源数据元素可以具有相应的结果数据元素。通常,这样的指令 的结果数据元素是以相同的次序,且它们常常具有相同的大小。
[0006] 除这种示例性类型的打包数据指令之外,还有各种其它类型的打包数据指令。例 如,存在仅具有一个源打包数据操作数或具有两个以上的源打包数据操作数的打包数据指 令、以水平方式而不是垂直方式操作的打包数据指令、生成不同尺寸的结果打包数据操作 数的打包数据指令、具有不同尺寸的数据元素的打包数据指令和/或具有不同的数据元素 次序的打包数据指令。

【专利附图】

【附图说明】
[0007] 通过参考用来说明本发明的实施例的以下描述和附图,可最好地理解本发明。在 附图中:
[0008] 图1是具有含一个或多个循环对齐指令的指令集的处理器的示例实施例的框图。
[0009] 图2A-2C示出利用循环对齐指令的结果的经掩码的打包数据操作的示例。
[0010] 图3是具有执行单元的指令处理装置的示例实施例的框图,该执行单元可操作用 于执行包含一个或多个循环对齐指令的示例实施例的指令。
[0011] 图4是包括存储有一个或多个循环对齐指令的有形、非瞬态机器可访问和/或机 器可读存储介质的制品(例如,计算机程序产品)的框图。
[0012] 图5A和5B是示出用于处理循环对齐指令的方法的示例实施例的流程图。
[0013] 图6是示出打包数据操作掩码比特的数目依赖于对齐宽度和数据元素宽度的表 格。
[0014] 图7是一组打包数据操作掩码寄存器的示例实施例的框图。
[0015] 图8A-8C示出循环对齐指令及其操作的示例实施例。
[0016] 图9示出根据本发明一个实施例的系统的框图。
[0017] 图10示出根据本发明的实施例的第二系统的框图。
[0018] 图11是根据本发明的实施例的第三系统的框图。
[0019] 图12是根据本发明的实施例的片上系统(SoC)的框图。
[0020] 图13是根据本发明的实施例的单核处理器和多核处理器的框图,具有集成的存 储器控制器和图形器件。
[0021] 图14是根据本发明的实施例的对比使用软件指令变换器将源指令集中的二进制 指令变换成目标指令集中的二进制指令的框图。

【具体实施方式】
[0022] 在下面的描述中,阐述了很多具体细节。然而,应当理解,本发明的各实施例可以 在不具有这些具体细节的情况下得到实施。在其他实例中,公知的电路、结构和技术未被详 细示出以免混淆对本描述的理解。
[0023] 图1是具有含一个或多个循环对齐指令的指令集102的处理器100的示例实施例 的框图。该处理器100可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算 (RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或完全其他类型的处理器中 的任何处理器。在一个或多个实施例中,处理器100可以是通用处理器(例如由美国加利 福尼亚州圣克拉拉市的英特尔公司制造的类型的通用微处理器),尽管这不是必需的。替 换地,指令处理处理装置可以是专用处理器。合适的专用处理器的示例包括但不限于,网络 处理器、通信处理器、加密处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器 (DSP)以及控制器(例如,微控制器),仅列举数例。
[0024] 处理器100具有指令集架构(ISA) 101。指令集体系结果101表示与编程相关的 处理器100的架构的一部分指令集架构101通常包括本地指令、架构寄存器、数据类型、寻 址模式、存储器架构、中断和异常处理以及处理器100的外部输入和输出(I/O)。指令集架 构101与微架构不同,微架构通常表示选择用于实现指令集架构的特定处理器设计技术。 带有不同的微架构的处理器可以共享共同的指令集架构。例如,加利福尼亚州圣克拉拉的 英特尔公司的某些微处理器和加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公 司(Advanced Micro Devices, Inc.)的某些微处理器使用本质上不同的内部微架构来实现 x86指令集的类似部分。
[0025] 指令集架构101包括架构寄存器(例如,架构寄存器文件)106。所示的架构寄存 器106包括通用寄存器127和打包数据寄存器107。通用寄存器127中的每一个可操作用 于存储标量数据元素(也被称为数据元素),且打包数据寄存器107B中的每一个可操作用 于存储打包数据、矢量数据或SIMD数据(例如,数据元素的阵列)。所示的架构寄存器106 还包括掩码寄存器108。掩码寄存器108中的每一个可操作用于存储打包数据操作掩码(也 被称为"掩码")。
[0026] 架构寄存器106表示板上处理器存储位置。架构寄存器106此处也可以被简称为 寄存器。短语架构寄存器、寄存器文件、以及寄存器在本文中用于表示对软件和/或编程器 (例如,软件可见的)和/或由宏指令指定来标识操作数(operand)的寄存器,除非另外予 以指定或清楚明显可知。这些寄存器与给定微架构(例如,临时寄存器、重排序缓冲器、弓丨 退(retirement)寄存器等)中的其他非架构寄存器形成对比。
[0027] 所示的指令集架构101还包括由处理器100支持的指令集102。指令集102包括 若干不同类型的指令。指令集102的这些指令表示宏指令(例如,提供给处理器100以供 执行的指令),与微指令或微操作(例如,从处理器1〇〇的解码器129解码宏指令得到的) 不同。
[0028] 指令集102包括一个或多个循环对齐指令,诸如循环对齐计数(PLCNT)指令105A、 循环对齐掩码(PLMSK)指令105B和/或循环剩余掩码(KSUBREM)指令105C。PLCNT指令 105A是标量生成指令,该指令可操作用于导致或致使处理器100生成标量值,诸如整数值。 可将标量值存储在通用寄存器127中。PLMSK指令105B和KSUBREM指令105C是掩码生成指 令,该指令中的每一个可操作用于导致或致使处理器100生成可被存储在掩码寄存器108 中的掩码。
[0029] 在一个实施例中,上述循环对齐指令中的一个或多个是经掩码的打包数据指令 103。经掩码的打包数据指令103可类似于在背景部分中提及的矢量指令,且具有几个显著 的差别。类似于前述打包数据指令,经掩码的打包数据指令103中的每一个可操作用于导 致或致使处理器100在该打包数据指令指示的一个或多个打包操作数的数据元素上执行 打包数据操作。打包数据操作数可被存储在打包数据寄存器107中。然而,经掩码的打包 数据指令103中的每一个可使用一个或多个掩码寄存器108以掩码、断言(predicate)或 有条件地控制打包数据处理。存储在掩码寄存器108中的掩码可表示掩码操作数、断言操 作数或条件操作控制操作数。
[0030] 掩码可操作用于按数据元素粒度掩码或有条件地控制打包数据处理。例如,掩码 可操作用于对是否将在来自单个源打包数据操作数的个体数据元素或来自两个源打包数 据操作数的个体相应数据元素对上执行的经掩码的打包数据指令103的打包数据操作的 结果存储在打包数据结果中进行掩码。经掩码的打包数据指令103可允许与数据元素分开 地且独立地断言或有条件控制对每个数据元素或每对相对应数据元素的打包数据处理。经 掩码的打包数据指令103、操作和掩码可提供某些优点,诸如增加的代码密度和/或较高的 指令吞吐量。
[0031] 在替换实施例中,以上描述的循环对齐指令中的一个或多个可以是不一定具有与 经掩码的打包数据指令103相同的指令格式的指令;然而,这些指令生成可由经掩码的打 包数据指令103使用的结果。循环对齐指令的替换实施例在图1中被示为虚线框。
[0032] 处理器100还包括执行逻辑109。执行逻辑109可操作用于执行或处理指令集102 的指令。执行逻辑109可包括执行单元、功能单元、算术逻辑单元、逻辑单元、算术单元等。 处理器100还包括解码器129,用以将宏指令解码成微指令或微操作以供执行逻辑109执 行。
[0033] PLCNT指令105A和PLMSK指令105B计算剥离迭代(peel iteration)的数量。剥 离迭代指的是可从循环中取出并与循环的剩余迭代分开地执行的循环的最初迭代。循环的 "最初"迭代指的是在循环索引随着每次迭代而增加时循环的最低索引部分,或者在循环索 引随着每次迭代而减小时循环的最高索引部分。从循环取出一个或多个最初迭代被称为 "循环剥离",这是一种通常针对循环优化而执行的技术。在通常的情况下,循环内的计算可 涉及阵列。阵列的基址不一定与处理打包数据的底层处理器的数据存储的宽度(诸如打包 数据寄存器107、高速缓存线或其它存储器单元的宽度)对齐。该数据存储的宽度被称为对 齐宽度。非对齐基址表示基址不是对齐宽度的整数倍。为了提高数据访问的效率,编译器 可生成计算剥离迭代的数量以将阵列的非对齐数据元素移出循环的代码。剥离迭代的数量 是相同数量的需要移出该循环或者需要与阵列的剩余部分分开地处理的这些非对齐数据 元素。阵列的剩余部分的基址(即,开始地址)与对齐宽度对齐;或等价地是对齐宽度的整 数倍。
[0034] 然而,剥离迭代的数量以及最后矢量化的循环操作中的剩余迭代的数量通常不能 在编译时间解析,因为此时不知道阵列元素的地址。利用本文描述的指令,在编译时间,编 译器可生成PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C代替执行相同任 务的其它代码序列。因此,编译器可利用这些循环对齐指令来简化其循环优化任务。在替 换实施例中,循环对齐指令可由编程器或其它代码生成实体使用。当循环对齐指令是指令 集架构101的一部分时,处理器100包含接收这些指令作为输入并将它们解码成微指令或 微操作以供执行逻辑109执行的硬件(例如,解码器129)。
[0035] PLCNT指令105A和PLMSK指令105B处理阵列的开始未对齐的情况,而KSUBREM指 令105C处理在循环的最后端处的剩余元素的总尺寸小于对齐宽度的情况。在对齐宽度是 矢量寄存器的宽度的实施例中,这意味着在最后的矢量化循环操作中,剩余的元素不填充 整个矢量寄存器。即,当循环中没有足够多的迭代(且阵列中没有足够多的数据元素)来 构成全宽度矢量操作时可使用KSUBREM指令105C。
[0036] 考虑每个循环迭代处理一个阵列元素的示例。假设每个分组数据寄存器具有512 比特,这表示16个双字数据元素可被打包成寄存器并一起作为矢量来处理。如果迭代的总 数是100且循环的开始与数据存储对齐,则在末端有4个剩余的数据元素在矢量化循环中 未被处理且需要单独处理。KSUBREM指令105C计算剩余数据元素的数量,并且生成可与剩 余数据元素一起使用的掩码以改进循环矢量化。
[0037] 为了进一步示出循环对齐,考虑它们的使用的代表示例是有用的。图2A是示出经 掩码的打包数据加法操作203的第一代表性示例实施例的框图。经掩码的打包数据加法操 作203可响应于经掩码的打包数据指令(例如,图1的经掩码的打包数据指令103之一) 或者作为该指令的结果来执行。在一个实施例中,在操作203中使用掩码202。掩码202可 以是由处理器执行图1的PLMSK指令105B生成的结果。
[0038] 在图2A的示例中,经掩码的打包数据加法操作203将标量值(例如,5)加到对应 于置位的掩码比特(例如,1)的源打包数据201的每个数据元素。假设代码序列(对于i =0至21,B(i) = A(i)+5)被指定用于执行,则标量值5被加到阵列A的每个数据元素。 因为源打包数据201包括阵列A的三个数据元素(S卩,A (0)、A (1)和A (2))作为其最低阶 数据元素,所以掩码202的仅最低阶三个比特被置位(例如为1)以指示对于A(0)、A(1)和 A(2),应执行加法,且加法的结果应被存储。在一个实施例中,掩码202可用于加载源打包 数据201以及执行经掩码的打包数据加法操作203。或者,在十六个数据元素(例如,A(0) 至A(15))被加载到矢量寄存器以指示加法仅应在最低阶的三个数据元素上执行之后,使 用掩码202。在任意实施例中,阵列A的最高阶的十三个数据元素不会进行加法操作;因此, 它们被指示为"x"(不关心)。
[0039] 出于示出的目的,假设源打包数据201是512比特宽且每个数据元素是32比特宽 (即,双字或"Dword")。在图2A-2C的示例中,源打包数据201的宽度与对齐宽度相同。为 了优化数据访问和打包数据操作,将阵列的基址与对齐宽度对齐是有利的。例如,当存储在 高速缓存中的阵列的基址与高速缓存线对齐时,处理器可利用单次获取来获取完整高速缓 存线的阵列数据元素。此外,当存储在打包数据寄存器中的阵列的基址与打包数据寄存器 宽度对齐时,处理器可高效地矢量化对阵列数据元素的操作。
[0040] 作为示例,高速缓存线的宽度可以是512比特,且对齐宽度可以是矢量寄存器的 宽度。在矢量寄存器也是512比特宽的处理器中,将完整高速缓存线的数据(例如十六个 Dword)加载到矢量寄存器将进行一个加载操作。然而,在图2A的示例中,其中阵列A的基 址不与对齐宽度对齐,加载阵列A的最初的十六个Dword将进行两个加载操作;来自第一高 速缓存线的第一 A (0)至A (2),然后来自第二高速缓存线的A (3)至A (15)。如果高速缓存 线的宽度是512比特且对齐宽度(例如,矢量寄存器宽度)是128比特宽,则将对齐的十六 个Dword加载到矢量寄存器将进行四个加载操作。然而,在图2A的示例中,加载阵列A的 最初十六个Dword将进行五个加载操作。这是因为最初的16个Dword跨两条高速缓存线 存储;结果,加载它们将导致额外的加载操作。
[0041] 在阵列元素的数量是2的幂的应用中(例如,图像处理),最初的未对齐可导致阵 列元素的所有后续加载的未对齐。因此,由于最初的未对齐,而可能无法有效地利用打包数 据操作处理整个阵列A。因此,在图2A的示例中,掩码202用于向处理器指示阵列A的需要 与阵列元素的剩余部分分开地处理的那些元素。
[0042] 相反,图2B示出其中源打包数据205包含阵列A的接下来的十六个元素(即, Α(3)、Α(4)、···.、Α(18))的示例。十六个元素的总宽度与对齐宽度相同。因此,单个打包数 据操作(例如,矢量获取、矢量加法等)可在全部这些十六个元素上操作。如果这些十六个 元素中的每一个在一个循环迭代中用作指令的源操作数(例如,对于i = 3至18, B(i)= A(i)+5),则可利用单个打包数据操作执行加法。在图2B的示例中,示出与源打包数据205 一起使用打包数据操作掩码206。掩码206的全部十六个掩码比特被设定为指示可在阵列 A的全部十六个数据元素上操作且可存储操作的结果。以虚线示出掩码206,因为在一些实 施例中,不使用掩码206可能是有利的。这是因为通过使所有的1作为掩码比特,在源分组 数据205上的操作和操作结果的存储与在操作中不使用掩码206相同。
[0043] 在图2C的示例中,阵列的最后三个数据元素(即,A(19)、A(20)、A(21))不占据源 打包数据207的全部宽度。即,在A没有留下足够的元素来填充整个矢量寄存器207。因为 源打包数据207包括A (19)、A (20)、A (21)作为其最低阶数据元素,因此掩码208的仅最低 阶三个比特被置位(例如为1)以指示对于八(19)、4(20)、4(21),应执行加法,且加法的结 果应被存储。掩码208可以是由处理器执行图1的KSUBREM指令105C生成的结果。在一 个实施例中,在阵列的末端缺少数据元素(用于填充整个矢量寄存器)可能是在阵列的基 址处最初未对齐的结果。例如,在图像处理应用中,通常图像阵列的尺寸是矢量寄存器宽度 的整数倍。然而,如果图像阵列的开始未被对齐,则若干数据元素留在循环的末端,而不能 填充整个矢量寄存器。
[0044] 使用掩码202和208有助于对其中阵列的数据元素是操作数的循环的执行进行矢 量化。在图2A的示例中,可利用其中源打包数据201与掩码202 -起使用的经掩码的打包 数据操作来对具有循环索引i = 〇、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) 且其余被清零(例如,〇)。KSUBREM指令105C的输出是可被施加到源打包数据207的打包 数据操作掩码(例如,掩码208)。在图2C的示例中,仅掩码208的最低阶三个元素被置位 (例如,1)且其余被清零(例如,0)。
[0045] 关于所示的经掩码的打包数据操作203的指令指示要被加到标量值的源打包数 据。其它经掩码的打包数据指令可指示两个或更多个源打包数据。经掩码的打包数据操作 203的指令还指示打包数据操作掩码(202、206或208)。打包数据操作掩码中的每一个包 括多个掩码元素、断言元素、条件控制元素或标志。可以按与一个或多个相对应源数据元素 的一对一对应的形式包括元素或标志。例如,如图所示,在操作涉及一个源打包数据操作数 的情况下,对于每个对应的源数据元素可以有一个这样的元素或标志。打包数据操作掩码 的每个元素或标志可操作用于对一个或多个相应的源打包数据元素上单独打包数据操作 进行掩码。例如,每个元素或标记可对相应源打包数据元素上的单独打包数据操作进行掩 码。
[0046] 如图中所示的,通常每个元素或标志可以是单个比特。单个比特可允许指定两个 不同可能性(例如,执行操作对不执行操作,存储操作的结果对不存储操作的结果等)中的 任一个。替代地,如果需要在多于两个的不同选项中进行选择,则可对每个标志或元素使用 两个或更多个比特。在图2A的示例中,打包数据操作掩码202包括十六个比特。十六个比 特中的每一个具有与源打包数据201的十六个相应数据元素的有序对应关系。例如,掩码 202的三个最高阶比特对应于源打包数据201的相应三个最高阶数据元素。在替换实施例 中,其中源打包数据具有更少或更多的数据元素,打包数据操作掩码可类似地具有更少或 更多的数据元素。
[0047] 根据所示的协定,当给定的掩码比特被置位(例如,1)时,打包数据操作的结果在 源打包数据的相应数据元素上执行,并且被存储在打包数据结果的相应数据元素中。相反, 当给定的掩码比特被清零(即,〇)时,对于源打包数据的对应的数据元素省略(即不执行) 打包数据操作,或者不允许将结果存储在打包数据结果的相应数据元素中。相反,可将另一 个值(由符号"X"指示)存储在结果数据元素中。例如,存储来自源打包数据的相应数据 元素的数值。在替换实施例中,可将零或另一个预定值存储在打包数据结果的对应数据元 素中。与所示相反的协定也是可能的,其中比特被清零(即,〇)以允许存储结果,或被置位 (即,1)以不允许存储结果。
[0048] 在一些实施例中,掩码掉(masked-off)元素(即、具有相应的清零的掩码比特的 数据元素)上的打包数据操作可任选地抑制或不引起异常(例如,异常标志)或违犯。在 一些实施例中,对于具有存储器操作数的经掩码打包数据指令,可任选地针对掩码掉数据 元素抑制存储器错误。该特征可有助于实现控制流断言,因为掩码可有效地提供合并状态 打包数据寄存器,但不是必须的。
[0049] 应当理解,处理器可支持宽泛的各种不同类型的经掩码的打包数据操作。例如,这 些可包括仅具有一个源打包数据或具有两个以上的源打包数据的操作、生成不同尺寸的结 果打包数据的操作、具有不同尺寸的数据元素的操作和/或具有不同的结果数据元素顺序 的操作及其组合。
[0050] 图3是具有执行单元317的指令处理装置315的示例实施例的框图,该执行单元 317可操作用于执行包含PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的示例 实施例的指令。在一些实施例中,指令处理装置315可以是处理器,和/或可被包括在处理 器(例如,图1的处理器100或类似装置)中。替换地,指令处理装置315可被包括在不同 的处理器或电子系统中。
[0051] 指令处理器装置315接收PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C 中的一个或多个。可从存储器、指令队列、指令获取单元或其它源接收指令。指令105AU05B 和105C中的每一个可表示机器指令、宏指令或指令处理装置识别的控制信号。指令处理装 置315可具有专用的或特定的电路或其它逻辑(例如,与硬件和/或固件结合的软件),专 用的或特定的电路或其它逻辑可操作用于处理指令和/或响应于指令的结果或按指令指 不存储结果。
[0052] 指令处理装置315的所示实施例包括指令解码器,诸如图1的解码器129或一 个类似解码器。解码器129接收并解码较高级的机器指令或宏指令,诸如所接收的指令 105A-105C。解码器129可以生成并输出一个或多个较低级的微操作、微代码入口点、微指 令、或其他较低级的指令或控制信号,它们反映和/或来源于原始较高级的指令。一个或多 个较低级指令或控制信号可通过一个或多个较低级(例如,电路级或硬件级)操作来实现 较高级指令的操作。解码器129可使用各种不同的机制来实现。合适机制的示例包括但不 限于微代码、随机存取存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)、用于实现 本领域已知的解码器的其他机制等。
[0053] 或者,并非具有解码器129,在一个或多个其它实施例中,指令处理装置315相反 可具有指令仿真器、转换器、变形器(morpher)、解释器或者其他指令变换逻辑。各种不同类 型的指令变换逻辑在本领域中是已知的,并且可在软件、硬件、固件、或者其组合中实现。指 令变换逻辑可接收指令105A-105C中的一个或多个,并且仿真、转换、变形、解释、或者以其 他方式将指令变换成一个或多个对应的导出指令或控制信号。在又一个其它实施例中,指 令处理装置315可具有解码器和附加的指令变换逻辑。例如,指令处理装置315可具有变 换逻辑,用以将指令105A-105C中的一个或多个变换成一个或多个中间指令,以及解码器, 用以将一个或多个中间指令解码成由指令处理装置的本机硬件执行的一个或多个较低级 的指令或控制信号。指令变换逻辑中的一些或全部可位于其余指令处理装置的管芯外,诸 如在单独的管芯上或在管芯外的存储器中。
[0054] 再次参考图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之一。或者,目的 地存储位置可以是另一个寄存器或存储器位置。
[0055] 在一些实施例中,PLCNT指令105A和PLMSK指令105B中的每一个指定或指示直 接数(immediate)值的附加操作数。直接数值表示对齐宽度。在替换实施例中,指令不指 定直接数值且替代地使用预定值(例如,下层微架构允许的最大对齐宽度,诸如512比特) 作为对齐宽度。
[0056] 寄存器320-325可各自表示板上处理器存储位置,诸如图1的架构寄存器106。寄 存器320-325对于软件和/或编程器可见(例如,软件可见)和/或可以是宏指令指示或 指定的寄存器以标识操作数。寄存器320-325可使用公知技术在不同的微架构中以不同的 方式实现,并且不限于任何已知的特定类型的电路。多种不同类型的寄存器可适用,只要它 们能够存储并提供在此所述的数据。合适类型的寄存器的示例包括但不限于,专用物理寄 存器、使用寄存器重命名的动态分配的物理寄存器以及其组合。
[0057] 指令处理装置315还包括执行单元317。执行单元317与寄存器320-325耦合。 执行单元317还与解码器129耦合。执行单元317可从解码器129接收一个或多个微操作、 微代码进入点、微指令、其他指令或其他控制信号,它们反映了 PLCNT指令105A、PLMSK指令 105B和KSUBREM指令105C或者是从该指令导出的。
[0058] 执行单元317响应于循环对齐指令中的每一个和/或作为循环对齐指令中的每一 个的结果,可操作用于在目的地中存储结果。作为示例,执行单元317可包括算术逻辑单 元、逻辑单元、算术单元、功能单元等。执行单元317可包括可操作用于计算剥离迭代的数 量的循环对齐逻辑318。执行单元317和/或循环对齐逻辑318可包括可操作用于实现指 令的操作(例如,执行一个或多个微指令)的电路或其它执行逻辑(例如,软件、固件、硬件 或组合)。
[0059] 在一些实施例中,执行单元可进一步操作用于使目的地用于存储掩码的比特归 零,或者给予这些比特另一个预定值。
[0060] 为了避免混淆描述,已示出和描述了相对简单的指令处理装置315。应当理解,其 他实施例可具有超过一个执行单元。例如,装置可包括多个不同类型的执行单元,诸如例如 算术单元、算术逻辑单元(ALU)、整数单元、浮点单元等。这些单元中的至少一个可响应于 如本文公开的循环对齐指令的实施例。指令处理装置或处理器的再其他实施例可具有多个 核、逻辑处理器或执行引擎。可操作用于执行一个或多个循环对齐指令的执行单元可被包 含在核、逻辑处理器或执行引擎中的至少一个、至少两个、大多数或全部中。
[0061] 指令处理装置315或处理器还可以可任选地包括一个或多个其他已知的组件。例 如,其它实施例可包括指令获取逻辑、调度逻辑、分支预测逻辑、指令和数据缓存、指令和数 据转换后备缓冲器、预取缓冲器、微指令队列、微指令定序器、总线接口单元、第二或更高级 缓存、指令调度逻辑、引退逻辑、寄存器重命名逻辑等中的一个或多个或它们的各种组合。 应意识到实际上在处理器中存在这些组件的多种不同的组合和配置,并且本发明的范围不 限于任意已知的这些组合配置。
[0062] 图4是包括有形、非瞬态机器可读(例如,机器可访问)存储介质400的制品(例 如,计算机程序产品)的框图,其存储一个或多个循环对齐指令405 (例如,图1的PLCNT指 令105A、PLMSK指令105B和/或KSUBREM指令105C)。将意识到还可将用于执行如本文所 公开的一个或多个操作或方法的其它指令或指令序列(例如,利用循环对齐指令405的结 果作为断言操作数的一个或多个指令、紧密附属的标量或打包数据指令或使用循环对齐指 令405的例程或算法)存储在存储介质400上。
[0063] 在各实施例中,有形、非瞬态机器可读存储介质400可包括软盘、光存储介 质、光盘、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM (PR0M)、可擦除可编程 ROM (EPROM)、电可擦除可编程ROM (EEPR0M)、随机存取存储器(RAM)、静态RAM (SRAM)、动态 RAM (DRAM)、闪存、相变存储器或它们的组合。有形介质可包括一个或多个固态有形材料,例 如半导体材料、相变材料、磁性材料、光盘的光学透明固体材料等等。
[0064] 适当的机器的示例包括但不限于指令处理设备、指令执行设备、处理器以及具有 一个或多个指令处理设备、指令执行设备或处理器的各种电子设备。这种电子设备的几个 代表示例包括但不限于计算机系统、台式机、膝上型计算机、笔记本、服务器、网络设备、路 由器、开关、上网本、上网计算机、移动互联网设备(MID)、蜂窝电话和媒体播放器。这样的电 子设备通常包括与诸如例如一个或多个有形非瞬态机器可读存储介质等的一个或多个其 他组件耦合的一个或多个处理器。处理器和其它组件的耦合一般是通过一个或多个总线和 桥(也称总线控制器)达成的。因而,电子设备的存储设备或存储介质可以存储在该电子 设备的一个或多个处理器上执行的指令和/或指令序列。
[0065] 图5A是处理循环对齐指令(例如,图1的PLCNT指令105A和/或PLMSK指令105B) 的示例实施例的方法500的示例实施例的流程框图。在各实施例中,方法500的方法可由 通用处理器、专用处理器(例如,图形处理器或数字信号处理器)、或另一种类型的数字逻 辑设备或指令处理装置执行。在一些实施例中,方法500可由图1的处理器100、图3的指 令处理装置315或类似的处理器或指令处理装置执行。或者,方法500可由处理器或指令 处理装置的不同实施例执行。此外,图1的处理器100和图3的指令处理装置315可执行 与图5A的方法500的操作和方法相同、类似或不同的操作和方法的实施例。
[0066] 方法500包括处理器接收循环对齐指令,诸如PLCNT指令105A或PLMSK指令 105B (框510)。循环对齐指令指定或指示第一源操作数、第二源操作数、阵列的目的地和数 据元素尺寸。在一个实施例中,第一源操作数指定其中存储阵列的基址的第一寄存器,且第 二源操作数指定其中存储循环极限(即,循环中迭代的总数)的第二寄存器。在一些实施 例中,每个阵列数据元素的宽度由作为指令名称的一部分的助记符号(mnemonic)指定(例 如,字节的数据元素宽度可由诸如PLCNTB和PLMSKB之类的指令的名称指示)。在一些实施 例中,指令还指定或指示直接数值,即阵列要与之对齐的所要求的对齐宽度。在各个方面, 该指令可在处理器、指令处理装置或者其一部分(例如,解码器、指令变换器等)处接收。在 各个方面,循环对齐指令可从处理器外的源(例如,从主存储器、盘、或总线或互连)或者从 处理器上的源(例如,从指令高速缓存)接收。
[0067] 然后,解码循环对齐指令以供执行(框520)。可通过处理器内的解码器电路执行 解码。在一些实施例中,可变换循环对齐指令,用于由上述的指令变换逻辑结合图3中示出 的解码器129来解码。
[0068] 在执行循环对齐指令之后,将执行的结果存储在目的地中(框530)。该结果指示 在阵列的开始处的要与阵列的剩余部分分开处理的数据元素的数量。当阵列的剩余部分的 基址(即,开始地址)与对齐宽度(诸如,所要求的对齐宽度)对齐时,实现循环对齐。 [0069] 在一个实施例中,结果指示数据元素的数量作为整数值(诸如在PLCNT指令105A 的情况下)。在另一个实施例中,结果指示数据元素的数量作为设定为预定值(例如,1)的 掩码元素(诸如在PLMSK指令105B的情况下)。
[0070] 图5B是处理循环对齐指令(例如,图1的KSUBREM指令105C)的示例实施例的方 法550的示例实施例的流程框图。在各实施例中,方法550的方法可由通用处理器、专用处 理器(例如,图形处理器或数字信号处理器)、或另一种类型的数字逻辑设备或指令处理装 置执行。在一些实施例中,方法550可由图1的处理器100、图3的指令处理装置315或类 似的处理器或指令处理装置执行。或者,方法550可由处理器或指令处理装置的不同实施 例执行。此外,图1的处理器100和图3的指令处理装置315可执行与图5B的方法550的 操作和方法相同、类似或不同的操作和方法的实施例。
[0071] 方法550包括处理器接收循环对齐指令,诸如KSUBREM指令105C (框560)。循环 对齐指令指定或指示第一源操作数、第二源操作数、阵列的目的地和数据元素尺寸。在一个 实施例中,第一源操作数指定其中存储当前的迭代计数(即,循环的矢量处理处)的第一寄 存器,且第二源操作数指定其中存储循环极限(即,循环中迭代的总数)的第二寄存器。在 一些实施例中,每个阵列数据元素的宽度由作为指令名称的一部分的助记符号(mnemonic) 指定(例如,字节的数据元素宽度可由诸如KSUMREMB之类的指令的名称指示)。在各个方 面,该指令可在处理器、指令处理装置或者其一部分(例如,解码器、指令变换器等)处接 收。在各个方面,循环对齐指令可从处理器外的源(例如,从主存储器、盘、或总线或互连) 或者从处理器上的源(例如,从指令高速缓存)接收。
[0072] 然后,解码循环对齐指令以供执行(框570)。可通过处理器内的解码器电路执行 解码。在一些实施例中,可变换循环对齐指令,用于由上述的指令变换逻辑结合图3中示出 的解码器129来解码。
[0073] 在执行循环对齐指令之后,将执行的结果存储在目的地(框580)。该结果指示在 阵列的末端处的要与阵列的在前部分分开处理的数据元素的数量。阵列的在前部分的末端 是矢量处理停止且当前迭代计数被记录的位置。
[0074] 在一个实施例中,结果指示数据元素的数量作为设定为预定值(例如,1)的掩码 元素(诸如在KSUBREM指令105C的情况下)。在替代实施例中,结果还可指示数据元素的 数量作为整数值。
[0075] 所示的方法包括从处理器或指令处理装置外部可见的操作(例如,从软件观点)。 在其它实施例中,方法可任选地包括一个或多个其它操作(例如,在处理器或指令处理器 装置内部发生的一个或多个操作)。作为示例,在接收到指令之后,可将指令解码、转换、仿 真或以其它方式变换成一个或多个其它指令或控制信号。可访问和/或接收第一和第二源 操作数。可启用执行单元以根据指令生成或执行循环对齐,并且可生成或执行循环对齐。
[0076] 图6是示出对于对齐宽度和打包数据元素宽度的不同组合由PLMSK指令105B和 KSUBREM指令105C生成的打包数据操作掩码比特的数量的表600。打包数据操作掩码比特 的数量是给定的对齐宽度和给定的打包数据(例如阵列)元素宽度之比。示出了 64比特、 128比特、256比特以及512比特的对齐宽度,虽然其他尺寸也是可以的。考虑了 8比特字 节(B)、16比特字(W)、32比特双字⑶或单精度浮点以及64比特四倍字(Q)或双精度浮 点的打包数据元素宽度,虽然其他宽度也是可能的。
[0077] 图7是一组掩码寄存器700 (诸如,图1的掩码寄存器108)的示例实施例的框图。 掩码寄存器700中的每一个可用于存储打包数据操作掩码(诸如存储在PLMSK目的地324 和KSUBREM目的地325中的掩码)。在所例示的实施例中,该组包括标示为K0至k7的八个 掩码寄存器。替代的实施例可包括比八个更少(例如,两个、四个、六个等)或比八个更多 (例如,十六个、二十个、三十二个等)打包数据运算掩码寄存器。在所例示的实施例中,掩 码寄存器700中的每一个为64比特宽。在替代实施例中,掩码寄存器700的宽度可以比64 比特更宽(例如,80比特,128比特等)或比64比特更窄(例如,8比特、16比特、32比特 等)。掩码寄存器700可使用公知技术以不同方式实现,并且不限于任何已知的特定类型的 电路。多种不同类型的寄存器可适用,只要它们能够存储并提供在此所述的数据。合适寄 存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、 以及其组合。
[0078] 在一些实施例中,掩码寄存器700可以是分开的专用架构寄存器集合。在一些实 施例中,与用于编码或指定其它类型的寄存器(例如,图1的掩码寄存器108)相比,指令可 在指令格式的不同比特或一个或多个不同字段组合中编码或指定掩码寄存器。作为示例, 经掩码的打包数据指令可使用三个比特(例如,3比特字段)来编码或指定八个打包数据 操作掩码寄存器k0至k7中的任一个。在替代实施例中,在分别有更少或更多打包数据操 作掩码寄存器时,可使用更少或更多比特。在一个特定实现中,仅掩码寄存器kl至k7 (而 非k0)可被寻址作为用于断言经掩码的打包数据操作的断言操作数。寄存器k0可被用作 常规源或目的地,但是可能不被编码为断言操作数(例如,如果k0被指定,则其具有全一或 "无掩码"编码)。在其他实施例中,寄存器中的全部或仅一些可被编码为断言操作数。
[0079] 在一些实施例中,寄存器700的最低阶子集或部分被用于进行掩码,但是并不要 求如此。如图6所示,当对齐宽度是128比特且数据元素宽度是8比特时,使用16个掩码 比特。这些16个掩码比特可以是存储在寄存器700之一(例如kl)中的最低阶的16个比 特。K1的最高阶部分可被置位为0或其它预定值。在替代实施例中,可任选地使用最高阶 子集或某一其他子集。
[0080] 图8A-8C分别示出PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的实 施例以及其操作。每个指令的名称可具有附加到其上的助记符号B/W/D/Q;例如,B(8比 特)、W(16比特)、D (32比特)或Q(64比特)。在这些图中,rax、rbx、rex标识通用寄存 器,而kl表示掩码寄存器。在图8A和8B(PLCNT和PLMSK)的示例中,rax(存储SRC1)是具 有阵列的基址的第一源操作数,rex (存储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。
[0081] 如图所示,PLCNT指令返回与对齐_迭代和SRC2 (迭代极限)的最小值对应的计 数。PLMSK指令返回等价于PLCNT返回的计数的打包数据操作掩码。图8B的示例示出可通 过将值1移位η个比特然后减1生成的掩码,其中η表示计数(可由PLCNT生成)。将所得 到的掩码存储在目的地中,目的地可以是图7的打包数据操作掩码寄存器700之一。应理 解本文的示例是说明性的且非限制性的,因为有多种不同的方式来实现PLCNT和PLMSK。
[0082] 在图8C的示例(KSUBREM)中,rax(存储SRC1)是具有循环极限的第一源操作数, rex (存储SRC2)是具有循环的循环极限的第二源操作数,rax (存储DEST)表示结果的目的 地。VL此处表示矢量元素的数量,且剩余_迭代表示VL的最小值以及SRC2和SRC1之差。 所得到的掩码可通过使值1移位η个比特然后减1来生成,其中η是剩余_迭代的值。 [0083] 本文公开的循环对齐指令是具有一般用途的通用指令。例如,这些指令可单独地 或与其它指令组合地使用以计算剥离迭代的数量。在一些实施例中,本文公开的循环对齐 指令可与紧密附属的或相关联的打包数据指令结合使用以优化循环操作的执行。还基于本 公开构想到其它使用。
[0084] 示例性计算机系统和处理器-图9-13
[0085] 图9-13是示例性计算机系统和处理器。本领域已知的对膝上型设备、台式机、手 持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、 数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体 播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般来说,能 够纳入本文中所公开的处理器和/或其它执行逻辑的大量系统和电子设备一般都是合适 的。
[0086] 现在参考图9,所示出的是根据本发明实施例的系统1300的框图。系统1300可包 括耦合至图形存储器控制器中枢(GMCH) 1320的一个或多个处理器1310、1310。附加处理器 1315的可选性质用虚线表示在图9中。
[0087] 每一处理器1310U315可以是处理器1700的某种版本。然而,应该注意,集成图 形逻辑和集成存储器控制单元未必存在于处理器1310、1315中。
[0088] 图9示出GMCH1320可耦合至存储器1340,该存储器1340可以是例如动态随机存 取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性缓存相关联。
[0089] GMCH1320可以是芯片组或芯片组的一部分。GMCH1320可以与(多个)处理器 1310、1315进行通信,并控制处理器1310、1315与存储器1340之间的交互。GMCH1320还 可担当(多个)处理器1310、1315和系统1300的其它元件之间的加速总线接口。对于至 少一个实施例,GMCH1320经由诸如前端总线(FSB) 1395之类的多站总线与(多个)处理器 1310、1315进行通信。
[0090] 此外,GMCH1320耦合至显示器1345(诸如平板显示器)。GMCH1320可包括集成图 形加速器。GMCH1320还耦合至输入/输出(I/O)控制器中枢(ICH) 1350,该输入/输出(1/ 0)控制器中枢(ICH) 1350可用于将各种外围设备耦合至系统1300。在图9的实施例中作 为示例示出了外部图形设备1360以及另一外围设备1370,该外部图形设备1360可以是耦 合至ICH1350的分立图形设备。
[0091] 替代地,系统1300中还可存在附加或不同的处理器。例如,附加(多个)处理器 1315可包括与处理器1310相同的附加(多个)处理器、与处理器1310异类或不对称的附 加(多个)处理器、加速器(诸如图形加速器或数字信号处理(DSP)单元)、现场可编程门 阵列或任何其它处理器。按照包括架构、微架构、热、功耗特征等等优点的度量谱,(多个) 物理资源1310、1315之间存在各种差别。这些差别会有效显示为处理元件1310、1315之间 的不对称性和异类性。对于至少一个实施例,各种处理元件1310U315可驻留在同一管芯 封装中。
[0092] 现在参照图10,所示出的是根据本发明一实施例的第二系统1400的框图。如图 10所示,多处理器系统1400是点对点互连系统,且包括经由点对点互连1450耦合的第一处 理器1470和第二处理器1480。如图10所示,处理器1470和1480中的每个可以是处理器 1700的某一版本。
[0093] 替代地,处理器1470U480中的一个或多个可以是除处理器之外的元件,诸如加 速器或现场可编程门阵列。
[0094] 虽然仅以两个处理器1470U480来示出,但应理解本发明的范围不限于此。在其 它实施例中,在给定处理器中可存在一个或多个附加处理元件。
[0095] 处理器1470还可包括集成存储器控制器中枢(MC) 1472和点对点(P-P)接口 1476和1478。类似地,第二处理器1480包括頂C1482和P-P接口 1486和1488。处理器 1470、1480可以经由使用点对点(PtP)接口电路1478、1488的点对点(PtP)接口 1450来交 换数据。如图10所示,頂C1472和1482将处理器耦合到相应的存储器,即存储器1442和 存储器1444,这些存储器可以是本地附连到相应处理器的主存储器部分。
[0096] 处理器1470、1480可各自经由使用点对点接口电路1476、1494、1486、1498的各个 P-P接口 1452、1454与芯片组1490交换数据。芯片组1490还可经由高性能图形接口 1439 与高性能图形电路1438交换数据。
[0097] 共享高速缓存(未示出)可以被包括在任一处理器之内或被包括两个处理器外部 但仍经由P-P互连与这些处理器连接,从而如果将某处理器置于低功率模式时,可将任一 处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
[0098] 芯片组1490可经由接口 1496耦合至第一总线1416。在一个实施例中,第一总线 1416可以是外围部件互连(PCI)总线,或诸如PCI Express总线或其它第三代I/O互连总 线之类的总线,但本发明的范围并不受此限制。
[0099] 如图10所示,各种I/O设备1414可连同总线桥1418 -起耦合到第一总线1416, 总线桥1418将第一总线1416耦合到第二总线1420。在一个实施例中,第二总线1420可以 是低引脚数(LPC)总线。在一个实施例中,多个设备可以耦合到第二总线1420,包括例如键 盘和/或鼠标1422、通信设备1426以及可以包括代码1430的诸如盘驱动器或其它海量存 储设备的数据存储单元1428。进一步地,音频1/01424可以耦合到第二总线1420。注意, 其它体系结构是可能的。例如,代替图10的点对点架构,系统可实现多点总线或者其他此 类架构。
[0100] 现在参照图11,所示出的是根据本发明实施例的第三系统1500的框图。图10和 11中的类似元件使用类似附图标记,且在图11中省略了图10的某些方面以避免混淆图11 的其它方面。
[0101] 图11示出处理元件1470、1480可分别包括集成存储器和I/O控制逻辑("L") 1472 和1482。对于至少一个实施例,CL1472、1482可包括诸如以上结合图8、9和14所描述的存 储器控制器中枢逻辑(MC)。此外。CL1472U482还可包括I/O控制逻辑。图15不仅解说 了耦合至CL1472、1482的存储器1442、1444,而且还解说了同样耦合至控制逻辑1472、1482 的I/O设备1514。传统I/O设备1515被耦合至芯片组1490。
[0102] 现在参考图12,所示为根据本发明的一实施例的S〇C1600的框图。图13中的类似 元件具有相似的附图标记。另外,虚线框是更先进的SoC的可选特征。在图12中,互连单 元1602被耦合至:应用处理器1610,包括一个或多个核1702A-N的集合和共享高速缓存单 元1706 ;系统代理单元1710 ;总线控制器单元1716 ;集成存储器控制器单元1714 ;-个或 多个媒体处理器1620的集合,可包括集成图形逻辑1708、用于提供静态和/或视频照相机 功能的图像处理器1624、用于提供硬件音频加速的音频处理器1626、以及用于提供视频编 码/解码加速的视频处理器1628 ;静态随机存取存储器(SRAM)单元1630 ;直接存储器存取 (DMA)单元1632 ;以及显示单元1640,用于耦合至一个或多个外部显示器。
[0103] 本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组 合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程 系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至 少一个输入设备以及至少一个输出设备。
[0104] 可将程序代码应用至输入数据以执行本文描述的功能并产生输出信息。输出信息 可以按已知方式被应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸 如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器 的任何系统。
[0105] 程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统 通信。程序代码也可以在需要的情况下用汇编语言或机器语言来实现。事实上,本文中描 述的机制不仅限于任何特定编程语言的范围。在任一情形下,语言可以是编译语言或解释 语目。
[0106] 至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性的 指令来实现,指令表示处理器内的各种逻辑,指令在由机器读取时使机器制造执行此处所 描述的技术的逻辑。被称为"IP核"的这些表示可以被存储在有形的机器可读介质上,并被 提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
[0107] 此类机器可读存储介质可包括但不限于通过机器或设备制造或形成的非易 失性的粒子有形排列,包括存储介质,诸如:硬盘;包括软盘、光盘、压缩盘只读存储器 (CD-ROM)、可重写压缩盘(CD-RW)以及磁光盘的任何其它类型的盘;诸如只读存储器(ROM) 之类的半导体器件;诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)之类的 随机存取存储器(RAM);可擦除可编程只读存储器(EPROM);闪存;电可擦除可编程只读存 储器(EEPR0M);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
[0108] 因此,本发明的各实施例还包括非瞬态、有形机器可读介质,该介质包含矢量友好 指令格式的指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电 路、装置、处理器和/或系统特性。这些实施例也被称为程序产品。
[0109] 在某些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指 令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、 仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用 软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处 理器上部分在处理器外。
[0110] 图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的软件、固件、硬件或其 组合。
[0111] 本文公开的矢量友好指令格式的指令的某些操作可由硬件组件执行,且可体现在 机器可执行指令中,该指令用于导致或至少致使电路或其它硬件组件以执行该操作的指令 编程。电路可包括通用或专用处理器、或逻辑电路,这里仅给出几个示例。这些操作还可任 选地由硬件和软件的组合执行。执行逻辑和/或处理器可包括响应于从机器指令导出的机 器指令或一个或多个控制信号以存储指令指定的结果操作数的专用或特定电路或其它逻 辑。例如,本文公开的指令的实施例可在图9-13的一个或多个系统中执行,且矢量友好指 令格式的指令的实施例可存储在将在系统中执行的程序代码中。另外这些附图的处理元件 可利用本文详细描述的详细描述的流水线和/或架构(例如有序和无序架构)之一。例如, 有序架构的解码单元可解码指令、将经解码的指令传送到矢量或标量单元等。
[0112] 上述描述旨在说明本发明的优选实施例。根据上述讨论,还应当显而易见的是,在 发展迅速且进一步的进展难以预见的此【技术领域】中,本领域技术人员可在安排和细节上对 本发明进行修改,而不背离落在所附权利要求及其等价方案的范围内的本发明的原理。例 如,方法的一个或多个操作可组合或进一步分开。
[0113] 可选实施例
[0114] 尽管已经描述了将本地执行矢量友好指令格式的实施例,但本发明的可选实施例 可通过运行在执行不同指令集的处理器(例如,执行美国加利福亚州桑尼维尔的MIPS技术 公司的MIPS指令集的处理器、执行加利福亚州桑尼维尔的ARM控股公司的ARM指令集的处 理器)上的仿真层来执行矢量友好指令格式。同样,尽管附图中的流程图示出本发明的某 些实施例的特定操作顺序,按应理解该顺序是示例性的(例如,可选实施例可按不同顺序 执行操作、组合某些操作、使某些操作重叠等)。
[0115] 在以上描述中,为解释起见,阐明了众多具体细节以提供对本发明的实施例的透 彻理解。然而,将对本领域技术人员明显的是,没有这些具体细节中的一些也可实践一个或 多个其他实施例。提供所描述的具体实施例不是为了限制本发明而是为了说明本发明的实 施例。本发明的范围不是由所提供的具体示例确定,而是仅由所附权利要求确定。
[0116] 应当理解,以上描述旨在是说明性的而非限制性的。在阅读并理解以上描述之后, 许多其它实施方式对本领域内技术人员而言将是显而易见的。因此,本发明的范围应参考 所附权利要求书以及使这些权利要求享有权利的等效方案的完全范围来确定。
【权利要求】
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所述的系统,其特征在于,所述阵列中要与阵列的在前部分分开处 理的数据元素的总数量大小小于对齐宽度。
【文档编号】G06F9/30GK104115113SQ201180075242
【公开日】2014年10月22日 申请日期:2011年12月14日 优先权日:2011年12月14日
【发明者】E·乌尔德-阿迈德-瓦尔, R·凡伦天, J·考博尔, A·纳赖金, S·赛尔, A·哈吉尔, M·B·吉尔卡尔, B·L·托尔, M·J·查尼 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1