用于检测向量寄存器内的相同元素的装置和方法

文档序号:6485349阅读:132来源:国知局
用于检测向量寄存器内的相同元素的装置和方法
【专利摘要】描述了用于标识向量寄存器中的相同元素的装置、系统和方法。例如,根据一个实施例的计算机实现方法包括以下操作:从第一向量寄存器读取每个活跃元素,每个活跃元素具有所述第一向量寄存器内的所定义比特位置;从第二向量寄存器读取每个元素,每个元素具有所述第二向量寄存器内与第一向量寄存器中的当前活跃元素的比特位置相对应的所定义比特位置;读取输入掩码寄存器,输入掩码寄存器标识第二向量寄存器中将针对其作出与第一向量寄存器中的值的比较的活跃比特位置,所述比较操作包括:将第二向量寄存器中的每个活跃元素与第一向量寄存器中比特位置在第二向量寄存器中的当前活跃元素的比特位置之前的元素作比较;以及如果第一向量寄存器中的所有在前比特位置等于第二向量寄存器中的当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值。
【专利说明】用于检测向量寄存器内的相同元素的装置和方法发明领域
[0001]本发明的实施例一般涉及计算机系统的领域。更具体地,本发明的实施例涉及用于检测向量寄存器内的相同元素的装置和方法。

【背景技术】
[0002]一般背景
[0003]指令集,或指令集架构(ISA)是涉及编程的计算机架构的一部分,并可以包括本机数据类型、指令、寄存器架构、寻址模式、存储器架构,中断和异常处理,以及外部输入和输出(I/o)。在本文中术语指令一般指宏指令一即被提供给处理器(或指令转换器,该指令转换器(例如使用静态二进制翻译、包括动态编译的动态二进制翻译)翻译、变形、仿真,或以其他方式将指令转换成要由处理器处理的一个或多个指令)的指令)以用于执行的指令一而不是微指令或微操作(miCTo-op)—它们是处理器的解码器解码宏指令的结果。
[0004]ISA与微架构不同,微架构是实现指令集的处理器的内部设计。带有不同的微架构的处理器可以共享共同的指令集。例如,INTEL?奔腾四(Pentium4)处理器、丨ntel?酷睿(Core?)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices, Inc.)的诸多处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。例如,ISA的相同寄存器架构在不同的微架构中可使用已知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(诸如,使用寄存器别名表RAT、重排序缓冲器R0B、以及隐退寄存器组;使用多映射和寄存器池)的一个或多个动态分配物理寄存器等。除非另作说明,短语寄存器架构、寄存器组,以及寄存器在本文中被用来指代对软件/编程器以及指令指定寄存器的方式可见的东西。在需要特殊性的情况下,形容词逻辑、架构,或软件可见的将用于表示寄存器架构中的寄存器/文件,而不同的形容词将用于指定给定微型架构中的寄存器(例如,物理寄存器、重新排序缓冲器、退役寄存器、寄存器池)。
[0005]指令集包括一个或多个指令格式。给定指令格式定义各个字段(位的数量、位的位置)以指定要执行的操作(操作码)以及对其要执行该操作的操作码等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可被定义为具有指令格式的字段(所包括的字段通常在相同的阶中,但是至少一些字段具有不同的位位置,因为包括更少的字段)的不同子集,和/或被定义为具有不同解释的给定字段。由此,ISA的每一指令使用给定指令格式(并且如果定义,则在该指令格式的指令模板的给定一个中)来表达,并且包括用于指定操作和操作码的字段。例如,示例性ADD指令具有专用操作码以及包括指定该操作码的操作码字段和选择操作数的操作数字段(源I/目的地以及源2)的指令格式,并且该ADD指令在指令流中的出现将具有选择专用操作数的操作数字段中的专用内容。
[0006]科学、金融、自动向量化的通用,RMS(识别、挖掘以及合成),以及可视和多媒体应用程序(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)常常需要对大量的数据项执行相同操作(被称为“数据并行性”)。单指令多数据(SIMD)是指使处理器对多个数据项执行操作的一种指令。SMD技术特别适于能够在逻辑上将寄存器中的比特分割为若干个固定大小的数据元素的处理器,每一个元素都表示单独的值。例如,256比特寄存器中的比特可以被指定为四个单独的64比特打包的数据元素(四字(Q)大小的数据元素),八个单独的32比特打包的数据元素(双字(D)大小的数据元素),十六单独的16比特打包的数据元素(一字(W)大小的数据元素),或三十二个单独的8比特数据元素(字节(B)大小的数据元素)来被操作的源操作数。这种类型的数据被称为打包的数据类型或向量数据类型,这种数据类型的操作数被称为打包的数据操作数或向量操作数。换句话说,打包数据项或向量指的是打包数据元素的序列,并且打包数据操作数或向量操作数是SIMD指令(也称为打包数据指令或向量指令)的源操作数或目的地操作数。
[0007]作为示例,一种类型的SIMD指令指定要以垂直方式对两个源向量操作数执行的单个向量操作,以利用相同数量的数据元素,以相同数据元素顺序,生成相同大小的目的地向量操作数(也称为结果向量操作数)。源向量操作数中的数据元素被称为源数据元素,而目的地向量操作数中的数据元素被称为目的地或结果数据元素。这些源向量操作数是相同大小,并包含相同宽度的数据元素,如此,它们包含相同数量的数据元素。两个源向量操作数中的相同位位置中的源数据元素形成数据元素对(也称为相对应的数据元素;即,每个源操作数的数据元素位置O中的数据元素相对应,每个源操作数的数据元素位置I中的数据元素相对应,等等)。由该SIMD指令所指定的操作分别地对这些源数据元素对中的每一对执行,以生成匹配的数量的结果数据元素,如此,每一对源数据元素都具有对应的结果数据元素。由于操作是垂直的并且由于结果向量操作数大小相同,具有相同数量的数据元素,并且结果数据元素与源向量操作数以相同数据元素顺序来存储,因此,结果数据元素与源向量操作数中的它们的对应的源数据元素对处于结果向量操作数的相同比特位置。除此示例性类型的SMD指令之外,还有各种其他类型的SMD指令(例如,只有一个或具有两个以上的源向量操作数的;以水平方式操作的;生成不同大小的结果向量操作数的,具有不同大小的数据元素的,和/或具有不同的数据元素顺序的)。应该理解,术语目的地向量操作数(或目的地操作数)被定义为执行由指令所指定的操作的直接结果,包括将该目的地操作数存储在某一位置(寄存器或在由该指令所指定的存储器地址),以便它可以作为源操作数由另一指令访问(由另一指令指定该同一个位置)。
[0008]诸如由具有包括x86、MMX?、流式 SMD 扩展(SSE)、SSE2、SSE3、SSE4.1 以及 SSE4.2指令的指令集的Intel? Core?处理器使用的技术之类的SMD技术,在应用程序性能方面实现了大大的改善。已经发布和/或公布了涉及高级向量扩展(AVX) (AVX1和AVX2)且使用向量扩展(VEX)编码方案的附加SIMD扩展集(例如,参见2011年10月的Intel? 64和IA-32架构软件开发手册,并且参见2011年6月的Intel?高级向量扩展编程参考)。
[0009]与本发明的实施例有关的背景
[0010]当间接访问存储器(诸如A[B[i]])时,仅在运行时知晓实际存储器地址。结果,编译器不能区分消除对相同地址的读取或写入的歧义。结果,编译器常常无法将具有间接存储器读取和写入的循环向量化,诸如以下示例循环:
[0011]for (i = O ;i < N ;i++) {
[0012]A[B[i]] = A[D[i]];
[0013]}
[0014]在此示例中,存储器A[B[i]]和A[D[j]]对于落在向量内的特定索引对(i,j)而言是交迭的。例如,如果i = 10时的A[D[i]]引用由i = 8时的A[B[i]]所指向的相同地址,则迭代8和10不能被同时地执行,或者对于i = 10,不能读取过期数据,从而造成不正确的结果。这导致写后读(a readafter-write)相关冒险。类似地,也可能存在阻碍向量化的与后与、或读后与相关冒险。与后与冒险在以下不例中不出:
[0015]

【权利要求】
1.一种用于检测向量寄存器内的相同元素的处理器,包括所述处理器用于执行一个或多个指令,所述指令用于执行以下操作: 从第一向量寄存器读取每个活跃元素,每个活跃元素具有所述第一向量寄存器内的所定义比特位置; 从第二向量寄存器读取每个元素,每个元素具有所述第二向量寄存器内与所述第一向量寄存器中的当前活跃元素的比特位置相对应的所定义比特位置; 读取输入掩码寄存器,所述输入掩码寄存器标识所述第二向量寄存器中将针对其作出与所述第一向量寄存器中的值的比较的活跃比特位置,所述比较操作包括: 将所述第二向量寄存器中的每个活跃元素与所述第一向量寄存器中比特位置在所述第二向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较;以及 如果所述第一向量寄存器中的所有所述在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值。
2.如权利要求1所述的处理器,其特征在于,响应于所述一个或多个指令的执行而执行以下附加操作: 如果所述第一向量寄存器中的所有所述在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中 的比特,则将所述输出掩码寄存器中的比特位置设为等于假值。
3.如权利要求1所述的处理器,其特征在于,响应于所述一个或多个指令的执行而执行以下附加操作: 如果所述输入掩码寄存器中的相应比特位置中的比特具有假值,则将所述输出掩码寄存器中的比特位置设为等于假值。
4.如权利要求3所述的处理器,其特征在于,响应于所述一个或多个指令的执行而执行以下附加操作: 仅当所述输入掩码寄存器中与所述第二向量寄存器中的所述当前活跃元素中的所述比特位置相对应的比特位置中的比特等于真值时,执行所述比较操作。
5.如权利要求1所述的处理器,其特征在于,响应于所述一个或多个指令的执行而执行以下附加操作: 使用来自所述输出掩码寄存器的最终值集合来向量化程序代码的循环。
6.一种用于检测向量寄存器内的相同元素的方法,包括以下操作: 从第一向量寄存器读取每个活跃元素,每个活跃元素具有所述第一向量寄存器内的所定义比特位置; 从第二向量寄存器读取每个元素,每个元素具有所述第二向量寄存器内与所述第一向量寄存器中的当前活跃元素的比特位置相对应的所定义比特位置; 读取输入掩码寄存器,所述输入掩码寄存器标识所述第二向量寄存器中将针对其作出与所述第一向量寄存器中的值的比较的活跃比特位置,所述比较操作包括: 将所述第二向量寄存器中的每个活跃元素与所述第一向量寄存器中比特位置在所述第二向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较;以及 如果所述第一向量寄存器中的所有所述在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值。
7.如权利要求6所述的方法,其特征在于,还包括: 如果所述第一向量寄存器中的所有所述在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将所述输出掩码寄存器中的比特位置设为等于假值。
8.如权利要求6所述的方法,其特征在于,还包括: 如果所述输入掩码寄存器中的相应比特位置中的比特具有假值,则将所述输出掩码寄存器中的比特位置设为等于假值。
9.如权利要求8所述的方法,其特征在于,还包括: 仅当所述输入掩码寄存器中与所述第二向量寄存器中的所述当前活跃元素中的所述比特位置相对应的比特位置中的比特等于真值时,执行所述比较操作。
10.如权利要求6所述的方法,其特征在于,还包括: 使用来自所述输出掩码寄存器的最终值集合来向量化程序代码的循环。
11.一种计算机系统,包括: 用于存储程序指令和数据的存储器; 用于检测向量寄存器 内的相同元素的处理器,所述处理器用于执行程序代码的一个或多个指令,所述指令用于执行以下操作: 从第一向量寄存器读取每个活跃元素,每个活跃元素具有所述第一向量寄存器内的所定义比特位置; 从第二向量寄存器读取每个元素,每个元素具有所述第二向量寄存器内与所述第一向量寄存器中的当前活跃元素的比特位置相对应的所定义比特位置; 读取输入掩码寄存器,所述输入掩码寄存器标识所述第二向量寄存器中将针对其作出与所述第一向量寄存器中的值的比较的活跃比特位置,所述比较操作包括: 将所述第二向量寄存器中的每个活跃元素与所述第一向量寄存器中比特位置在所述第二向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较;以及 如果所述第一向量寄存器中的所有所述在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值。
12.如权利要求11所述计算机系统,其特征在于,所述处理器响应于所述一个或多个指令的执行而执行以下附加操作: 如果所述第一向量寄存器中的所有所述在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将所述输出掩码寄存器中的比特位置设为等于假值。
13.如权利要求11所述计算机系统,其特征在于,所述处理器响应于所述一个或多个指令的执行而执行以下附加操作: 如果所述输入掩码寄存器中的相应比特位置中的比特具有假值,则将所述输出掩码寄存器中的比特位置设为等于假值。
14.如权利要求13所述计算机系统,其特征在于,所述处理器响应于所述一个或多个指令的执行而执行以下附加操作: 仅当所述输入掩码寄存器中与所述第二向量寄存器中的所述当前活跃元素中的所述比特位置相对应的比特位置中的比特等于真值时,执行所述比较操作。
15.如权利要求11所述计算机系统,其特征在于,所述处理器响应于所述一个或多个指令的执行而执行以下附加操作: 使用来自所述输出掩码寄存器的最终值集合来向量化程序代码的循环。
16.如权利要求1所述的计算机系统,其特征在于,还包括: 显示适配器,用于响应于所述处理器对所述程序代码的执行而呈现图形图像。
17.如权利要求16所述的计算机系统,其特征在于,还包括: 用户输入界面,用于从用户输入设备接收控制信号,所述处理器响应于所述控制信号执行所述程序代码。
18.一种用于检测向量寄存器内的相同元素的方法,包括以下操作: 从第一向量寄存器读取每个活跃元素,每个活跃元素具有所述第一向量寄存器内的所定义比特位置; 从第二向量寄存器读取每个元素,每个元素具有所述第二向量寄存器内的所定义比特位置; 读取输入掩码寄 存器,所述输入掩码寄存器标识所述第二向量寄存器中将针对其作出与所述第一向量寄存器中的值的比较的活跃比特位置,以及所述第一向量寄存器中将针对其作出与所述第二向量寄存器中的值的比较的活跃比特位置,所述比较操作包括: 将所述第二向量寄存器中的每个活跃元素与所述第一向量寄存器中比特位置等于以及在所述第二向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较; 将所述第一向量寄存器中的每个活跃元素与所述第二向量寄存器中比特位置等于以及在所述第一向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较; 如果所述第一向量寄存器中的所有相等以及在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,并且所述第一向量寄存器中的所有相等以及在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值。
19.如权利要求18所述的方法,其特征在于,还包括: 如果所述第一向量寄存器中的所有相等以及在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,并且所述第一向量寄存器中的所有相等以及在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于假值。
20.如权利要求18所述的方法,其特征在于,还包括: 如果所述输入掩码寄存器中的相应比特位置中的比特具有假值,则将所述输出掩码寄存器中的比特位置设为等于假值。
21.如权利要求20所述的方法,其特征在于,还包括: 仅当所述输入掩码寄存器中与所述第二向量寄存器中的所述当前活跃元素中的所述比特位置相对应的比特位置中的比特等于真值时,执行所述比较操作。
22.如权利要求18所述的方法,其特征在于,还包括: 使用来自所述输出掩码寄存器的最终值集合来向量化程序代码的循环。
23.一种用于检测向量寄存器内的相同元素的设备,包括: 用于从第一向量寄存器读取每个活跃元素的装置,每个活跃元素具有所述第一向量寄存器内的所定义比特位置; 用于从第二向量寄存器读取每个元素的装置,每个元素具有所述第二向量寄存器内与所述第一向量寄存器中的当前活跃元素的比特位置相对应的所定义比特位置; 用于读取输入掩码寄存器的装置,所述输入掩码寄存器标识所述第二向量寄存器中将针对其作出与所述第一向量寄存器中的值的比较的活跃比特位置,所述比较操作包括:用于将所述第二向量寄存器中的每个活跃元素与所述第一向量寄存器中比特位置在所述第二向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较的装置;以及 用于如果所述第一向量寄存器中的所有所述在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值的>J-U ρ?α装直。
24.如权利要求23所述的方法,其特征在于,还包括: 用于如果所述第一向量寄存器中的所有所述在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将所述输出掩码寄存器中的比特位置设为等于假值的装置。
25.如权利要求23所述的方法,其特征在于,还包括: 用于如果所述输入掩码寄存器中的相应比特位置中的比特具有假值,则将所述输出掩码寄存器中的比特位置设为等于假值的装置。
26.如权利要求25所述的方法,其特征在于,所述用于比较的装置仅当所述输入掩码寄存器中与所述第二向量寄存器中的所述当前活跃元素中的所述比特位置相对应的比特位置中的比特等于真值时进行比较。
27.如权利要求23所述的方法,其特征在于,还包括: 用于使用来自所述输出掩码寄存器的最终值集合来向量化程序代码的循环的装置。
28.一种用于检测向量寄存器内的相同元素的设备,包括: 用于从第一向量寄存器读取每个活跃元素的装置,每个活跃元素具有所述第一向量寄存器内的所定义比特位置; 用于从第二向量寄存器读取每个元素的装置,每个元素具有所述第二向量寄存器内的所定义比特位置; 用于读取输入掩码寄存器的装置,所述输入掩码寄存器标识所述第二向量寄存器中将针对其作出与所述第一向量寄存器中的值的比较的活跃比特位置,以及所述第一向量寄存器中将针对其作出与所述第二向量寄存器中的值的比较的活跃比特位置,所述比较操作包括: 用于将所述第二向量寄存器中的每个活跃元素与所述第一向量寄存器中比特位置等于以及在所述第二向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较的装置; 用于将所述第一向量寄存器中的每个活跃元素与所述第二向量寄存器中比特位置等于以及在所述第一向量寄存器中的所述当前活跃元素的所述比特位置之前的元素作比较的装置; 用于如果所述第一向量寄存器中的所有相等以及在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,并且所述第一向量寄存器中的所有相等以及在前比特位置等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于真值的装置。
29.如权利要求28所述的方法,其特征在于,还包括: 用于如果所述第一向量寄存器中的所有相等以及在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,并且所述第一向量寄存器中的所有相等以及在前比特位置不等于所述第二向量寄存器中的所述当前活跃比特位置中的比特,则将输出掩码寄存器中的比特位置设为等于假值的装置。
30.如权利要求28所述的方法,其特征在于,还包括: 用于如果所述输入掩码寄存器中的相应比特位置中的比特具有假值,则将所述输出掩码寄存器中的比特位置设为等于假值的装置。
31.如权利要求30所述的方法,其特征在于,所述用于比较的装置仅当所述输入掩码寄存器中与所述第二向量寄存器中的所述当前活跃元素中的所述比特位置相对应的比特位置中的比特等于真值时进行比较。
32.如权利要求28所述的方法,其特征在于,还包括: 用于使用来自所述输出掩码寄存器的最终值集合来向量化程序代码的循环的装置。
【文档编号】G06F9/30GK104081336SQ201180075862
【公开日】2014年10月1日 申请日期:2011年12月23日 优先权日:2011年12月23日
【发明者】V·W·李, D·金, T-F·奈, J·巴拉德瓦杰, A·哈特诺, S·S·巴格索克希, N·万苏德范 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1