向量化多条输入指令的方法和装置的制作方法

文档序号:6656292阅读:184来源:国知局
专利名称:向量化多条输入指令的方法和装置的制作方法
背景技术
计算机系统的中央处理单元(CPU)可以包括用于并行处理指令的多个功能执行单元。这些指令包括单指令多数据(SIMD)指令。SIMD指令可以对多个数据并行地执行公用操作。这样,SIMD指令允许CPU同时执行多次迭代计算以减少总执行时间。SIMD操作的使用在诸如音频和图像处理等多媒体应用中效率很高。
附图简述在说明书的结论部分中特别指出并明确声明了本发明的主题。然而,通过参考随后的详细描述并结合阅读附图可以最佳地理解关于组织和操作方法的本发明及其目的、特征和优点,附图中

图1是根据本发明一个示例性实施例的计算机系统的框图;以及图2是根据本发明一个示例性实施例的优化程序单元的框图;图3是根据本发明一个示例性实施例的有助于描述一种将指令转换成SIMD指令的方法的示例性依赖关系树的图示;图4是根据本发明一个示例性实施例的有助于描述向量化操作的表格的图示;以及图5是根据本发明另一个示例性实施例的有助于描述向量化操作的表格的图示。
可以理解,为了图示的简明和简单,在图中示出的元件不必按比例画出。例如,为了描述清楚,某些元件的尺寸可相对于其他元件加以放大。此外,在认为适当的任何情况下,可以在各图中重复参考标号以指明对应或类似的元件。
本发明的详细描述在以下详细描述中,陈述了众多具体细节以提供对本发明的全面理解。然而,本领域的普通技术人员应该理解,无需这些具体细节也可实践本发明。在其他实例中,未对公知的方法、过程、组件和电路做出详尽描述从而防止淡化了本发明的主题。
将按照计算机存储器内对数据位或二进制数字信号的操作的算法和符号表示来呈现以下详细描述的某些部分。这些算法描述和表示可由数据处理技术领域的普通技术人员用于将他们的工作实质传达给该领域的其他普通技术人员。
除非特别指出,否则如从随后的讨论中可以显见,本说明通篇使用的诸如“处理”、“计算”、“运算”、“确定”之类的术语涉及计算机或计算机系统,或者类似的数据处理设备的动作和/或进程,这些设备将计算机系统的寄存器和/或存储器内由物理(例如,电子)量表示的数据处理和/或变换成计算机系统存储器、寄存器或其他信息存储、传输或显示设备内类似地表示为物理量的其他数据。此外,在说明书中通篇可使用术语“多个”来描述两个或更多的组件、设备、元件和参数等。例如,“多个指令”描述两个或更多指令。
应该理解,术语SIMD化(SIMDification)或向量化是同义术语,它们指的是将可在一起调度来执行并且需要诸如寄存器和功能单元之类的执行资源的操作合并成单个SIMD指令的过程。虽然本发明的范围不限于这一方面,但为描述的简明和简单起见,将使用术语向量化来描述将可在一起调度来执行并需要类似的执行资源的操作进行合并的过程。
应该理解,可以在各种应用中使用本发明。虽然本发明在这一方面不受限制,但是在此公开的电路和技术可以在诸如计算机系统、处理器或CPU之类的多中装置中使用。旨在包括在本发明范围之内的处理器仅作为示例包括精简指令集计算机(RISC)、具有流水线的处理器以及复杂指令集计算机(CISC)等等。
本发明的某些实施例可以例如通过使用可存储有一条指令或一组指令的机器可读介质或制品来实现,其中该指令在被一机器(例如,被处理器和/或被其他合适的机器)执行之后会使该机器执行根据本发明实施例的方法和/或操作。这一机器例如可以包括任何合适的处理平台、计算平台、计算设备、处理设备、计算系统、处理系统、计算机、处理器等等,并且可以使用硬件和/或软件的任何合适的组合来实现。机器可读介质或制品例如可以包括任何合适类型的存储器单元、存储器设备、存储器制品、存储器介质、存储设备、存储制品、存储介质和/或存储单元,诸如存储器、可移动或不可移动介质、可擦除或不可擦除介质、可写或可重写介质、数字或模拟介质、硬盘、软盘、致密盘只读存储器(CD-ROM)、可记录致密盘(CD-R)、可重写致密盘(CD-RW)、光盘、磁性介质、各类数字通用盘(DVD)、磁带、磁带盒等等。这些指令可以包括任何合适种类的代码,例如源代码、编译码、解释码、可执行码、静态码、动态码等等,并且可以使用诸如C、C++、Java、BASIC、Pascal、Fortran、Cobol、汇编语言或机器码之类的任何合适的高级、低级、面向对象的、可视的、编译的和/或解释性的编程语言来实现。
现转向图1,示出了根据本发明一个示例性实施例的计算机系统100的框图。虽然本发明的范围在这一方面不受限制,但是计算机系统100可以是个人计算机(PC)、个人数字助理(PDA)、互联网设备、蜂窝电话或任何其他计算设备。在一个示例中,计算机系统100可以包括由电源120供电的主处理单元110。在本发明的实施例中,主处理单元110可以包括通过系统互连135电耦合至存储器设备140以及一个或多个接口电路150的多处理单元130。例如,系统互连135若有需要可以是地址/数据总线。应该理解,可以使用除总线之外的其他互连来将多处理单元130连接到存储器设备140。例如,一条或多条专用线路和/或交叉开关(crossbar)可用于将多处理单元130连接到存储器设备140。
根据本发明的某些实施例,多处理单元130可以包括任何类型的处理单元,诸如来自IntelPentiumTM微处理器系列、IntelItaniumTM微处理器系列和/或IntelXScaleTM处理器系列的处理器。此外,多处理130还可以包括诸如静态随机存取存储器(SRAM)之类的任何类型的高速缓冲存储器。存储器设备140可以包括动态随机存取存储器(DRAM)、非易失性存储器等。在一个实施例中,存储器设备140若有需要可以存储将由多处理130执行的软件程序。
虽然本发明的范围在这一方面不受限制,但是一个或多个接口电路110可以包括以太网接口和/或通用串行总线(USB)接口和/或类似物。在本发明的某些示例性实施例中,一个或多个输入设备160可以连接至接口电路150,用于将数据和命令键入主处理单元110。例如,输入设备160可以包括键盘、鼠标、触摸屏、跟踪板、跟踪球、Isopoint、语音识别系统和/或类似物。
虽然本发明的范围在这一方面不受限制,但是输出设备170可以经由一个或多个接口电路160可操作地耦合至主处理单元110,并且若有需要可以包括一个或多个显示器、打印机、扬声器和/或其他输出设备。例如,一种输出设备可以是显示器。显示器可以是阴极射线管(CRT)、液晶显示器(LCD)或任何其他类型的显示器。
虽然本发明的范围在这一方面不受限制,但是计算机系统100可以包括一个或多个存储设备180。例如,计算机系统100若有需要可以包括一个或多个硬盘驱动器、一个或多个致密盘(CD)驱动器、一个或多个数字通用盘驱动器(DVD)和/或其他计算机介质输入/输出(I/O)设备。
虽然本发明的范围在这一方面不受限制,但是计算机系统100可以经由与网络190的连接与其他设备交换数据。网络连接可以是任何类型的网络连接,诸如以太网连接、数字用户线(DSL)、电话线、同轴电缆等等。网络190可以是任何类型的网络,诸如因特网、电话网、电缆网、无线网和/或类似物。
虽然本发明的范围在这一方面不受限制,但是在本发明的这一示例性实施例中,多处理单元130可以包括优化单元200。根据本发明的实施例,优化单元200可以执行在一踪迹(trace)内搜索两个或多个候选指令的过程。此外,优化单元200可以依据踪迹依赖关系树的深度将两条或多条候选指令合并成一条SIMD指令。在本发明的某些实施例中,候选指令可以包括能被包括在SIMD指令内的相似和/或相同类型的操作码。例如,优化单元200可以基于候选指令的依赖关系的深度来搜索执行类似操作的候选指令。根据本发明的实施例,优化单元200可以在需要时将至少某些候选指令合并成SIMD指令。虽然本发明的范围在这一方面不受限制,但是应该理解,可以用软件、硬件或者软件和硬件的任何合适组合来实现优化单元200。
转向图2,示出了根据本发明一个示例性实施例的图1中的优化单元200的框图。虽然本发明的范围在这一方面不受限制,但是优化单元200可以包括输入踪迹缓冲器210、序列发生器220、向量化单元230和输出踪迹缓冲器240。虽然本发明的范围在这一方面不受限制,但是在本发明的某些示例性实施例中,向量化单元230可以包括第一(1st)级232、第二(2nd)级234以及例如高速缓冲存储器的存储器236。
虽然本发明的范围在这一方面不受限制,但是输入踪迹缓冲器210可以接收包括操作(op)码的指令踪迹。在本发明的某些实施例中,序列发生器220可以从输入跟踪缓冲器210中拉出指令,并能把操作码和/或指令踪迹(例如,序列)提供给向量化单元230。例如,一条指令可以包括至少两类操作,即诸如LOAD、STORE之类的存储器操作以及诸如ADD、SUBTRACT、MULT、SHIFT、AND之类的算术操作。此外,该指令可以包括诸如寄存器和/或常量等输入值和输出值。
根据本发明的一个实施例,向量化单元230可以接收来自序列发生器220的踪迹,并基于踪迹依赖关系来搜索候选指令。在本发明的某些实施例中,1st级232可以处理接收自序列发生器220的op码。例如,该踪迹的指令和/或op码可以被转换成单静态赋值(SSA)格式。在SSA格式中,在该踪迹中仅写一次寄存器,并且重命名过程可以引入“虚拟”寄存器名以满足SSA条件。程序代码,诸如以常规指令集体系结构编写的程序代码,可以为两个源寄存器提供相同的名字以作为同一寄存器,虽然本发明的范围在这一方面并不受限制。
虽然本发明的范围在这一方面不受限制,但是1st级232可以通过在依赖关系树中放置指令来搜索用于向量化的候选指令。
转向图3,示出了根据本发明一个示例性实施例的有助于描述一种生成SIMD指令的方法的示例性依赖关系树300的图示。虽然本发明的范围在这一方面不受限制,但是依赖关系树300可以包括位于不同高度的指令。依赖关系树300的一层可以包括处于相同高度的指令。第一层310可以包括指令312和314,第二层320可以包括指令322,第三层330可以包括指令332和334,而第四层340可以包括指令342,虽然本发明的范围在这一方面决不受限制。此外,可以根据从依赖关系树300的第一高度310到最后高度340的距离(例如,由层与层之间的箭头示出的距离)来计算依赖关系树300的深度。
回到图2,虽然本发明的范围在这一方面不受限制,但是1st级232可以在存储器236内存储用于向量化的候选指令。根据本发明的实施例,2nd级234可以在存储器236中搜索具有相同或类似层的相似op码,并可以生成SIMD指令。此外,2nd级232可以用SIMD指令代替原始踪迹指令,并且在输出踪迹缓冲器240中存储该SIMD指令。
虽然本发明的范围在这一方面不受限制,但是可以通过示例性类C伪码算法来描述优化单元200的1st级232和2nd级。
虽然本发明的范围在这一方面不受限制,但是示例性类C伪码算法的第一部分可以定义常量、变量结构等等。
例如,踪迹内指令的最大个数可以被定义为const MAX_TRACE_SIZB指令源的最大个数可被定义为const MAX_SOURCES指令目的地的源的最大个数可被定义为const MAX_DEST踪迹范围和内部缓冲区大小可被定义为rangedef
inst_index_rangeinst_index_rangeM,N根据该示例性类C伪码算法,一个指令结构可以包括源寄存器、op码、目的地寄存器以及可以指示该指令是否适用于向量化的布尔变量。该指令结构可以被定义为Structure instruction_type{source_type[MAX_SOURCES] sourcesdestination_type[MAX-DEST] destinationsoperation_type operationBoolean valid}根据该示例性类C伪码算法,踪迹可被定义为由MAX_TRACE_SIZE项的向量表示的至多MAX_TRACE_SIZE条指令的序列。此外,可以使用二维(2D)踪迹依赖关系位图来指示该踪迹的指令的有效性。如果该踪迹中实际的指令个数是INITIAL_TRACE_SIZE,则只有前INITIAL-TRACE_SIZE项有效。
Inst_index_range INITIAL_TRACE_SIZEInstruction_type trace[MAX_TRACE_SIZE]Booleandependent[MAX_TRACE_SIZE,MAX_TRACE_SIZE]根据该示例性类C伪码算法,可被存储在存储器236内的SIMD矩阵可包括操作码,并具有M个op码位置的N行(例如,总共NxMxlog(MAX_TRACE_SIZE)位)。
Structure entry_type{
Boolean validinst_index_rangeloc}entry_type simd_t[N][M]虽然本发明的范围在这一方面不受限制,但是在此示例性算法中,优化单元200的1st级232可以通过以升序迭代踪迹中的各指令来搜索该踪迹中的候选指令。1st级232可以比较可在重命名过程期间构造的trace[i]的全部前导组。此外,1st级232可以通过计算trace[i]的依赖关系高度(例如,层)来标记依赖关系树(例如,依赖关系树300)内的指令高度,及其最早的潜在调度位置。
For i=0到INITIAL_TRACE_SIZE-1Predecessors={j|j&lt;i AND dependent[i,j]}Height←0EarliestLocation←0For Predecessors中的每一pHeight←max(Height,Height[p])+1EarliestLocation←max(EarliestLocation,p)End forHeight[i]←Height虽然本发明的范围在这一方面不受限制,但是在此示例性类C伪码算法中,2nd级234可以在存储器236(例如,矩阵SIMD)中搜索适用于向量化的指令。例如,合适的指令可以是处于相同的依赖关系树高度(例如,层)的更年长指令trace[j]。此外,2nd级236可以生成SIMD指令,并可如下所示使用该SIMD指令来代替原始指令<pre listing-type="program-listing"><![CDATA[j←-1op_type=trace[i].typeFor m←0到M-1If(simd<op_type>[Height][m].valid==true)&amp;amp;&amp;amp;(simd<op_type>[Height][m].loc>EarliestLocation)&amp;amp;&amp;amp;(满足其它约束)thenj=simd<op_type>[Height][m]BreakEnd ifEnd forIf(j==-1)then 将i分配到simd<op_type>[Height]Else trace[j]←Vectrozation(trace[j],trace[i]) trace[i].valid←false//通过用对trace[j]的引用代替每个对trace[i]的引用来更新依赖关系//行向量操作 dependent[j][*]←dependent[i][*] | dependent[j][*]//列向量操作 dependent[*][j]←dependent[*][i] | dependent[*][j]End if End for]]></pre>根据本发明的某些实施例,优化单元200可以依据访问一个存储器的两条指令在它们访问连续的存储器地址的情况下可以被组合成单个SIMD指令的规则来生成SIMD指令。即,可以从它们的存储器地址以及相应的数据宽度中算出由两条指令访问的数据是相邻的(至少在虚拟存储器空间内)。例如,在包括如下指令的踪迹中1.从ESP+4中LOAD 4字节2.从ESP+12中LOAD 4字节3.从ESP+8中LOAD 4字节这些指令可以被组合成单个SIMD指令若有需要,从ESP+4中LOAD 12字节现转向图4,图中示出了表400。虽然本发明的范围在这一方面不受限制,但表400可包括示出指令在依赖关系树(例如,依赖关系树300)中所在层的层列、示出由输入踪迹缓冲器210和序列发生器220提供的原始指令的原始踪迹列、以及示出位于输出踪迹缓冲器240的指令的向量化之后的踪迹。表400的行示出了一指令的所在层、原始指令和向量化后指令。
虽然本发明的范围在这一方面不受限制,但是优化单元200可以标记踪迹依赖关系图(例如,踪迹的指令高度)的深度。此外,根据表400,优化单元200可以将处于同一层(例如,层2)的EAX←LOAD(ESF,4)和EBX←LOAD(ESP,8)指令标识为用于向量化的候选指令,并且若有需要可将候选指令组合成SIMD指令EAX,EBX←SIMD_LOAD(ESV,4)。虽然本发明的范围在这一方面不受限制,但是优化单元200可以通过遵循具有共同操作(例如,LOAD)并处于踪迹依赖关系图的同一深度(例如,高度)的两条指令在它们的非常量(即,寄存器)源相似和/或常量或直接源不同的情况下进而被组合成单个SIMD指令(例如,SIMD_LOAD)的规则来生成SIMD指令。
转向图5,图中示出了根据本发明另一个示例性实施例的表500。虽然本发明的范围在这一方面不受限制,但是表500可以包括示出原始指令在依赖关系树(例如,依赖关系树300)中所处层的层列、示出可由输入踪迹缓冲器210和序列发生器220提供的原始指令的原始踪迹列、示出基本变换(例如,SSA)之后指令所在层的层列、示出变换之后的指令的列、以及示出在输出踪迹缓冲器240处向量化之后的一踪迹内的指令的列。表500的行示出了指令的层、基本变换之后指令的原始指令层、基本变换后的指令以及向量化之后的指令。
虽然本发明的范围在这一方面不受限制,但是根据示例性表500,优化单元200可以标记踪迹内的原始指令高度。优化单元200可以将踪迹的指令变换成例如SSA格式。优化单元200例如可以通过使用被变换成SSA格式的踪迹来变换该踪迹的指令。优化单元200可以将同一层的已变换指令标记为用于向量化的候选指令,例如EAX_1←LOAD(ESI+4,0),EAX←LOAD(ESI+8,0)以及ASSERT EAX_1 1,ASSERT EAX 1,并且可以将它们分别组合成SIMD指令EAX,EAX_1←SIMD_LOAD(EST+4,0)和SIMD_ASSERT(EAX_1 ,EAX 1)。
虽然在此示出并描述了本发明的某些特征,但是本领域普通技术人员可以领悟许多修改、代替、改变和等效技术方案,因此,应该理解,所附权利要求书意欲覆盖所有这些落在本发明的真正精神之内的修改和变换。
权利要求
1.一种装置,包括优化单元,用于搜索一踪迹内的两条或多条候选指令,并且根据踪迹依赖性的深度和所述两条或多条候选指令的共同操作码将所述两条或多条候选指令合并成一带多数据的单指令。
2.如权利要求1所述的装置,其特征在于,所述共同操作码是从由存储器操作码和算法操作码所组成的组中选出的。
3.如权利要求1所述的装置,其特征在于,所述优化单元包括根据所述踪迹依赖关系的深度和所述共同操作码搜索所述两条或多条候选指令的第一级;存储所述候选指令的高速缓冲存储器;以及将所述两条或多条候选指令组合成所述带多数据的单指令的第二级。
4.如权利要求1所述的装置,其特征在于,所述优化单元能够组合访问连续存储器地址的所述两条或多条候选指令。
5.如权利要求1所述的装置,其特征在于,所述优化单元能够将所述踪迹指令变换成期望的格式。
6.如权利要求5所述的装置,其特征在于,所述期望格式是单静态赋值格式。
7.一种方法,包括搜索一踪迹内的两条或多条候选指令;以及根据踪迹依赖关系的深度和所述两条或多条候选指令的共同操作码将所述两条或多条候选指令合并成一带多数据的单指令(SIMD)。
8.如权利要求7所述的方法,其特征在于,包括从由存储器操作码和算法操作码所组成的组中选择所述共同操作码。
9.如权利要求7所述的方法,其特征在于,包括组合访问连续存储器地址的所述两条或多条候选指令。
10.如权利要求7所述的方法,其特征在于,所述合并包括将所述踪迹的指令变换成期望的格式。
11.一种系统,包括总线;耦合至总线的存储器设备;以及包括一优化单元的处理器,所述优化单元搜索一踪迹内的两条或多条候选指令,并且根据踪迹依赖关系的深度和所述两条或多条候选指令的共同操作码将所述两条或多条候选指令合并成一带多数据的单指令。
12.如权利要求11所述的系统,其特征在于,所述共同操作码是从由存储器操作码和算法操作码所组成的组中选出的。
13.如权利要求11所述的系统,其特征在于,所述优化单元包括根据所述踪迹依赖关系的深度和所述共同操作码搜索所述两条或多条候选指令的第一级;存储所述候选指令的高速缓冲存储器;以及将所述两条或多条候选指令组合成所述带多数据的单指令的第二级。
14.如权利要求11所述的系统,其特征在于,所述优化单元能够组合访问连续存储器地址的所述两条或多条候选指令。
15.如权利要求1所述的装置,其特征在于,所述优化单元能够将所述踪迹指令变换成期望的格式。
16.如权利要求15所述的装置,其特征在于,所述期望格式是单静态赋值格式。
17.一种制品,包括其上存储有指令的存储介质,当所述指令被执行时,使得搜索一踪迹内的两条或多条候选指令;以及根据踪迹依赖关系的深度和所述两条或多条候选指令的共同操作码将所述两条或多条候选指令合并成一带多数据的单指令(SIMD)。
18.如权利要求17所述的制品,其特征在于,所述指令在被执行时使得从由存储器操作码和算法操作码所组成的组中选择所述共同操作码。
19.如权利要求17所述的制品,其特征在于,所述指令在被执行时使得组合访问连续存储器地址的所述两条或多条候选指令。
20.如权利要求17所述的制品,其特征在于,所述指令在被执行时使得将所述踪迹的指令变换成期望的格式。
全文摘要
简言之,一优化单元在一指令踪迹内搜索两条或多条候选指令,并且根据这两条或多条候选指令的踪迹依赖关系深度和共同操作码将这两条或多条候选指令合并成一带多数据的单指令(SIMD)。
文档编号G06F15/80GK1977241SQ200580021279
公开日2007年6月6日 申请日期2005年5月25日 优先权日2004年6月24日
发明者Y·阿尔莫格, R·罗斯纳, R·罗恩 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1