CN113485751A - 执行伽罗瓦域乘法的方法、运算单元和电子装置 - Google Patents

执行伽罗瓦域乘法的方法、运算单元和电子装置 Download PDF

Info

Publication number
CN113485751A
CN113485751A CN202110736103.4A CN202110736103A CN113485751A CN 113485751 A CN113485751 A CN 113485751A CN 202110736103 A CN202110736103 A CN 202110736103A CN 113485751 A CN113485751 A CN 113485751A
Authority
CN
China
Prior art keywords
source operand
modulo
units
operand
operands
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.)
Granted
Application number
CN202110736103.4A
Other languages
English (en)
Other versions
CN113485751B (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.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co 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 Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202110736103.4A priority Critical patent/CN113485751B/zh
Publication of CN113485751A publication Critical patent/CN113485751A/zh
Application granted granted Critical
Publication of CN113485751B publication Critical patent/CN113485751B/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing

Abstract

本公开提供了执行伽罗瓦域乘法的方法、运算单元及电子装置。该方法包括:接收指示执行伽罗瓦域乘法的微指令;将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,N为正整数;将N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;对N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;合并N个目的操作数单元,获取目的操作数作为伽罗瓦乘法的结果。从而提高伽罗瓦域乘法的运算效率并减少运算所需总时间。

Description

执行伽罗瓦域乘法的方法、运算单元和电子装置
技术领域
本公开的实施例涉及一种执行伽罗瓦域乘法的方法、运算单元和电子装置。
背景技术
伽罗瓦域的仿射变换及乘法运算广泛应用于密码学和图像处理。伽罗瓦域中元素的个数称为阶,如256阶的有限域记作GF(2^8)。伽罗瓦域的一个归约多项式记作P(x),如选取GF(2^8)的一个归约多项式为P(x)=x^8+x^4+x^3+x^2+1。对于伽罗瓦域的多项式运算符合以下规则:
(1)多项式的每个系数只能是0或者1。
(2)合并同类项时,每个系数进行异或操作,而不是加法操作。比如x^4+x^4=0*x^4=0,因为两个系数都为1,进行异或后等于0。
(3)加法等于减法,也可以理解为负系数等于正系数。例如,x^4–x^4=x^4+x^4。又如,-x^3=x^3。
通常会采用软件算法来实现伽罗瓦域的乘法算法,其主要涉及for循环语句、移位和异或运算。对于大量数据,使用软件算法必然会涉及多重的for循环运算,从而运算效率低下。
也存在利用uop指令序列来实现伽罗瓦域的乘法,其具体需要将伽罗瓦域的乘法先拆分成多条移位和异或uop指令,其后由硬件逻辑执行拆分出来的uop指令。因为是由硬件逻辑来执行,从而这一方案效率要高于软件算法的方案,但是需要先拆分出多个uop指令,这占用了更多的逻辑运算资源,导致总时延增加,实现伽罗瓦域乘法的总时间不占优势。
在实现伽罗瓦域乘法的诸多方案中,硬件具有计算速度快的固有优势但时延过长,而软件算法的运算效率低,因此需要提出一种效率高且运算所需的总时间短的伽罗瓦域乘法的实现方案。
发明内容
本公开的实施例提供了一种执行伽罗瓦域乘法的方法、运算单元和电子装置,以解决现有技术中实现伽罗瓦域乘法的方案运算效率低或运算所需总时间长的技术问题。
本公开至少一个实施例提供一种执行伽罗瓦域乘法的方法,包括:接收指示执行伽罗瓦域乘法的微指令;将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将所述N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,所述第一源操作数和所述第二源操作数位长相等,所述第一源操作数和所述第二源操作数由所述微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数;将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,所述微指令携带所述第一源操作数和所述第二源操作数;或者,所述微指令指向所述第一源操作数的第一存储位置和/或所述第二源操作数的第二存储位置。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,在所述微指令指示所述第一源操作数的第一存储位置和/或所述第二源操作数的第二存储位置时,所述方法还包括:从所述第一存储位置和/或所述第二存储位置,读取所述第一源操作数和/或所述第二源操作数。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,所述N对源操作数单元采用SIMD的方式处理。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,在将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘时,相乘过程中的求和是采用异或方式实现。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取所述N个第一中间操作数,包括:将每对源操作数单元中的第一源操作数的每一位和第二源操作数单元的每一位彼此对应相乘,得到多个中间乘积;对所述多个中间乘积求和,获取与每对源操作数单元对应的第一中间操作数。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,对所述N个第一中间源操作数分别进行求模运算,获取所述N个目的操作数单元,包括:利用归约多项式,对每个第一中间源操作数进行多次减法运算,以获取与每个第一中间源操作数对应的目的操作数单元;其中,在所述多次减法运算中,每个第一中间操作数作为被减数,所述归约多项式作为减数;所述归约多项式的长度小于第一中间源操作数,在进行第一次减法运算前,在所述归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同;并且所述补0后的归约多项式在每次进行减法运算之后,所述补0后的归约多项式的每一位右移以及在高位补0。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,对所述N个第一中间源操作数分别进行求模运算,获取所述N个目的操作数单元,包括:利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果;对所述多个求模中间结果求和,以获取与每个第一中间源操作数对应的目的操作数单元;其中,所述归约多项式的长度小于第一中间源操作数,在进行求模前,在所述归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,所述利用归约多项式,对每个第一中间源操作数进行多次求模,获取所述多个求模中间结果,包括:将每个第一中间源操作数拆分为多个第二中间源操作数,每个第二中间源操作数至多有1位是1,且所述多个第二中间源操作数求和后得到第一中间源操作数;根据所述归约多项式,获取多个与所述归约多项式对应的操作数;利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获取所述多个求模中间结果;其中,所述多个与所述归约多项式对应的操作数的数量与所述多个第二中间操作数的数量相等;所述多个与所述归约多项式对应的操作数由所述归约多项式向右移位及补0得到。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,在利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获取所述多个求模中间结果时,对所述多个第二中间操作数的求模是并发进行的。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,所述方法还包括:判断所述多个求模中间结果的和的高位区是否全为0;响应于所述多个求模中间结果的和的高位区全为0,将所述多个求模中间结果的和作为与每个第一中间源操作数对应的目的操作数单元;响应于所述多个求模中间结果的和的高位区不全为0,利用所述归约多项式,对所述多个求模中间结果的和进行至少一次求模,所述多个求模中间结果的和的求模结果作为与每个第一中间源操作数对应的目的操作数单元。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的方法中,对所述多个求模中间结果的和进行至少一次求模,是并发进行的。
本公开至少一个实施例提供了一种执行伽罗瓦域乘法的运算单元,包括:译码电路、控制电路和运算电路,其中,所述译码电路被配置为接收指示执行伽罗瓦域乘法的微指令,并对所述微指令进行解析,以获取控制信息,以及向所述控制电路发送所述控制信息;所述控制电路被配置为响应于所述控制信息,操作所述运算电路执行伽罗瓦域乘法;所述运算电路被配置为:将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将所述N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,所述第一源操作数和所述第二源操作数位长相等,所述第一源操作数和所述第二源操作数由所述微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数;将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述运算电路包括:划分模块,被配置将所述第一源操作数划分为所述N个等长的第一源操作数单元,将所述第二源操作数划分为所述N个等长的第二源操作数单元,将所述N个第一源操作数单元和所述N个第二源操作数单元一一对应组合得到所述N对源操作数单元;乘法模块,被配置为将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;求模模块,被配置为对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;合并模块,被配置为合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所运算电路根据所述控制电路的操作,从所述存储器中获取所述第一源操作数和所述第二源操作数;或者,所述译码电路向所述运算电路发送所述第一源操作数和所述第二源操作数;或者,所述控制电路向所述运算电路发送所述第一源操作数和所述第二源操作数。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述乘法模块包括第一求和子模块,所述第一求和子模块被配置为在将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘时,用异或方式实现相乘过程中的求和。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述乘法模块包括乘法子模块和第二求和子模块,所述乘法子模块被配置为将每对源操作数单元中的第一源操作数的每一位和第二源操作数单元的每一位彼此对应相乘,得到多个中间乘积;所述第二求和子模块被配置为对所述多个中间乘积求和,获取与每对源操作数单元对应的第一中间操作数。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述求模模块包括多个异或子模块和第三求和子模块,所述多个异或子模块被配置为利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果;所述第三求和子模块被配置为对所述多个求模中间结果求和,以获取与每个第一中间源操作数对应的目的操作数单元;其中,所述归约多项式的长度小于第一中间源操作数,在进行求模前,在所述归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述求模模块还包括拆分子模块和操作数获取子模块,所述拆分子模块被配置为将每个第一中间源操作数拆分为多个第二中间源操作数,每个第二中间源操作数至多有1位是1,且所述多个第二中间源操作数求和后得到第一中间源操作数;所述操作数获取子模块被配置为根据所述归约多项式,获取多个与所述归约多项式对应的操作数;所述多个异或子模块利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获取所述多个求模中间结果;其中,所述多个与所述归约多项式对应的操作数的数量与所述多个第二中间操作数的数量相等;所述多个与所述归约多项式对应的操作数由所述归约多项式向右移位及补0得到。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述多个异或子模块包括第一组异或子模块;所述第一组异或子模块被配置为利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获所述多个求模中间结果。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述多个异或子模块还包括第二组异或子模块和判断子模块;所述判断子模块被配置为判断所述多个求模中间结果的和的高位区是否全为0;响应于所述多个求模中间结果的和的高位区全为0,将所述多个求模中间结果的和作为与每个第一中间源操作数对应的目的操作数单元;响应于所述多个求模中间结果的和的高位区不全为0,所述第二组异或子模块利用所述归约多项式,对所述多个求模中间结果的和进行至少一次求模,所述多个求模中间结果的和的求模结果作为与每个第一中间源操作数对应的目的操作数单元。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述第一组异或子模块并发地对所述多个第二中间操作数进行求模;和/或所述第二组异或子模块并发地对所述多个求模中间结果进行求模。
例如,在本公开一实施例提供的执行伽罗瓦域乘法的运算单元中,所述第一组异或子模块包括X级异或子模块,所述第二组异或子模块包括Y级异或子模块,相同级的至少一个异或子模块并发地进行求模,不同级的异或子模块根据级别顺序进行求模;其中,X和Y为正整数。
本公开至少一个实施例提供一种电子装置,包括如上述实施例中的任一项所述的运算单元。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为本公开至少一个实施例提供的执行伽罗瓦域乘法的流程图;
图2A为本公开至少一个实施例提供的伽罗瓦域乘法中使用的操作数的示例的示意图;
图2B为本公开至少一个实施例提供的伽罗瓦域乘法中的操作数相乘的计算过程的示意图;
图2C为本公开至少一个实施例提供的伽罗瓦域乘法中的求模的过程的示意图;
图3A为本公开至少一个实施例提供的一种执行伽罗瓦域乘法的运算单元的框图;
图3B为本公开至少一个实施例提供的又一种执行伽罗瓦域乘法的运算单元的框图;
图4为本公开至少一个实施例提供的运算单元执行伽罗瓦域乘法时的操作数相乘的示意图;
图5A为本公开实施例中执行伽罗瓦域乘法时的求模的示意图;
图5B为本公开实施例中执行伽罗瓦域乘法时的求模的迭代逻辑的示意图;
图6为本公开至少一个实施例提供的运算单元并发执行伽罗瓦域乘法时的求模的示意图;
图7为本公开至少一个实施例提供的运算单元中的求模模块的一个示例;
图8为本公开至少一个实施例提供的电子装置的框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开至少一个实施例提供一种执行伽罗瓦域乘法的方法,包括:接收指示执行伽罗瓦域乘法的微指令;将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将所述N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,所述第一源操作数和所述第二源操作数位长相等,所述第一源操作数和所述第二源操作数由所述微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数;将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
本公开至少一个实施例提供了一种执行伽罗瓦域乘法的运算单元,包括:译码电路、控制电路和运算电路,其中,所述译码电路被配置为接收指示执行伽罗瓦域乘法的微指令,并对所述微指令进行解析,以获取控制信息,以及向所述控制电路发送所述控制信息;所述控制电路被配置为响应于所述控制信息,操作所述运算电路执行伽罗瓦域乘法;所述运算电路被配置为:将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将所述N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,所述第一源操作数和所述第二源操作数位长相等,所述第一源操作数和所述第二源操作数由所述微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数;将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
本公开至少一个实施例提供一种电子装置,包括如上述实施例中的任一项所述的运算单元。
本公开实施例提供的执行伽罗瓦域乘法的方法及运算单元、电子装置,可以高效地实现伽罗瓦域乘法,相对于现有技术而言,所需的总时间长变短。
下面将结合附图对本公开的实施例进行描述。
伽罗瓦域的乘法运算包括源操作数A、源操作数B和目的操作数C,源操作数和目的操作数的大小为512比特、256比特、128比特等,本公开的实施例对此不作限制。
本公开至少一实施例提供了指示执行伽罗瓦域乘法的微指令,通过执行单条的该微指令即可开始执行并完成伽罗瓦域乘法。本公开至少一个实施例中长度为128比特的微指令例如表示为:
gf2p8mulb xmm1,xmm2,xmm3
其中,xmm1、xmm2和xmm3分别为长度为128比特的目的操作数C、源操作数A、和源操作数B,需要注意的是xmm1此时尚未计算得到。
又例如,本公开实施例中长度为256比特的微指令可以表示为:
gf2p8mulb ymm1,ymm2,ymm3
其中,ymm1,ymm2和ymm3为相应的长度为256比特的操作数。
又例如,本公开实施例中长度为512比特的微指令可以表示为:
gf2p8mulb zmm1,zmm2,zmm3
其中,zmm1,zmm2和zmm3为相应的长度为512比特的操作数。
在本公开的实施例中,微指令的具体表现形式可根据实际情况确定,在此不进行限制。
图1示出了本公开实施例提供的一种执行伽罗瓦域乘法的方法的流程图。该执行伽罗瓦域乘法的方法包括步骤110~步骤150。
步骤110,接收指示执行伽罗瓦域乘法的微指令。
步骤120,将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,第一源操作数和第二源操作数位长相等,第一源操作数和第二源操作数由微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数。
步骤130,将N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数。
步骤140,对N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元。
步骤150,合并N个目的操作数单元,获取目的操作数作为伽罗瓦乘法的结果。
在一个示例中,例如指示执行伽罗瓦域乘法的微指令指示的源操作数A和源操作数B的长度为128比特。
图2A为本公开实施例的提供的128比特的源操作数和目的操作数的示例的示意图。
在图2A中,SourceA和SourceB为源操作数A和源操作数B,DestC为目的操作数C。本公开的实施例中,可以将操作数划分为多个操作数单元,比如图2A中所示的源操作数A、源操作数B和目的操作数C均以8比特的数据颗粒度进行划分,从而每个操作数划分出16个操作数单元。
具体地,源操作数A包括源操作数单元A0、A1、……、A15,其中的A0为源操作数A的最低的[7:0],A1为[15:8],以此类推,A15为[127:120]。
对应地,源操作数B包括源操作数单元B0、B1、……、B15,其中的B0为源操作数B的最低的[7:0],B1为[15:8],以此类推,B15为[127:120]。
对应地,目的操作数C包括目的操作数单元C0、C1、……、C15,其中的C0为目的操作数C的最低的[7:0],C1为[15:8],以此类推,C15为[127:120]。
在本公开的实施例的,源操作数和目的操作数的长度可以为256比特及以上或64比特及以下时的格式与图2A所示的类似,在此不进行展开。
本公开的实施例中将操作数划分为多个操作数单元,对多个操作数单元的伽罗瓦域乘法运算的运算结果进行拼接可以表示对完整的操作数进行伽罗瓦域运算的运算结果。
例如,图2A中的DestC[127:0]=SourceA[127:0]*SourceB[127:0],这里的“*”表示伽罗瓦域乘。
例如,伽罗瓦域乘法实现为SIMD(单指令多数据)乘法,且例如数据颗粒度为8比特,从而C0=A0*B0、C1=A1*B1、……、C15=A15*B15。此时,本公开中的源操作数A、源操作数B和目的操作数C为SIMD操作数。
图2B和图2C为归约多项式例如为P(x)=x^8+x^4+x^3+x+1时计算C[7:0]=A[7:0]*B[7:0]的计算过程的示意图。
归约多项式在为P(x)=x^8+x^4+x^3+x+1时,其对应的9比特数据为P[8:0]=9’b100011011。本示例中A[7:0]=8’b11001011和B[7:0]=8’b10101011。
第一步如图2B所示,先计算A[7:0]X B[7:0]=T[15:0]。此步运算类似于传统的乘法运算,在计算和时采用异或的方式,从而得到伽罗瓦域乘法的一个中间结果T[15:0]=0111101111100101。
第二步如图2C所示,中间结果T[15:0]进行求模运算(也可以叫做取模运算)T[15:0]mod P[8:0],用T[15:0]除以P[8:0],得到的余数C[7:0]就是伽罗瓦乘法的结果。
类似地,执行对于A2*B2、A3*B3等,然后将得到的C0~C15组合得到目的操作数C。
换言之,在该示例中,响应于接收到微指令,将源操作数A划分为16个第一源操作数单元,例如图2A中的A0-A15。将源操作数B划分为16个第二源操作数单元,例如图2A中的B0-B15。将A0-A15和B0-B15一一对应组合得到16对源操作数单元。例如,A0和B0为一对源操作数单元、A1和B1为一对源操作数单元、以此类推、A15和B15为一对源操作数单元。将A0和B0相乘、A1和B1相乘、A2和B2相乘、……、A15和B15相乘,得到16个第一中间操作数。例如,上述的T[15:0]为A0和B0相乘后得到的第一中间操作数。继续对16个第一中间源操作数分别进行求模运算,得到16个目的操作数单元。例如图2A中的C0-C15为16个目的操作数单元。将16个目的操作数单元合并得到目的操作数,该目的操作数即为伽罗瓦域乘法的结果。本实施例的方法摒弃了传统的软件算法或传统的uop实现方式,采用单条微指令完成伽罗瓦域乘法,减少了指令的数量,达到提高运算效率的效果
在又一个示例中,以32比特为数据颗粒度,将256比特的源操作数划分为8个源操作数单元。
可选地,本公开实施例中的微指令携带第一源操作数和第二源操作数;或者,微指令指向第一源操作数的第一存储位置和/或第二源操作数的第二存储位置。例如,在第一源操作和第二源操作数较短时,微指令直接携带第一源操作数和第二源操作数。又如,不论第一源操作数和第二源操作数的长短,微指令均不携带第一源操作数和第二源操作数,微指令携带指示第一源操作数和第二源操作数的存储位置的索引,从而在接收到微指令后,从该存储位置获取第一源操作数和第二源操作数。本实施例给出了获取第一源操作数和第二源操作数的多种实施方式,从而可以灵活的根据实际情况进行选择最佳的实施方式。
在一些实施例中,在微指令指示第一源操作数的第一存储位置和/或第二源操作数的第二存储位置时,方法还包括:从第一存储位置和/或第二存储位置,读取第一源操作数和/或第二源操作数。例如,微指令指示了第二存储位置,从而需要从第二存储位置读取第二源操作数。本实施例中微指令指示第一源操作数和第二源操作数具体的存储位置,使得可以直接访问到该存储地址,并快速地获取到源操作数。
进一步可选地,微指令还指示归约多项式。例如,微指令携带归约多项式、微指令指示归约多项式的存储位置、或者微指令指示从预先设置的多个归约多项式中选择哪一个归约多项式。本实施例给出了归约多项式具体的获取方式,从而可以根据实际情况灵活的进行选择。
在一些实施例中,在将N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘时,相乘过程中的求和是采用异或方式实现。
在一些实施例中,将N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数,包括:将每对源操作数单元中的第一源操作数的每一位和第二源操作数单元的每一位彼此对应相乘,得到多个中间乘积;对多个中间乘积求和,获取与每对源操作数单元对应的第一中间操作数。
例如,A0和B0均为8位,图2B中的得到8个中间乘积,对8个中间乘积求和后得到第一中间操作数。可选地,对中间乘积求和是采用异或的方式。
在又一些实施例中,对N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元,包括:利用归约多项式,对每个第一中间源操作数进行多次减法运算,以获取与每个第一中间源操作数对应的目的操作数单元;其中,在多次减法运算中,每个第一中间操作数作为被减数,归约多项式作为减数;归约多项式的长度小于第一中间源操作数,在进行第一次减法运算前,在归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同;并且补0后的归约多项式在每次进行减法运算之后,补0后的归约多项式的每一位右移以及在高位补0。
此处的归约多项式作为减数,N个第一中间源操作数作为被减数。对此,一个示例可参见图5A,以归约多项式P[8:0]=9’b100011011,一个第一中间源操作数TmpSum[15:0]=0111101111100101为例。由于归约多项式的长度通常是小于第一中间源操作数的长度,因此需要先将归约多项式的长度补齐至与第一中间源操作数的长度相同。根据第一源操作数中从高位开始的第一个为“1”的位是第一源操作数的哪一位,来对归约多项式进行补齐。例如,图5A中第一个“1”出现在高15位,即TmpSum[14]=1,目前的归约多项式是9位且高9位为0,因此需要给该归约多项式的低位补6个0。在每次进行过减法运算之后,将归约多项式的每一位右移并在高位补0,在低1位是1时停止右移。并且在每次进行减法运算之后,下一次的被减数是上一次减法运算的结果。对于图5A,之后还将进行更具体的说明。
在一些实施例中,对N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元,包括:利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果;对多个求模中间结果求和,以获取与每个第一中间源操作数对应的目的操作数单元;其中,归约多项式的长度小于第一中间源操作数,在进行求模前,在归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同。
由于归约多项式的长度小于第一中间源操作数的长度,因此同样需要将归约多项式在低位补0,使得补0后的归约多项式的长度与第一中间源操作数的长度相同。利用补0后的归约多项式,对第一中间源操作数进行多次求模,每次求模后同样需要对归约多项式进行移位,移位的方式与上述实施例相同,在此不再赘述。
进一步可选地,利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果,包括:将每个第一中间源操作数拆分为多个第二中间源操作数,每个第二中间源操作数至多有1位是1,且多个第二中间源操作数求和后得到第一中间源操作数;根据归约多项式,获取多个与归约多项式对应的操作数;利用多个与归约多项式对应的操作数,分别对多个第二中间操作数求模,以获取多个求模中间结果;其中,多个与归约多项式对应的操作数的数量与多个第二中间操作数的数量相等;多个与归约多项式对应的操作数由归约多项式向右移位及补0得到。上述实施例给出了执行伽罗瓦乘法多种流程,可根据需求灵活地进行选择。
继续以归约多项式P[8:0]=9’b100011011,一个第一中间源操作数TmpSum[15:0]=0111101111100101为例。将TmpSum[15:0]拆分成16个第二中间源操作数,包括:
16’b0100000000000000
16’b0010000000000000
16’b0001000000000000
16’b0000100000000000
……
16’b0000000100000000,
再获取多个与归约多项式对应的操作数,例如:
P6[15:0]=16’b0100011011000000
P5[15:0]=16’b0010001101100000等。
利用归约多项式对应的操作数分别对这7个第二中间源操作数进行求模运算,获得7个求模中间结果。其中存在全为0的第二中间源操作数,在第二中间源操作数全为0时,实际上不需要对其进行求模运算,从而减少了求模运算的次数。
在进一步可选的实施例中,在利用多个与归约多项式对应的操作数,分别对多个第二中间操作数求模,以获取多个求模中间结果时,对多个第二中间操作数的求模并发进行。由于第二中间源操作数和相应的与归约多项式对应的操作数是一一对应的,从而可以同时进行对多个第二中间源操作数的求模运算。例如,已经获得了7个第二中间源操作数:
16’b0100000000000000
16’b0010000000000000
16’b0001000000000000
16’b0000100000000000
……
16’b0000000100000000,
还获得了与归约多项式对应的7个操作数:
P6[15:0]=0100011011000000
P5[15:0]=0010001101100000
P4[15:0]=0001000110110000
P3[15:0]=0000100011011000
P2[15:0]=0000010001101100
P1[15:0]=0000001000110110
P0[15:0]=0000000100011011,
将第二中间源操作数和与归约多项式对应的操作数一一对应求模,由于这7对操作数是彼此独立的,因此这7对操作数的求模同时并发进行。本实施例中,对于伽罗瓦域乘法的求模同时并发进行可以进一步地提高运算效率,并降低运算所需的总时长。
在一个可能的实施例中,上述方法还可以包括:判断多个求模中间结果的和的高位区是否全为0;响应于多个求模中间结果的和的高位区全为0,将多个求模中间结果的和作为与每个第一中间源操作数对应的目的操作数单元;响应于多个求模中间结果的和的高位区不全为0,利用归约多项式,对多个求模中间结果的和进行至少一次求模,多个求模中间结果的和的求模结果作为与每个第一中间源操作数对应的目的操作数单元。
例如,对多个中间求模结果求和之后发现该和的高位区并非全为0,则继续利用归约多项式对该和进行求模运算,直到求模结果的高位区全为0。
进一步可选地,对多个求模中间结果的和进行至少一次求模,是并发进行的。与对第二中间源操作数进行求模类似,对多个求模中间结果的和进行多次求模运算同样可以是并发进行的。
图3A展示了本公开至少一个实施例提供的执行伽罗瓦域乘法的运算单元的框图。
运算单元30包括:译码电路310、控制电路320和运算电路330。译码电路310被配置为接收指示执行伽罗瓦域乘法的微指令,并对微指令进行解析,以获取控制信息,以及向控制电路320发送控制信息。由微指令指示位长相等的第一源操作数和第二源操作数。控制电路320被配置为响应于控制信息,操作运算电路330执行伽罗瓦域乘法。运算电路330被配置为执行图1中的步骤22~250。
在至少一个示例中,运算电路330可以进一步包括:划分模块331、乘法模块332、求模模块333和合并模块334。
这其中,划分模块331被配置将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将N个第一源操作数单元和N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数。
乘法模块332被配置为将N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数。
求模模块333,被配置为对N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元。
合并模块334,被配置为合并N个目的操作数单元,获取目的操作数作为伽罗瓦乘法的结果。
运算电路330中的划分模块331、乘法模块332、求模模块333和合并模块334执行伽罗瓦域乘法的方式可参见上述方法实施例的描述,在此不再赘述。
可选地,运算电路330根据控制电路320的操作,从存储器中获取第一源操作数和第二源操作数;或者,译码电路310向运算电路330发送第一源操作数和第二源操作数;或者,控制电路320向运算电路330发送第一源操作数和第二源操作数。例如,该存储器为运算单元30外部的存储器,例如可以为缓存(例如一级缓存、二级缓存等)或内存。
图3B展示了本公开至少一个实施例提供的又一执行伽罗瓦域乘法的运算单元的框图。
图3B的运算单元31与图3A中的运算电路30包括相同的译码电路310、控制电路320和运算电路330,除此之外,图3B中的运算单元31还包括存储器340,从而运算电路330可以从存储器340获取第一源操作数和/或第二源操作数和/或归约多项式。例如,存储器340为寄存器或寄存器堆,而运算单元31则从外部存储器读入数据以存储在存储器340中。
进一步地,在可选的实施例中,乘法模块332包括第一求和子模块,第一求和子模块被配置为在将N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘时,用异或方式实现相乘过程中的求和。
在一些实施例中,乘法模块332包括乘法子模块和第二求和子模块,乘法子模块被配置为将每对源操作数单元中的第一源操作数单元的每一位和第二源操作数单元的每一位彼此对应相乘,得到多个中间乘积;第二求和子模块被配置为对多个中间乘积求和,获取与每对源操作数单元对应的第一中间操作数。
图4展示了本公开至少一个实施例提供的运算单元执行伽罗瓦域乘法时的操作数相乘的示意图。
在图4中Src1[7:0]和Src2[7:0]分别为一个第一源操作数单元和一个第二源操作数单元。乘法子模块将Src1[7:0]中的每一位和Src2[7:0]中的每一位彼此对应相乘得到Tmp0[15:0]-Tmp7[15:0],Tmp0[15:0]-Tmp7[15:0]分别为8个中间乘积。第二求和子模块对Tmp0[15:0]-Tmp7[15:0]进行求和,得到第一中间操作数TmpSum[15:0]。
图5A为本公开实施例中执行伽罗瓦域乘法时的求模的示意图。
在图5A中,TmpSum[15:0]除以归约多项式P[8:0]=9’b100011011。其中P6[15:0]=P[8:0]*x^6,P5[15:0]=P[8:0]*x^5,以此类推。由于TmpSum[14]=1,所以用P[8:0]乘以x^6=P6[15:0],TmpSum[15:0]-P6[15:0]=TmpSum1[15:0]。由于TmpSum1[13]=1,所以用P[8:0]乘以x^5=P5[15:0],再用TmpSum1[15:0]-P5[15:0]=TmpSum2[15:0],以此类推。最终得到余数FinalSum[15:0],其最大的x次方小于8,即小于归约多项式。由此可见,该求模运算是一个迭代的过程,迭代结束的条件是FinalSum[15:0]的高8位全为0。
图5B为本公开实施例中执行伽罗瓦域乘法时的求模的迭代逻辑的示意图。图5B与图5A中的求模过程对应,其中i=0、1、2、3、……、6,多路选择器输入xor的是P(6-i)[15:0]。迭代寄存器中预先存储TmpSum[15:0]。在这一逻辑实现中,由于迭代只能串行的进行,从而运算周期较长。以图5A中的求模过程为例,该求模运算需要进行7次迭代得到最终的结果,这也使得计算效率还有提升空间。
具体的,在图5A中,首先对TmpSum[15:0]进行第一次求模,TmpSum[15:0]=0111101111100101,由于TmpSum[15:0]中的最高位为0,因此归约多项式只需要补齐至TmpSum[14]这一位,从而长度补齐的归约多项式P6[15:0]=P[8:0]*x^6=0100011011000000。
继续计算TmpSum[15:0]-P6[15:0]。这里可以对TmpSum[15:0]=0111101111100101和P6[15:0]=0100011011000000进行异或,得到TmpSum1[15:0]=0011110100100101。到此进行了1次迭代。
在第2次迭代中,对TmpSum1[15:0]进行求模,由于TmpSum1[13]=1,所以归约多项式需要补齐至TmpSum1[13]这一位,长度补齐的归约多项式P5[15:0]=P[8:0]*x^5=0010001101100000,继续计算TmpSum1[15:0]-P5[15:0]=TmpSum2[15:0]=0001111001000101,至此第2次迭代结束。
以此类推,在第3次迭代中计算TmpSum2[15:0]-P4[15:0]=TmpSum3[15:0]=0000111111110101;在第4次迭代中计算TmpSum3[15:0]-P3[15:0]=TmpSum4[15:0]=0000011100101101;在第5次迭代中计算TmpSum4[15:0]-P2[15:0]=TmpSum5[15:0]=0000001101000001;在第6次迭代中计算TmpSum5[15:0]-P2[15:0]=TmpSum6[15:0]=0000000101110111;最后,在第7次迭代中计算TmpSum6[15:0]-P1[15:0]=TmpSum7[15:0]=0000000001101100。在进行了7次迭代后确认当前的余数的高8位全为0,求模结束。
在一些实施例中,求模模块333包括多个异或子模块和第三求和子模块,多个异或子模块被配置为利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果。第三求和子模块被配置为对多个求模中间结果求和,以获取与每个第一中间源操作数对应的目的操作数单元。其中,归约多项式的长度小于第一中间源操作数,在进行求模前,在归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同。
进一步可选的实施例中,求模模块333还包括拆分子模块和操作数获取子模块。拆分子模块被配置为将每个第一中间源操作数拆分为多个第二中间源操作数,每个第二中间源操作数至多有1位是1,且多个第二中间源操作数求和后得到第一中间源操作数。操作数获取子模块被配置为根据归约多项式,获取多个与归约多项式对应的操作数。多个异或子模块利用多个与归约多项式对应的操作数,分别对多个第二中间操作数求模,以获取多个求模中间结果。多个与归约多项式对应的操作数的数量与多个第二中间操作数的数量相等。多个与归约多项式对应的操作数由归约多项式向右移位及补0得到。
图6展示了本公开至少一个实施例提供的运算单元并发执行伽罗瓦域乘法时的求模的示意图。
如图6所示,TmpSum[15:0]的每位为1的位分别与归约多项式求模,得到多个求模中间结果,对多个求模中间结果再求和。例如,TmpSum[14]=1,TmpSum[14]与归约多项式求模相当于:
16’b0100000000000000mod P[8:0]
=16’b0100000000000000mod(P[8:0]*x^6)
=16’b0100000000000000mod P6[15:0]
=16’b0100000000000000mod 16’b0100011011000000
=16’b0000011011000000
再如,TmpSum[13]=1,TmpSum[13]与归约多项式求模相当于:
16’b0010000000000000 mod P[8:0]
=16’b0010000000000000 mod(P[8:0]*x^5)
=16’b0010000000000000 mod P5[15:0]
=16’b0010000000000000 mod 16’b0010001101100000
=16’b0000001101100000
以此类推直至对TmpSum[8]进行求模为止,TmpSum[7:0]的最大系数小于归约多项式的最大系数,所以不需要继续求模。
将上述多个求模中间结果进行求和,得到:TmpSum1[15:0]=16’b0000010000000000,该结果的高8位(即高位区)不全为0,还需继续进行进一步的求模,如下:
TmpSum1[15:0]mod P[8:0]
=TmpSum1[15:0]mod P2[15:0]
=16’b0000010000000000 mod 16’b0000010001101100
=16’b0000000001101100
图6中一共并行执行了最多7次求模,分别对应于TmpSum[14]、TmpSum[13]、TmpSum[12]、TmpSum[11]、TmpSum[10]、TmpSum[9]和TmpSum[8],由于TmpSum[10]=1’b0,实际这个例子只执行了6次求模。求模的8个结果再求和得到的结果TmpSum1[15:0]判断高8位是否全为0,不为0还要继续进行求模。继续进行的求模的最大次数可以预先确定,该次数与归约多项式有关。
表1
A(TmpSum[14]) B(TmpSum[13]) C(TmpSum[12]) A A^B B^C 最大次数
0 0 0 0 0 0 0
0 0 1 0 0 1 1
0 1 0 0 1 1 2
0 1 1 0 1 0 1
1 0 0 1 1 0 2
1 0 1 1 1 1 3
1 1 0 1 0 1 2
1 1 1 1 0 0 1
表1为继续进行求模的最大次数与归约多项式的对应关系。在第一次并行求模的次数确定时,继续进行求模的次数随之确定,从而运算总的时长确定。本实施例中,继续进行的求模运算的次数可以提前确定,从而求模模块的硬件结构也可以提前确定,使得求模模块的实现方便。
进一步可选地,多个异或子模块包括第一组异或子模块;第一组异或子模块被配置为利用多个与归约多项式对应的操作数,分别对多个第二中间操作数求模,以获多个求模中间结果。
在一些实施例中,多个异或子模块还包括第二组异或子模块和判断子模块。判断子模块被配置为判断多个求模中间结果的和的高位区是否全为0。响应于多个求模中间结果的和的高位区全为0,将多个求模中间结果的和作为与每个第一中间源操作数对应的目的操作数单元。响应于多个求模中间结果的和的高位区不全为0,第二组异或子模块利用归约多项式,对多个求模中间结果的和进行至少一次求模,多个求模中间结果的和的求模结果作为与每个第一中间源操作数对应的目的操作数单元。本实施例中,通过设置判断子模块和第二组异或子模块均可以优化整个伽罗瓦域乘法的流程。相较于传统的迭代运算每次都需要进行判断,本实施例能够大量的减少判断次数,从而进一步节省整体的运算时长。而第二组异或子模块则与第一组异或子模块类似,其能够进行并发运算,达到提高运算效率及缩短整体运算时长的效果。
继续以图6中求模过程为例,拆分子模块将第一中间源操作数TmpSum[15:0]拆分为8个第二中间源操作数:
TmpSum[15]=0
TmpSum[14]=0100000000000000
TmpSum[13]=0010000000000000
TmpSum[12]=0001000000000000
TmpSum[11]=0000100000000000
TmpSum[10]=0
TmpSum[9]=0000001000000000
TmpSum[8]=0000000100000000。
操作数获取子模块获取:
P6[15:0]=P[8:0]*x^6=0100011011000000
P5[15:0]=P[8:0]*x^5=0010001101100000
P4[15:0]=P[8:0]*x^4=0001000110110000
P3[15:0]=P[8:0]*x^3=0000100011011000
P2[15:0]=P[8:0]*x^2=0000010001101100
P1[15:0]=P[8:0]*x^1=0000001000110110
P0[15:0]=P[8:0]*x^0=0000000100011011。
又如,由于TmpSum[15]=0和TmpSum[10]=0,操作数获取子模块不获取P6[15:0]和P2[15:0]。
由于TmpSum[15]=0和TmpSum[10]=0,第一组异或子模块仅需要分别同时进行(并行)如下运算:
TmpSum[14]mod P6[15:0]=0000011011000000
TmpSum[13]mod P5[15:0]=0000001101100000
TmpSum[12]mod P4[15:0]=0000000110110000
TmpSum[11]mod P3[15:0]=0000000011011000
TmpSum[9]mod P1[15:0]=0000000000110110
TmpSum[8]mod P0[15:0]=0000000000011011,这样得到6个求模中间结果。
第一组子异或子模块还对6个求模中间结果求和,此时的求和同样可以用异或进行,得出6个求模中间结果的和为“0000010011100101”,由判断子模块判断出其高8位不全为0,这也意味着求模尚未结束。
由第二组异或子模块继续进行求模,第二组异或子模块对第一组异或子模块输出的6个求模中间结果的和进行求模,和第一组异或子模块类似,第二组异或子模块先将该6个求模中间结果的和进行拆分,得到图6中的TmpSum1[15:0]=0000010000000000。
由于TmpSum1[10]=1,获取P2[15:0]=P[8:0]*x^2=0000010001101100。最后计算TmpSum1[10]mod P2[15:0]=FinalSum[15:0]=0000000001101100,判断子模块判断FinalSum[15:0]的高8位均为0,因此求模结束。
需要说明的是,本示例中第二组异或子模块进行了一次求模,但在实际中第二组异或子模块需要进行2次及以上的求模。
在又一个示例中,虽然TmpSum[10]=0,仍旧对其进行求模,第一组异或子模块仅需要分别同时进行(并行)如下运算:
TmpSum[14]mod P6[15:0]=0000011011000000
TmpSum[13]mod P5[15:0]=0000001101100000
TmpSum[12]mod P4[15:0]=0000000110110000
TmpSum[11]mod P3[15:0]=0000000011011000
TmpSum[10]mod P2[15:0]=0000000000000000
TmpSum[9]mod P1[15:0]=0000000000110110
TmpSum[8]mod P0[15:0]=0000000000011011,
这样得到7个求模中间结果。由于求模最终目的是获得余数,前面的求模仅涉及到高8位的运算,从而还需要将TmpSum[15:0]中的低8位作为一个余数补充进来,即在示例中,对7个求模中间结果以及TmpSum[7:0]=0000000011100101一起进行求和,得到TmpSum1[15:0]=0000010000000000。
进一步可选地,第一组异或子模块并发地对多个第二中间操作数进行求模;和/或第二组异或子模块并发地对多个求模中间结果进行求模。例如,在第二组异或子模块仅进行一次求模运算时,仅有第一组异或子模块并发地对多个第二中间操作数进行求模运算。相较于迭代运算,本实施例通过并发求模运算,极大地提高了指令的执行效率。
在一些实施例中,第一组异或子模块包括X级异或子模块,第二组异或子模块包括Y级异或子模块,相同级的至少一个异或子模块并发地进行求模,不同级的异或子模块根据级别顺序进行求模;其中,X和Y为正整数。
图7展示了本公开至少一个实施例提供的运算单元中的求模模块的一个示例。
如图7所示,该求模模块包括多个异或子模块(图中示为XOR),以虚线划分为第一组异或子模块(虚线之上)和第二组异或子模块(虚线之下),第一组异或子模块包括4级异或子模块,第二组异或子模块包括3级异或子模块。第一组异或子模块中的第一级异或子模块(L11、L12、……、L17)的输入为第二中间源操作数和归约多项式,或者第一组异或子模块中的第一级异或子模块的输入为第二中间源操作数和与归约多项式对应的操作数。第二级到第四级异或子模块的输入则是上一级异或子模块的输出。第二级异或子模块包括L21L22、L23和L24、第三级异或子模块包括L31和L32、第四级异或子模块包括L41。第二组异或子模块中的第一级异或子模块的输入为归约多项式和第一组异或子模块的输出。为了与第一组异或子模块中的第一级异或子模块进行区分,在图中,第二组异或子模块的第一级异或子模块表示为L51、L52和L53,第二组异或子模块的第二级异或子模块表示为L61,第二组异或子模块的第三级异或子模块表示为L71。第二组异或子模块的输出可能为伽罗瓦域乘法运算的结果。
虽然图7中求模模块包括第一组异或子模块和第二组异或子模块,但第二组异或子模块并非一定会进行求模运算,即第一组异或子模块的输出可能就是伽罗瓦域乘法运算的结果。
继续沿用图6中的求模运算过程的示例,利用图7中的求模模块来实现图6中的求模运算过程时,L11的输入为TmpSum[14]=0100000000000000和P6[15:0]=0100011011000000,L12的输入为TmpSum[13]=0010000000000000和P5[15:0]=0010001101100000,以此类推,L17的输入为TmpSum[8]=0000000100000000和P0[15:0]=0000000100011011。需要注意的是,虽然TmpSum[10]=0,其和P2[15:0]仍需要作为L15的输入。L11-L17的输出分别为:
TmpSum[14]mod P6[15:0]=0000011011000000
TmpSum[13]mod P5[15:0]=0000001101100000
TmpSum[12]mod P4[15:0]=0000000110110000
TmpSum[11]mod P3[15:0]=0000000011011000
TmpSum[10]mod P2[15:0]=0000000000000000
TmpSum[9]mod P1[15:0]=0000000000110110
TmpSum[8]mod P0[15:0]=0000000000011011。
第一组异或子模块中的第二级至第四级异或子模块用于对第一级异或子模块的输出进行求和。
对于L21的输入为TmpSum[14]mod P6[15:0]和TmpSum[13]mod P5[15:0],L21的输出为“0000010110100000”。
对于L22的输入为TmpSum[12]mod P4[15:0]和TmpSum[11]mod P3[15:0]=0000000011011000,L22的输出为“0000000101101000”。
对于L23的输入为TmpSum[10]mod P2[15:0]和TmpSum[9]mod P1[15:0],L23的输出为“0000000000110110”。
对于L24的输入为TmpSum[8]mod P0[15:0]和用于补齐的TmpSum[7:0]=0000000011100101,L24的输出为“0000000011111110”。
对于L31的输入为“0000010110100000”和“0000000101101000”,L31的输出为“0000010011001000”。
对于L32的输入为“0000000000110110”和“0000000011111110”,L32的输出为“0000000011001000”。
对于L41的输入为“0000010011001000”和“0000000011001000”,L41的输出为“0000010000000000”。
经过判断,L41的输出的高8位不全为0,由L51继续进行求模。
对于L51的输入为“0000010000000000”和P2[15:0]=0000010001101100,L51的输出为“0000000001101100”,从而判断L51的输出的高8位全为0,求模结束。
图7给出多级的第二组异或子模块作为表1中最大次数为“3”时的一种示例。比如要进行的是图6中求模过程时,图7的第二组异或子模块仅需要设置L51即可。也就是说,L51、L61和L71的输出均可能作为最终的求模结果,L51、L61和L71也都具备将结果作为最终求模结果输出的能力。可根据表1中的对应关系,选择L41将结果输出至L51、L52和L53中的至少一个,从而能够实现灵活的配置第二组异或子模块。本实施例给出了一种简单且易于实现的求模模块的结构,除了能够提高运算效率还易于适配外部模块。
图8展示了本公开至少一个实施例提供的电子装置的框图。如图8所示,电子装置80包括运算单元810。该实施例运算单元810例如是上面结合图3A和图3B描述的运算单元30或31。关于运算单元的结构、功能、技术效果如前所述,这里不再赘述。
例如,该电子装置可以为处理器,该处理器运行时可以执行上文所述的伽罗瓦域乘法的方法的一个或多个步骤。例如,该处理器可以是中央处理单元(CPU)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(CPU)可以为X86或ARM架构等。例如,处理器可以为通用处理器或专用处理器,可以控制电子设备中的其它组件以执行期望的功能。
本公开至少一实施例还提供一种电子设备,该电子设备包括上述根据一个或多个实施例的处理器,该处理器用于实现上述的伽罗瓦域乘法的方法。
该电子设备的处理器可以根据存储在只读存储器(ROM)中的程序或者从其他存储装置加载到随机访问存储器(RAM)中的程序而执行各种适当的动作和处理。
在RAM中,还可以存储有电子设备操作所需的各种程序和数据。处理器、ROM以及RAM可以通过总线彼此相连。输入/输出(I/O)接口也连接至总线。
通常,以下装置可以连接至I/O接口:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置;包括例如磁带、硬盘等的存储装置;包括通信装置。通信装置可以允许电子设备与其他电子设备进行无线或有线通信以交换数据。但应理解的是,电子设备可以替代地实施或具备更多或更少的装置。
除了上述描述之外,本公开有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (24)

1.一种执行伽罗瓦域乘法的方法,其特征在于,包括:
接收指示执行伽罗瓦域乘法的微指令;
将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将所述N个第一源操作数单元和所述N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,所述第一源操作数和所述第二源操作数位长相等,所述第一源操作数和所述第二源操作数由所述微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数;
将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;
对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;
合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
2.如权利要求1所述的方法,其特征在于,
所述微指令携带所述第一源操作数和所述第二源操作数;或者,
所述微指令指向所述第一源操作数的第一存储位置和/或所述第二源操作数的第二存储位置。
3.如权利要求2所述的方法,其特征在于,在所述微指令指示所述第一源操作数的第一存储位置和/或所述第二源操作数的第二存储位置时,所述方法还包括:
从所述第一存储位置和/或所述第二存储位置,读取所述第一源操作数和/或所述第二源操作数。
4.如权利要求1-3中任一项所述的方法,其特征在于,所述N对源操作数单元采用SIMD的方式处理。
5.如权利要求1所述的方法,其特征在于,在将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘时,相乘过程中的求和是采用异或方式实现。
6.如权利要求1所述的方法,其特征在于,将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取所述N个第一中间操作数,包括:
将每对源操作数单元中的第一源操作数的每一位和第二源操作数单元的每一位彼此对应相乘,得到多个中间乘积;
对所述多个中间乘积求和,获取与每对源操作数单元对应的第一中间操作数。
7.如权利要求1所述的方法,其特征在于,对所述N个第一中间源操作数分别进行求模运算,获取所述N个目的操作数单元,包括:
利用归约多项式,对每个第一中间源操作数进行多次减法运算,以获取与每个第一中间源操作数对应的目的操作数单元;
其中,在所述多次减法运算中,每个第一中间操作数作为被减数,所述归约多项式作为减数;
所述归约多项式的长度小于第一中间源操作数,在进行第一次减法运算前,在所述归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同;并且
所述补0后的归约多项式在每次进行减法运算之后,所述补0后的归约多项式的每一位右移以及在高位补0。
8.如权利要求1所述的方法,其特征在于,对所述N个第一中间源操作数分别进行求模运算,获取所述N个目的操作数单元,包括:
利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果;
对所述多个求模中间结果求和,以获取与每个第一中间源操作数对应的目的操作数单元;
其中,所述归约多项式的长度小于第一中间源操作数,在进行求模前,在所述归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同。
9.如权利要求8所述的方法,其特征在于,所述利用归约多项式,对每个第一中间源操作数进行多次求模,获取所述多个求模中间结果,包括:
将每个第一中间源操作数拆分为多个第二中间源操作数,每个第二中间源操作数至多有1位是1,且所述多个第二中间源操作数求和后得到第一中间源操作数;
根据所述归约多项式,获取多个与所述归约多项式对应的操作数;
利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获取所述多个求模中间结果;
其中,所述多个与所述归约多项式对应的操作数的数量与所述多个第二中间操作数的数量相等;所述多个与所述归约多项式对应的操作数由所述归约多项式向右移位及补0得到。
10.如权利要求9所述的方法,其特征在于,在利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获取所述多个求模中间结果时,
对所述多个第二中间操作数的求模是并发进行的。
11.如权利要求9或10所述的方法,其特征在于,所述方法还包括:
判断所述多个求模中间结果的和的高位区是否全为0;
响应于所述多个求模中间结果的和的高位区全为0,将所述多个求模中间结果的和作为与每个第一中间源操作数对应的目的操作数单元;
响应于所述多个求模中间结果的和的高位区不全为0,利用所述归约多项式,对所述多个求模中间结果的和进行至少一次求模,所述多个求模中间结果的和的求模结果作为与每个第一中间源操作数对应的目的操作数单元。
12.如权利要求11所述的方法,其特征在于,对所述多个求模中间结果的和进行至少一次求模,是并发进行的。
13.一种执行伽罗瓦域乘法的运算单元,其特征在于,包括:译码电路、控制电路和运算电路,其中,
所述译码电路被配置为接收指示执行伽罗瓦域乘法的微指令,并对所述微指令进行解析,以获取控制信息,以及向所述控制电路发送所述控制信息;
所述控制电路被配置为响应于所述控制信息,操作所述运算电路执行伽罗瓦域乘法;
所述运算电路被配置为:
将第一源操作数划分为N个等长的第一源操作数单元,将第二源操作数划分为N个等长的第二源操作数单元,将所述N个第一源操作数单元和所述N个第二源操作数单元一一对应组合得到N对源操作数单元,其中,所述第一源操作数和所述第二源操作数位长相等,所述第一源操作数和所述第二源操作数由所述微指令指示,每对源操作数单元包括一个第一源操作数单元和一个第二源操作数单元,N为正整数;
将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取N个第一中间操作数;
对所述N个第一中间源操作数分别进行求模运算,获取N个目的操作数单元;
合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
14.如权利要求13所述的运算单元,其特征在于,所述运算电路包括:
划分模块,被配置将所述第一源操作数划分为所述N个等长的第一源操作数单元,将所述第二源操作数划分为所述N个等长的第二源操作数单元,将所述N个第一源操作数单元和所述N个第二源操作数单元一一对应组合得到所述N对源操作数单元;
乘法模块,被配置为将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘,获取所述N个第一中间操作数;
求模模块,被配置为对所述N个第一中间源操作数分别进行求模运算,获取所述N个目的操作数单元;
合并模块,被配置为合并所述N个目的操作数单元,获取目的操作数作为所述伽罗瓦乘法的结果。
15.如权利要求13或14所述的运算单元,其特征在于,所运算电路根据所述控制电路的操作,从存储器中获取所述第一源操作数和所述第二源操作数;或者,
所述译码电路向所述运算电路发送所述第一源操作数和所述第二源操作数;或者,
所述控制电路向所述运算电路发送所述第一源操作数和所述第二源操作数。
16.如权利要求14所述的运算单元,其特征在于,所述乘法模块包括第一求和子模块,所述第一求和子模块被配置为在将所述N对源操作数单元中每对的第一源操作数单元和第二源操作数单元相乘时,用异或方式实现相乘过程中的求和。
17.如权利要求14所述的运算单元,其特征在于,所述乘法模块包括乘法子模块和第二求和子模块,
所述乘法子模块被配置为将每对源操作数单元中的第一源操作数的每一位和第二源操作数单元的每一位彼此对应相乘,得到多个中间乘积;
所述第二求和子模块被配置为对所述多个中间乘积求和,获取与每对源操作数单元对应的第一中间操作数。
18.如权利要求14所述的运算单元,其特征在于,所述求模模块包括多个异或子模块和第三求和子模块,
所述多个异或子模块被配置为利用归约多项式,对每个第一中间源操作数进行多次求模,获取多个求模中间结果;
所述第三求和子模块被配置为对所述多个求模中间结果求和,以获取与每个第一中间源操作数对应的目的操作数单元;
其中,所述归约多项式的长度小于第一中间源操作数,在进行求模前,在所述归约多项式的低位补0,以使补0后的归约多项式的长度与第一中间源操作数相同。
19.如权利要求18所述的运算单元,其特征在于,所述求模模块还包括拆分子模块和操作数获取子模块,
所述拆分子模块被配置为将每个第一中间源操作数拆分为多个第二中间源操作数,每个第二中间源操作数至多有1位是1,且所述多个第二中间源操作数求和后得到第一中间源操作数;
所述操作数获取子模块被配置为根据所述归约多项式,获取多个与所述归约多项式对应的操作数;
所述多个异或子模块利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获取所述多个求模中间结果;
其中,所述多个与所述归约多项式对应的操作数的数量与所述多个第二中间操作数的数量相等;所述多个与所述归约多项式对应的操作数由所述归约多项式向右移位及补0得到。
20.如权利要求19所述的运算单元,其特征在于,所述多个异或子模块包括第一组异或子模块;
所述第一组异或子模块被配置为利用所述多个与所述归约多项式对应的操作数,分别对所述多个第二中间操作数求模,以获所述多个求模中间结果。
21.如权利要求20所述的运算单元,其特征在于,所述多个异或子模块还包括第二组异或子模块和判断子模块;
所述判断子模块被配置为判断所述多个求模中间结果的和的高位区是否全为0;
响应于所述多个求模中间结果的和的高位区全为0,将所述多个求模中间结果的和作为与每个第一中间源操作数对应的目的操作数单元;
响应于所述多个求模中间结果的和的高位区不全为0,所述第二组异或子模块利用所述归约多项式,对所述多个求模中间结果的和进行至少一次求模,所述多个求模中间结果的和的求模结果作为与每个第一中间源操作数对应的目的操作数单元。
22.如权利要求20或21所述的运算单元,其特征在于,所述第一组异或子模块并发地对所述多个第二中间操作数进行求模;和/或
所述第二组异或子模块并发地对所述多个求模中间结果进行求模。
23.如权利要求22所述的运算单元,其特征在于,所述第一组异或子模块包括X级异或子模块,所述第二组异或子模块包括Y级异或子模块,相同级的至少一个异或子模块并发地进行求模,不同级的异或子模块根据级别顺序进行求模;其中,X和Y为正整数。
24.一种电子装置,其特征在于,包括如权利要求13-23中任一项所述的运算单元。
CN202110736103.4A 2021-06-30 2021-06-30 执行伽罗瓦域乘法的方法、运算单元和电子装置 Active CN113485751B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110736103.4A CN113485751B (zh) 2021-06-30 2021-06-30 执行伽罗瓦域乘法的方法、运算单元和电子装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110736103.4A CN113485751B (zh) 2021-06-30 2021-06-30 执行伽罗瓦域乘法的方法、运算单元和电子装置

Publications (2)

Publication Number Publication Date
CN113485751A true CN113485751A (zh) 2021-10-08
CN113485751B CN113485751B (zh) 2023-07-04

Family

ID=77937171

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110736103.4A Active CN113485751B (zh) 2021-06-30 2021-06-30 执行伽罗瓦域乘法的方法、运算单元和电子装置

Country Status (1)

Country Link
CN (1) CN113485751B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230378979A1 (en) * 2022-05-18 2023-11-23 Streamscale, Inc. Accelerated polynomial coding system and method

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030135530A1 (en) * 2001-09-20 2003-07-17 Stmicroelectronics, Inc. Flexible galois field multiplier
US20040109561A1 (en) * 2002-08-06 2004-06-10 The State Of Oregon Acting By And Through The State Board Of Higher Education On Behalf Of Lean multiplication of multi-precision numbers over GF(2m)
US20090136022A1 (en) * 2005-03-04 2009-05-28 Peter Langendoerfer Method and Apparatus for Calculating a Polynomial Multiplication, In Particular for Elliptic Curve Cryptography
CN104184578A (zh) * 2014-07-30 2014-12-03 山东大学 一种基于fpga的椭圆曲线标量乘法加速电路及其算法
CN104679474A (zh) * 2015-03-16 2015-06-03 东南大学 有限域gf(2^227)上的乘法器及模乘算法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030135530A1 (en) * 2001-09-20 2003-07-17 Stmicroelectronics, Inc. Flexible galois field multiplier
US20040109561A1 (en) * 2002-08-06 2004-06-10 The State Of Oregon Acting By And Through The State Board Of Higher Education On Behalf Of Lean multiplication of multi-precision numbers over GF(2m)
US20090136022A1 (en) * 2005-03-04 2009-05-28 Peter Langendoerfer Method and Apparatus for Calculating a Polynomial Multiplication, In Particular for Elliptic Curve Cryptography
CN104184578A (zh) * 2014-07-30 2014-12-03 山东大学 一种基于fpga的椭圆曲线标量乘法加速电路及其算法
CN104679474A (zh) * 2015-03-16 2015-06-03 东南大学 有限域gf(2^227)上的乘法器及模乘算法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230378979A1 (en) * 2022-05-18 2023-11-23 Streamscale, Inc. Accelerated polynomial coding system and method

Also Published As

Publication number Publication date
CN113485751B (zh) 2023-07-04

Similar Documents

Publication Publication Date Title
JP5866128B2 (ja) 算術プロセッサ
JP5266354B2 (ja) ガロア拡大体・積算/積算加算・積和演算装置
KR100291383B1 (ko) 디지털신호처리를위한명령을지원하는모듈계산장치및방법
US7346159B2 (en) Generic modular multiplier using partial reduction
EP0656582B1 (en) Parallel adding and averaging circuit and method
US6820102B2 (en) DSP unit for multi-level global accumulation
US9146708B2 (en) Implementation of arbitrary galois field arithmetic on a programmable processor
EP1576493A1 (en) Method and a system for performing calculation operations and a device
US6754689B2 (en) Method and apparatus for performing subtraction in redundant form arithmetic
JP3418460B2 (ja) 倍精度除算回路および方法
CN115344237B (zh) 结合Karatsuba和蒙哥马利模乘的数据处理方法
US9678716B2 (en) Apparatus and method for performing absolute difference operation
EP3769208B1 (en) Stochastic rounding logic
US6675286B1 (en) Multimedia instruction set for wide data paths
CN112650471A (zh) 用于处理掩蔽数据的处理器和方法
CN114095149B (zh) 信息加密方法、装置、设备及存储介质
US8909687B2 (en) Efficient FIR filters
CN113485751A (zh) 执行伽罗瓦域乘法的方法、运算单元和电子装置
US10838718B2 (en) Processing device, arithmetic unit, and control method of processing device
US6963895B1 (en) Floating point pipeline method and circuit for fast inverse square root calculations
JP2004226516A (ja) べき乗剰余演算方法及びそのプログラム
JP4850884B2 (ja) べき乗剰余演算器
JP2006338215A (ja) ベクトル積和演算回路
US20130262549A1 (en) Arithmetic circuit and arithmetic method
KR20240029249A (ko) 연산 에러를 정정할 수 있는 곱셈 및 누산 연산기

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