CN107851007B - 宽数据类型的比较的方法和装置 - Google Patents

宽数据类型的比较的方法和装置 Download PDF

Info

Publication number
CN107851007B
CN107851007B CN201680039390.0A CN201680039390A CN107851007B CN 107851007 B CN107851007 B CN 107851007B CN 201680039390 A CN201680039390 A CN 201680039390A CN 107851007 B CN107851007 B CN 107851007B
Authority
CN
China
Prior art keywords
comparison
compare
sequence
comparison operation
bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680039390.0A
Other languages
English (en)
Other versions
CN107851007A (zh
Inventor
卓恩·尼斯塔德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN107851007A publication Critical patent/CN107851007A/zh
Application granted granted Critical
Publication of CN107851007B publication Critical patent/CN107851007B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions

Abstract

提供了用于比较宽数据类型的装置和方法。装置包括处理电路,用于执行多个比较操作以比较第一值和第二值,第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在第一值和第二值的相应N位上进行操作。多个比较操作被链接以形成序列,使得每个比较操作被布置为输出累积比较结果,该累积比较结果包括序列中的任何先前比较操作的比较结果,并且使得针对除了序列中的最终比较操作之外的每个比较操作,累积比较结果被提供以用作在该序列中下一比较操作的输入。

Description

宽数据类型的比较的方法和装置
技术领域
本技术涉及数据处理领域。特别地,本技术涉及将宽数据类型进行比较的领域。
背景技术
通常需要在两个数据值(如整数)之间进行比较。在数据处理装置中,可以发布用于执行两个数据值之间的比较的指令。该指令可以指示要执行的值的两个位置。然而,数据处理装置可能在其可以存储数据值的大小的方面受到限制。例如,可以用来存储单个值的每个寄存器可以只能够存储单个32位值。因此,这样的比较指令通常只能比较两个32位的值。
如果需要在更宽的数字上进行比较,即,要求表示多于32位的数字,则可以通过将每个数字分成多个块随后对每个块进行比较来实现。随后可以分析每个比较的单独结果以产生最终结果。但是,此过程需要存储装置从而存储各个结果。通过将每个单独的比较布置在分支结构中,可以避免存储装置的需要。但是,这可能会导致更大的代码序列,并且由于分支预测引起预测失误可能会导致执行代码的时间比存储单独结果所需的时间更长。
发明内容
从第一示例的配置来看,提供了用于执行多个比较操作的处理电路,从而比较第一值和第二值,该第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在该第一值和第二值的相应N位上进行操作;该多个比较操作被链接以形成序列,使得每个比较操作被布置为输出包括该序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了在该序列中的最终比较操作之外的每个比较操作,该累积比较结果被提供用作该序列中下一比较操作的输入。
从第二示例的配置来看,提供了一种方法,该方法包括以下步骤:执行多个比较操作,从而比较第一值和第二值,该第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在第一值和第二值的相应N位上进行操作;多个比较操作被链接以形成序列,使得每个比较操作被布置为输出包括序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了在序列中的最终比较操作之外的每个比较操作,该累积比较结果被提供用作该序列中下一比较操作的输入。
从第三示例的配置来看,提供了一种装置,包括:处理机构,用于执行多个比较操作,从而比较第一值和第二值,第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在第一值和第二值的相应N位上进行操作;多个比较操作被链接以形成序列,使得每个比较操作被布置为输出包括序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了在序列中的最终比较操作之外的每个比较操作,该累积比较结果被提供用作该序列中下一比较操作的输入。
附图说明
本技术将通过仅示例性的方式进一步描述,参照附图中所示的实施例,其中:
图1示意性地示出了根据一个实施例的本技术的操作;
图2示出了根据一个实施例的如何将多个比较操作链接在一起以提供宽数据值的比较;
图3是示出根据一个实施例的比较函数的示例值的表格;
图4示出了根据一个实施例的示例的累积结果;
图5示出了根据一个实施例的示例的描述符;
图6给出了组合用于执行宽数据类型比较的三个不同指令示例;
图7示出了用于使用图6中所示的指令来执行宽数据类型的比较的方法的流程图;
图8是示出了根据一个实施例的早期分支的示例的图;以及
图9示出了执行两个宽浮点数的比较的流程图。
在参考附图讨论实施例之前,提供了对实施例和相关优点的以下描述。
具体实施方式
根据一个示例的配置,提供了用于执行多个比较操作的处理电路,从而比较第一值和第二值,第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在第一值和第二值的相应N位上进行操作;多个比较操作被链接以形成序列,使得每个比较操作被布置为输出包括序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了在序列中的最终比较操作之外的每个比较操作,该累积比较结果被提供用作该序列中下一比较操作的输入。
在以上的配置中,通过执行多个比较操作来执行第一值和第二值(其每个具有多于N位)的比较,每个比较操作对第一值的N位和第二值的对应N位进行。每个比较操作都考虑一组不同的N位。比较操作被链接起来。换言之,除了最终比较操作之外,每个比较操作都提供累积比较结果(ACR),该累积比较结果由序列中的下一比较操作使用。因此,ACR使用该比较的结果直到最近执行的比较操作为止。例如,如果已经执行了X个比较操作,则比较第一值的N位和第二值的N位,随后比较操作X的ACR表示比较第一值的前XN位和第二值的前XN位。最终比较操作没有后续,因此不输出ACR。相反,最终比较操作提供比较结果,其表示比较第一值和第二值的结果。
通过这种方式将比较操作进行链接,可以减少中间结果的存储的需要,并且在某些情况下可以完全消除。此外,这种比较操作的链接不必要进行分支或冗长的复杂代码结构,因为ACR在比较操作之间传递。因此,可以有效地执行两个宽数据类型的比较,而不需要大量的存储并且不增加底层代码的大小和复杂度。通过更有效地比较宽数据类型,这得到更好的计算机。
在一些实施例中,对于序列中的第一比较操作之后的至少每个比较操作,处理电路被布置成接收描述符以用作该比较操作的输入;并且描述符包括从序列中先前比较操作得出的累积比较结果。描述符用于在连续的比较操作之间传递中间数据,从而避免为每个比较操作存储大量的中间数据的需要。
存在多种方式可以为比较操作中的每个提供描述符。在一些实施例中,处理电路响应于多个比较指令来执行多个比较操作,该多个比较指令是除了在输入参数中标识描述符的第一比较指令之外的至少每个比较指令。相应地,指令本身可以包含描述符作为参数,或者可以包含包括描述符所在位置的参考(例如,在诸如寄存器的存储电路中)的参数。换言之,描述符可以被明确地提供。在一些其它实施例中,处理电路响应于多个比较指令以执行多个比较操作,通过更新存储在存储电路中的描述符,除了最终比较操作之外的多个比较操作中的每个提供累积比较结果,以用作序列中的下一比较操作的输入。在这些实施例中,隐含地提供了描述符,并且处理电路能够定位描述符而无需明确地被告知其位置。例如,可以提供其中存储描述符的特殊专用存储结构。
在一些实施例中,多个比较指令包括链接的比较指令;并且处理电路响应于链接的比较指令以执行序列中的相关比较操作,该相关比较操作使用待操作的第一值和第二值的N位和输入描述符作为输入,并且处理电路被配置为输出作为相关比较操作的结果的描述符,该描述符被用作后续比较操作的输入。在某些情况下,链接的比较指令本身可以是可选的。例如,如果第一值和第二值各自包括2N位,并且每个比较操作在N位上进行,则可以仅通过使用第一链接的比较指令和最终链接的比较指令(每个都在下面描述)来执行第一值和第二值的比较。在一个实施例中,链接的比较指令将相关比较操作的所有输入指定为输入操作数。
在一些实施例中,该多个比较指令包括最终链接的比较指令;并且处理电路响应于最终链接的比较指令来执行序列中的最终比较操作,该最终比较操作使用待操作的第一值和第二值的N位和输入描述符作为输入,并且处理电路被布置为输出第一值和第二值比较的比较结果,作为最终比较操作的结果。最终链接的比较指令是序列中的最终比较指令,并产生将第一值和第二值进行比较的总体结果。在一个实施例中,最终链接的比较指令指定最终比较操作的所有输入作为输入操作数。
在一些实施例中,多个比较指令包括第一链接的比较指令;并且处理电路响应于第一链接的比较指令来执行第一比较操作,该第一比较操作使用待操作的第一值和第二值的N位作为输入,并且处理电路被布置输出作为第一比较操作的结果的描述符,该描述符将被用作后续比较操作的输入。这样的第一链接的比较指令是可选的,并且可以被替换为其中提供的描述符具有ACR的链接的比较指令,该ACR指示到目前为止位的比较已经相等。然而,通过使用第一链接的比较指令而不是提供链接的比较指令作为第一指令,可以避免提供嵌入常数的指令或花费指令将初始ACR值预加载到链接的比较指令中。在一个实施例中,第一链接的比较指令指定第一比较操作的所有输入作为输入操作数。
在一些实施例中,比较函数被提供作为多个比较操作的输入,其中比较函数定义了将在第一值与第二值之间执行的比较的类型。例如,比较的类型可以指示比较将第一值和第二值视为有符号或无符号的数字。单独地,比较的类型可以指示该比较将确定第一值是大于第二值、大于等于第二值、等于第二值、还是不等于第二值。比较的类型还可以指示该比较将考虑第一值是小于第二值、还是小于等于第二值。
有多种方式可以将比较函数提供给多个比较操作。在一些实施例中,比较函数被提供作为第一比较操作的输入;并且被提供用作除第一比较操作之外的每个比较操作的输入的描述符,标识被提供用作第一比较操作的输入的比较函数。在一些其它实施例中,比较函数被提供用作序列中的最终比较操作的输入。可以通过每个比较操作来确定ACR,而不需要知道由比较函数所定义的、第一值和第二值是如何相互比较的。因此ACR可以提供关于第一值和第二值彼此之间的差别的指示,并且仅当执行最终比较操作时,比较函数被用于确定第一值和第二值之间的差值是否落入比较函数本身所要求的范围内。这个过程可以是有利的,因为可以使用其来减小描述符的大小,由于比较函数不需要被提供直到将执行最终比较操作。因此,这可以减少当执行其它比较指令时,存储描述符的存储要求。
在一些实施例中,第一值和第二值都是整数。在其它实施例中,第一值和第二值都是浮点数。还可以比较其它类型并且比较不同类型(例如,整数与浮点数)。
尽管第一值和第二值可以具有任意位数的大小,但是在一些实施例中,第一值和第二值各自具有N位的倍数的长度。由此,可以在多个比较操作之间准确地划分第一值和第二值的位。在其它实施例中,可以扩展比较操作中的一个(通常是第一操作或最终操作)以补偿位数的不足。例如,如果N是32,则38位数可能需要两个比较操作。这些操作中的一个可以在32位上进行,而另一操作可以在扩展到32位之后的剩余的6位上进行。
在一些实施例中,除了序列中的第一比较操作之外的每个比较操作,在相较先前比较操作的第一值和第二值的更高有效位上操作。因此,比较操作可以在连续的比较操作中从最低有效位到最高有效位进行操作。在其中比较输入中的一个是由带进位加法(add-with carry)指令的链产生的多宽度加法结果的情况下,从最低有效位到最高有效位执行比较可以是有用的。在该情况下,可以将加法的结果每次一个步骤地加入到比较中,而无需将结果存储在任何地方。
在其它实施例中,除了序列中的第一比较操作之外的每个比较操作在相较先前操作的第一值和第二值的较低有效位上操作。因此,比较操作可以从最高有效位到最低有效位进行操作。
在这些实施例中的一些中,处理电路响应于指示预定条件的累积比较结果,来执行导致序列中的后续比较操作被绕过的早期分支操作。当从最高有效位到最低有效位进行比较时,可能仅当比较了少量位之后就确定比较的结果。例如,如果比较将确定两个无符号数(unsigned number)中的哪一个是最大的,并且第一值的最高有效位具有“1”并且第二值的最高有效位具有“0”,则比较的结果已经是已知的(第一个值更大)。因此,可能希望在该组比较操作中插入早期分支指令,以查看结果是否之前已知并在必要时绕过剩余的比较操作。在一些情况下,这可能会阻止不必要的指令的执行。
先前提到的预定条件可以基于,累积比较结果是否指示由先前比较操作比较的位是相等的。例如,迄今比较的第一值和第二值的位是否相等,将决定比较的结果是否之前已知,并因此是否可以绕过后续的比较操作。
现在将参考附图描述特定的实施例。图1示出了用于在两个宽数据类型105、110之间执行比较的装置100。这些数据类型中每个长度都是128位。在图1中所示的实施例中,处理电路115仅能够在32位值上进行操作。因此,为了比较两个128位值,装置100执行比较指令的序列,每个比较指令使得由处理电路115执行相关比较操作。指令序列115中的每个指令考虑128位值中的不同的32位。例如,图1示出了128位值105、110中的每个可以被怎样分成四个32位值(1A、1B、1C、1D)和(2A、2B、2C、2D)。随后,每个比较指令比较一对相关联的32位值(1A与2A、1B与2B、1C与2C、以及1D与2D)。因此,处理电路115将两个操作数与可选的累积比较结果(ACR)一起作为输入。ACR构成由先前比较操作输出的描述符的一部分。将在后面参照图5讨论描述符的格式。在图1所示的实施例中,描述符被提供作为比较指令的一部分。这可以涉及将描述符作为指令的参数传入,或者可以通过提供对存储描述符的存储位置的参考来实现。然而,在其它实施例中,可以提供控制存储器120。在这些其它实施例中,描述符不作为比较指令的一部分被传入,而是在比较操作期间由处理电路115从已知位置(控制存储器120)访问。
图1所示的实施例包括四个比较指令。这些指令从初始比较指令(ICMP32I)开始,后跟有两个链接的比较指令(ICMP32M),再后跟有最终比较指令(ICMP32F)。在图1所示的实施例中,第一比较指令接收比较函数(cmpf)作为输入参数。这指示要执行的比较类型。比较类型指示要在两个128位值之间执行的比较类型。将参照图3讨论比较类型的可能的值的示例。第一比较指令还接收输出修改符(M1)作为输入参数。该输出修改符用于影响在比较操作链末端输出的最终比较结果。具体地,当比较结果为真,则其控制结果是否为整数1或为全1的向量。如果结果为假的,则输出为全0的向量。除第一比较指令之外的每个比较指令接收描述符作为输入参数之一。将参照图5讨论描述符的格式。
还如图1的实施例所示,从最终比较指令的输出是比较两个128位值105、110的最终比较结果。该最终比较结果指示比较的结果。取决于输出修改符的值(M1),输出全0的向量(如果比较的结果为假),或全1的向量或整数1(如果比较结果为真)。
图2示出了链接多个比较操作从而实现第一值和第二值的比较的示例,由此第一值和第二值是宽数据类型。具体地,在其中第一值和第二值都是64位并且其中处理电路115可以一次比较最多32位的系统中,第一值和第二值的比较可以通过使用使得处理电路115对第一值和第二值的前32位执行第一或初始比较操作、以及对第一值和第二值的后32位执行最终比较操作的初始比较指令(ICMP32I)而进行。第一比较的结果是作为第二比较指令(ICMP32F)的输入提供的描述符。最终比较操作的输出是第一值和第二值比较的结果。
如果第一值和第二值大于64位,则链可以包括链接的比较指令(ICMP32M),其导致由处理电路115执行进一步的比较操作。这些进一步的比较操作被称为“链接”比较操作。每个链接的比较操作都具有先前比较操作提供的描述符作为输入。比较操作的结果导致输出ACR,其形成输入到后续比较操作的描述符的一部分。在图2所示的实施例中,假设第一值和第二值的位长度是处理电路115能够一次比较的位数的倍数。例如,在这种情况下,处理电路115能够一次比较两组32位。因此,假设第一值和第二值的位长度是32位的倍数。然而,可以理解的是,其它位数的比较也是可能的。这可以通过扩展将要比较的数字来实现。例如,如果第一值和第二值是100位的值,则可以提供附加的28位,使得该值实际上被视为128位的值。例如,对于100位无符号值,可以将28个零添加到最高位,从而产生128位的值用于比较。
图3示出了根据一个实施例的示出用于比较函数(cmpf)的不同值的示例的表格。如前所述,比较值指示在第一值和第二值之间将执行的比较的类型。在图3所示的实施例的情况下,比较函数的值为0,该比较将是一个有符号的大于函数。值为1时,函数将是一个有符号的大于等于函数。值为2时,函数将是一个无符号的大于函数。值为3时,函数将是一个无符号的大于等于的函数。值为4时,函数将为等于。值为5时,函数将是不等于。保留值6和7以备将来使用。例如,如果比较的第一值是5,而比较的第二值是12,那么如果比较函数是1,则结果将是0或假,因为5并不大于等于12。或者,如果比较函数的值是5,则结果将是1或者真,因为5不等于1。函数是有符号函数还是无符号函数,指示第一值和第二值是否将被视为有符号的数字或无符号的数字。
图4示出了包含ACR的示例值的表格。如前所述,ACR指示比较第一值和第二值的位的子集的结果。换言之,ACR包括将迄今为止遇到的所有位进行比较的结果。例如,如果每个比较操作从第一值取32位并将其与第二值的32位进行比较,则第三次比较操作中的ACR将是比较第一值的前96位和第二值的96位。如果ACR的值是1,则意味着迄今为止的比较指示第一值小于第二值。如果值是2,则意味着迄今为止的比较指示第一值大于第二值。如果值是3,则意味着迄今为止的比较指示第一值和第二值相等。保留值0,以备将来使用。
图5图示了根据一个实施例的描述符的示例。描述符可以在比较操作之间传递以便将比较操作链接在一起。例如,可以将一个比较操作的输出作为参数提供给随后的比较操作。在图5所示的实施例中,描述符由32位组成。如前面参照图3所描述的,前3位(0-2)包括比较函数(cmpf)。接下来的2位(3-4)包括ACR,如前面参考图4所描述的。(5)用于存储输出修改器(M1)。如果比较结果为真,则控制在链式比较操作序列结束时输出的结果是整数1还是全1的向量。如果结果为假,则输出为全零矢量。剩余的位(6-31)被保留,以备将来使用。
图6示出说明了三个比较指令的使用的示例,使得三个比较操作的链将第一值和第二值进行比较,从而输出比较结果。该过程从第一比较指令(ICMP32I)205开始。这接收一对操作数(操作数0和操作数1),该操作数的每个为32位。实际上,这些可以指代两个32位寄存器,其中分别存储第一值和第二值的前32位。该指令还包括比较函数(cmpf)。如前面参照图3所讨论的,这指示了怎样比较第一值和第二值。最后,该指令包括输出修改器(M1),其指示怎样将输出格式化。第一比较指令205导致在操作数0和操作数1之间执行比较操作。结果为ACR,其与输出修改符(M1)和比较函数(cmpf)一起构成描述符,该描述符被提供到第二比较指令(ICMP32M)210。该第二比较指令还采取一对操作数(操作数0和操作数1)。尽管这些操作数每个也是32位,但它们将是与由第一比较指令205所操作的一对操作数不同的一对操作数。因此,第二比较指令210是在与第一比较指令205的位不同的一组位上执行。第二比较指令210引起第二比较操作的发生。第二比较操作采取由第二比较指令210提供的一对操作数。第二比较操作还采取由先前比较操作提供的描述符中取得的比较函数(cmpf)和ACR。执行第二比较操作的结果是ACR,其与来自输入描述符的比较函数(cmpf)和输出修改符M1)一起构成新的描述符。该新的描述符被提供给最终比较指令(ICMP32F)215。最终比较指令215使最终比较操作被执行。该指令包括一对操作数,它们与由第一比较指令205或第二比较指令210提供的一对操作数也不同。第三比较指令215还将作为执行包括输出修改符(M1)的第二比较指令210的结果而被输出的描述符作为输入。再次,作为比较指令215的结果,比较操作被执行在所提供的一对操作数上。其结果是比较结果,即,比较第一值和第二值(每个长度为96位)的总体结果。
注意,本实施例利用初始比较指令(ICMP32I)205。然而,在其它实施例中,第一比较指令可以是由第二比较指令(ICMP32M)210所示的形式。在该实施例中,被提供给第一比较指令的描述符包括ACR,该ACR指示迄今为止所比较的位是相等的,因此其对第一比较操作没有影响。
在每种情况下,比较操作的行为都应该是清楚的。在每种情况下,除了对第一值和第二值的位的子集进行比较以输出新的ACR作为输出描述符的一部分之外,比较操作将考虑被提供作为输入描述符的一部分的ACR。
如果比较操作从最低有效位到最高有效位进行操作,则如果输入操作数相等,则输出ACR将与输入ACR相同。如果输入操作数不相等,则输出ACR被设置为比较输入操作数的结果。除了不输出ACR之外,最终比较指令的行为可能是相似的。相反,比较函数(cmpf)使用ACR来确定是否通过了由比较函数指定的条件。
如果比较操作从最高有效位操作到最低有效位进行操作,则如果输入ACR指示迄今为止所分析的位不相等,则将输入ACR提供作为输出ACR。如果输入ACR指示迄今为止所分析的位相等,则输出ACR被设置为比较输入操作数的结果。
图7示出了指示执行比较指令的一般方法的流程图300。在步骤310,取出下一条指令。在步骤230,接收第一操作数和第二操作数。操作数可以被直接提供,或者可以在指令的一个或多个参数中所引用的存储位置(例如寄存器)中提供。无论如何,在步骤330,确定该指令是否为ICMP32I指令。如果否,则在步骤340,获得包含ACR的描述符,并且流程继续到步骤350。如果在步骤330,指令为ICMP32I指令,则流程直接进行到步骤350。在步骤350,比较操作被执行。在步骤360,确定该指令是否是ICMP32F指令。换言之,确定该指令是否是序列中的最终比较指令。如果否,则形成包含来自步骤350中执行的比较操作的ACR的输出描述符。随后,流程前进到步骤310,其下一条指令如先前描述取得。因此,该序列遍历所有指令,直到在步骤360到达最终比较指令。此时,流程进行到步骤380,其中最终比较结果被输出。最终比较取决于比较函数(cmpf),最终比较操作的结果和输入ACR的结果。最终比较结果还可以由输出修改符(M1)修改。
图8示出了比较指令的流/序列中的早期分支操作的示例。在图8中,大量的比较指令在宽数据类型的不同位上进行操作。操作序列比较从最高有效位到最低有效位的位。因此,可以较早确定比较操作的结果。例如,一旦位开始不同,将得知两个值中的哪一个更大或更小,并且还得知这两个值是不相等的。因此,可以使用条件分支指令,从而实现早期分支,从而避免位的进一步比较。因此,图8中所示的指令流包含分开流的通路的条件分支指令,从而当比较结果已知时允许绕过后面的指令。发生分支的条件可以被预定。例如,分支指令可以根据迄今为止所检查的位的相等性(或缺乏相等性)来导致分支的发生。从图6的讨论中可以理解,这样的条件可以使得能够确定是否需要进一步的位比较。
应当注意,必须谨慎使用这样的条件分支指令。特别地,由于分支预测的结果,可能的是,错误的指令可能被链接预先取得的比较指令。发生这种情况时,可能需要大量的处理周期才能纠正由于错误预测而被预先取得的指令。这是不希望的,因为它会减慢指令执行的速率。因此,当大量的比较指令跟随时出现早期分支指令是最好的,即,该情况下,潜在地获得显着的收益并且在很有可能已经知道结果,即在哪里有较少的机会发生错误预测。
在一些实施例中,如果适当的话,比较指令本身可以执行早期分支操作。例如,如果剩余比较的数量是链接的比较指令(ICMP32M)已知的,并且如果凭借迄今为止所比较的位已知该比较的结果是什么,则链接比较操作可以分支到链的末端,从而绕过之后的指示。
本技术可用于两个宽浮点数的比较。实现这一点的方式可以取决于是否要执行TotalOrder比较。TotalOrder比较使用对于所有浮点数所定义的总排序。通常,非数值(NaN)的值被视为无序,而-0和+0被视为相等。但是,TotalOrder比较将对这些情况进行排序,以及处理可能特定于浮点数表示的其它情况。
图9示出了使用TotalOrder比较对两个浮点数执行链接比较的流程图400。在步骤410,确定值(第一值和第二值)是否都为正。如果是,则在步骤420,如已经描述的那样,链接比较操作对除了符号位之外的第一值和第二值执行。否则,在步骤430,确定两个值是否都为负。如果否,则在步骤440,比较的结果仅基于符号位被确定。例如,仅基于符号位(在此处是不同的),可以确定这些值是不相等的,因此一个值(正值)大于另一值(负值)。或者,如果在步骤430,两个值均为负值,则在步骤450,如前所述对非符号位执行链接比较操作。步骤460确定比较函数(cmpf)是否涉及大于或小于函数(包括大于等于函数和小于等于函数)。如果是,则在步骤470,结果被取反并输出。如果否,则在步骤480,结果被直接输出。
对于其它类型的比较(即,不是TotalOrder),有必要跟踪有效数是零或非零,以及指数是全零或全1或其它。为了实现这一点,因此有必要知道符号、指数以及有效数之间的边界在浮点数的表示中的哪里。通过跟踪这些信息,可以确定给定值是否为零(如果指数和有效数都为零)、无穷大(如果指数是全1并且尾数(mantisaa)是零)、NaN(如果指数是全1并且尾数是非零),或一个正常数字(其它)。如果两个值都是正常的,或者如果一个值是正常的并且另一个是零,或者如果一个值是无穷大并且另一个是正常的或零,则可以按照图9的流程中所示的相同的方式执行比较。其它情况,两个零被认为是相同的(换言之,负零和正零被认为是相同的),具有相同符号的两个无穷大是相同的,具有不同符号的两个无穷大根据它们的符号(负无穷大小于正无穷大),任何涉及NaN的比较为故障。
如果比较是从最高有效位到最低有效位执行的,则在从指数到有效位之间存在足够的信息可以将每个数字归类为正常、无穷大、NaN、或可能为零。可以针对每个操作数(有效数零/非零、指数全零/1/其它)跟踪所有三位。但是,针对每个操作数跟踪两位就足够了。当比较指数时,跟踪指数是全零、全1、或其它。当切换到比较有效数时,跟踪整体值是否为零/无穷大/NaN/正常。
如果从最低有效位到最高有效位执行比较,则可以进行类似的跟踪,但首先确定“有效数零/非零”位,随后考虑指数值从而确定浮点数是否为零/无穷大/NaN/正常。
在本申请中,词语“被配置为......”用于表示装置的元件具有能够执行所定义操作的配置。在这种情况下,“配置”指硬件或软件的互连的布置或方式。例如,该装置可以具有提供所定义操作的专用硬件,或者处理器或其它处理设备可以被编程以执行该功能。“配置为”并不意味着装置元件需要以任何方式改变以提供所定义的操作。
尽管已参考附图详细描述了本发明的说明性实施例,但应理解,本发明不限于这些精确的实施例,并且在不背离由所附权利要求限定的本发明的范围和精神的情况下,可以由本领域技术人员对其进行各种改变、添加和修改。例如,从属权利要求的特征的各种组合可以与独立权利要求的特征一起进行而不背离本发明的范围。

Claims (19)

1.一种处理器,包括:
比较电路,用于执行多个比较操作以比较第一值和第二值,所述第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在所述第一值和第二值的相应N位上进行操作;并且
所述比较电路响应于多个比较指令以执行所述多个比较操作以形成序列,使得每个比较操作被布置为输出包括所述序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了在所述序列中的最终比较操作之外的每个比较操作,通过更新存储在存储电路中的描述符将所述累积比较结果提供用作所述序列中下一比较操作的输入,其中:
所述比较电路被布置为针对在所述序列中的第一比较操作之后的至少每个比较操作,使用存储在所述存储电路中的所述描述符以用作针对该比较操作的输入;并且
所述多个比较指令包括第一比较指令和最终比较指令。
2.如权利要求1所述的处理器,其中:
所述描述符包括来自所述序列中的先前比较操作的所述累积比较结果。
3.如权利要求2所述的处理器,其中:
除了第一比较指令之外的至少每个比较指令在输入参数中标识所述描述符。
4.如权利要求2所述的处理器,其中:
除了所述最终比较操作之外的多个比较操作中的每个比较操作通过更新存储在所述存储电路中的所述描述符,来提供所述累积比较结果以用作所述序列中的下一比较操作的输入。
5.如权利要求2-4中任一项所述的处理器,其中:
所述多个比较指令包括链接的比较指令;以及
所述比较电路响应于所述链接的比较指令以执行在所述序列中的相关比较操作,所述相关比较操作使用待操作的所述第一值和第二值的N位以及输入描述符作为输入,所述比较电路被配置为输出作为所述相关比较操作的结果的描述符,所述描述符被用作后续比较操作的输入。
6.如权利要求2-4中任一项所述的处理器,其中:
所述比较电路响应于最终链接的比较指令来执行所述序列中的最终比较操作,所述最终比较操作使用待操作的所述第一值和第二值的N位以及输入描述符作为输入,并且所述比较电路被布置为输出作为所述最终比较操作的结果的比较结果以用于所述第一值和第二值的比较。
7.如权利要求2-4中任一项所述的处理器,其中:
所述比较电路响应于第一链接的比较指令来执行所述第一比较操作,所述第一比较操作使用待操作的所述第一值和第二值的N位作为输入,并且所述比较电路被布置为输出作为所述第一比较操作的结果的描述符,所述描述符被用作后续比较操作的输入。
8.如权利要求2-4中任一项所述的处理器,其中:
比较函数作为所述多个比较操作的输入被提供,其中,所述比较函数限定将在所述第一值和第二值之间执行的比较的类型。
9.如权利要求8所述的处理器,其中:
所述比较函数作为所述第一比较操作的输入被提供;以及
被提供用作除所述第一比较操作之外的每个比较操作的输入的所述描述符,标识被提供用作所述第一比较操作的输入的比较函数。
10.如权利要求8所述的处理器,其中:
所述比较函数被提供用作所述序列中的最终比较操作的输入。
11.如权利要求1-4中任一项所述的处理器,其中:
所述第一值和第二值都是整数。
12.如权利要求1-4中任一项所述的处理器,其中:
所述第一值和第二值都是浮点数。
13.如权利要求1-4中任一项所述的处理器,其中:
所述第一值和第二值各自具有N位的倍数的长度。
14.如权利要求1-4中任一项所述的处理器,其中:
所述序列中的除了第一比较操作之外的每个比较操作在相较所述先前比较操作的所述第一值和第二值的更高有效位上进行操作。
15.如权利要求1-4中任一项所述的处理器,其中:
除了所述序列中的第一比较操作之外的每个比较操作在相较所述先前比较操作的第一和第二值的较低有效位上进行操作。
16.如权利要求15所述的处理器,其中:
所述比较电路响应于指示预定条件的累积比较结果,来执行导致所述序列中的后续比较操作被绕过的早期分支操作。
17.如权利要求16所述的处理器,其中:
所述预定条件基于所述累积比较结果是否指示由先前比较操作比较的位是相等的。
18.一种用于比较宽数据类型的方法,包括以下步骤:
执行多个比较操作以比较第一值和第二值,所述第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在所述第一值和第二值的相应N位上进行操作;
所述多个比较操作被链接以形成序列,使得每个比较操作被布置为输出包括所述序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了所述序列中的最终比较操作之外的每个比较操作,所述累积比较结果被提供用作所述序列中的下一比较操作的输入;以及
响应于多个比较指令以执行所述多个比较操作,除了所述最终比较操作之外的多个比较操作中的每个比较操作通过更新存储在存储电路中的描述符提供所述累积比较结果用作所述序列中下一比较操作的输入,其中:
针对在所述序列中的第一链接的比较操作之后的至少每个比较操作,使用存储在所述存储电路中的所述描述符以用作针对该比较操作的输入;
存储在所述存储电路中的所述描述符包括来自所述序列中的先前比较操作的所述累积比较结果;并且
所述多个比较指令包括第一链接的比较指令和与所述第一链接的比较指令不同的最终链接的比较指令。
19.一种用于比较宽数据类型的装置,包括:
处理装置,用于执行多个比较操作,从而比较第一值和第二值,所述第一值和第二值中的每个具有大于N位的长度,并且每个比较操作在所述第一值和第二值的相应N位上进行操作;
所述多个比较操作被链接以形成序列,使得每个比较操作被布置为输出包含所述序列中的任何先前比较操作的比较结果的累积比较结果,并且使得对于除了在所述序列中的最终比较操作之外的每个比较操作,所述累积比较结果被提供用作所述序列中下一比较操作的输入;以及
用于响应于多个比较指令以执行所述多个比较操作的装置,除了所述最终比较操作之外的多个比较操作中的每个比较操作通过更新存储在存储电路中的描述符提供所述累积比较结果用作所述序列中下一比较操作的输入,其中:
针对在所述序列中的第一链接的比较操作之后的至少每个比较操作,使用存储在所述存储电路中的所述描述符以用作针对该比较操作的输入;
存储在所述存储电路中的所述描述符包括来自所述序列中的先前比较操作的所述累积比较结果;并且
所述多个比较指令包括第一链接的比较指令和与所述第一链接的比较指令不同的最终链接的比较指令。
CN201680039390.0A 2015-07-10 2016-05-25 宽数据类型的比较的方法和装置 Active CN107851007B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1512140.3 2015-07-10
GB201512140A GB2540216B (en) 2015-07-10 2015-07-10 Comparison of wide data types
PCT/GB2016/051506 WO2017009596A1 (en) 2015-07-10 2016-05-25 Comparison of wide data types

Publications (2)

Publication Number Publication Date
CN107851007A CN107851007A (zh) 2018-03-27
CN107851007B true CN107851007B (zh) 2022-05-06

Family

ID=54013803

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680039390.0A Active CN107851007B (zh) 2015-07-10 2016-05-25 宽数据类型的比较的方法和装置

Country Status (5)

Country Link
US (1) US10474427B2 (zh)
KR (1) KR102560424B1 (zh)
CN (1) CN107851007B (zh)
GB (1) GB2540216B (zh)
WO (1) WO2017009596A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111381805A (zh) * 2018-12-28 2020-07-07 上海寒武纪信息科技有限公司 数据比较器、数据处理方法、芯片及电子设备
CN111381806A (zh) * 2018-12-28 2020-07-07 上海寒武纪信息科技有限公司 数据比较器、数据处理方法、芯片及电子设备
CN111381804A (zh) * 2018-12-28 2020-07-07 上海寒武纪信息科技有限公司 数据比较器、数据处理方法、芯片及电子设备
CN111381875B (zh) * 2018-12-28 2022-12-09 上海寒武纪信息科技有限公司 数据比较器、数据处理方法、芯片及电子设备
CN117519637A (zh) * 2018-12-28 2024-02-06 上海寒武纪信息科技有限公司 数据比较器、数据处理方法、芯片及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6384627B1 (en) * 2001-02-16 2002-05-07 Xilinx, Inc. Logic block used as dynamically configurable logic function
US8453043B2 (en) * 2010-09-13 2013-05-28 Taiwan Semiconductor Manufacturing Company, Ltd. Built-in bit error rate test circuit
CN103605485A (zh) * 2013-11-29 2014-02-26 深圳市道通科技有限公司 一种变长数据的存储方法与装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226082A (en) * 1992-07-02 1993-07-06 At&T Bell Laboratories Variable length decoder
US6384713B1 (en) * 2000-04-21 2002-05-07 Marvell International, Ltd. Serial comparator
US7281006B2 (en) * 2003-10-23 2007-10-09 International Business Machines Corporation System and method for dividing data into predominantly fixed-sized chunks so that duplicate data chunks may be identified
US7453286B1 (en) * 2007-04-19 2008-11-18 Xilinx, Inc. Comparator and method of implementing a comparator in a device having programmable logic
GB2480285A (en) * 2010-05-11 2011-11-16 Advanced Risc Mach Ltd Conditional compare instruction which sets a condition code when it is not executed
US8407245B2 (en) * 2010-11-24 2013-03-26 Microsoft Corporation Efficient string pattern matching for large pattern sets
US9176733B2 (en) * 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US8581624B2 (en) * 2012-03-29 2013-11-12 Altera Corporation Integrated circuits with multi-stage logic regions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6384627B1 (en) * 2001-02-16 2002-05-07 Xilinx, Inc. Logic block used as dynamically configurable logic function
US8453043B2 (en) * 2010-09-13 2013-05-28 Taiwan Semiconductor Manufacturing Company, Ltd. Built-in bit error rate test circuit
CN103605485A (zh) * 2013-11-29 2014-02-26 深圳市道通科技有限公司 一种变长数据的存储方法与装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Architecture and implementation of a vector/SIMD multiply-accumulate unit;A. Danysh;《IEEE Transactions on Computers》;IEEE;20050131;第54卷(第3期);第284-292页 *
约束逻辑编程中宽数据算术运算算法;万海等;《计算机工程》;20031231;第29卷(第22期);第40-50页 *

Also Published As

Publication number Publication date
CN107851007A (zh) 2018-03-27
US10474427B2 (en) 2019-11-12
KR20180027537A (ko) 2018-03-14
WO2017009596A1 (en) 2017-01-19
GB2540216B (en) 2020-01-01
KR102560424B1 (ko) 2023-07-27
US20190087155A1 (en) 2019-03-21
GB2540216A (en) 2017-01-11
GB201512140D0 (en) 2015-08-19

Similar Documents

Publication Publication Date Title
CN110036368B (zh) 用于执行算术运算以累加浮点数的装置及方法
CN107851007B (zh) 宽数据类型的比较的方法和装置
EP2569694B1 (en) Conditional compare instruction
EP3719639B1 (en) Systems and methods to perform floating-point addition with selected rounding
US9575753B2 (en) SIMD compare instruction using permute logic for distributed register files
US20190095175A1 (en) Arithmetic processing device and arithmetic processing method
US10083008B2 (en) Reproducible stochastic rounding for out of order processors
US7861071B2 (en) Conditional branch instruction capable of testing a plurality of indicators in a predicate register
US10613861B2 (en) Programmable linear feedback shift register
CN114691217A (zh) 用于8位浮点矩阵点积指令的装置、方法和系统
EP3716050A2 (en) Using fuzzy-jbit location of floating-point multiply-accumulate results
CN107743613B (zh) 用于处理浮点值的装置和方法
GB2410097A (en) Constant generation in floating point processing
US11080054B2 (en) Data processing apparatus and method for generating a status flag using predicate indicators
CN110826722A (zh) 用于通过排序来生成索引并基于排序对元素进行重新排序的系统、装置和方法
US9208839B2 (en) Predicting saturation in a shift operation
US9250898B2 (en) VLIW processor, instruction structure, and instruction execution method
US11487506B2 (en) Condition code anticipator for hexadecimal floating point
EP4155913A1 (en) Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma
US20220308873A1 (en) Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register
EP2666082B1 (en) Integrated circuit device and method for calculating a predicate value

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant