一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

通过算术和/或按位单元执行条件语句的制作方法

2022-08-13 17:52:04 来源:中国专利 TAG:


1.本描述一般而言涉及计算系统,并且更具体地涉及计算电路对条件语句和表达式的执行。


背景技术:

2.在计算机科学中,条件语句是编程语言的特征,其根据指定的布尔条件评估为true或false而执行不同的计算或动作。
3.条件语句的执行要求对布尔条件的评估,因此要求数字的比较。这个比较确定一个数字是大于、等于还是小于另一个数字。布尔条件通常由数字比较器评估。数字比较器是硬件电子设备,它以二进制形式将两个数字作为输入并确定一个数字是大于、小于还是等于另一个数字。
4.条件语句使用数字比较器的输出来切换到执行一段或另一段计算机代码。数字比较器的每个整个“if-then do”操作至少花费处理器的2个时钟周期。此外,数字比较器常常无法并行执行多级条件任务。因此,数字比较器(或alu的逻辑块)常常构成集成电路处理器的瓶颈。


技术实现要素:

5.本说明书描述系统如何可以单独用处理器的算术块和/或位单元来执行包括条件语句的计算机程序。
6.可以实现本说明书中描述的主题的特定实施例以实现以下优点中的一个或多个。
7.条件语句被变换成算术和/或按位运算的集合。照此,计算机程序可以单独由处理器的算术和/或位单元执行。特别地,可以在不使用数字比较器的情况下执行计算机程序。如上面所解释的,数字比较器的每个整体操作至少花费处理器的2个时钟周期。另一方面,处理器的算术单元能够在1个时钟周期内执行绝大多数算术计算。照此,本说明书中描述的技术提高了处理器对计算机程序的执行速度。可以移除数字比较器,这为算术和/或按位运算单元留出更多空间。对于恒定的芯片尺寸,因此可以增加芯片的功率,从而提高执行速度。
8.另外,数字比较器常常不能执行多级条件任务的并行执行。因此,数字比较器常常成为集成电路处理器的瓶颈。另一方面,算术和/或按位表达式可以分成多个片段,然后可以由多个算术和/或按位块并行执行。照此,本说明书中描述的技术可以通过多个并行工作的算术块执行计算机程序来进一步提高处理器的执行速度。
9.该方法可以在任何合适的编程语言的各个级别上使用。特别地,该方法可以用于任何合适的低级语言(例如,汇编语言,或在指令集体系架构(isa)级别),以及在任何合适的高级编程语言(例如,c 代码或java等)的特定软件程序中。
10.本说明书的主题的一个或多个实施例的细节在附图和以下描述中阐述。从说明书、附图和权利要求书中,该主题的其他特征、方面和优点将变得显而易见。
附图说明
11.图1是图示示例系统的图。
12.图2是用于仅用处理器的(一个或多个)算术和/或按位单元来执行计算机程序的示例过程的流程图。
13.图3是图示if-then(-else)条件语句的基本结构的伪代码。
14.图4是用于将布尔条件变换成算术和/或按位表达式的示例过程的流程图。
15.图5是用于将a=b变换成a=b的算术和/或按位表达式的示例过程的流程图。
16.图6是用于将a≥b变换成a≥b的算术和/或按位表达式的示例过程的流程图。
17.图7a和7b是用于将a《b变换成a《b的算术和/或按位表达式的示例过程的流程图。
18.图8是用于在条件语句具有算术主体时生成计算机程序的算术和/或按位表达式的示例过程的流程图。
19.图9是用于在条件语句具有非算术主体时生成计算机程序的算术和/或按位表达式的示例过程的流程图。
20.图10是用于提供计算机程序的算术和/或按位表达式的示例过程的流程图。
21.图11a是包括具有算术主体的条件语句的c 计算机程序的示例。图11b是由图11a的计算机程序的变换产生的c 计算机程序的示例。图11c是包括具有算术主体的条件语句的汇编语言计算机程序的示例。图11d是由图11c的计算机程序的变换产生的汇编语言计算机程序的示例。
22.图12a是包括具有非算术主体的条件语句的c 计算机程序的示例。图12b是由图12a的计算机程序的变换产生的c 计算机程序的示例。图12c是包括具有非算术主体的条件语句的汇编语言计算机程序的示例。图12d是由图12c的计算机程序的变换产生的汇编语言计算机程序的示例。
23.图13a和图13b图示了算术和/或按位运算单元的集成电路的组合逻辑电路的示例。
24.图14是用于减小矩阵类型数据的尺寸的示例过程的流程图。
25.图15是用于并行排序矩阵类型数据的示例过程的流程图。
具体实施方式
26.图1是图示示例系统100的图。系统100是可以实现本说明书中描述的技术的系统的示例。
27.系统100包括处理器110,诸如中央处理单元(cpu)、图形处理单元(gpu)、神经处理单元(npu)、张量处理器单元(tpu)或任何其它类型的使得能够执行条件任务的处理单元。处理器执行由计算机程序182中的指令指定的基本算术、逻辑、控制和输入/输出(i/o)操作。处理器110可以是微处理器,其中cpu包含在单个金属氧化物半导体(mos)集成电路(ic)芯片160上。包含cpu的ic还可以包含存储器单元150,诸如动态随机存取存储器(dram),以及多于一级的高速缓存存储器,以及连接到(一个或多个)输入设备180或(一个或多个)输出设备190的外围接口。
28.处理器110包括多个功能组件,包括执行算术和按位逻辑运算的一个或多个算术和/或按位运算单元(abu)130,向abu 130供给操作数并存储abu操作的结果的一个或多个
寄存器140,以及通过指导abu 130、寄存器140和其它组件的协调操作来编排指令的执行的一个或多个控制单元(cu)120。
29.abu 130是执行算术和/或按位逻辑运算的数字电路。abu 130可以包括一个或多个算术块131、一个或多个按位移位块132和一个或多个按位逻辑块133。算术块131执行算术运算,诸如加法、进位加法、减法、借位减法。按位移位块132执行移位操作,诸如算术移位、逻辑移位、循环、通过进位循环。按位逻辑块133执行按位逻辑运算,诸如and、or、异或。在一些实施例中,abu 130不包括任何数字比较器。在一些实施例中,处理器110不包括任何数字比较器。
30.在操作中,处理器110访问并执行包括指令序列的计算机程序182。可以从存储器单元150或从输入设备180访问计算机程序182。处理器可以遵循包括获取、解码和执行步骤的指令周期。可以同时获取、解码和执行多条指令。执行步骤可以由单个动作或一系列动作组成。在每个动作期间,处理器的各个部分被电连接,因此它们可以执行期望操作的全部或部分,然后完成该动作。结果可以被写入寄存器140之一或写入存储器单元150。
31.cu 120指导处理器110的操作。cu 120控制存储器150、abu 130以响应已经被处理器访问的计算机程序182。特别地,cu 120可以通过提供定时和控制信号来指导其它单元的操作。
32.在一些实施例中,cu 120包括将计算机程序182变换成计算机程序的算术和/或按位表达式122的变换单元121。变换单元121识别计算机程序182中找到的条件语句并将其变换成条件语句的算术和/或按位表达式。变换单元121基于算术和/或按位运算和操作数生成计算机程序182的算术和/或按位表达式122。cu 120然后将计算机程序182的算术和/或按位表达式122提供给abu 130。在其它实施例中,该系统包括分离的数据处理装置,其识别计算机程序182中找到的条件语句并将其变换成条件语句的算术和/或按位表达式。
33.在一些实施例中,条件语句的算术和/或按位表达式仅包括算术和/或按位运算。在一些实施例中,基本上所有的条件语句(例如,超过50%、超过60%、超过70%、超过80%、超过90%或超过95%)都被变换,但是如果处理器仍然包括可以被用于评估条件语句的既定适当子集的数字压缩器,那么一些条件语句不需要被变换。
34.abu 130从cu 120访问计算机程序182的算术和/或按位表达式122。abu 130可以访问来自寄存器140或存储器单元150的操作数。操作数也可以是由abu 130自身生成的常数。abu 130还可以访问状态信息,其传达关于先前操作或当前操作的信息。abu 130输出所执行的操作的结果。结果可以由数据字和/或状态信息组成。结果可以存储在寄存器140或存储器单元150中。
35.图2是用于执行计算机程序的示例过程的流程图。该过程可以通过安装在一个或多个位置的一个或多个计算机上并根据本说明书进行编程的一个或多个计算机程序来实现。例如,该过程可以由图1中所示的系统100执行。为方便起见,该过程将被描述为由一个或多个计算机的系统执行。一些实施例涉及在经变换的计算机程序在系统100上执行之前例如在完全不同的计算机系统上预处理计算机程序以进行变换。例如,源编译器可以在为目标计算机产生目标代码和/或机器级代码时进行变换。
36.系统访问(210)计算机程序(例如,图1的计算机程序182)。该系统确定(205)计算机程序是否包括至少一个包括布尔条件的条件语句。如果计算机程序包括至少一个条件语
句,那么系统将布尔条件变换(220)成布尔条件的算术和/或按位表达式。如果计算机程序不包括任何条件语句,那么系统向abu 130提供(240)计算机程序的算术和/或按位表达式以供执行。
37.当被执行时,条件语句使处理器根据指定的布尔条件评估为true或false而执行相关联的任务。该任务可以包括一个或多个计算和/或一个或多个动作。指定的布尔条件要求至少将一个变量与一个值或另一个变量进行比较。例如,比较可以确定变量的值(例如,a)是大于(例如,a》b)、等于(例如,a=b)还是小于(例如,a《b)另一个变量的值(例如,b)。比较的结果确定与相关联的任务将由处理器执行。
38.图3是图示if-then(-else)条件语句310的基本结构的伪代码。当解释器找到if时,它预期布尔条件301并将该布尔条件301评估为值true或false。如果条件为true,那么处理器执行后续任务302。否则,在下一个分支中继续执行。如果存在替代任务303(例如,在else块中),那么处理器执行替代任务303。如果没有else分支,那么处理器执行end if之后的语句。在执行完任一分支之后,控制返回到end if之后的点。
39.再次参考图2,系统(例如,变换单元121)将布尔条件变换(220)为布尔条件的算术和/或按位表达式。布尔条件的算术和/或按位表达式将条件语句的变量作为变量。在一些实施方式中,布尔条件的算术和/或按位表达式使得布尔条件的算术和/或按位表达式的输出验证以下两个特性。如果变量的值验证布尔条件,那么布尔条件的算术和/或按位表达式等于1。如果变量的值不验证布尔条件,那么布尔条件的算术和/或按位表达式等于0。照此,布尔值true被转换成1,而布尔值false被转换成0。在执行中,布尔条件的算术和/或按位表达式维持可执行代码中要被执行的部分,同时将不要执行的部分归零。布尔条件语句到算术和/或按位表达式的变换在图4中有更详细的描述。
40.可以在任何合适的编程语言的各个级别执行变换。特别地,该方法可以用于任何合适的低级语言(例如,汇编语言,或在指令集体系架构(isa)级别),以及任何合适的高级编程语言(例如,、c 代码或java等)的特定软件程序。当将源代码编译为目标机器的可执行代码时,该过程可以作为预处理步骤执行,或者当在解释器而不是编译器中实现时,可以作为即时处理执行。
41.下面提供了可以被用于将布尔条件变换成算术和/或按位表达式的特定和一般变换公式的示例。
42.具体变换公式的示例(在asm和/或isa级别)
43.由于整数、字符或布尔类型的具体变换公式
44.answer=z
|k|
%z(对于x=y且x》=y条件)
45.answer=1-z
|k|
%z(对于所有其它条件)
46.用于float或double类型的具体变换公式(浮点类型数据)
47.answer=z
ceil|(k)
|%z(对于x=y且x》=y条件)
48.answer=1-z
ceil|(k)|
%z(对于所有其它条件)
49.用于所有数据类型(包括数组和字符串)的一般变换公式的示例
50.布尔条件“if(=)”的一般变换
[0051][0052]
布尔条件“if(》=)”的一般变换
[0053][0054]
布尔条件“if(《)”的一般变换
[0055][0056]
布尔条件“if(》)”的一般变换
[0057][0058]
符号:
[0059]-z是底数。
[0060]-a,b是包括n个元素的数组。
[0061]-a[i],b[i]是数组的元素。像整数、浮点数等单个元素是只有一个元素的一维数组(行向量矩阵)。
[0062]-answer是布尔条件的算术和/或按位表达式。
[0063]-%是除法的余数。
[0064]-ceil(x)是将x映射到大于或等于x的最小整数的上限函数。
[0065]-如果布尔条件是x=y,那么k=x-y
[0066]-如果布尔条件是x≥y,那么k=(x-y)

(|x-y|)
[0067]-对于x≥y,x《y是“else”结果
[0068]
底数z可以是数字系统的底数。大多数以数字系统为底的算术运算(例如,幂函数和除法的余数)都可以通过移位运算立即计算出来。特别地,如果处理器使用二进制系统,那么z可以等于2。
[0069]
在数组和字符串的情况下,可以对数组的元素进行归一化。可以使用任何已知的归一化方法。这提高了条件语句的执行速度。
[0070]
返回到图2,系统(例如,变换单元121)生成(230)计算机程序的算术和/或按位表达式。系统将计算机程序中的布尔条件替换为布尔条件的算术和/或按位表达式。在执行中,布尔条件的算术和/或按位表达式维持可执行代码中要执行的部分,同时将不要执行的部分归零。计算机程序的算术和/或按位表达式的生成将结合图8和9更详细地描述。
[0071]
系统(例如,cu 120)将计算机程序的算术和/或按位表达式提供(240)给算术和/或按位单元(例如,abu 130)以供执行。计算机程序的算术和/或按位表达式可以是任何合适的编程语言,特别是任何合适的低级语言(例如,汇编语言,或在指令集体系架构(isa)级别),以及任何合适的高级编程语言(例如,c 代码或java等)的特定软件程序。计算机程序的算术和/或按位表达式的执行不要求数字的任何直接比较。系统因此可以将计算机程序的算术和/或按位表达式提供给算术和/或按位单元,特别是不包括任何数字比较器的算术和/或按位单元。
[0072]
系统(例如,abu 130)执行(250)计算机程序的算术和/或按位表达式。条件语句的算术和/或按位表达式的执行提供与条件语句的执行相同的结果,同时不要求任何数字比较。照此,不包括任何数字比较器的处理器可以执行计算机程序。结合图11a和11b更详细地描述了具有算术主体的条件语句的执行。关于图12a和12b更详细地描述了具有非算术主体的条件语句的执行。如关于图10更详细地描述的,计算机程序的算术和/或按位表达式可以
被分段并且这些片段并行地(例如,同时或并发地)运行,特别是在多级条件语句的情况下。
[0073]
图4是用于将布尔条件变换(例如,图2的220)成算术和/或按位表达式的示例过程的流程图。布尔条件将a作为第一个变量并且b作为第二个变量。
[0074]
系统(例如,变换单元121)从a中减去(410)b。
[0075]
系统(例如,变换单元121)计算(420)减法的结果的绝对值。
[0076]
系统(例如,变换单元121)基于减法的结果的绝对值计算(430)指数。
[0077]
系统(例如,变换单元121)通过计算出的指数对底数的取幂来计算(440)指数。底数可以是任何数字。特别地,底数可以是由处理器使用的数字系统的底数。特别地,如果处理器使用二进制系统,那么底数可以等于2。大多数以数字系统为底的算术运算(例如,幂函数和除法的余数)都可以通过移位运算立即计算出来。特别地,可以通过将等于1的位左移与计算出的指数相等的位数来执行由计算出的指数对底数的幂运算。这提高了执行速度。
[0078]
系统(例如,变换单元121)将布尔条件的算术和/或按位表达式计算(450)为指数除以底数的余数。
[0079]
如果布尔条件得到验证,那么计算指数以使指数等于0。任何以0为幂的数字都产生1。照此,如果布尔条件得到验证,那么指数等于0,并且布尔条件的算术和/或按位表达式将等于1。
[0080]
在一些实施例中,底数是2。如果处理器使用二进制系统,那么可以通过取指数的最后一位来提取指数除以底数的余数。这降低了计算的复杂性。
[0081]
图5是用于将布尔条件a=b变换成a=b的算术和/或按位表达式的示例过程的流程图。
[0082]
系统(例如,变换单元121)从a中减去(510)b。
[0083]
系统(例如,变换单元121)计算(520)指数作为510的结果的绝对值。
[0084]
系统(例如,变换单元121)通过在520处计算出的指数对底数的取幂来计算(530)指数。
[0085]
系统(例如,变换单元121)将布尔条件的算术和/或按位表达式计算(540)为在530处计算出的指数除以底数的余数。
[0086]
计算a=b的算术和/或按位表达式,使得以下内容得到验证。如果a=b,那么指数等于0,并且a=b的算术和/或按位表达式等于1。如果a≠b,那么指数不等于0,并且a=b的算术和/或按位表达式等于0。
[0087]
图6是用于将布尔条件a≥b变换成a≥b的算术和/或按位表达式的示例过程的流程图。
[0088]
系统(例如,变换单元121)从a中减去(610)b。
[0089]
系统(例如,变换单元121)计算(620)结果610的绝对值。
[0090]
系统(例如,变换单元121)从620的结果中减去(630)610的结果。
[0091]
系统(例如,变换单元121)计算(640)指数作为630的结果的绝对值。
[0092]
系统(例如,变换单元121)通过在640处计算出的指数对底数的取幂来计算(650)指数。
[0093]
系统(例如,变换单元121)将布尔条件的算术和/或按位表达式计算(660)为在650处计算出的指数除以底数的余数。
[0094]
计算a≥b的算术和/或按位表达式,使得以下内容得到验证。如果a≥b,那么指数等于0,并且a≥b的算术和/或按位表达式等于1。如果a《b,那么指数不等于0,并且a≥b的算术和/或按位表达式等于0。
[0095]
图7a是用于将布尔条件a《b变换成a《b的算术和/或按位表达式的示例过程的流程图。
[0096]
系统(例如,变换单元121)从a中减去(710)b。
[0097]
系统(例如,变换单元121)计算(720)结果710的绝对值。
[0098]
系统(例如,变换单元121)从720的结果中减去(730)710的结果。
[0099]
系统(例如,变换单元121)计算(740)指数作为730的结果的绝对值。
[0100]
系统(例如,变换单元121)通过在740处计算出的指数对底数的取幂来计算(750)指数。
[0101]
系统(例如,变换单元121)将布尔条件的算术和/或按位表达式计算(760)为在750处计算出的指数除以底数的余数。
[0102]
计算a《b的算术和/或按位表达式,使得以下内容得到验证。如果a《b,那么指数等于0,并且布尔条件的算术和/或按位表达式等于1。如果a≥b,那么指数不等于0,并且布尔条件的算术和/或按位表达式将等于0。
[0103]
图7b是用于将布尔条件a《b变换成a《b的算术和/或按位表达式的另一个示例过程的流程图。
[0104]
系统(例如,变换单元121)从a中减去(710b)b。
[0105]
系统(例如,变换单元121)将布尔条件的算术和/或按位表达式计算(720b)为从a中减去b的结果的借位值。
[0106]
计算a《b的算术和/或按位表达式,使得以下内容得到验证。如果a《b,那么从a中减去b的结果的借位值等于1,并且布尔条件的算术和/或按位表达式等于1。如果a≥b,那么从a中减去b的结果的借位值等于0,并且布尔条件的算术和/或按位表达式等于0。
[0107]
图8是用于在条件语句具有算术主体时生成(例如,图2的230)计算机程序的算术和/或按位表达式的示例过程的流程图。关于图11a和11b更详细地描述示例。
[0108]
系统(例如,变换单元121)将后续(consequent)任务(例如,图3的302)的语句乘以(810)布尔条件的算术和/或按位表达式。照此,当执行计算机程序时,发生以下情况。如果布尔条件得到验证,那么布尔条件的算术和/或按位表达式等于1,通过与布尔条件的算术和/或按位表达式相乘来维持后续任务,并执行后续任务。如果布尔条件未得到验证,那么布尔条件的算术和/或按位表达式等于0,后续任务通过与布尔条件的算术和/或按位表达式相乘而无效,并且不执行后续任务。
[0109]
如果条件语句包括被公式化为算术语句的替代任务(例如,图3的303),那么系统(例如,变换单元121)将算术后续任务乘以(820)1减去布尔条件的算术和/或按位表达式。照此,当执行计算机程序时,发生以下情况。如果布尔条件得到验证,那么布尔条件的算术和/或按位表达式等于1。后续任务通过与布尔条件的算术和/或按位表达式相乘来维持,而替代任务通过与1减去布尔条件的算术和/或按位表达式相乘而无效。因此,后续任务被执行,而替代任务不被执行。如果布尔条件未得到验证,那么布尔条件的算术和/或按位表达式等于0,后续任务通过与布尔条件的算术和/或按位表达式相乘而无效,而替代任务通过
乘以1减去布尔条件的算术和/或按位表达式来维持。因此,替代任务被执行,而后续任务不被执行。
[0110]
图9是用于在条件语句具有非算术主体时生成(例如,图2的230)计算机程序的算术和/或按位表达式的示例过程的流程图。关于图12a和12b更详细地描述示例。
[0111]
系统(例如,变换单元121)在计算机程序的算术和/或按位表达式中包括到与布尔条件的算术和/或按位表达式相关联的标签的无条件跳转。标签以布尔条件的算术和/或按位表达式发起,使得当条件语句的算术和/或按位表达式等于1时,标签等于后续任务的开始语句(例如,图3的302)。照此,当执行计算机程序时,发生以下情况。如果布尔条件得到验证,那么布尔条件的算术和/或按位表达式等于1。标签等于后续任务的开始语句。无条件跳转语句指向后续任务。在执行期间,当处理器找到无条件跳转语句时,处理器执行后续任务。
[0112]
如果存在替代任务(例如,图3的303),那么进一步发起标签,使得当条件语句的算术和/或按位表达式等于0时,它等于替代任务的开始语句。照此,当执行计算机程序时,发生以下情况。如果布尔条件得到验证,那么布尔条件的算术和/或按位表达式等于1,标签等于后续任务的开始语句,无条件跳转语句指向后续任务,并且后续任务被执行。如果条件语句未得到验证,那么布尔条件的算术和/或按位表达式等于0,标签等于替代任务的开始语句,跳转语句指向替代任务,并且替代任务被执行。
[0113]
图10是用于提供(例如,图2的240)计算机程序的算术和/或按位表达式和可选地执行(例如,图2的250)计算机程序的算术和/或按位表达式。算术和/或按位表达式是分段的。然后可以由多个算术和/或按位块并行执行多个片段。照此,处理器的执行速度可以通过由多个并行工作的算术块执行计算机程序来提高。另外,多级条件语句可以并行执行。
[0114]
系统(例如,变换单元121)将计算机程序的算术和/或按位表达式分段(1010)成多个片段。
[0115]
系统(例如,abu 130)并行执行(1020)片段。特别地,abu 130可以执行多线程。abu 130并行执行至少两个片段。特别地,可以使用逆波兰表示法来执行片段。
[0116]
图11a是包括具有算术主体的条件语句1101a的c 计算机程序的示例。
[0117]
条件语句1101a的布尔条件1101a是x是否等于y。后续任务1102是z等于1。替代任务1103是z等于0。条件语句1110a可以表示如下:
[0118]
如果x等于y,那么z等于1。
[0119]
如果x不等于y,那么z等于0。
[0120]
因此条件语句1110a的执行要求比较变量x和y。
[0121]
图11b是由图11a的计算机程序的变换产生的c 计算机程序的示例。
[0122]
条件语句1110a已被变换成仅包括算术和/或按位运算的算术和/或按位表达式1110b。布尔条件的算术和/或按位表达式1101b是z=1《《(x-y))%2。照此,如果x等于y,那么z=1《《(x-y))%2=1,如果x不等于y,那么z=1《《(x-y))%2=0。
[0123]
条件语句的算术和/或按位表达式1101b的执行因此提供与条件语句1101a的执行相同的结果,但不要求比较变量x与y。
[0124]
图11c是包括具有算术主体的条件语句的汇编语言计算机程序1100c的示例。图11d是由图11c的计算机程序的变换产生的汇编语言计算机程序1100d的示例。
[0125]
图12a是包括具有非算术主体的条件语句1201a的c 计算机程序的示例。
[0126]
条件语句1201a的布尔条件1201a是x是否等于y。后续任务1201是输出“等于”。替代任务1202是输出“不等于”。条件语句1210a可以如下表达。如果x等于y,那么程序输出“等于”。如果x不等于y,那么程序输出“不等于”。
[0127]
图12b是由图12a的计算机程序的变换产生的c 计算机程序的示例。
[0128]
条件语句1210a已被变换成仅包括算术和/或按位运算的算术和/或按位表达式1210b。布尔条件1201b的算术和/或按位表达式是res=(1《《k)%2,其中k=x-y。照此,如果x=y,那么res=(1《《k)%2=1,而如果x≠y,那么res=(1《《k)%2=0。在初始化语句1205中初始化无条件跳转1204。无条件跳转提供到标签(“condition[res]”)的无条件跳转。
[0129]
当条件语句的算术和/或按位表达式等于1(res=1)时,标签(“condition[1]”)等于后续任务的开始语句(“to_do”)1201。无条件跳转语句指向后续任务1201。在执行期间,当处理器找到无条件跳转语句1204时,处理器执行后续任务1201。
[0130]
当条件语句的算术和/或按位表达式等于0(res=0)时,标签(“条件[0]”)等于替代任务的开始语句(“elso_do”)1202。无条件跳转语句指向替代任务1202。在执行期间,当处理器找到无条件跳转语句1204时,处理器执行替代任务1202。
[0131]
因此,条件语句的算术和/或按位表达式的执行提供与条件语句的执行相同的结果。
[0132]
图12c是包括具有非算术主体的条件语句的汇编语言计算机程序1200c的示例。图12d是由图12c的计算机程序的变换产生的汇编语言计算机程序1200d的示例。
[0133]
图13a图示了abu的集成电路的组合逻辑电路1310a的示例。
[0134]
组合逻辑电路1310a包括半减法器1302,其用于执行两个位的减法。半减法器包括xor门1303、not门1304和and门1305。半减法器1302有两个输入:被减数a 1311和减数b 1312。半减法器1302有两个输出:差值1313和借出1314。当条件逻辑电路1310a需要从多位减法中的下一位借位时,设置借出信号1314。仅当a等于0且b等于1时,借出信号1314才等于1。因此借出信号在a《b时等于1,而在a≥b时等于0。因此,借出信号提供布尔条件a《b的评估。
[0135]
移位运算器1306将等于1的位向左移位与差异信号1313相等的位数。这导致通过从a中减去b的结果对底数进行取幂。移位运算器1306输出结果的右第一位,其等于底数的指数除以结果的余数。因此,当a=b时移位操作数1306的输出等于1,当a≠b时等于0。因此移位操作数1306的输出提供布尔条件a=b的评估。
[0136]
图13b图示了当变量a和b各自仅包括一位时abu的集成电路的组合逻辑电路1310b的示例。条件逻辑电路1310b包括nor门1320和not门1330。not门1330的输出提供布尔条件a=b的评估。
[0137]
此外,在一些实施方式中,当布尔条件在其中元素由数字和/或字符表示的矩阵类型数据(数组、列表、向量等)之间时,使用以下技术。使用这些技术可以提高比较矩阵类型数据的效率,从而也改进将布尔条件变换成布尔条件的算术和/或按位表达式的过程。不是比较矩阵类型变量a和b中的每个数字或字符(在同一位置),可以减少要比较的矩阵类型对象(例如,数组)的尺寸,以提高将布尔条件变换成布尔条件的算术和/或按位表达式的效率,如结合图14所描述的。
[0138]
图14是用于减小例如要比较的矩阵类型数据的尺寸的示例过程的流程图。该过程可以通过安装在一个或多个位置的一个或多个计算机上并根据本说明书进行编程的一个或多个计算机程序来实现。例如,该过程可以由图1中所示的系统100执行。为方便起见,该过程将被描述为由一个或多个计算机的系统执行,但应当注意的是,图14的过程可以是计算机程序预处理的一部分以进行变换,因此它不需要在执行经变换的计算机程序的同一计算机系统上执行。此外,虽然图14的过程是结合具有矩阵类型数据的单个变量来描述的,例如,诸如数组、列表、向量等的数据对象,但是应当理解的是,该过程是针对要在布尔条件中进行比较的每个变量(例如,变量a和变量b)执行的。
[0139]
系统确定(1400)变量是否具有奇数个元素。如果是这样,那么可以在后续处理期间拆分(1410)变量之前从变量中移除(1405)单个元素,并将这单个元素添加到所形成的变量的较小版本中。例如,可以为较小版本的变量实例化新的矩阵类型变量,并将输入变量的元素(例如,最后一个元素)的数据值添加到新变量(例如,在新变量的第一个元素中),然后可以从初始变量中移除那个元素,从而产生偶数个元素用于拆分(1410)。注意的是,相同的单个元素(就位置而言,例如,在数组中)应当从要比较的每个相应变量中移除(1405)(以添加到变量的较小版本)。另外,一些实施方式处理适当的变量,并且不涉及实例化变量的新版本;因此,下面对变量的引用包括实例化新变量的实施方式和不实例化的实施方式。最后,注意的是,多维数组可以通过递归执行此处描述的相同过程来处理。
[0140]
变量被拆分(1410)成双元素对,其中每个双元素对中的数据值将被用于形成较小变量的数据值。例如,第一个双元素对可以是输入变量的第一个和第二个元素,第二个双元素对可以是输入变量的第三个和第四个元素,第三个双元素对可以是输入变量的第五个和第六个元素,依此类推。而且,可以以其它合适的方式形成双元素对(其中变量的每个元素仅是一对的一部分)。注意的是,对于被比较变量的每个集合,例如对于给定类型的所有被比较的变量,应当以相同的方式拆分(1410)成对。一般而言,要通过布尔条件比较的每个变量的较小版本是使用数学序列中的代表性数字形成的,数学序列的成员之间的差异越来越大,其中每个代表性数字是表示来自双元素对的一对数字或字符的一个数字,并且当输入变量具有奇数个数据元素时,每个变量的较小版本还将包括来自输入变量的单个元素(例如,最后一个数据元素)。而且,在一些实施方式中,用于每个被比较(矩阵类型)变量的所有优化步骤都以完全相同的方式执行。
[0141]
为了将一对数字或字符表示为一个数字,可以使用这些序列的成员之间差异增加的数学序列的特性,这表示差异增加的数学序列的两个成员之和(几何序列等)是唯一的。因此,对于变量的双元素对中的每对元素,数学序列的对应成员被求和(1415),其中数学序列的成员与变量的双元素对中的元素对对应,其中这对元素中的每个数据值被用作数学序列的相应成员的位置索引。这可以被理解为将对中的每个元素替换为序列中的索引等于对中元素的数据值的数学序列的成员,然后对于变量的双元素对中的每个元素对将数学序列的两个成员相加,以形成较小(尺寸缩小的)变量中的每个相应的代表性数字。注意的是,为了导出用于被比较(矩阵类型)变量的代表性数字(1415),应用相同的(一个选定的)数学序列;并且在一些实施方式中,对所有被比较(矩阵类型)变量应用相同的数学序列(当导出代表性数字时)。
[0142]
系统还可以确定(1420)变量中元素的位置是否重要。例如,在处理排序的数组时
位置并不重要(因为已经知道排序的数组中元素的位置),并且在处理对[2,3]被认为等于对[3,2]的逻辑条件时位置并不重要。在其它情况下,位置是重要的,例如,当对[2,3]不被认为等于对[3,2]时。如果位置不重要,那么来自数学序列的成员编号的每个相应总和的每个代表性数字可以按原样使用。但是如果变量中元素的位置是重要的,那么为变量的双元素对中的元素对计算(1425)位置变量。用于一对元素的每个位置变量的计算(1425)可以涉及通过布尔条件y》x的结果对负1取幂,其中x是元素对中的第一个元素,并且y是元素对中的第二个元素。因此,如果y》x,那么位置变量是负1,而如果y≤x,那么位置变量是正1。而且,注意的是,在一些实施方式中也可以使用逆布尔条件。
[0143]
对于其中元素的位置重要的被比较变量,通过将数学序列的成员的每个总和乘以(1430)变量的双元素对中的对应元素对的位置变量来进一步形成代表性数字。因此,使用f(n)作为通过其在选择的数学序列中的索引确定数字的函数(序列的成员之间的差异越来越大),x可以是第一个数字,y可以是第二个数字,并且z可以是由此形成的唯一数字(代表性数字)。对中元素的位置重要的公式是:
[0144]
z=((-1)^
condition(y》x)
)*f(x) f(y)
[0145]
或者
[0146][0147]
该对中元素的位置不重要的公式是:
[0148]
z=f(x) f(y)
[0149]
注意的是,这些序列的成员之间差异越来越大的数学序列是其中|a
(i 1)

a(i)|》|a(i)–a(i-1)
|的序列,例如几何序列、指数序列等。其中an是序列中索引(位置)等于n的序列的成员。而且,fibonacci数列接收这个特性,从级数的第三个成员开始。
[0150]
另外,代表性数字被存储(1435)在变量的较小(缩小尺寸)版本中,用于评估原始变量a和b之间的布尔条件,或用于在评估原始变量a和b之间的布尔条件之前进一步缩小变量的尺寸。例如,可以将每个新对的代表性数字添加到新数组,该数组是先前数组的较小(缩小)版本。注意的是,代表性数字应当存储(1435)在变量的较小版本中,联通从初始变量中移除的任何单个元素(1405),所有被比较变量的次序都相同。
[0151]
系统可以确定(1440)是否期望进一步减小变量的尺寸。例如,当进一步缩小不会提高效率时,不需要这样做,因为(1)执行附加的尺寸缩小所花费的时间量(变量中的元素数量和被比较变量的数量越多,缩小比通常比较的时间优势越大)和/或(2)消耗的存储器的量(由于级数的高速增长,在不支持长算术的情况下,缩小的变量中的元素值将增长,而且为了节省存储器,系统可以对元素的值进行四舍五入,这会导致与传统比较(矩阵类型变量a和b中的每个相应数字或字符在同一位置)相比非常大或小的数字发生冲突)。因此,如果不期望进一步缩小,那么图14的过程结束。如果期望进一步缩小,那么重复图14的过程以再次缩小变量的尺寸。
[0152]
注意的是,图14的过程是针对要在布尔条件下比较的变量a和b(具有矩阵类型数据)执行的。使用图14的过程缩小尺寸的变量的元素的数据值可以是数字和/或字符,并且
变量a和b的尺寸的缩小的结果是布尔条件变换成布尔条件的算术和/或按位表达式的效率得到改进。
[0153]
另外,如上所述,当处理排序的数组时,要比较的矩阵类型变量中元素的位置并不重要。鉴于此,在一些实施方式中,对要比较的每个矩阵类型变量(数组、列表、向量等)进行排序,以避免确定(1420)、计算(1425)和乘法(1430)操作的一个或多个部分(或全部)。结合将布尔条件变换成布尔条件的算术和/或按位表达式,以下排序技术可以提供改进的效率。例如,与其使用现代排序技术(例如,快速排序或qsort、冒泡排序、选择排序、插入排序等)在单个线程上对整个数组进行排序,不如将数组拆分为与可用线程的数量对应的多个较小子数组,其中每个较小的子数组处理可以由分离的线程并行执行,并且其中原始数组中每个元素的(被搜索)位置索引是通过将每个元素与初始数组的其它元素的值进行比较来确定的。
[0154]
图15是用于对矩阵类型数据(例如,将要比较的矩阵类型数据)进行并行排序的示例过程的流程图,如可以结合将布尔条件变换成布尔条件的算术和/或按位表达式来使用的。该过程可以通过安装在一个或多个位置的一个或多个计算机上并根据本说明书进行编程的一个或多个计算机程序来实现。例如,该过程可以由图1中所示的系统100执行。为方便起见,该过程将被描述为由一个或多个计算机的系统执行,但应当注意的是,图15的过程可以是计算机程序的预处理的一部分以进行变换,因此它不需要在执行经变换的计算机程序的同一计算机系统上执行。无论如何,这种并行排序方案都可以提高处理操作的总计算效率。
[0155]
基于初始(选择用于排序)矩阵类型数据变量,系统可以实例化(1500)具有与矩阵类型数据变量相同数量的元素的新变量。例如,可以创建与初始(待排序)数组中元素数量相同的新数组,并且可以用空值填充新数组中的所有元素位置。系统分配必要的存储器量来存储新变量。
[0156]
矩阵类型数据变量被系统划分(1505)为多个子部分,子部分的数量等于要用于执行排序的处理线程的数量。例如,初始(待排序)数组可以被拆分为与分配给排序任务的线程数相等的子数组。注意的是,矩阵类型数据变量的子部分不必在维度上相等。
[0157]
系统中的相应处理线程中的每一个确定(1510)由那个处理线程处置的子部分中的每个元素的位置索引。这可以涉及将子部分的每个元素的值与矩阵类型数据变量中的所有其它值进行比较,并计数矩阵类型数据变量中的元素比子部分的被比较元素小多少(或者对于逆位置索引是大多少)。例如,在每个线程的级别,系统可以通过将子数组的每个元素的值与初始数组中其余元素的值进行比较来确定排序的数组中每个子数组的每个元素的位置索引,并且计数初始数组中值大于(或小于)被比较元素的元素的数量。
[0158]
当对值小于被比较元素的元素的数量进行计数时,结果得到的计数是位置索引,即,计数为零指示矩阵类型数据变量中没有其它值小于变量的子部分中的被比较值,因此这个被比较值在排序的变量中首先出现(当按升序排序时)。相反,当对值大于被比较元素的元素的数量进行计数时,结果得到的计数是逆位置索引,即,计数为零指示矩阵类型数据变量中没有其它值大于变量的子部分中的被比较值,因此这个被比较值在排序变量中排在最后(当按升序排序时)。
[0159]
在一些实施方式中,系统确定(1515)排序是按升序还是降序进行。在其它实施方
式中,排序总是以一种次序或另一种次序进行,因此系统不需要确定(1515)。
[0160]
当以升序排序时,系统根据由处理线程确定的位置索引以升序将新变量中的值替换(1520)为来自矩阵类型数据变量的值。因此,对于常规位置索引(当计数更小的元素的数量时),矩阵类型数据变量中位置索引为零的值进入新变量中的第一个位置,矩阵类型数据变量中值位置索引为一的值进入新变量中的第二个位置,矩阵类型数据变量中值位置索引为二的值进入新变量中的第三个位置,依此类推。例如,通过以升序将新数组中的空值替换为来自具有相同位置索引的初始数组中的相应值,可以将初始数组中子数组级别的位置索引计数的结果组合到新数组中。
[0161]
然后系统检查(1525)以查看在新变量中是否存在任何剩余未改变的值。例如,由于初始数组中存在等值元素,因此系统可以检查新数组中是否还有具有空值的元素。在这个阶段新数组中没有空值元素的情况下,可以将新数组视为已排序(初始)数组的等同物。注意的是,初始变量中其值等于初始变量的另一个元素中的值的每个元素将获得与那个另一个元素相同的位置索引,因此当初始变量中的值相等时在替换(1520)之后新变量中的一个或多个元素将保持不变。
[0162]
当这种情况发生时,系统用新变量中的左相邻元素值替换(1530)新变量中的任何剩余未改变的值。例如,新数组中所有剩余的空值元素可以被从空值元素中找到的第一个(非空)值元素替换,之后新数组可以被认为是排序后的(初始)数组的等同物。考虑到初始矩阵类型数据变量的元素中相等值的数量,这些替换根据需要进行多次。
[0163]
同样,当以降序排序时,系统根据由处理线程确定的位置索引,以降序用来自矩阵类型数据变量的值替换(1535)新变量中的值。因此,对于逆位置索引(当计数是更大的元素的数量时),矩阵类型数据变量中位置索引为零的值进入新变量中的第一个位置,矩阵类型数据变量中位置索引为一的值进入新变量中的第二个位置,矩阵类型数据变量中位置索引为er的值进入新变量中的第三个位置,依此类推。例如,通过以降序将新数组中的空值替换为初始数组中具有相同位置索引的相应值,可以将初始数组中子数组级别的位置索引计数的结果组合到新数组中。
[0164]
然后系统检查(1540)以查看在新变量中是否有任何剩余未改变的值。例如,由于初始数组中存在等值元素,因此系统可以检查新数组中是否还有具有空值的元素。在这个阶段新数组中没有空值元素的情况下,可以将新数组视为已排序(初始)数组的等同物。注意的是,初始变量中其值等于初始变量的另一个元素中的值的每个元素将获得与那个另一个元素相同的位置索引,因此当初始变量中的值相等时在替换(1535)之后新变量中的一个或多个元素将保持不变。
[0165]
当这种情况发生时,系统用新变量中的右相邻元素值替换(1545)新变量中的任何剩余未改变的值。例如,新数组中所有剩余的空值元素可以被从空值元素中找到的第一个(非空)值元素替换,之后新数组可以被认为是排序后的(初始)数组的等同物。考虑到初始矩阵类型数据变量的元素中相等值的数量,这些替换根据需要进行多次。
[0166]
最后,系统使用(1550)新变量作为矩阵类型数据变量的排序的版本。在一些情况下,这是通过在图14的过程中使用新变量而不是初始矩阵类型数据变量来完成的。在一些情况下,这是通过用新变量中排序的值覆写初始矩阵类型数据变量中的值来完成的,并且在图14的过程中使用现在排序的矩阵类型数据变量。
[0167]
此外,应当注意的是,图15的并行排序过程可以在除图14的矩阵优化(用于比较矩阵类型数据)过程以外的上下文中被高效地使用。例如,图15的并行排序过程也可以用于矩阵类型数据的高效排序(无需进一步的矩阵优化和比较),诸如使用将布尔条件变换成布尔条件的算术和/或按位表达式的方法为各种任务优化标准排序,如本技术中所描述的。
[0168]
在一些实施方式中,对矩阵类型数据对象进行排序的方法可以包括:实例化具有与矩阵类型数据对象相同数量的元素的新对象;将矩阵类型数据对象划分为与要用于执行排序的处理线程的数量相等的多个子部分;由相应处理线程中的每一个通过将子部分的每个元素的值与矩阵类型数据对象中的所有其它值进行比较来确定由处理线程处理的子部分中的每个元素的位置索引并计数矩阵类型数据对象中的元素比子部分的被比较元素小多少或者对于逆位置索引是大多少;根据由处理线程确定的位置索引以或者升序或者降序用来自矩阵类型数据对象的值替换新对象中的值;以及根据排序是升序还是降序,用新对象中的左相邻元素值或右相邻元素值替换新对象中任何剩余未改变的值,其中新对象被用作矩阵类型数据对象的排序的版本。注意的是,通过比较值来确定位置索引可以采用结合图1-13描述的用于将布尔条件变换成布尔条件的算术和/或按位表达式的系统和技术,这导致处理操作效率的提高。
[0169]
另外,应当注意的是,图14的比较矩阵类型数据(或对象)的过程的优化可以在除了将布尔条件变换成布尔条件的算术和/或按位表达式以外的上下文中被高效使用。例如,这个矩阵变量优化过程也可以在比较的上下文中使用,而无需将布尔条件变换成算术和/或按位表达式,诸如以优化标准比较。而且,图14的优化过程可以独立于比较过程被使用。例如,图14的优化过程可以被用于将矩阵压缩为更小尺寸的矩阵,以实现高效存储(所需的存储器更少)。
[0170]
在一些实施方式中,图14的矩阵变量优化过程被用于更一般地提高矩阵类型对象比较的效率。因此,一种方法(根据一些实施例)可以包括:访问包括条件语句的计算机程序,该条件语句包括比较第一变量a与第二变量b的布尔条件,其中第一和第二变量a和b中的每一个包括矩阵类型数据;将第一和第二变量a和b中的每一个拆分为第一变量a的第一双元素对和第二变量b的第二双元素对;以及为了比较,使用来自数学序列的代表性数字形成第一和第二变量a和b中的每一个的较小版本,其中数学序列的成员之间的差异增加,其中用于第一变量a的较小版本的每个代表性数字是从数学序列的其在数学序列中的索引等于第一变量a的第一双元素对中的数据值的相应成员计算的,用于第二变量b的较小版本的每个代表性数字是从数学序列的其在数学序列中的索引等于第二变量b的第二双元素对中的数据值的相应成员计算的,并且其中,当第一和第二变量a和b中的每一个具有奇数个元素时,在拆分之前从第一和第二变量a和b中的每一个中移除单个元素,并且将来自第一和第二变量a和b中的每一个的单个元素分别添加到第一和第二变量a和b的较小版本。另外,这种方法包括在运行计算机程序时比较第一和第二变量a与b的较小版本以评估条件语句的布尔条件。
[0171]
在一些实施例中,上述方法的形成操作包括:通过对第一变量a的较小版本的每个元素将数学序列的相应成员中与第一变量a的第一双元素对中的数据值对应的两个相加来计算用于第一变量a的较小版本的代表性数字;以及通过对第二变量b的较小版本的每个元素将数学序列的相应成员中与第二变量b的第二双元素对中的数据值对应的两个相加来计
算用于第二变量b的较小版本的代表性数字。
[0172]
在一些实施例中,以上方法包括:计算用于第一变量a的第一双元素对的第一位置变量;以及计算用于第二变量b的第二双元素对的第二位置变量;其中计算用于一对元素的每个位置变量包括通过布尔条件y》x的结果对等于负1的数字进行取幂,其中x是元素对中的第一个元素,并且y是元素对中的第二个元素;以及其中形成包括通过对于第一变量a的较小版本的每个元素将第一位置变量之一乘以数学序列的相应成员中与第一变量a的第一双元素对中的数据值对应的两个的总和来计算用于第一变量a的较小版本的代表性数字,并通过对于第二变量b的较小版本的每个元素将第二位置变量之一乘以数学序列的相应成员中与第二变量b的第二双元素对中的数据值对应的两个的总和来计算用于第二变量b的较小版本的代表性数字。
[0173]
在一些实施方式中,对所有被比较的(矩阵类型)变量应用相同(完全相同)的步骤、次序、工具(例如,数学级数序列)。而且,本文档中描述的系统中的一个或多个可以用在一个或多个实施例中,其中一个或多个存储器单元被配置为使一个或多个指令处理单元执行(一个或多个)上述方法的操作。这些用于矩阵类型对象比较的系统和方法导致改进的处理速度,因为可以在特定计算机(具有给定处理能力)上比以前在该特定计算机上更快地比较矩阵类型对象。而且,这些用于矩阵类型对象比较的系统和方法可以导致更少的存储器消耗,因为较小版本的变量可以比初始变量要求更少的存储器。
[0174]
一些实施例包括一种方法,该方法包括:访问计算机程序,其中计算机程序包括条件语句,该条件语句包括布尔条件;将布尔条件变换成布尔条件的算术和/或按位表达式;生成计算机程序的算术和/或按位表达式,包括代替布尔条件的布尔条件的算术和/或按位表达式;以及提供计算机程序的算术和/或按位表达式,其中计算机程序的算术和/或按位表达式被配置为由处理器的算术和/或按位运算单元执行。布尔条件的算术和/或按位表达式可以验证以下内容:如果布尔条件得到验证,那么布尔条件的算术和/或按位表达式等于1;而如果布尔条件未得到验证,那么布尔条件的算术和/或按位表达式等于0。
[0175]
在以上方法的一些实施例中,布尔条件取第一变量a和第二变量b,并且将布尔条件变换成布尔条件的算术和/或按位表达式包括:从a中减去b;计算从a中减去b的结果的绝对值;基于从a中减去b的结果的绝对值计算指数;通过计算出的指数对底数的取幂来计算指数;以及基于指数除以底数的余数计算布尔条件的算术和/或按位表达式。布尔条件可以是a=b,并且将布尔条件变换成布尔条件的算术和/或按位表达式可以包括:将指数计算为从a中减去b的结果的绝对值;以及将布尔条件的算术和/或按位表达式计算为指数除以底数的余数。
[0176]
布尔条件可以是a≥b,并且将布尔条件变换成布尔条件的算术和/或按位表达式可以包括:从从a中减去b的结果的绝对值中减去从a中减去b的结果;将指数计算为从从a中减去b的结果的绝对值中减去从a中减去b的结果的结果的绝对值;以及将布尔条件的算术和/或按位表达式计算为指数除以底数的余数。
[0177]
布尔条件可以是a《b,并且将布尔条件变换成布尔条件的算术和/或按位表达式可以包括:从从a中减去b的结果的绝对值中减去从a中减去b的结果;将指数计算为从从a中减去b的结果的绝对值中减去从a中减去b的结果的结果的绝对值;通过指数对底数进行取幂计算指数;以及将布尔条件的算术和/或按位表达式计算为1减去指数除以底数的余数。
[0178]
第一和第二变量a和b可以是浮点型数据。在一些实施例中,布尔条件是a=b,第一和第二变量a和b是浮点型数据,并且将布尔条件变换成布尔条件的算术和/或按位表达式包括:将指数计算为应用于从a中减去b的结果的绝对值的上限函数的结果;以及将布尔条件的算术和/或按位表达式计算为指数除以底数的余数。在一些实施例中,布尔条件是a≥b,第一和第二变量a和b是浮点型数据,并且将布尔条件变换成布尔条件的算术和/或按位表达式包括:从从a中减去b的结果的绝对值中减去从a中减去b的结果;将指数计算为应用于从从a中减去b的结果的绝对值中减去从a中减去b的结果的结果的绝对值的上限函数的结果;以及将布尔条件的算术和/或按位表达式计算为指数除以底数的余数。在一些实施例中,布尔条件是a《b,第一和第二变量a和b是浮点型数据,并且将布尔条件变换成布尔条件的算术和/或按位表达式包括:从从a中减去b的结果的绝对值中减去从a中减去b的结果;将指数计算为应用于从从a中减去b的结果的绝对值中减去从a中减去b的结果的结果的绝对值的上限函数的结果;通过指数对底数进行取幂计算指数;以及将布尔条件的算术和/或按位表达式计算为1减去指数除以底数的余数。
[0179]
在一些实施例中,第一和第二变量a和b可以是布尔类型数据(0和1),布尔条件可以是a=b,并且将布尔条件变换成布尔条件的算术和/或按位表达式可以包括:计算a和b之和;以及将布尔条件的算术和/或按位表达式计算为1减去和除以底数的余数。
[0180]
在一些实施例中,第一和第二变量a和b可以包括矩阵类型数据,并且该方法可以包括:将第一和第二变量a和b中的每一个拆分为相应的第一变量a的第一双元素对和第二变量b的第二双元素对;以及为了比较,使用来自数学序列的代表性数字形成第一和第二变量a和b中的每一个的较小版本,其中数学序列的成员之间的差异增加;其中用于第一变量a的较小版本的每个代表性数字是从数学序列的其在数学序列中的索引等于第一变量a的第一双元素对中的数据值的相应成员计算的;其中用于第二变量b的较小版本的每个代表性数字是从数学序列的其在数学序列中的索引等于第二变量b的第二双元素对中的数据值的相应成员计算的;并且其中,当第一和第二变量a和b中的每一个具有奇数个元素时,在拆分之前从第一和第二变量a和b中的每一个中移除单个元素,并且将来自第一和第二变量a和b中的每一个的单个元素分别添加到第一和第二变量a和b的较小版本。
[0181]
形成可以包括:通过对第一变量a的较小版本的每个元素将数学序列的相应成员中与第一变量a的第一双元素对中的数据值对应的两个相加来计算用于第一变量a的较小版本的代表性数字;以及通过对第二变量b的较小版本的每个元素将数学序列的相应成员中与第二变量b的第二双元素对中的数据值对应的两个相加来计算用于第二变量b的较小版本的代表性数字。
[0182]
以上方法还可以包括:对第一和第二变量a和b中的每一个进行排序,其中矩阵类型数据变量的排序包括:实例化具有与矩阵类型数据变量相同数量的元素的新变量;将矩阵类型数据变量划分为与要用于执行排序的处理线程的数量相等的多个子部分;由相应处理线程中的每一个通过将子部分的每个元素的值与矩阵类型数据变量中的所有其它值进行比较来确定由处理线程处理的子部分中的每个元素的位置索引并计数矩阵类型数据变量中的元素比子部分的被比较元素小多少或者对于逆位置索引是大多少;根据由处理线程确定的位置索引以或者升序或者降序用来自矩阵类型数据变量的值替换新变量中的值;以及根据排序是升序还是降序,用新变量中的左相邻元素值或右相邻元素值替换新变量中任
何剩余未改变的值,其中新变量被用作矩阵类型数据变量的排序的版本。
[0183]
以上方法还可以包括:计算用于第一变量a的第一双元素对的第一位置变量;以及计算用于第二变量b的第二双元素对的第二位置变量;其中计算用于一对元素的每个位置变量包括通过布尔条件y》x的结果对等于负1的数字进行取幂,其中x是元素对中的第一个元素,并且y是元素对中的第二个元素;以及其中形成包括通过对于第一变量a的较小版本的每个元素将第一位置变量之一乘以数学序列的相应成员中与第一变量a的第一双元素对中的数据值对应的两个的总和来计算用于第一变量a的较小版本的代表性数字,并通过对于第二变量b的较小版本的每个元素将第二位置变量之一乘以数学序列的相应成员中与第二变量b的第二双元素对中的数据值对应的两个的总和来计算用于第二变量b的较小版本的代表性数字。
[0184]
在以上实施例中,底数可以等于2,其中处理器使用二进制系统,并且其中通过取指数的最后一位来提取指数除以底数的余数。另外,当处理器使用二进制系统时,可以通过将等于1的位左移与计算出的指数相等的位数来执行计算的指数对底数的取幂。
[0185]
布尔条件可以是a《b,并且将布尔条件变换成布尔条件的算术和/或按位表达式可以包括:从a中减去b;将布尔条件的算术和/或按位表达式计算为从a中减去b的结果的借位值。
[0186]
提供计算机程序的算术和/或按位表达式可以包括:将计算机程序的算术和/或按位表达式分段成算术和/或按位表达式的多个片段;并且算术和/或按位表达式的片段可以被配置为并行执行。
[0187]
布尔条件可以包括被表述为算术语句的后续任务,并且生成计算机程序的算术和/或按位表达式可以包括:将后续任务乘以布尔条件的算术和/或按位表达式。布尔条件可以包括被表述为算术语句的替代任务,并且生成计算机程序的算术和/或按位表达式可以包括:将替代任务乘以1减去布尔条件的算术和/或按位表达式。
[0188]
布尔条件可以包括被表述为非算术语句的后续任务,并且生成计算机程序的算术和/或按位表达式可以包括:在计算机程序的算术和/或按位表达式中包括到与布尔条件的算术和/或按位表达式相关联的标签的无条件跳转。而且,当布尔条件的算术和/或按位表达式的值等于1时,标签可以等于后续任务的语句的开始。而且,布尔条件可以包括被表述为非算术语句的替代任务,其中当布尔条件的算术和/或按位表达式的值等于0时,标签等于替代任务的语句的开始。
[0189]
在一些实施例中,该方法还包括:由算术和/或按位运算单元执行计算机程序的算术和/或按位表达式。在一些实施例中,至少变换由第一计算机执行,并且执行由第二计算机执行。在一些实施例中,变换和执行由同一个计算机执行。
[0190]
一些实施例包括一种系统,包括:一个或多个指令处理单元,包括至少一个控制单元、至少一个算术和/或按位运算单元,以及至少一个寄存器单元;以及与一个或多个指令处理单元耦合的一个或多个存储器单元;其中该系统被配置为通过使用至少一个算术和/或按位运算单元执行基本上所有条件语句的布尔条件的算术和/或按位表达式来执行计算机程序中的基本上所有条件语句,每个条件语句都包括布尔条件。在这样的系统实施例中,系统的至少一个控制单元或分离的数据处理装置可以被配置为执行上述任何方法实施例的方法操作,并且处理器的包括一个或多个指令处理单元的至少一个算术和/或按位运算
单元可以被配置为执行计算机程序的算术和/或按位表达式。而且,至少一个算术和/或按位运算单元可以包括算术块、按位移位块和按位逻辑块中的一种或多种,并且至少一个算术和/或按位运算单元不需要包括任何数字比较器。
[0191]
本说明书中描述的主题和功能操作的实施例可以在数字电子电路、有形体现的计算机软件或固件、计算机硬件(包括本说明书中公开的结构及其结构等同物)、或者在它们中的一个或多个的组合中实施。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即,在有形的非瞬态存储介质上编码的计算机程序指令的一个或多个模块,以由数据处理装置执行或控制其操作。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行访问存储设备或它们中的一个或多个的组合。可替代地或此外,程序指令可以被编码在人工生成的传播信号(例如,机器生成的电、光或电磁信号)上,生成这些信号以便对信息进行编码以传输到合适的接收器装置以由数据处理装置执行。
[0192]
术语“数据处理设备”是指数据处理硬件,并且很难改用于处理数据的所有类型的装置、设备和机器,例如包括可编程处理器、计算机或多个处理器或计算机。装置还可以是或还包括专用逻辑电路,例如fpga(现场可编程门阵列)或asic(专用集成电路)。除了硬件之外,装置可以可选地包括为计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。
[0193]
计算机程序(也可以被称为或描述为程序、软件、软件应用、app、模块、软件模块、脚本或代码)可以用任何形式的编程语言编写,包括编译或解释语言、声明或过程语言,并且它可以以任何形式部署,包括作为独立程序或作为模块、组件、子例程或适合在计算环境中使用的其他单元。程序可以但不需要对应于文件系统中的文件。程序可以存储在保存其他程序或数据的文件的一部分(例如标记语言文档中存储的一个或多个脚本)中,存储在专用于所讨论的程序的单个文件中,或者存储在多个协调文件(例如存储一个或多个模块、子程序或部分代码的文件)中。计算机程序可以被部署为在位于一个站点或分布在多个站点并通过数据通信网络互连的一个或多个计算机上执行。
[0194]
被配置为执行特定操作或动作的一个或多个计算机的系统意味着该系统已在其上安装了软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合在操作中使得系统执行操作或行动。被配置为执行特定操作或动作的一个或多个计算机程序意味着该一个或多个程序包括指令,指令在由数据处理装置执行时使该装置执行操作或动作。
[0195]
如在本说明书中使用的,“引擎”或“软件引擎”是指提供与输入不同的输出的软件实现的输入/输出系统。引擎可以是编码的功能块,诸如库、平台、软件开发工具包(“sdk”)或对象。每个引擎都可以在任何适当类型的包括一个或多个处理器和计算机可读介质的计算设备上实现,例如服务器、移动电话、平板计算机、笔记本计算机、音乐播放器、电子书阅读器、膝上型或台式计算机、pda、智能电话或其它固定或便携式设备。此外,引擎中的两个或更多个可以在相同的计算设备上或在不同的计算设备上实现。
[0196]
本说明书中描述的处理和逻辑流程可以由一个或多个可编程计算机执行,该可编程计算机执行一个或多个计算机程序,以通过对输入数据进行操作并生成输出来执行功能。处理和逻辑流程还可以由专用逻辑电路系统(例如,fpga或asic)执行,或者由专用逻辑电路系统和一个或多个编程的计算机的组合来执行。
[0197]
适于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或者任何其
它类型的中央处理单元。一般而言,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行或运行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路系统补充或结合在其中。一般而言,计算机还将包括一个或多个用于存储数据的大容量存储设备(例如,磁盘、磁光盘或光盘),或者被可操作地耦合到一个或多个大容量存储设备以从其接收数据或向其传送数据或两者兼有。但是,计算机不需要这样的设备。而且,计算机可以嵌入到另一个设备中,例如,移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏机、全球定位系统(gps)接收器或便携式存储设备(例如通用串行总线(usb)闪存驱动器),仅举几个示例。
[0198]
适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,例如包括:半导体存储器设备,例如,eprom、eeprom和闪存设备;磁盘,例如,内部硬盘或可移动磁盘;磁光盘;和cd rom和dvd-rom盘。
[0199]
为了提供与用户的交互,本说明书中描述的主题的实施例可以在计算机上实现,该计算机具有用于向用户显示信息的显示设备(例如,crt(阴极射线管)或lcd(液晶显示器))以及用户可以通过其向计算机提供输入的键盘和定点设备(例如,鼠标、轨迹球或呈现敏感显示器或其它表面)。也可以使用其它类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从网络浏览器接收的请求而向用户的设备上的web浏览器发送网页。而且,计算机可以通过将文本消息或其它形式的消息发送到个人设备(例如,运行消息收发应用的智能电话)并从用户接收响应消息来与用户交互。
[0200]
本说明书中描述的主题的实施例可以在计算系统中实现,该计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有图形用户界面或web浏览器或app的客户端计算机,用户可以通过该图形用户界面或web浏览器或app与本说明书中描述的主题的实施方式进行交互),或者一个或多个这样的后端、中间件或前端组件的任意组合。系统的组件可以通过任何形式或介质的数字数据通信(例如,通信网络)相互连接。通信网络的示例包括局域网(lan)和广域网(wan),例如互联网。
[0201]
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过通信网络进行交互。客户机和服务器的关系是通过在各自的计算机上运行并且彼此之间具有客户机-服务器关系的计算机程序产生。在一些实施例中,服务器例如向用户设备传输数据,例如,html页面,以用于向与充当客户端的与该设备交互的用户显示数据并从该用户接收用户输入。可以在服务器上从设备接收在用户设备处生成的数据,例如,用户交互的结果。
[0202]
虽然本说明书包含许多具体的实施细节,但这些不应当被解释为对任何发明的范围或所要求保护的范围的限制,而是对特定发明的特定实施例的特定特征的描述。本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以在多个实施例中单独地实现或以任何合适
的子组合来实现。而且,尽管上述特征可以被描述为以某些组合起作用,甚至最初被要求这样保护,但是在某些情况下,可以从所要求保护的组合中删除该组合中的一个或多个特征,并且所要求保护的组合可以指向子组合或子组合的变化。
[0203]
类似地,尽管在附图中以特定次序描绘了操作,但这不应当被理解为要求以所示的特定次序或以顺序的次序执行这些操作,或者要求执行所有所示的操作,以获得期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。而且,上述实施例中各种系统模块和组件的分离不应当被理解为在所有实施例中都需要这种分离,并且应当理解的是,所描述的程序组件和系统一般可以集成在单个软件产品中或者封装到多个软件产品中。
[0204]
已经描述了本主题的特定实施例。其它实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的次序执行,并且仍然获得期望的结果。作为一个示例,附图中描述的过程不一定需要所示的特定次序或顺序的次序来获得期望的结果。例如,在图14中操作1420和1425不需要跟在操作1415之后;在一些实施方式中,操作1420和1425在操作1415之前执行。此外,在一些情况下,多任务处理和并行处理可能是有利的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献