CN200310113082.2
2003.12.25
CN1577249A
2005.02.09
授权
有权
授权|||实质审查的生效|||公开
G06F7/52; G06F7/00
英特尔公司
威廉·W·小梅西; 辉·V·源
美国加利福尼亚州
2003.06.30 US 10/610,929
北京东方亿思专利代理有限责任公司
杜娟
本发明公开了一种用于执行符号和乘法运算的方法、装置和程序设备。在一个实施例中,一个装置包括执行第一指令的执行资源。响应于所述第一指令,所述执行资源向存储位置存储等于第一源操作数乘以第二源操作数的符号值的乘积的结果值。在一些实施例中,第一源操作数可以被该结果重写。
1. 一种装置,包括:存储位置;和执行资源,所述执行资源对第一操作数和第二操作数执行第一指令,并响应所述第一指令,向所述存储位置存储具有下述值的结果:如果所述第二操作数是正值,则该值为所述第一操作数;如果所述第二操作数是零,则该值为零;以及如果所述第二操作数是负值,则该值为所述第一操作数的负的形式。2. 根据权利要求1所述的装置,其中,所述第一操作数是第一组合型操作数,包括第一多个组合型数据元素,以及其中,所述第二操作数是第二组合型数据操作数,包括第二多个组合型数据元素,以及其中,所述结果包括第三多个组合型数据元素,所述第三多个组合型数据元素中的每一个设定为来自所述第一多个组合型数据元素的第一数据元素的带符号数值乘以所述第二多个组合型数据元素的相应数据元素的符号的积。3. 根据权利要求1所述的装置,其中,所述第一操作数是源/目的地操作数,其中,所述源目的地操作数取自所述存储位置用以计算所述结果并且被所述结果重写。4. 根据权利要求2所述的装置,其中,所述存储位置包括寄存器,以及其中,所述第二操作数是寄存器或存储器操作数之一。5. 根据权利要求4所述的装置,其中,所述第一操作数是寄存器操作数。6. 根据权利要求5所述的装置,其中,所述第一指令具有包括寄存器/存储器模式字段、操作码字段的指令格式。7. 根据权利要求5所述的装置,其中,所述第一指令具有这样的指令格式:其中操作数指定字节的位5到位3指定所述第一操作数,所述操作数指定字节的位2到位0指定所述第二操作数。8. 根据权利要求1所述的装置,其中,所述第一指令具有这样的指令格式:其中操作数指定字节的位5到位3指定所述第一操作数,所述操作数指定字节的位2到位0指定所述第二操作数。9. 根据权利要求1所述的装置,其中,所述第一指令是组合型的符号指令,以及其中,所述装置还包括:加法器电路;被耦合以向所述加法器电路提供第一输入的第一输入多路转换器,所述第一多路转换器在所述第一操作数和被求补的第一操作数之间选择;零检测器,响应于所述第二操作数输出选择信号;和被耦合以向所述加法器电路提供第二输入的第二输入多路转换器,所述第二多路转换器响应于对于所述指令的控制信号,在所述第二源操作数和零值之间选择。10. 根据权利要求9所述的装置,还包括:第三多路转换器,被耦合以接收所述第一源操作数、所述第二源操作数以及包括所述第一操作数的被求补的值的加法器输出;选择逻辑,用于基于所述第二操作数的大小和符号值,选择第一源操作数、第二操作数或所述加法器输出之中的一个,其中:如果所述第二操作数的所述大小是零,则所述选择逻辑引起所述第二操作数被选择;如果所述第二操作数的所述大小是非零值并且所述第二操作数的所述符号值为正,则所述选择逻辑引起所述第一操作数被选择;以及如果所述第二操作数的所述大小是非零值并且所述第二操作数的所述符号值为负,则所述选择逻辑引起所述加法器输出被选择。11. 根据权利要求6所述的装置,其中,所述执行资源包括:解码所述第一指令的解码器;用于整数运算的第一物理寄存器文件;第二物理寄存器文件,其中,所述源/目的地操作数指定在所述第二物理寄存器文件中的寄存器,其中,所述结果值是整数值。12. 根据权利要求11所述的装置,其中,所述第一指令是符号指令,以及其中,所述解码器将所述符号指令解码为由第一执行单元执行的符号微操作,所述第一执行单元是与整数执行单元分开的单元,所述整数执行单元执行多个标量整数运算,这些运算把结果存储在所述第一物理寄存器文件中。13. 根据权利要求1所述的装置,其中,所述第一指令是第一组合型数据指令,以及其中,所述结果包括第一多个结果组合型数据元素,所述第一结果组合型数据元素中的每一个具有一个值,该值等于多个第一源操作数数据元素中相应的一个乘以多个第二源操作数数据元素中相应的一个的相应符号值。14. 根据权利要求13所述的装置,其中,所述执行资源响应于第二指令,将向所述存储位置存储第二结果,所述第二结果包括第二多个结果组合型数据元素,所述第二多个结果组合型数据元素中的每一个是多个源组合型数据元素中相应的一个的绝对值。15. 根据权利要求1所述的装置,其中,所述装置采取在机器可读介质上的机器可读数据的形式,所述机器可读数据可制造或可模拟以提供所述装置。16. 一种处理器,包括:能够存储组合型数据元素的寄存器文件:和被耦合到所述寄存器文件并响应多个组合型数据指令在所述寄存器文件中存储值的执行单元,所述执行单元通过在所述寄存器文件中存储包括多个结果数据元素的结果来响应所述多个组合型数据指令中的第一个,其中,对于所述第一多个源数据元素和所述第二多个源数据元素的每一个的任何值,所述多个结果数据元素的所述每一个等于第一多个源数据元素的相应一个乘以第二多个源数据元素中相应一个的符号值。17. 根据权利要求16所述的处理器,其中,所述执行单元通过在所述寄存器文件中存储第二结果,来响应所述多个组合型数据指令的第二个,所述第二结果包括第二多个结果数据元素,其中,所述第二多个结果数据元素的所述每一个等于第三多个源数据元素的相应一个的绝对值。18. 根据权利要求17所述的处理器,其中,所述多个组合型数据指令的所述第一个是符号指令,以及,所述多个组合型数据指令的所述第二个是绝对值指令,以及,所述处理器还包括解码器以将所述符号指令解码为第一微操作并将所述绝对值指令解码为第二微操作。19. 根据权利要求16所述的处理器,还包括:用于接收输入的多路转换器,所述输入包括对于所述第一多个源数据元素的第一数据元素的第一值、对于所述第二多个源数据元素相应于所述第一数据元素的第二数据元素的第二值和对于所述第一多个源数据元素的所述第一数据元素的所述第一值的负形式的第三值;和输出选择逻辑,能够选择所述多路转换器输入中的一个作为对于相应于所述第一和第二数据元素的数据元素位置的符号运算结果来输出。20. 一种方法,包括:取指令,所述指令指定具有第一操作数符号和第一操作数大小的第一操作数以及具有第二操作数符号和第二操作数大小的第二操作数;判定如果所述第二操作数是零,则存储零作为所述指令的最后结果;以及判定如果所述第二操作数是非零,则存储具有等于所述第一大小的最后结果大小和最后结果符号的最后结果,所述最后结果符号是对于所述第二操作数大小的单元值和非单元值两者的所述第二操作数符号和所述第一操作数符号两者的函数。21. 根据权利要求20所述的方法,其中,所述第一操作数是第一组合型数据,它包括第一多个源数据元素,以及其中,所述第二操作数是第二组合型数据,它包括第二多个源数据元素,其中:如果对于所述第二操作数中的一个特定元素位置的数据元素值是正,则响应于所述指令,存储来自所述第一操作数的相应的数据元素的值,作为对于所述特定元素位置的结果;如果对于所述第二操作数中的所述特定元素位置的所述数据元素值是负,则存储等于用负1乘来自所述第一操作数的所述相应数据元素的所述值的值,作为对于所述特定元素位置的所述结果;如果对于所述第二操作数中的所述特定元素位置的所述数据元素值是零,则存储零作为对于所述特定元素位置的所述结果。22. 一种方法,包括:取指令,所述指令指定第一操作数和第二操作数;判定如果所述第二操作数是正,则响应于所述指令,存储所述第一操作数作为结果;判定如果所述第二操作数是负,则存储等于负1乘所述第一操作数的值作为所述指令的结果;以及判定如果所述第二操作数是零,则存储零作为所述指令的结果。23. 根据权利要求22所述的方法,其中,所述指令是组合型符号指令。24. 根据权利要求23所述的方法,其中,所述第一操作数和所述第二操作数分别是包括第一和第二多个数据元素的组合型数据操作数。25. 根据权利要求24所述的方法,还包括将所述组合型符号指令解码为第一微指令。26. 根据权利要求25所述的方法,其中,所述判定所述第二操作数包括计算所述第二操作数的每一单个数据元素。27. 一种系统,包括:存储器,存储第一组合型数据指令以及包括第一多个源数据元素的第一组合型数据和包括第二多个源数据元素的第二组合型数据;处理器,执行所述第一组合型数据指令,并在处理器存储位置相应地存储包括多个结果组合型数据元素的结果组合型数据,所述多个结果组合型数据元素的每一个,对于所述第二多个源数据元素的非零的元素,是所述第一多个源数据元素和所述第二多个源数据元素的相应元素的符号的函数,并且只是对于所述第二多个源数据元素的所述相应元素的单元值和非单元值的所述第一多个源数据元素的所述相应的一个的大小的函数。28. 根据权利要求27所述的系统,其中,所述第一组合型数据指令是组合型符号指令,该指令引起对于相应于所述第一多个源数据元素的数据元素位置的符号运算。29. 根据权利要求28所述的系统,其中,所述多个结果组合型数据元素重写存储了所述第一组合型数据的处理器存储位置。30. 一种包括机器可读介质的物品,所述物品可以被制造或者模拟以实现一种装置,所述装置包括:存储位置;和执行资源,所述执行资源对第一操作数和第二操作数执行第一指令,并响应所述第一指令,在所述存储位置存储具有下列值的结果:如果所述第二操作数是正值,则该值是所述第一操作数;如果第二操作数是零,则该值是零;以及如果第二操作数是负值,则该值是所述第一操作数的负的形式。31. 根据权利要求30所述的物品,其中,所述第一操作数是第一组合型操作数,包括第一多个组合型数据元素,以及其中,所述第二操作数是第二组合型数据操作数,包括第二多个组合型数据元素,以及其中,所述结果包括第三多个组合型数据元素,所述第三多个组合型数据元素中的每一个设定为来自所述第一多个组合型数据元素的第一数据元素的带符号数值乘以所述第二多个组合型数据元素的相应数据元素的符号的积。32. 根据权利要求30所述的物品,其中,所述第一操作数是源/目的地操作数,其中,所述源目的地操作数取自所述存储位置用以计算所述结果并且由所述结果被重写。33. 根据权利要求31所述的物品,其中,所述存储位置包括寄存器,以及其中,所述第二操作数是寄存器或存储器操作数之一。34. 根据权利要求31所述的物品,其中,所述第一指令具有包括寄存器/存储器模式字段、操作码字段的指令格式。35. 根据权利要求30所述的物品,其中,所述第一指令是组合型符号指令,以及其中,所述装置还包括:被耦合以向加法器电路提供第一输入的第一输入多路转换器,所述第一多路转换器在所述第一操作数和被求补的第一操作数之间选择;零检测器,响应于所述第二操作数输出选择信号;被耦合以向所述加法器电路提供第二输入的第二输入多路转换器,所述第二多路转换器响应于对于所述指令的控制信号,在所述第二源操作数和零值之间选择:第三多路转换器,被耦合以接收所述第一源操作数、所述第二源操作数以及包括所述第一操作数的被求补的值的加法器输出;选择逻辑,用于基于所述第二操作数的大小和符号值,选择第一源操作数、第二操作数或所述加法器输出之中的一个,其中:如果所述第二操作数的所述大小是零,则所述选择逻辑引起所述第二操作数被选择;如果所述第二操作数的所述大小是非零值并且所述第二操作数的所述符号值为正,则所述选择逻辑引起所述第一操作数被选择;以及如果所述第二操作数的所述大小是非零值并且所述第二操作数的所述符号值为负,则所述选择逻辑引起所述加法器输出被选择。36. 根据权利要求30所述的物品,其中,所述第一指令是第一组合型数据指令,以及其中,所述结果包括第一多个结果组合型数据元素,所述第一结果组合型数据元素的每一个具有一个值,该值等于多个第一源操作数数据元素的相应的一个乘以多个第二源操作数数据元素相应的一个的相应符号值。37. 一种装置,包括:存储位置;和执行资源,所述执行资源对第一操作数和第二操作数执行第一指令,所述第一操作数具有第一大小和第一操作数起始符号,所述第二操作数具有第二操作数符号,所述执行资源响应于所述第一指令,在所述存储位置中存储结果,如果所述第二操作数是正操作数,则所述结果具有所述第一大小和所述第一操作数起始符号;如果所述第二操作数是零操作数,则所述结果是零;如果所述第二操作数是负操作数,则所述结果具有所述第一大小和结果符号,所述结果符号是所述第一操作数起始符号乘以所述第二操作数符号的乘积。38. 根据权利要求37所述的装置,其中,所述第一操作数是第一组合型操作数,包括第一多个组合型数据元素,以及其中,所述第二操作数是第二组合型数据操作数,包括第二多个组合型数据元素,以及其中,所述结果包括第三多个组合型数据元素,所述第三多个组合型数据元素中的每一个设定为来自所述第一多个组合型数据元素的第一数据元素的带符号数值乘以所述第二多个组合型数据元素的相应数据元素的符号的积。39. 根据权利要求38所述的装置,其中,所述存储位置包括寄存器,以及其中,所述第二操作数是寄存器或存储器操作数之一。40. 根据权利要求39所述的装置,其中,所述第一指令具有包括寄存器/存储器模式字段、操作码字段的指令格式。41. 根据权利要求40所述的装置,其中,所述第一指令具有这样的指令格式:其中操作数指定字节的位5到位3指定所述第一操作数,所述操作数指定字节的位2到位0指定所述第二操作数。42. 一种装置,包括:存储位置;和执行资源,所述执行资源对具有第一多个数据元素的第一组合型操作数和具有第二多个数据元素的第二组合型操作数执行第一组合型指令,对于所述第一操作数的所述第一多个数据元素的每一数据元素具有第一大小和第一操作数符号,对于所述第二操作数的所述第二多个数据元素的每一数据具有第二大小和第二操作数符号,所述执行资源响应于所述第一指令,向对于结果操作数的各数据元素位置的所述存储位置存储结果,如果所述第二操作数是非零操作数,则所述结果具有所述第一大小和结果符号,该结果符号是所述第一操作数符号和所述第二操作数符号两者的函数;如果所述第二操作数是零操作数,则所述结果是零。43. 根据权利要求42所述的装置,其中,所述结果操作数包括第三多个数据元素,所述第三多个组合型数据元素的每一个设定为来自所述第一多个组合型数据元素的第一数据元素的带符号数值乘以所述第二多个组合型数据元素的相应数据元素的符号的积。44. 根据权利要求43所述的装置,其中,所述存储位置包括寄存器,以及其中,所述第二操作数是寄存器或存储器操作数之一。45. 根据权利要求44所述的装置,其中,所述第一操作数是寄存器。46. 根据权利要求45所述的装置,其中,对于所述第一操作数的所述寄存器也是所述存储位置。
执行符号乘法运算的方法、装置和指令 技术领域 本申请涉及执行数学运算的处理装置和相关软件以及软件序列的领域。 背景技术 在当今社会计算机系统变得日益普遍。计算机的处理能力增加了许多职业的工作人员的效率和生产率。随着购置和拥有计算机的费用持续下降,越来越多的消费者已经能够使用较新和较快的机器。此外,许多人喜欢使用笔记本计算机,因为方便。移动计算机允许用户在他们离开办公室或者旅行时容易地传输他们的数据和用它们来工作。市场营销人员、公司执行人员甚至学生非常熟悉这种情形。 随着处理器技术的进步,也产生出较新的软件代码,以便在具有这些处理器的机器上运行。用户通常期望和要求计算机有较高的性能,而不管正在被使用的软件类型。这样的一种情况可以从实际正在处理器内被执行的指令和运算的类型产生。根据运算的复杂性和/或所需电路的类型,某种类型的运算需要较多的时间完成。这提供一种机会来优化在处理器内执行某些复杂运算的方式。 十多年来,媒体应用一直在驱动微处理器发展。事实上,在近些年来的大多数计算升级一直是由媒体应用驱动的。这些升级主要发生在消费者部分,尽管在企业部分也看到用于增强娱乐性的教育和通信目的的显著的进步。然而,将来的媒体应用将需要甚至更高的计算需求。其结果,明天的个人计算经验在音频—视频效果方面甚至更加丰富和更容易使用,以及更重要的,计算将会和通信合并在一起。 因此,图像的显示以及音频和视频数据(它们总称为内容)的重放已经成为对当今计算设备的逐渐流行的应用。滤波和卷积运算是对诸如图像、音频和视频数据的内容数据的一些最普遍的运算。这些运算是强计算型运算,除非提供了使用各种数据存储设备通过有效的实现能够被使用的高水平的数据并行性,这些存储设备例如有单指令多数据(SIMD)寄存器。当前的一些结构也要求非必要的数据类型改变,它使指令的通过量最小,同时显著增加为进行算术运算对安排数据所需要的时钟周期数目。 各种现有技术的与符号相关的指令,例如正负号函数(signum)指令,决定二进制数的符号。然而,这些现有技术的正负号函数指令的能力在有用性方面受限,特别是在因为这些结果是较大的算法的中间结果而需要进一步处理正负号函数结果的应用中。通过请求另外的指令来得到希望的结果,在处理资源和流水线时间片方面会发生另外的开销。 本专利申请涉及2003年6月30日提交的同时待审美国专利申请No._/_,_,名称为“使用SIMD符号和绝对值运算的非线性滤波和解块应用”。 发明内容 根据本发明的一个方面,提供了一种装置,包括:存储位置;和执行资源,所述执行资源对第一操作数和第二操作数执行第一指令,并响应所述第一指令,向所述存储位置存储具有下述值的结果:如果所述第二操作数是正值,则该值为所述第一操作数;如果所述第二操作数是零,则该值为零;以及如果所述第二操作数是负值,则该值为所述第一操作数的负的形式。 根据本发明的另一个方面,提供了一种处理器,包括:能够存储组合型数据元素的寄存器文件:和被耦合到所述寄存器文件并响应多个组合型数据指令在所述寄存器文件中存储值的执行单元,所述执行单元通过在所述寄存器文件中存储包括多个结果数据元素的结果来响应所述多个组合型数据指令的第一个,其中,对于所述第一多个源数据元素和所述第二多个源数据元素的每一个地任何值,所述多个结果数据元素的所述每一个等于第一多个源数据元素的相应一个乘以为第二多个源数据元素的相应一个的符号值。 根据本发明的另一个方面,提供了一种方法,包括:取指令,所述指令指定具有第一操作数符号和第一操作数大小的第一操作数以及具有第二操作数符号和第二操作数大小的第二操作数;判定如果所述第二操作数是零,则存储零作为所述指令的最后结果;以及判定如果所述第二操作数是非零,则存储具有等于所述第一大小的最后结果大小和最后结果符号的最后结果,所述最后结果符号是对于所述第二操作数大小的单元值和非单元值两者的所述第一操作数符号和所述第二操作数符号两者的函数。 根据本发明的另一个方面,提供了一种方法,包括:取指令,所述指令指定第一操作数和第二操作数;判定如果所述第二操作数是正,则响应于所述指令,存储所述第一操作数作为结果;判定如果所述第二操作数是负,则存储等于负1乘所述第一操作数的值作为所述指令的结果;以及判定如果所述第二操作数是零,则存储零作为所述指令的结果。 根据本发明的另一个方面,提供了一种系统,包括:存储器,存储第一组合型数据指令以及包括第一多个源数据元素的第一组合型数据和包括第二多个源数据元素的第二组合型数据;处理器,执行所述第一组合型数据指令,并在处理器存储位置相应地存储包括多个结果组合型数据元素的结果组合型数据,所述多个结果组合型数据元素的每一个,对于所述第二多个源数据元素的非零的元素,是所述第一多个源数据元素和所述第二多个源数据元素的相应一个的两个符号的函数,并且只是对于所述第二多个源数据元素的所述相应一个的单元值和非单元值的所述第一多个源数据元素的所述相应的一个的大小的函数。 根据本发明的另一个方面,提供了一种包括机器可读介质的物品,所述物品可以被制造或者模拟以实现一种装置,所述装置包括:存储位置;和执行资源,所述执行资源对第一操作数和第二操作数执行第一指令,并响应所述第一指令,在所述存储位置存储具有下列值的结果:如果所述第二操作数是正值,则该值是所述第一操作数;如果第二操作数是零,则该值是零;以及如果第二操作数是负值,则该值是所述第一操作数的负的形式。 根据本发明的另一个方面,提供了一种装置,包括:存储位置;和执行资源,所述执行资源对第一操作数和第二操作数执行第一指令,所述第一操作数具有第一大小和第一操作数起始符号,所述第二操作数具有第二操作数符号,所述执行资源响应于所述第一指令,在所述存储位置中存储结果,如果所述第二操作数是正操作数,则所述结果具有所述第一大小和所述第一操作数起始符号;如果所述第二操作数是零操作数,则所述结果是零;如果所述第二操作数是负操作数,则所述结果具有所述第一大小和结果符号,所述符号是所述第一操作数起始符号乘以所述第二操作数符号的乘积。 根据本发明的另一个方面,提供了一种装置,包括:存储位置;和执行资源,所述执行资源对具有第一多个数据元素的第一组合型操作数和具有第二多个数据元素的第二组合型操作数执行第一组合型指令,对于所述第一操作数的所述第一多个数据元素的每一数据元素具有第一大小和第一操作数符号,对于所述第二操作数的所述第二多个数据元素的每一数据具有第二大小和第二操作数符号,所述执行资源响应于所述第一指令,向对于结果操作数的各数据元素位置的所述存储位置存储结果,如果所述第二操作数是非零操作数,则所述结果具有所述第一大小和结果符号,该结果符号是所述第一操作数符号和所述第二操作数符号两者的函数;如果所述第二操作数是零操作数,则所述结果是零。 本发明通过示例的方式来说明,但不限于附图中的图例。 图1A是根据本发明的一个实施例由包括执行用于符号乘法运算的指令的执行单元的处理器形成的计算机系统的方框图; 图1B是根据本发明的另一可选的实施例的另一示例性计算机系统的方框图; 图1C是根据本发明的另一可选的实施例的又一示例性计算机系统的方框图; 图2是根据本发明对于一个实施例的处理器的微结构的方框图,它包括逻辑电路以执行符号乘法运算; 图3A表示根据本发明的一个实施例在多媒体寄存器中的各种组合型数据(packed data)类型表达; 图3B表示根据另一可选实施例的组合型数据类型; 图3C表示根据本发明的一个实施例在多媒体寄存器中的各种带符号的和不带符号的组合型数据类型表示; 图3D表示操作编码(opcode)格式的一个实施例; 图3E表示另一个可选的操作编码(opcode)格式; 图3F表示又一个可选的操作编码格式; 图4是根据本发明对组合型数据操作数执行符号运算的逻辑的一个实施例的方框图; 图5表示根据本发明的一个实施例对数据元素的符号乘法运算的操作; 图6A是根据本发明执行符号运算的电路的一个实施例的方框图; 图6B是根据本发明执行符号运算的电路的另一个实施例的方框图; 图7表示根据本发明的一个实施例对多个数据元素的组合型符号指令的操作; 图8A是一个流程图,表示执行符号运算的方法的一个实施例; 图8B是一个流程图,表示执行符号运算的方法的另一个实施例; 图9是对组合型数据操作数执行绝对值运算的逻辑的一个实施例的方框图; 图10表示根据本发明使用SIMD指令的解块算法的操作; 图11是一个流程图,表示使用SIMD指令执行解块算法的一个实施例。 下面的说明书说明执行符号和乘法运算的方法、装置和指令的实施例。在下面的说明中,叙述了大量的细节,诸如处理器类型、微结构条件、事件、允许机构等,以便提供对本发明更彻底的理解。然而,本领域的技术人员应该理解,本发明可以不用这些特定的细节而被实现。另外,一些公知的结构、电路等未详细表示,以避免不必要地使本发明模糊。 虽然下面的实施例是参考处理器说明的,但是其它的实施例可应用于其它类型的集成电路和逻辑设备。同样的技术和本发明的教导可以容易地应用于能够从更高流水线通过量和改进的性能中得益的其它类型的电路或半导体器件。本发明的教导可应用于执行数据操作的任何处理器或机器。然而,本发明不限于执行256位、128位、64位、32位或者16位数据运算的处理器或机器,而可以应用于任何其中需要组合型数据操作的处理器和机器。 在下面的说明中,为解释的目的,叙述了大量的特定细节以便对本发明提供彻底的理解。然而,本领域的技术人员会理解,为了实现本发明不一定必需这些特定细节。在其它的场合,公知的电气结构和电路未以特定细节叙述,以避免不必要地使本发明模糊。另外,下面的说明提供例子,并且附图为图示目的表示各种例子。然而,这些例子不应该解释为限制的意义,因为它们仅是用来提供本发明的例子,而不是提供对本发明的所有可能的实现的穷举列表。 虽然下面的例子在执行单元和逻辑电路的环境中说明指令处理和分布,但是本发明的其它实施例可以以软件方式实现。在一个实施例中,本发明的方法在机器可执行的指令中体现。可以使用这些指令使以这些指令编程的通用或者专用处理器执行本发明的步骤。本发明可以提供为计算机程序产品或软件提供,这些可以包括其上存储有指令的机器或者计算机可读介质,所述指令可用于编程计算机(或其它电子设备)来执行根据本发明的处理。另外可选地,本发明的步骤可以由包含执行这些步骤的硬件逻辑的特定硬件部件执行,或由被编程的计算机部件和用户硬件部件的任何组合来执行。这种软件可以存储在系统的存储器内。相似地,代码可以经由网络或者通过其它计算机可读介质的方式分发。 这样,机器可读介质可以包括任何以一个机器(例如计算机)可读的形式存储或者传输信息的机构,但是不限于软磁盘、光盘、光盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦写可编程只读存储器(EPROM)、电可擦写可编程只读存储器(EEPROM)、磁卡或者光卡、闪烁存储器、通过因特网的传输、电、光、声或者其它形式的传播信号(例如,载波、红外线信号、数字信号等)等。因此,计算机可读介质包括任何类型的介质/机器可读介质,所述介质适于以机器(例如计算机)可读形式存储或者传输电子指令或信息。此外,本发明还可以作为计算机程序产品被下载。同样地,程序可以从远程计算机(服务器)传输到请求计算机(例如客户机)。程序的传输可以通过以载波或者其它传播介质体现的电、光、声或者其它形式的数据信号经由通信链路(例如调制解调器、网络连接等)实现。 一种设计可以经历各种阶段,从构想到模拟到制造。表示一种设计的数据可以以几种方式表示该设计。首先,因为在模拟中十分有用,可以使用硬件描述语言或者另外的功能描述语言表示硬件。另外,具有逻辑和/或晶体管门的电路级模型可以在设计过程的某些阶段产生。此外,大多数设计在某些阶段达到表示在该硬件模型中各种设备的物理布置的数据水平。在使用常规半导体制造技术的场合,表示硬件模型的数据可以是指定各种特征在对于生产集成电路所用的掩膜的不同掩膜层上是否存在的数据。在设计的任何说明中,数据可以以任何机器可读介质的形式存储。被调制的或者以其它方式产生的、用以传输这种信息的光或电波、存储器或者诸如盘的磁或光存储器可以是机器可读介质。任何这些介质可以“载有”或者“指示”设计或者软件信息。当指示或者载有代码或者设计的电载波被传输,到执行复制、缓冲存储、或者重新传输该电信号的程度时,一个新的备份被制作。这样,通信提供者或网络提供者可以制作体现本发明的技术的物品(载波)的复制品。 在现代的处理器中,使用一些不同的执行单元来处理和执行各种代码和指令。并非所有的指令都同等地建立,因为有些能较快完成,而另一些要占用大量的时钟周期。指令的通过量越快,处理器的总体性能就越好。所以使同样多的指令尽可能快地执行将是有利的。然而,有一些指令较复杂,需要更多的执行时间和处理器资源。例如,有浮点指令、加载/存储操作、数据移动等。 由于越来越多的计算机系统用在因特网和多媒体应用中,所以一直在引入附加的处理器支持。例如,单指令多数据(SIMD)整数/浮点指令和流式SIMD扩展(SSE)是减少为执行一个具体程序任务所需要的指令总数的指令,它们从而可以减少功率消耗。这些指令通过并行对多数据元件操作而可以加速软件性能。其结果,可以在很大范围的应用中实现性能增益,这些应用包括视频、语音和图像/照片处理。SIMD指令在微处理器和相似类型的逻辑电路中的实现通常牵涉一些问题。此外,SIMD操作的复杂性常常导致需要附加的电路以便正确处理和操作数据。 当前,乘法的SIMD符号指令不可用。也没有为绝对值运算的SIMD指令。由于不存在符号乘法运算,需要大量指令和数据寄存器来实现在诸如音频/视频压缩、处理和操作等应用中的同样结果。因此,根据本发明的符号指令可以减少代码的开销和资源需求。本发明的实施例作为一种算法提供实现符号运算的一种方式,这种算法使用有关SIMD的硬件。一些实施例还提供实现绝对值运算的方式。目前,操作SIMD寄存器中的数据有些困难和繁琐。一些算法需要比实际执行某些算术运算所需要的指令更多的指令来为这些运算安排数据。通过实现根据本发明的符号乘法运算的实施例,为获得符号处理所需要的指令数目可以显著减少。 本发明的实施例涉及实现正负号函数运算的变化的指令。正负号函数运算决定一个给定的数是正数、负数、还是零。在正负号函数运算期间,该函数这样评价一个数:对于x>0,signum(x)=1;对于x=0,signum(x)=0;对于x<0,signum(x)=-1。然而,在多媒体应用中,在各种算法期间经常需要用一个值的符号乘另一个数据值。符号乘法运算能够避免不得不做许多单独的操作,本符号运算的实施例提供比正负号函数更多的功能,也包括乘法。 根据本发明的符号指令求解运算:DEST=SRC1×SIGNUM(SRC2)。如果SRC2为正,则SRC2的正负号函数将提供“+1”的值。如果SRC2等于零,则SRC2的正负号函数的结果是零。如果SRC2为负,则SRC2的正负号函数是“-1”。本发明的实施例中的符号乘法运算取第二数据元素的正负号函数,并以第一数据元素的值乘该正负号函数的结果来得到结果的积。应用于单个数据元素的一个实施例的符号运算可以描述为: if SOURCE2<0,then DEST=SOURCE1ב-1’; else if SOURCE2=0,then DEST=0; else if SOURCE2>0,then DEST=SOURCE1ב+1’. 对于一个组合型数据操作数,可以把这一流程应用于每一数据元素位置。 此外,符号乘法运算的一个实施例还可以通过这样模仿正负号函数运算:在符号运算中使用值“+1”作为第一源数据元素和使用感兴趣的值作为第二源数据元素。因为本实施例的符号运算引起第一源数据元素乘以根据第二元素的符号值的“+1”、“0”或“-1”中的一个,因此正负号函数可以在这里被重复。相似地,本发明的符号运算的实施例还可以通过设定对于符号运算的第一源数据元素等于第二源数据元素来执行绝对值运算。这是可以实现的,因为源值实质上将由它自己的符号相乘,从而使结果值为“0”或正。 图1A是一个示例性计算机系统的方框图,所述系统由包括执行单元的处理器形成,执行单元执行根据本发明的一个实施例的用于进行符号乘法运算的指令。系统100包括例如处理器102的部件来使用执行单元,它包括例如在这里所说明的实施例中的执行根据本发明的用于进行处理数据的算法的逻辑。系统100是基于PENTIUMIII、PENTIUM4、XeonTM、Itanium、XScaleTM和/或StrongARMTM微处理器的处理系统的代表,上述系统可从加利福尼亚州圣克拉拉的英特尔公司得到,虽然也可以使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,示例系统100可以执行WINDOWSTM版本操作系统,它可以从华盛顿州雷蒙德的微软公司得到,虽然也可以使用其它操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户接口。因此,本发明不限于硬件电路和软件的任何特定的组合。 本发明不限于计算机系统。本发明另外可选的实施例可以用在其它设备中,例如手持设备和嵌入式应用中。手持设备的一些例子包括蜂窝电话、因特网协议设备、数码像机、个人数字助理(PDA)和手持PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、片上系统(system on a chip)、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)开关或对操作数执行符号和/或绝对值运算的任何其它系统。此外,已经实现了一些结构允许指令同时对几个数据操作以提高多媒体应用的效率。随着数据量和类型的增加,必须增强计算机和它们的处理器来以更有效的方法操作数据。 图1A是一个计算机系统100的方框图,所述系统由包括一个或者多个执行单元108的处理器102形成,所述执行单元根据本发明执行从一个操作数抽取数据元素的符号并且用另一个数据元素乘这一符号的算法。本实施例是在单处理器台式或服务器系统的环境中说明的,但是在多处理器系统中可以包括另外的实施例。系统100是集线器体系结构的一个例子。计算机系统100包括处理器102来处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器或者任何其它处理器设备,例如数字信号处理器。处理器102被耦合到可以在处理器102和系统100中的其它部件之间传输数据信号的处理器总线110。系统100的元件执行它们对于本领域技术人员公知的常规功能。 在一个实施例中,处理器102包括一级(L1)内部超高速缓冲存储器104。取决于体系结构,处理器102可以具有单个内部超高速缓冲存储器或者多级内部超高速缓冲存储器。另外可选地,在另一个实施例中,超高速缓冲存储器可以驻留在处理器102之外。其它的实施例还可以包括内部和外部超高速缓冲存储器的组合,取决于具体的实现和需要。寄存器文件106可以在各种寄存器中存储不同类型的数据,这些寄存器包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器。 包括执行整数和浮点运算的逻辑的执行单元108也驻留在处理器102中。处理器102还包括为一些宏指令存储微代码的微代码(ucode)ROM。对于这一实施例,执行单元108包括处理组合型指令集109的逻辑。在一个实施例中,组合型指令集109包括用于修改数据的符号值的组合型符号指令。通过在通用处理器102的指令集中包括组合型指令集109,连同执行这些指令的相关电路,由许多多媒体应用使用的运算可以使用组合型的数据在通用处理器102中执行。这样,通过使用处理器的数据总线的全部宽度对组合型数据执行运算,许多多媒体应用可以被加速并且被更有效率地执行。这可以消除对在处理器数据总线上传输较小的数据单元而对一个数据元素同时执行一个或者多个操作的需要。 执行单元108的另外可选的实施例也可以用于微控制器、嵌入式处理器、图形设备、DSP和其它类型的逻辑电路。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪烁存储器设备或其它存储器设备。存储器120可以存储由数据信号表示的可以由处理器102执行的指令和/或数据。 系统逻辑芯片116耦合到处理器总线110和存储器120。在图示实施例中的系统逻辑芯片116是存储器控制器中心(MCH)。处理器102可以通过处理器总线110向MCH 116通信。MCH 116提供向存储器120的高带宽存储器路径118,用于指令和数据存储和用于图形命令、数据和纹理的存储。MCH 116在处理器102、存储器120和系统100中的其它部件之间引导数据信号,并桥接处理器总线110、存储器120和系统I/O 122之间的数据信号。在一些实施例中,系统逻辑芯片116可以提供用于耦合到图形控制器112的图形端口。MCH 116通过存储器接口118耦合到存储器120。图形卡112通过加速图形端口(AGP)互连114耦合到MCH 116。 系统100使用专用集线器接口总线122来耦合MCH 116到I/O控制器中心(ICH)130。ICH 130通过本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线是高速I/O总线,用于连接外设到存储器120、芯片组和处理器102。音频控制器、固件中心(闪烁BIOS)128、无线收发器126、数据存储器124、包括用户输入和键盘接口的遗留I/O控制器、诸如通用串行总线(USB)的串行扩展端口以及网络控制器134是一些例子。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪烁存储器设备或其它海量存储设备。 对于系统的另一个实施例,可以用片上系统使用执行带符号指令的算法的执行单元。片上系统的一个实施例包括处理器和存储器。这种系统的存储器是闪烁存储器。闪烁存储器可以和处理器和其它系统部件位于同一个小芯片上。另外,其它逻辑块,诸如存储器控制器或者图形控制器,也可以位于片上系统上。 图1B表示实现本发明原理的数据处理系统140的一个另外可选的实施例。数据处理系统140的一个实施例是具有英特尔XscaleTM技术(如万维网上在developer.intel.com上的说明)的Intel个人因特网客户端体系结构(IntelPCA)应用处理器。本领域的技术人员容易理解,这里说明的实施例可以用于另外可选的处理系统而不脱离本发明的范围。 计算机系统140包括处理核心159,它能够执行包括符号和绝对值的SIMD操作。对于一个实施例,处理核心159表示任何类型体系结构的处理单元,包括但不限于CISC、RISC或VLIW型体系结构。处理核心159还适于在一种或者多种处理技术中的制造,并通过以足够详细的程度表现在机器可读介质上,可以适于促进所述制造。 处理核心159包括执行单元142、一组寄存器文件145和解码器144。处理核心159还包括附加的电路(未示出),这些电路对于理解本发明不是必需的。执行单元142用于执行由处理核心159接收的指令。除了识别一般的处理器指令之外,执行单元142可以识别在组合型指令集143中用于对组合型的数据格式执行操作的指令。组合型指令集143包括支持符号和绝对值运算的指令,并且也可以包括其它组合型指令。执行单元142由内部总线耦合到寄存器文件145。寄存器文件145表示处理核心159上的一个存储区域,用于存储信息,包括数据。如前所述,应该理解,用于存储组合型数据的存储区域不是关键性的。执行单元142耦合到解码器144。使用解码器144来将由处理核心159接收的指令解码为控制信号和/或微代码入口点。响应于这些控制信号和/或微代码入口点,执行单元142执行适当的操作。 处理核心159与总线141耦合来与各种其它的系统设备通信,这些设备可以包括但不限于,例如,同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、脉冲串闪烁存储器接口148、个人计算机存储器卡国际协会(PCMCIA)/紧致闪烁(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器存取(DMA)控制器151和备选总线主控接口152。在一个实施例中,数据处理系统140还可以包括I/O桥154,用于通过I/O总线153与各种I/O设备通信。这种I/O设备可以包括但不限于,例如,通用异步接收器/发射器(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。 数据处理系统140的一个实施例提供给移动、网络和/或无线通信以及能够执行包括符号和绝对值运算的SIMD操作的处理核心159。处理核心159可以用各种音频、视频、成像和通信算法编程,所述算法包括离散变换,诸如Walsh-Hadamard变换、快速富立叶变换(FFT)、离散余弦变换(DCT)以及它们各自的逆变换;压缩/解压缩技术,诸如彩色空间变换、视频编码运动估计或视频解码运动补偿;和调制/解调(MODEM)功能,诸如脉冲编码调制(PCM)。 图1C表示能够执行SIMD符号或绝对值运算的数据处理系统的再一个可选的实施例。根据一个另外可选的实施例,数据处理系统160可以包括主处理器166、SIMD协处理器161、超高速缓冲存储器167和输入/输出系统168。输入/输出系统168可选地耦合到无线接口169。SIMD协处理器161可以执行包括符号或绝对值的SIMD操作。处理核心170可以适合于在一种或者多种处理技术中的制造,并通过以足够详细程度表现在机器可读介质上,可以适合于促进包括处理核心170的数据处理系统160的全部或者部分的制造。 对于一个实施例,SIMD协处理器161包括执行单元162和一组寄存器文件164。主处理器166的一个实施例包括解码器165,以识别要由执行单元162执行的包括SIMD符号和绝对值指令的指令集163的指令。对于另一可选的实施例,SIMD协处理器161还包括至少部分解码器165B以解码指令集163的指令。处理核心170还包括另外的电路(未示出),它们对理解本发明不是必需的。 运行时,主处理器166执行控制一般类型的数据处理操作的数据处理指令流,包括与超高速缓冲存储器167和输入/输出系统168的交互。嵌入在数据处理指令流中的是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为应当由配属的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号),它们从协处理器总线166由任何配属的SIMD协处理器接收。在这一场合,SIMD协处理器161将接受并执行任何收到的供给其的SIMD协处理器指令。 数据可以通过无线接口169被接收用于由SIMD协处理器指令处理。对于一个例子,可以以数字信号的形式接收声音通信,该信号可以由SIMD协处理器指令处理以产生代表声音通信的数字音频样本。对于另一个例子,可以以数字位流的形式接收压缩的音频和/或视频,该信号可以由SIMD协处理器指令处理以再生数字音频样本和/或运动视频帧。对于处理核心170的一个实施例,主处理器166和SIMD协处理器161被集成到单一处理核心170中,后者包括执行单元162、一组寄存器文件164以及识别包括SIMD符号和绝对值指令的指令集163的指令的解码器165。 图2是一个实施例的处理器200的微体系结构的方框图,它包括逻辑电路来执行根据本发明的符号乘法运算。符号运算也可以称为组合型符号运算和组合型符号指令,就像在上面的讨论中那样。对于符号指令的一个实施例,该指令可以用第二数据元素的符号值乘第一数据元素。该指令还可以称为PSIGN或组合型符号。在这一实施例中,符号指令还可以被实现来对具有字节、字、双字、四字等长度的数据元素操作。按次序的前端201是处理器200取要被执行的宏指令并且对其准备以便以后在处理器流水线中使用的部分。本实施例的前端201包括几个单元。指令预取器226从存储器取宏指令并将它们供给指令译码器228,后者依次将这些指令解码为称作微指令或者微操作(也称为微op或uop)的原语,机器知道怎样执行这些原语。追踪超高速缓冲存储器230取被解码的uop,并在uop队列234中将它们汇编为程序排序的序列或踪迹(trace)以便执行。当追踪超高速缓冲存储器230遇到复杂的宏指令时,微代码ROM 232提供完成该操作所需要的uop。 许多宏指令被变换为单一微op,而其它的宏指令需要几个微op来完成全部操作。在本实施例中,如果需要多于4个微op来完成一个宏指令的话,则解码器228访问微代码ROM 232来执行宏指令。对于一个实施例,可以把组合型符号指令解码为少量微op以便在指令译码器228上处理。在另一个实施例中,对于组合型符号算法的指令可以存储在微代码ROM 232内,如果需要一些微op来实现这一操作的话。追踪超高速缓冲存储器230涉及入口点可编程逻辑阵列(PLA)以确定正确的微指令指针,以便读取用于在微代码ROM 232中的符号或绝对值算法的微代码序列。在微代码ROM 232完成为当前微指令的微op的定序后,机器的前端201恢复从追踪超高速缓冲存储器230中取微op。 一些SIMD和其它多媒体类型的指令被认为是复杂的指令。大多数与浮点有关的指令也是复杂指令。这样,当指令译码器228遇到一个复杂的宏指令时,访问微代码ROM 232的适当位置来检索用于该宏指令的微代码序列。执行该宏指令所需要的各种微op被传输到无序执行引擎203,以便在适当的整数和浮点执行单元中执行。 无序执行引擎203是微指令被准备来执行的地方。无序执行逻辑具有一些缓冲器来平滑和重新排序微指令流,在它们沿流水线下行和被调度来执行时优化性能。分配器逻辑分配每一uop为了执行而需要的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重新命名为在寄存器文件中的条目。分配器还为两个uop队列的一个中的各uop分配uop,两个uop队列的一个用于存储器操作,另一个用于非存储器操作,所述uop队列在指令调度器之前:存储器调度器、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206。uop调度器202、204、206根据它们相关的输入寄存器操作数源和uop需要完成它们的操作所需要的执行资源的可用性,决定一个uop何时准备执行。本实施例的快速调度器202可以在每半个主时钟周期调度,而其它调度器只能在每个主时钟周期调度一次。调度器仲裁端口的分派以调度uop执行。 寄存器文件208、210位于调度器202、204、206和在执行块211内的执行单元212、214、216、218、220、222、224之间。有分别用于整数和浮点运算的单独的寄存器文件208、210。本实施例的各寄存器文件208、210还包括一个旁路网络,它把刚刚完成的、尚未写到寄存器文件中的结果旁路或者转送到新的相关的uop。整数寄存器文件208和浮点寄存器文件210能够彼此通信数据。对于一个实施例,整数寄存器文件208被分成两个单独的寄存器文件,一个寄存器文件用于数据的低阶32位,第二寄存器文件用于数据的高阶32位。本实施例的浮点寄存器文件210具有128位宽的条目,因为浮点指令通常具有宽度从64位到128位的操作数。 执行块211包括执行单元212、214、216、218、220、222、224,指令在这里实际执行。这一部分包括寄存器文件208、210,它们存储微指令执行所需要的整数和浮点数据操作数值。本实施例的处理器200包括一些执行单元:地址生成单元(AGU)212、AGU 214、快速算术逻辑单元(ALU)216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。对于本实施例,浮点执行块222、224执行浮点、多媒体增强指令集(MMX)、SIMD和SSE操作。本实施例的浮点ALU 222包括一个64位除64位的浮点除法器,用于执行除法、平方根和余数微指令。对于本发明的实施例,涉及浮点值的任何动作都用浮点硬件发生。例如,在整数格式和浮点格式之间的变换涉及浮点寄存器文件。相似地,浮点除运算发生在浮点除法器中。另一方面,非浮点数和整数类型用整数硬件资源处理。简单的、非常频繁的ALU运算求助于高速ALU执行单元216、218。本实施例的快速ALU 216、218可以用半个时钟周期的有效延迟执行快速运算。对于一个实施例,大多数复杂的整数运算求助于慢速ALU 220,因为慢速ALU 220包括用于长延迟型运算例如乘、移位、标记逻辑和分支处理的整数执行硬件。存储器加载/存储操作由AGU 212、214执行。对于本实施例,整数ALU 216、218、220是在对64位数据操作数执行整数运算的环境中被说明的。在另外可选的实施例中,整数ALU 216、218、220可以被实现为支持包括16、32、128、256等的各种数据位。相似地,浮点单元222、224可以被实现为支持具有各种宽度的位的操作数范围。对于一个实施例,浮点单元222、224可以协同SIMD和多媒体指令对128位宽的组合型数据操作数运算。 在本实施例中,uop调度器202、204、206在父加载结束执行之前分派相关操作数。当uop在处理器200中被投机(speculatively)调度和执行时,处理器200还包括处理存储器缺失的逻辑。如果数据加载在数据超高速缓冲存储器中确实,则在流水线中会有运行中(in flight)的相关操作,它们留给调度器暂时不正确的数据。一个重放机构追踪和重新执行使用了不正确数据的指令。只有有关操作需要被重放,并且允许完成无关的操作。处理器的一个实施例的调度器和重放机构也被设计为捕获用于符号和绝对值运算的指令。 这里使用的术语“寄存器”指板上处理器存储位置,被用作宏指令的一部分以标识操作数。换句话说,这里所指的寄存器是从处理器外部可见的那些(从程序员的角度)。然而,实施例的寄存器不应该限于特定类型的电路。而是,实施例的寄存器只需能够存储和提供数据以及执行这里说明的功能。这里说明的寄存器能够使用许多不同技术由处理器内的电路实现,诸如专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的结合等。在一个实施例中,整数寄存器存贮32位整数数据。一个实施例的寄存器文件还包含用于组合型数据的8个多媒体SIMD寄存器。对于下面的讨论,寄存器理解为设计用来保持组合型数据的数据寄存器,诸如微处理器中使用加利福尼亚州圣克拉拉的英特尔公司的MMX技术使能的64位宽的MMXTM寄存器(在有些场合也称为“mm”寄存器)。这些在整数和浮点两种形式中可用的MMX寄存器可以以伴随SIMD和SSE指令的组合型数据元素操作。相似地,有关SSE2技术的128位宽的XMM寄存器也可以用于保持这种组合型数据操作数。在本实施例中,在存储组合型数据和整数数据时,寄存器不需区分这两种数据类型。 在下面的附图的例子中说明一些数据操作数。图3A表示根据本发明的一个实施例在多媒体寄存器中的各种组合型数据类型表达。图3A表示对于128位宽的操作数的组合型字节310、组合型字320和组合型双字(dword)330的数据类型。该例的组合型字节格式310是128位长,包含16个组合型字节数据元素。一个字节在这里定义为8位数据。各字节数据元素的信息,从位7到位0存储字节0,从15到位8存储字节1,从位23到位16存储字节2,最后从位120到位127存储字节15。这样,在寄存器中使用了所有可用的位。这种存储器安排增加了处理器的存储效率。同时,通过访问16个数据元素,现在一次操作可对16个数据元素并行执行。 一般,数据元素是单条数据,它与具有同样长度的其它数据元素一起存储在单寄存器或存储器位置中。在涉及SSE2技术的组合型数据序列中,在XMM寄存器中存储的数据元素的数目是128位除以单个数据元素的位长。相似地,在涉及MMX和SSE技术的组合型数据序列中,在XMM寄存器中存储的数据元素的数目是64位除以单个数据元素的位长。虽然在图3A中表示的数据类型是128位长,但是本发明的实施例也可以操作64位宽或者其它大小的操作数。本例的组合型字格式320是128位长,包含8个组合型字数据元素。每一组合型字包含16位信息。图3A的组合型双字格式330是128位长,包含4个组合型双字数据元素。每一组合型双字数据元素包含32位信息。一个组合型4字是128位长,包含两个组合型4字数据元素。 图3B表示另外可选的寄存器内数据存储格式。每一组合型数据可以包含多于一个的独立数据元素。表示出3种组合型数据格式;组合型半单元341、组合型一单元342和组合型两单元343。组合型半单元341、组合型一单元342和组合型两单元343的一个实施例包含定点数据元素。对于另外可选的实施例,一个或者多个组合型半单元341、组合型一单元342和组合型两单元343可以包含浮点数据元素。组合型半单元341的一个另外可选的实施例是128位长,包含8个16位数据元素。组合型一单元342的一个实施例是128位长,包含4个32位数据元素。组合型两单元343的一个实施例是128位长,包含2个64位数据元素。可以理解,这种组合型数据格式可以进一步扩展为其它寄存器长度,例如96位、160位、192位、224位、256位或更长。 图3C表示根据本发明的一个实施例在多媒体寄存器中的各种带符号和不带符号的组合型数据类型表达。不带符号的组合型字节表达344表示在SIMD寄存器中的不带符号的组合型字节的存储。各节数据元素的信息,从位7到位0存储字节0,从位15到位8存储字节1,从位23到位16存储字节2,最后从位120到位127存储字节15。这样,在寄存器中使用了所有可用的位。这种存储器安排增加了处理器的存储效率。同时,通过访问16个数据元素,现在一次操作可对16个数据元素以并行方式执行。带符号的组合型字节表达345表示带符号的组合型字节的存储。注意,每一字节数据元素的第8位是符号指示符。不带符号的组合型字表达346表示字7到字0如何在SIMD寄存器中存储。带符号的组合型字表达347类似不带符号的组合型字在寄存器中的表达346。注意,每一字数据元素的第16位是符号指示符。不带符号的组合型双字表达348表示双字数据元素如何存储。带符号的组合型双字表达349类似不带符号的组合型双字在寄存器中的表达348。注意,必需的符号位是每一双字数据元素的第32位。 图3D表示操作编码(opcode)格式360的一个实施例,它具有32位或更多位,它的寄存器/存储器操作数寻址方式相应于在“LA-32 IntelArchitecture Software Developer’s Manual Volume 2:Instruction Set Reference(LA-32 Intel体系结构软件开发者手册第二卷:指令集参考)”中说明的操作码格式类型,它可以从加利福尼亚州圣克拉拉的英特尔公司在万维网(www)的intel.com/design/litcentr上获得。符号乘法运算的类型可以用一个或者多个字段361和362编码。可以标识每条指令最多到两个操作数位置,包括最多到两个源操作数标识符364和365。对于符号指令的一个实施例,目的地操作数标识符366和源操作数标识符364相同。对于另外一个可选的实施例,目的地操作数标识符366和源操作数标识符365相同。因此,对于符号乘法运算的实施例,由源操作数标识符364和365标识的一个源操作数被符号运算的结果重写。对于符号指令的一个实施例,可以使用源操作数标识符364和365标识64位的源和目的地操作数。 图3E表示另一个可选的操作编码(opcode)格式370,具有40或者更多位。操作码格式370相应于操作码格式360,但包括一个可选的前缀字节378。符号乘法运算的类型可以由一个或者多个字段378、371和372编码。由源操作数标识符374和375和由前缀字节378可以标识每条指令的最多两个操作数位置。对于符号指令的一个实施例,可以使用前缀字节378标识128位的源和目的地操作数。对于符号指令的一个实施例,目的地操作数标识符376和源操作数标识符374相同。对于另外一个可选的实施例,目的地操作数标识符376和源操作数标识符375相同。因此,对于符号乘法运算的实施例,由源操作数标识符374和375标识的一个源操作数被符号运算的结果重写。操作码格式360和370允许部分由模式(MOD)字段363和373和由可选的比例-变址-基址(scale-index-base)和位移字节指定的寄存器到寄存器、存储器到寄存器、寄存器由存储器、寄存器由寄存器、寄存器由立即数、寄存器到存储器的寻址。 下面转向图3F,在一些可选的实施例中,可以通过一条协处理器数据处理(CDP)指令执行64位单指令多数据(SIMD)算术运算。操作编码(opcode)格式380表示一个这种CDP指令,它具有CDP操作码字段382和389。CDP指令的类型,对于符号或绝对值运算的另外可选的实施例,可以由一个或者多个字段383、384、387和388编码。每条指令可以最多标识3个操作数位置,包括最多两个源操作数标识符385、390和一个目的地操作数标识符386。协处理器的一个实施例可以对8、16、32和64位值操作。对于一个实施例,符号或者绝对值运算对整数数据元素执行。在一些实施例中,可以使用条件字段381有条件地执行符号或者绝对值指令。对于一些符号或者绝对值指令,源数据长度可以由字段383编码。在符号或者绝对值指令的一些实施例中,可以在SIMD字段上进行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和类型可以由字段384编码。 图4是根据本发明对组合型数据操作数执行符号运算的逻辑的一个实施例的方框图。本发明的实施例可以实现为用上述各种类型的操作数来起作用。对于一种实现,根据本发明的符号运算被实现为对特定数据类型操作的一组指令。例如,提供组合型符号字节(PSIGNB)指令确定字节数据类型的符号。组合型符号字(PSIGNW)指令引起对字数据类型的符号运算。组合型符号双字(PSIGND)指令对双字数据类型执行符号乘法运算。虽然这些指令具有不同的名称,但是一般的符号乘法运算以相似方式执行。为简单起见,下面的讨论和例子在组合型符号(PSIGN)指令的环境下处理数据元素。 本实施例的用于符号乘法运算的PSIGN指令以两条信息开始:第一数据操作数DATA A 410和第二数据数DATA B 420。对于下面的讨论,DATA A、DATA B和RESULTANT(结果)一般称操作数或数据块,但是不限于此,还包括寄存器、寄存器文件和存储器位置。在一个实施例中,每一符号指令(PSIGNB,PSIGNW,PSIGND)被解码为一个微操作。在另一可选的实施例中,每一指令可以被解码为对数据操作数执行符号运算的不同数目的微操作。对于本例,操作数410、420是128位宽的存储在具有字宽数据元素的源寄存器/存储器中的多条信息。在一个实施例中,操作数410、420保持在128位长的SIMD寄存器中,诸如128位SSE2 XMM寄存器。对于一个实施例,RESULTANT 440也是XMM数据寄存器。此外,RESULTANT 440也可以是和一个源操作数相同的寄存器或存储器位置。取决于特定的实现,操作数和寄存器可以是其它长度,例如32、64和256位,具有字节、双字、四字长度的数据元素。虽然本例的数据元素是字的长度,但是同样的概念可以扩展到字节和双字长度的元素。在数据操作数是64位宽时,使用MMX寄存器代替XMM寄存器。 本例中的第一操作数410包括8个一组的数据元素:A7、A6、A5、A4、A3、A2、A1和A0。每一单个数据元素相应于结果440中的数据元素位置。第二操作数420包括另外8个一组的数据段:B7、B6、B5、B4、B3、B2、B1和B0。这里的数据段等长,每一段包括一个单字(16位)数据。然而,数据元素和数据元素位置可以处理字以外的其它间隔长度。如果每一数据元素是字节(8位)、双字(32位)或4字(64位),则128位操作数将分别具有16字节宽、4个双字宽或两个4字宽数据元素。本发明的实施例不限于特定长度的数据操作数或数据段,而可以为每种实现适当决定长度。 操作数410、420可以驻留在寄存器中或存储器位置或者在寄存器文件中或其混合中。数据操作数410、420连同符号指令被送往处理器中的执行单元的符号计算逻辑430。到符号指令到达执行单元的时候,该指令应该已经在处理器流水线中被解码。这样,符号指令可以处于微操作(uop)或某些其它解码格式的形式。对于本实施例,两个数据操作数410、420在符号计算逻辑430被接收。符号计算逻辑430为第一操作数410的每一数据元素选择符号值或者正负号函数,把该符号值与第二操作数420的相应数据元素位置的数据元素的值相乘,把为该乘法的积放入结果440的适当位置。虽然在这里讨论了乘法运算的一般概念,但是可以使用其它方法和装置来得到和用乘法得到的同样的结果。例如,在一个实施例中,可以用乘法单元执行相乘。在另一个实施例中,通过逻辑来处理算法使值不改变、设定为0或者从“+”变换符号为“-”或反之,也可以得到同样的结果。 对第一操作数410中的全组数据元素位置重复符号抽取和乘法的处理。虽然本实施例的数据处理包括符号抽取和乘法,但是术语“符号运算”或“符号乘法运算”在这里也可以用来指这一数据处理。对于一个实施例,对于所有数据位置的数据元素并行处理。在另一个实施例中,某一部分的数据元素位置可以同时一起处理。这里,结果440包括8个积:B7×SIGNA7、B6×SIGNA6、B5×SIGNA5、B4×SIGNA4、B3×SIGNA3、B2×SIGNA2、B1×SIGNA1和B0×SIGNA0。对于本实施例,数据元素的正负号函数或符号值(SIGNx)对于非零正数是“+1”,对于非零负数是“-1”,对于零是“0”。在一个另外可选的体系结构允许“+0”和“-0”的实施例中,这两类零都被视为零,其中数据元素的正负号函数或符号值是“0”。 图5表示根据本发明的一个实施例对数据元素执行符号乘法运算的操作。本例的符号运算可以发生在图4的符号计算逻辑430之内。在本例中,符号运算530用对于单数据元素位置的数据元素说明。把从第一数据操作数来的第一数据元素DATA ELEMENT A 510和从第二数据操作数来的第二数据元素DATA ELEMENT B 520拿到一起。每一数据元素包括一个值,该值具有符号部分和数值基数部分。例如,DATA ELEMENT A510解释为包括SIGNA和BASEA的数512。相似地,DATA ELEMENT B520解释为包括SIGNB和BASEB的数522。 在符号运算530期间,符号计算逻辑取第一操作数的符号值,对于DATA ELEMENT A 510的SIGNA,用DATA ELEMENT B 520中的数乘该符号值。在一种情况下,该逻辑将响应于SIGNA的值执行适当的乘法运算。一个数的符号部分可以是负“-”或正“+”。一个数的值部分可以是零“0”或非零值。对于一个实施例的符号运算,该逻辑把第一数据元素放入3类中之一:正“+”、零“0”、或负“-”。如果第一数据元素510为正,意味着它的符号为正,则该数据位置的结果540实质上是第二数据元素520自身,因为正符号被看作用等于“+1”的SIGNA乘第二数据元素520。如果第一数据元素510是零,则不理第一数据元素510的符号值,因为零实质上是需要等于零的SIGNA乘第二数据元素520,产生零的结果540。如果第一数据元素510为负,意味着它的符号为负,则该数据位置的结果540将是第二数据元素520被等于“-1”的SIGNA乘的积。对于涉及DATA ELEMENT A 510和DATA ELEMENT B 520的给定数据元素位置的符号乘法运算的结果540是“SIGNA×DATA ELEMENTB”。在另一个实施例中,该逻辑能够将符号值、SIGNA和SIGNB乘到一起,并把结果符号值应用于BASEB,形成该数据元素位置的最后结果。 图6A是根据本发明用于执行符号乘法运算的电路600的一个实施例的方框图。本实施例的电路600包括多路转换结构和求值来自第一源操作数的元素的符号值并有效地计算该符号值与来自第二源操作数的相应元素的积的逻辑。为简化讨论起见,图6A中的电路600是对于一个数据元素位置或对于结果组合型数据块的一条来表示的。此外,对于这一数据元素位置所示的逻辑600可以存在于同一执行单元上的多个实例中。取决于具体实现,因为需要用于希望数目的数据元素,一些电路元件被外推出来。例如,对于8个数据元素,可以物理地存在为处理这8个数据元素的所有位所需要的足够的多路转换器和加法器。相似地,可以有16个电路实例来处理每一个具有16个数据元素的两个操作数。在另一个实施例中,一些逻辑,例如像加法器614,可以在所有数据元素位置中共享。在又一个实现中,电路能够处理组合型数据,而对于多数据元素位置的数据可以通过该逻辑一起处理。 对于本实施例,用于符号运算的一部分逻辑也与其它组合型运算共享,以便减少设备数量和冗余度。本实施例的电路600从源操作数接收输入数据元素,并对在结果组合型数据操作数中的特定数据元素位置输出结果数据元素。虽然源元素,SRC X 602和SRC Y 604,在这里指单一数据元素,但是应该理解,这些元素是伴随一个组合型符号指令的较大的组合型数据操作数的一部分。在本实施例中,第一源数据元素,SRC X 602,耦合到一个两输入(2:1)多路转换器(mux)606。SIGN信号622控制该2:1多路转换器的操作。对于本实施例,如果符号运算正在被服务,则SIGN 622引起多路转换器606输出“0”,其作为第二输入耦合到多路转换器606。如果正在执行另一类型操作,则SIGN 622引起多路转换器606输出SRC X 602。 本实施例的第二源数据元素,SRC Y 604,以反相的605和非反相的604形式耦合到另一个2:1多路转换器608。如果正在执行符号运算,则SIGN 622引起多路转换器608输出反相输入605。在本例中,SRC Y 604的反相形式605可以用于实现减法。两个多路转换器606、608耦合到加法器614。多路转换器输出610、612分别是对加法器614的第一和第二输入。加法器614将把它的输入加在一起,在其输出616产生和。在符号运算期问,加法器接收“0”作为它的第一输入610,接收SRC Y 605作为它的第二输入612。加法器614看似把反相的SRC Y 605加到“0”603上。但是本实施例的SRC Y 604的反相本质上引起SRC Y 604把符号从正改变为负,或从负改变为正。这样,反相的SRC Y 605实质上引起加法器614在数学上从“0”603减去SRC Y 604。加法器614的输出616可以代表“0-SRC Y”的和。 SRC X 602的数据位还耦合到零检测器电路624,它将检测SRC X602是否等于零值。指示是否检测到总的零值的零检测器的输出626作为控制信号耦合到三输入(3:1)多路转换器618并作为输入耦合到逻辑异或(NOR)门628。一个实施例的零检测与加法并行执行,并且不产生任何新的关键时序路径。SRC X 602的N个符号位620,N是大于等于1的数,也耦合到逻辑NOR门628,并作为对3:1多路转换器618的控制。如果该NOR 628门的两个输入都是有效低的话,它将输出有效高信号。在本例中,如果关于符号位620的输入是低,表示SRC X 602为正,并且关于零检测器结果的输入为低,指示SRC X 602是非零值,则NOR门输出632将为高。 耦合到3:1多路转换器618的控制信号组634操作来选择合适的数据值作为结果630输出。SRC X 602、SRC Y 604以及“0-SRC Y”的和616的数据值耦合到3:1多路转换器618。对于本实施例,信号634将根据三种情况中之一引起一个输入被选择。如果第一源数据元素SRC X 602是零,则产生第一种情况。换句话说,第二数据元素604将被零乘。这一条件使用零检测器的输出626指示。在这种情况下,SRC X 602的输入(它在这里是零值)被选择,并作为结果630被输出。在本实施例中,这一零条件胜过其它控制信号620、632,零被输出,而不管SRC X 602的符号值和SRC Y 604的内容。 如果第一源数据元素SRC X 602为正和非零值,则出现第二种情况。这一条件使用NOR门输出632指示。实质上,第二数据元素604将被“+1”乘,这将得到SRC Y 604自身。在这一场合,SRC Y 604的输入被选择并作为结果630输出。如果第一源数据元素SRC X 602为负和非零值,则出现第三种情况。这种情况用SRC X 602的N个符号位620指示,如果SRC X 602为负,则它提供一个有效高值,而如果SRC X 602为正,则它提供一个有效低值。在这一场合,“0-SRC Y”的和616的输入被选择并并作为结果630输出。实质上,SRC X 602的负符号作为“-1”对待,“0-SRC Y”计算在数学上等价于第二数据元素SRC Y 604用因子“-1”乘。对于这一实施例,对于这一以及其它数据元素位置的结果被组合为具有和源数据操作数同样长度的结果数据块。例如,如果源组合型数据操作数是64或者128位宽,则结果组合型数据块也分别为64或128位宽。此外,用于符号运算的源数据操作数可以来自寄存器或存储器位置。对于本实施例,结果组合型数据块重写在SIMD寄存器中对于一个源数据操作数的数据。 图6B是根据本发明的执行符号运算的电路650的另一实施例的方框图。虽然该电路安排和连接不同,但是该实施例的大体安排和功能相似于图6A的电路600。本实施例的电路650也包括多路转换结构和求值第一数据元素的符号并用第二数据元素乘该符号的逻辑。该电路650是在单数据元素位置或者结果组合型操作数的单数据片的环境下表示和说明的,但是所述装置和方法可以根据需要扩展,并根据具体实现应用于各种长度的操作数。这样,图6B中的某些电路元件可以被复制,以便服务更多数据元素。例如,如果操作数能够包括16个数据元素位置,则图6B的电路可以扩展以支持该16个数据元素位置。 本实施例的电路650从第一组合型操作数接收输入数据作为第一数据元素SRC X 602,从第二组合型操作数接收输入数据作为第二数据元素SRC Y 604。SRC X 602作为输入耦合到3:1多路转换器618和零检测器逻辑624。零检测器624将确定SRC X 602是否是零。SRC Y 604耦合到3:1多路转换器618,其反相形式613(-SRC Y)耦合到加法器614。加法器614将把反相的SRC Y 613与其它加法器输入(在这一场合是“0”613)相加,以在它的输出616上得到一个和。通过把SRC Y 604的反相形式相加,加法器把零与负的SRC Y相加,或者数学上从“0”减去SRCY。加法器614的输出616是“0-SRC Y”,它作为输入耦合到3:1多路转换器618。值“0-SRC Y”也等价于用“-1”乘SRC Y。 零检测器电路624的输出信号626作为控制信号耦合到3:1多路转换器618,还作为输入耦合到两个输入逻辑NOR门628。相似地,SRC X602的N个符号位620作为控制耦合到3:1多路转换器618并作为其它输入连接到NOR门628。如果符号位620和零检测器输出626两者都是有效低的话,对于本实施例的NOR门628的输出632是有效高。NOR门输出632也作为控制信号耦合到3:1多路转换器618。该组控制信号634将根据哪个条件存在来选择三个多路转换器输入602、604、616中的一个作为结果630输出。这三种情况如上面图6A所述,是:(1)SRC X 602是零;(2)SRC X 602是正数和非零值;(3)SRC X 602是负数和非零值。对于第一种情况,选择SRC X 602,其为零。在第二种情况,选择SRC Y 604,它等于“SRC Y×(+1)”。对于第三种情况,选择“0-SRCY”616,它等于“SRC Y×(-1)”。对于每一数据元素位置的结果与其它结果一起组合到结果数据操作数中。 图7表示根据本发明的一个实施例对多个数据元素的组合型符号指令的操作。这是指令“PSIGNW DATA B,DATA A”的例子。PSIGNW指令将引起符号乘法运算来对在第一源组合型操作数DATA B 711和第二源组合型操作数DATA A 701中的字长度数据元素操作。这里的说明也可应用于其它组合型符号指令,例如PSIGNB和PSIGND。在本例中,一个源数据701的符号通过乘法施加在另一个源数据711的值上,得到积,该积被组织到目的地数据存储设备721中。在本例中,两个源操作数DATA A701和DATA B 711的每一个都包括8个组合型数据元素,结果721也一样。在本实施例中,所涉及的每一数据元素是8位或者一个字节宽。这样,DATA A 701、DATA B 711和RESULTANT 721数据块的每一个都是128位长。此外,这些数据块可以驻留在存储器和/或寄存器中。 如图7所示,DATA A 701包括具有以10为基数的数值的数据元素:“-4270”702,“240”703,“-3573”704,“7033”705,“-2427”706,“-9703”707,“0”708,“2605”709。相似地,DATA B 711包括具有以10为基数的数值的源数据元素:“-1120”712,“6401”713,“36”714,“0”715,“691”716,“-6780”717,“-855”718,“5177”719。以10为基数的数字另外在下面用角标10的后缀指出。相应地,把第二数据操作数701的每一数据元素的符号抽出并与在第一数据操作数711中的相应数据元素位置的每一数据元素的数相乘。如果对于在第二操作数710中的数据元素的数是“0”,则也把“0”输入到相应的结果数据元素位置中。对于一个实施例,对于在源数据701、711中的一个或者多个数据元素位置的符号乘法运算的处理可以并行执行。 当求出第二操作数701中的每一数据元素的符号值,用适当的因子乘第一操作数711中相应数据元素位置的数。对于本实施例,乘数是“-1”、“0”或“+1”中的一个,取决于第二操作数数据元素的符号值。虽然这里用乘法说明符号运算,但是实际的乘法运算在物理上可不一定需要而获得同样的数学结果。例如,未必用“0”乘来得到乘积“0”。物理上也未必需要用“+1”乘一个数,因为积将是该数自身。相似地,用“-1”乘一个数的结果也可以通过从“0”减去该数得到。 例如,第二操作数701的最左边的数据元素702具有值“-427010”,它是一个负数。同时,第一操作数711的最左边的数据元素712包含值“-112010”。因为第二操作数数据元素702的符号值为负,因此在组合型符号运算期间,相应的第一操作数数据元素712的值“-112010”概念上由“-1”乘以得到积“112010”。该积被存储到结果721的适当的数据元素位置722。 相似地,第二操作数701的最右边的数据元素709具有值“260510”,它是一个正数。同时,第一操作数711的最右边的数据元素719包含值“517710”。因为第二操作数数据元素709的符号值为正,因此在组合型符号运算期间,相应的第一操作数数据元素719的值“517710”概念上由“+1”乘以得到积“517710”。该积被存储到结果721的最右边的数据元素位置729。假设第二操作数数据元素709的符号值为正,则实际乘法将不需要,因为积729只是第一操作数数据元素719的值。 从第二操作数701右数第二数据元素708的值是“010”。同时,从第一操作数711右数第二数据元素718包含值“-85510”。因为第二操作数数据元素708的数是零,因此在组合型符号运算期间,相应的数据元素718的值“-85510”本质上由“0”乘,以得到积“0”。于是,把“0”存储在从结果721右数第二数据元素位置728中。因为第二操作数数据元素708具有零值,为实现乘积是“0”,乘法不是必须的。相似地,第二操作数数据元素的零值在本实施例中定义为在结果位置中引起“0”,而不管对于第二操作数数据元素可能存在的任何符号值。 图8A是表示执行符号运算的一种方法的一个实施例的流程图800。这里使用长度值L来表示操作数和数据块的宽度。取决于具体的实施例,L可以被用于以位、字节、字等的数目的形式来指定宽度。相似地,使用术语M指定组合在一个操作数内的数据元素或者段的数目。在框810,接收到具有M个元素的长度L的第一数据操作数B。在框820,接收到也具有M个元素的长度L的第二数据操作数A。对于本实施例,源操作数和结果等长,并具有同样数目的数据元素。在框830,处理执行符号乘法运算的指令。 按照对每一数据元素位置发生什么来进一步说明本实施例的在框830的符号运算的细节。对于一个实施例,并行地执行对于所有组合型的结果数据元素位置的符号运算。在另一个实施例中,一次可以处理数据元素的某一部分。在框831,进行检查以确定来自数据操作数A的元素的值是否是负(小于零)。如果判定该值为负,则在框832计算对于来自数据操作数B的元素的值与“-1”的乘积作为这一具体数据元素位置的结果值。如果对于来自操作数A的元素的值在框831判定为非负,则在框833确定来自操作数A的元素的值是否等于零。如果判定该值为零,则在框834将对于该数据元素位置的结果值设定为“0”。但是,如果在框833未发现对于操作数A元素的值是零,则在框835进行另一判断,确定对于该操作数A元素的值是否为正(大于零)。如果对于该操作数A元素的值为正,则在框836计算对于操作数B的数据元素的值与“+1”的乘积作为这一具体数据元素位置的结果值。如果对于本实施例,在框835判定操作数A元素的值非正,则在框837该值被认为是不明确的,因为三种情况(正、“0”、负)的哪一种都不适用。把对这些不同数据元素的结果值安排到相应于在结果组合型操作数中的源元素对的适当的数据元素位置中。 图8B是表示执行符号运算的一种方法的另一个实施例的流程图850。在框810和820的对于该实施例的方法流程相似于图8A的流程。在本例中,对于框830执行符号乘法运算的方法有一些不同。也按照对于每一数据元素位置发生什么来进一步说明本实施例的在框830的符号运算的细节。在框840,判定数据操作数A的元素中的值是否等于零。如果该判定为真,值是“0”,则在框841把“0”作为对于该数据元素位置的结果值输入。但是如果判定对于这一位置的操作数A的数据元素是非零值,则在框842计算操作数B数据元素的值与操作数A数据元素的符号的乘积作为对于这一数据元素位置的结果值。和图8A一样,把对于每一数据元素位置的结果值安排到结果组合型数据块中的适当位置中。 图9是对组合型数据操作数执行绝对值运算的逻辑的一个实施例的方框图。对于一个实施例,根据本发明的绝对值运算实现为操作不同长度数据类型的组合型绝对值(PABS)指令。为简单起见,这一PABS指令在这里按照具有8个数据元素的组合型操作数的一般形式来说明。这些数据元素可以是字节、字、双字等,取决于具体的实现。在本例中,使用像“PABS SRC1”这样的一行代码调用组合型绝对值运算,其中,SRC1指向SIMD寄存器或存储器位置。在这种情况下,SRC1既是数据源也是结果目的地。对于一个实施例,指令格式需要两个操作数,并且行将读作“PABS SRC1,SRC2”。在这种情况下,该PABS指令引起SRC2的数据元素中的绝对值被放入SRC1中。此外,在一个实施例中,提供组合型绝对值字节(PABSB)指令来产生字节数据类型的绝对值;提供组合型绝对值字(PABSW)指令来产生字数据类型的绝对值;并且提供组合型绝对值双字(PABSD)指令来产生双字数据类型的绝对值。 用于本实施例的绝对值运算的PABS指令以具有8个数据元素:A7、A6、A5、A4、A3、A2、A1和A0的第一数据操作数SOURCE DATA 910开始。每一单个的数据元素相应于结果930中的数据元素位置。把数据操作数910连同绝对值指令发送给绝对值计算逻辑920。绝对值计算逻辑920修改每一源数据元素中的值,使得在结果930中的相应元素位置中的数字值将具有该源数据元素数值的无符号绝对值。例如,最左边的结果元素位置具有源数据元素A7的数值的无符号绝对值。对于在源操作数910中的数据元素位置的全部集合重复这一绝对值处理。对于本实施例,结果位置可以和源操作数位置相同。在用PABS指令指定两个操作数的另一可选的实施例中,一个操作数可以指定源,另一个可以指定目的地。 在图像处理中经常实现压缩。视频帧通常以像素块压缩。高度压缩的视频由于量化操作可以显出成块的非自然信号(artifact)。在许多编码算法中,在较低位速率下发生的一类图像劣化称为成块效应。这一效应是在图像处理期间通过将图像分割为具有固定栅格的矩形块的不自然的方式而引起的。因为每一块的编码是独立的,因此没有任何东西来保证在块之间的边界上被编码的图像值的连续性。离散余弦变换的直流(DC)系数的量化可以给一个块增加或者减去一个偏移量,使它比临近块更亮或者更暗,并建立沿块边界的线的外观。这有时在编码的图像中能产生突出的人工边缘和成块的非自然信号。在图像序列中,相对于运动的场景观看的非运动的边缘的背景栅格可以产生非常不自然和不愉快的类型的退化。为防止这些成块效应发生,一种解块方案可以使用滤波器来平滑人工边缘。使用平滑了块间边界的解块算法可以使这些非自然信号较不容易发现。然而,如果沿块边界确有一个真的边缘的话,这一算法不应该平滑块之间的台阶。一般,如果边缘台阶的大小大于可以由量化产生的台阶大小,则在相邻块之间的台阶被认为是真正的边缘。相似地,可以使用其它算法来调和块的表面。 对于视频压缩方法H.263和MPEG4的一些解块算法使用符号或正负号函数运算和绝对值运算。在这些视频解块算法中,符号函数计算修正因子的符号。使用绝对值运算决定修正因子的大小并用预定阈值比较该视频中的偏差。像上面说明的PSIGN和PABS的SIMD指令的实施例可以与用于H.263和MPEG4的解块算法一起使用。正负号运算涉及计算来自数据的符号值以及提供符号值是什么的指示。例如,对一个数据元素的正负号函数运算,如果该数据元素是零则输出“0”,如果该数据元素是负则输出“-1”,如果该数据元素是正则输出“+1”。对于一个实施例,可以使用根据根据本发明的PSIGN指令提供正负号函数功能。 一种非线性滤波器解块的方法使用三步骤非线性滤波方法。首先,特征化块边界。第二,使用第一步骤的结果计算修正沿块边界的像素的值的因子。第三,通过加上或减去在第二步骤计算的因子,修正沿边界的像素的值。下面的例子说明一种实现的H.263解块算法。A和B是在块边界一侧的像素。A 1012是离开块边界一个像素距离的像素数组。B 1014是沿该块边界的像素数组。C和D是在该边界另一侧的像素。C 1022是沿从数组B的边界另一侧上的块边界的数组。D 1024是离开和数组C 1022同一个块1020中的块边界一个像素距离的像素数组。为减少由于在块X 1010和块Y 1020之间的量化产生的连续性非自然信号,但要保持真正的边缘,而执行解块。解块结果标记为A′、B′、C′、和D′。 图10表示使用根据本发明的SIMD指令的解块算法的操作。图10中表示出两个数据块1010、1020。在本例中,这些块包括用于图像或者视频流的数据。每一块包括多行和多列数据元素。例如,在一些图像处理算法中的块是8乘8的数据块。这里,集中在BLOCK X 1010和BLOCK Y1020之间的块边界来进行表示。底部两个数据行1012、1014被表示,用于BLOCK X 1010。BLOCK Y 1020用顶部两个数据行1022、1024表示。每一数据行包括从7到0标号的数据元素。 用对于数组A 1012、B 1014、C 1022、D 1024的像素数据加载SIMD寄存器。首先,特征化块边界。决定跨该块边界的台阶的大小和方向。这可以通过下面的等式表示: d=(A-4B+4C-D)/8。 然后,用升降斜坡计算对于数组B 1014和C 1022的修正因子: d1=SIGN(d)×(MAX(0,ABS(d)-MAX(0,2×(ABS(d)-strengh))))。 计算对于数组A 1012和D 1024的修正因子: d2=clipd1((A-D)/4,d1/2)。 这里,使用绝对值和最大值和修剪操作来计算像素修正因子d1和d2的大小。符号运算也使用来自第一步骤的因子d来计算修正因子d1的符号。从像素值中要么加上要么减去修正因子d1和d2。按照下式修正对于矩阵B 1014和C 1022的边界像素: B′=clip(B+d1);和C′=clip(C-d1)。 然后修正对于矩阵A 1012和D 1024的像素: A′=A-d2;D′=D+d2。 d1计算是称为升降斜坡的函数。当d等于“stength”时是峰值,而当d等于“2×stength”时值为零。通过量化步长大小决定“stength”的值。一般“stength”大约是该步长大小的一半。函数“clipd1()”修剪“(A-D)/4”的结果为“d1/2”的+或-绝对值。函数“clip()”修剪所计算的结果为“0”或“255”的值。这一算法的实施例可以用SIMD指令实现。对于本实施例,可以用PSIGNB或PSIGNW指令实现符号运算。相似地,可以用PSIGNB或PSIGNW指令实现绝对值运算。在本实施例中,对于数组A、B、C和D的多个像素值被加载到单独的SIMD寄存器中。对于一个实施例,一次或者并行地对多于一个像素列应用解块操作。使用符号、绝对值和最大值指令在单独的SIMD寄存器中计算中间值d1和d2的多个值。在单独的SIMD寄存器中计算结果A′、B′、C′和D′。可以用SIMD最大值和最小值指令计算修剪操作。 上述符号指令的功能用于本实施例的非线性滤波解块算法中。可以用像H.263或MPEG4的编码技术实现这一解块算法的实施例,以去除由这两种常见的视频压缩方法的量化操作引起的成块非自然信号。通过在解块算法中使用乘法的符号指令,本方案的实施例可以加速这些编码算法的计算并减小代码大小。例如,单一PSIGN指令可以代替执行相似数据操作所需要的多个算术指令或不能对组合型数据操作的指令。从而可以改善总的通过量并释放处理资源。 对于解块算法的一个实施例,符号指令和绝对值指令没有饱和行为。这意味着,对于一个组合型绝对值指令,具有值-2n-1的N位数据将被计算为2n-1。在组合型符号指令的情况下,具有等于-2n-1的第一源元素和负的第二源数据元素的N位数据将被计算为2n-1。在一些场合,需要带符号的结果,因此不允许大于2n-1-1的正值。一种解决方案是强迫最大的负和正值在执行PABS或PSIGN指令前具有同样的大小。 一个实施例的符号和绝对值运算可以应用于下面说明的MPEG4解块算法。10个像素,5个在块边界的任何一边,表示为V0 V1 V2 V3 V4|V5V6 V7 V8 V9。“|”表示块边界。首先该块边界被特征化为: count=φ(V0-V1)+φ(V1-V2)+φ(V2-V3)+φ(V3-V4)+φ(V4-V5) +φ(V5-V6)+φ(V6-V7)+φ(V7-V8)+φ(V8-V9), 其中,如果ABS(γ)<=THRESHOLD1,则φ(γ)=1,否则φ(γ)=0。 如果count大于或者等于THRESHOLD2,则使用DC方式,否则使用缺省方式。该块边界也被DC特征化为: 最大值=MAX(V1,V2,V3,V4,V5,V6,V7,V8); 最小值=MIN(V1,V2,V3,V4,V5,V6,V7,V8)。 如果(ABS(最大值-最小值)<2×量化因子),则进行与DC相关的修正步骤2和3,否则不进行修正。对于缺省方式,修正因子计算如下: a3,0=(2×V3-5×V4+5×V5-2×V6)/8; a3,1=(2×V1-5×V2+5×V3-2×V4)/8; a3,2=(2×V5-5×V6+5×V7-2×V8)/8; a3,0′=SIGN(a3,0)×MIN(ABS(a3,0),ABS(a3,1),ABS(a3,2)); d=CLIP(5×(a3,0′-a3,0)/8,0,((V4-V5)/2)×δ(ABS(a3,0)<量化因子)), 其中,如果真,则δ()计算为1,如果假,则为0。 然后修正边界像素。函数CLIP(r,p,q)在p和q之间修剪r。对于DC方式,修正因子计算如下: if m<1,then if ABS(V1-V0)<QP,then pm=V0;else pm=V1; if 1<=m<=8,then pm=Vm; if m>8,then if ABS(V8-V9)<量化因子,then pm=V9,else pm=V8。 图11是表示使用SIMD指令执行解块算法的方法的一个实施例的流程图1100。例如这种解块算法可以以用于H.263和MPEG4压缩方法的代码实现。在块1102接收对于第一块和第二块的像素数据。在框1104特征化这两块之间的块边界。在框1106通过使用对于组合型符号乘法运算和组合型绝对值运算的指令,对组合型的像素数据计算一个或者多个修正因子。当为解块算法计算修正因子时使用PSIGN和/或PABS可以减少所需要的非SIMD指令并提高处理资源的效率。例如根据本发明用于图像处理算法的一个解块序列的实施例使用PSIGN运算决定修正因子的符号,使用PABS计算该修正因子的大小。在块1108使用以符号乘法运算或绝对值运算计算出的一个或者多个修正因子修正对于第一块和第二块的边界像素。 这样,公开了一种用于执行符号和乘法运算的方法、装置和指令的技术。虽然在附图中说明和表示了一些示范实施例,但是应该理解,这些实施例仅仅是举例说明性的,并不对广阔的本发明构成限制,本发明不限于图示和说明的特定构造和安排,因为对于本领域的技术人员来说,在研究本公开后可以进行各种其它的修改。在像发展迅速、进一步的进步不容易预见的这样的技术领域中,所公开的实施例在结构上和细节上很容易被修改,这一点由于允许技术进步而变得更加方便,它们不离开本公开的原理或所附权利要求的范围。
《执行符号乘法运算的方法、装置和指令.pdf》由会员分享,可在线阅读,更多相关《执行符号乘法运算的方法、装置和指令.pdf(62页珍藏版)》请在专利查询网上搜索。
本发明公开了一种用于执行符号和乘法运算的方法、装置和程序设备。在一个实施例中,一个装置包括执行第一指令的执行资源。响应于所述第一指令,所述执行资源向存储位置存储等于第一源操作数乘以第二源操作数的符号值的乘积的结果值。在一些实施例中,第一源操作数可以被该结果重写。 。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1