CN116710890A - 随机数生成装置及生成方法、随机数生成系统、芯片 - Google Patents

随机数生成装置及生成方法、随机数生成系统、芯片 Download PDF

Info

Publication number
CN116710890A
CN116710890A CN202180087448.XA CN202180087448A CN116710890A CN 116710890 A CN116710890 A CN 116710890A CN 202180087448 A CN202180087448 A CN 202180087448A CN 116710890 A CN116710890 A CN 116710890A
Authority
CN
China
Prior art keywords
data
random number
output
circuit
exclusive
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.)
Pending
Application number
CN202180087448.XA
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN116710890A publication Critical patent/CN116710890A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/58Random or pseudo-random number generators

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

本申请实施例提供一种随机数生成装置及随机数生成方法、随机数生成系统、芯片,涉及神经网络技术领域,用于解决采用软件程序生成随机数效率低下的问题。随机数生成装置包括至少一个生成器。至少一个生成器中含有生成器用于根据随机数种子同步生成多个随机数。在至少一个生成器为多个生成器的情况下,随机数生成装置还包括第一选择器;第一选择器用于根据第一参数,选择输出多个生成器中的一个生成的随机数。

Description

随机数生成装置及生成方法、随机数生成系统、芯片 技术领域
本申请涉及神经网络技术领域,尤其涉及一种随机数生成装置及生成方法、随机数生成系统、芯片。
背景技术
人工智能(artificial intelligence,AI)技术已经在社会生活和生产方面有着广泛的应用,同时也是未来技术和产品的发展趋势。各种各样的AI技术目前广泛的应用在机器视觉、图像识别、人脸识别、对象侦测、智能驾驶、语音识别、自然语言处理、机器翻译、语音生成和文本转换语音等领域。
AI技术的核心是神经网络系统,而神经网络系统正常运行的关键之一是随机性,无论是神经网络推理还是神经网络训练,都需要高效的随机数生成,因而随机数生成是神经网络系统中的重要环节。
相关技术中通常采用中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或者神经网络处理器(neural network processing unit,NPU)控制软件程序(取指令或者运算)的方式生成随机数,采用这种方式生成随机数的过程中,在上一个随机数生成后,才能循环一次生成下一个随机数,效率低下。由于当前神经网络系统规模越来越大,需要的随机数的数据量也巨大,通过CPU、GPU或者NPU控制生成随机数已经无法满足当下神经网络系统的需求,成为神经网络系统训练性能的瓶颈之一。
发明内容
本申请实施例提供一种随机数生成装置及生成方法、随机数生成系统、芯片,用于解决采用CPU、GPU或者NPU控制软件程序的方式生成随机数效率低下的问题。
为达到上述目的,本申请采用如下技术方案:
本申请实施例的第一方面,提供一种随机数生成装置,包括:至少一个生成器,至少一个生成器中含有生成器用于根据随机数种子同步生成多个随机数;在至少一个生成器为多个生成器的情况下,随机数生成装置还包括第一选择器;第一选择器用于根据第一参数,选择输出多个生成器中的一个生成的随机数。
本申请实施例提供的随机数生成装置,包括有生成器可根据随机数种子在同一时刻同步生成多个随机数。也就是说,无需等待上一个随机数生成后,再开始生成下一个随机数。相比于相关技术中采用CPU、GPU或者NPU控制软件程序生成随机数的方式(一次生成一个随机数,生成上一个随机数后,才能生成下一个随机数),本申请实施例提供的随机数生成装置并行度好(可同步形成多个随机数),可明显提升随机数的生成效率,提高随机数生成装置的吞吐量。另外,随机数是由生成器这些硬件结构来生成的,CPU、GPU或者NPU等提供随机数种子等参数后,无需CPU、GPU 或者NPU再干预(取指令或者运算),可减轻CPU、GPU或者NPU的运行压力。再者,生成器可同步生成多个随机数,同步生成多个随机数的具体数量可以调整,例如同步生成的随机数的数量可以调到比较多,生成器的扩展性好。
可选的,至少一个生成器包括第一生成器,第一生成器包括多条并行的第一流水线(pipeline);多条并行的第一pipeline用于根据随机数种子同步生成多个随机数。第一生成器包括多条并行的第一pipeline,多条并行的第一pipeline可同步形成多个第一随机数,且并行的第一pipeline的数量可以根据需要扩展。另外,第一随机数生成过程中,下一个第一随机数的生成开始,无需等待上一个第一随机数的生成结束。因此,本申请实施例提供的随机数生成装置中第一生成器的并行度好,可明显提升随机数的生成效率。且第一随机数的生成是由第一pipeline这个硬件结构来完成的,随机数生成装置的性能可以满足大规模神经网络训练场景下对硬件流水线结构的需求。
可选的,第一pipeline包括多个级联的运算子电路;运算子电路包括多个并行的数据变形模块;数据变形模块用于接收第一数据、第二数据、第三数据、第一设定值以及第二设定值,将第一数据和第一设定值的积的低位作为第一输出数据;将第二数据和第三数据异或后的结果,与,第一数据和第一设定值的积的高位,异或后作为第二输出数据;数据变形模块还用于将第三数据与第二设定值之和作为第三输出数据;或者,除最后一级中数据变形模块外,每级中数据变形模块还用于将第三数据与第二设定值之和作为第三输出数据;前一级中数据变形模块的第一输出数据、第二输出数据以及第三输出数据,分别作为后一级中数据变形模块的第二数据、第一数据以及第三数据;其中,随机数种子的至少一个比特作为第一级运算子电路的第三数据;最后一级运算子电路的第一输出数据和第二输出数据作为第一pipeline生成的随机数。结构简单,易于实现。
可选的,第一级运算子电路中的多个数据变形模块接收的第一数据、第二数据、第三数据、第一设定值以及第二设定值中的至少一个不同。这样一来,同一运算子电路包括的多个数据变形模块得到的第一输出数据、第二输出数据以及第三输出数据至少有一个不同,从而可提高第一pipeline生成的第一随机数的随机性。
可选的,相邻级运算子电路中相连接的两个数据变形模块,接收的第一设定值和第二设定值中的至少一个不同。可提高第一pipeline生成的第一随机数的随机性。
可选的,同一数据变形模块接收的第一设定值和第二设定值相同。
可选的,数据变形模块包括第一乘法器、第一异或器、第二异或器以及第一加法器;第一乘法器用于接收第一数据和第一设定值,将第一数据与第一设定值相乘,并将得到的积的低位作为第一输出数据输出;第一异或器用于接收第二数据和第三数据,将第二数据与第三数据进行异或运算;第二异或器用于接收第一异或器的输出和第一乘法器的积的高位,将第一异或器的输出与第一乘法器的积的高位进行异或运算后,作为第二输出数据输出;第一加法器用于接收第三数据和第二设定值,将第三数据与第二设定值相加,作为第三输出数据输出。
可选的,至少一个生成器还包括第二生成器;第二生成器包括种子初始化发生子电路、状态旋转子电路以及输出子电路;种子初始化发生子电路用于根据随机数种子进行初始化,生成包括多个初始值的旋转链;状态旋转子电路包括多条并行的第二流 水线(pipeline),多条并行的第二pipeline用于对旋转链进行旋转;输出子电路包括至少一条输出线,至少一条输出线用于对状态旋转子电路的输出进行变形处理,生成多个随机数。第二生成器包括多条并行的第二pipeline,多条并行的第二pipeline在同一时刻输出的多个更新值,可同步对旋转链中的多个数据进行旋转,提高对旋转链的旋转更新效率,从而提升第二随机数的生成效率。在第二生成器还包括多条并行的输出线的情况下,多条并行的第二pipeline在同一时刻输出的多个更新值,可同步对旋转链中的多个数据进行旋转,提高对旋转链的旋转更新效率,多条并行的输出线在同一时刻对多个更新值进行变形并输出,可进一步提升第二随机数的生成效率。
可选的,种子初始化发生子电路用于接收第四数据、第三设定值、第四设定值以及第五设定值,将第四数据右移a位后和第四数据异或的结果,与,第三设定值,相乘得到的积;再与,第四设定值相加后,与,第五设定值进行与运算;将与运算的结果作为初始化值输出;其中,第四数据为随机数种子或者初始化值。
可选的,种子初始化发生子电路包括第一右移器、第三异或器、第二乘法器、第二加法器以及第一与门器;第一右移器用于接收第四数据,将第四数据右移a位;第三异或器用于接收第一右移器的输出,将第一右移器的输出与第四数据进行异或运算;第二乘法器用于接收第三异或器的输出和第三设定值,将第三异或器的输出与第三设定值相乘;第二加法器用于接收第二乘法器的输出和第四设定值,将第三乘法器的输出与第四设定值相加;第一与门器用于接收第二加法器的输出和第五设定值,将第二加法器的输出与第五设定值进行与运算,作为初始值输出。
可选的,第二pipeline包括奇偶选择模块、奇数生成模块、偶数生成模块以及第二选择器;奇偶选择模块,用于接收第五数据、第六数据、第六设定值以及第七设定值,将第五数据和第六设定值进行与运算的结果,与,第六数据取模后和第七设定值进行与运算的结果,进行或运算并取模,将取模的结果输出至第二选择器和偶数生成模块;奇数生成模块,用于接收第五数据和第八设定值,将第五数据与第八设定值进行异或后输出至第二选择器;偶数生成模块,用于接收第七数据和奇偶选择模块的输出,将奇偶选择模块的输出右移b位后,与,第七数据的取模结果,进行异或后输出至第二选择器;第二选择器用于根据奇偶选择模块的输出,选择输出奇数生成模块或者偶数生成模块的输出,以对旋转链进行旋转;其中,第五数据、第六数据以及第七数据为旋转链中的不同数据。
可选的,奇偶选择模块包括第二与门器、第一取模器、第三与门器、第一或门器以及第二取模器;第二与门器用于接收第五数据和第六设定值,对第五数据和第六设定值进行与运算;第一取模器用于接收第六数据,对第六数据取模;第三与门器用于接收第一取模器的输出和第七设定值,对第一取模器的输出和第七设定值进行与运算;第一或门器用于接收第二与门器的输出和第三与门器的输出,对第二与门器的输出和第三与门器的输出进行或运算;第二取模器用于接收第一或门器的输出,对第一或门器的输出取模,将取模的结果输出至第二选择器和偶数生成模块。
可选的,奇数生成模块包括第四异或器;第四异或器用于接收第五数据和第八设定值,对第五数据和第八设定值进行异或运算,将异或的结果输出至第二选择器。
可选的,偶数生成模块包括第三取模器、第二右移器以及第五异或器;第三取模 器用于接收第七数据,对第七数据取模;第二右移器用于接收奇偶选择模块的输出,将奇偶选择模块的输出右移b位;第五异或器用于接收第三取模器的输出和第二右移器的输出,对第三取模器的输出和第二右移器的输出进行异或运算,将异或的结果输出至第二选择器。
可选的,输出线用于接收状态旋转子电路的输出、第九设定值以及第十设定值,将状态旋转子电路的输出右移c位后与状态旋转子电路的输出进行异或;然后将异或结果,与,异或结果左移d位后和第九设定值与运算的结果,进行异或;然后将异或结果,与异或结果左移e位后和第十设定值与运算的结果,进行异或;然后将异或结果,与,异或结果右移f位的结果,进行异或后作为随机数输出。
可选的,输出线包括第三右移器、第六异或器、第一左移器、第四与门器、第七异或器、第二左移器、第五与门器、第八异或器、第四右移器以及第九异或器;第三右移器用于接收状态旋转子电路的输出,将状态旋转子电路的输出右移c位。第六异或器用于接收状态旋转子电路的输出和第三右移器的输出,将状态旋转子电路的输出与第三右移器的输出进行异或运算;第一左移器用于接收第六异或器的输出,将第六异或器的输出左移d位;第四与门器用于接收第九设定值和第一左移器的输出,将第九设定值与第一左移器的输出进行与运算;第七异或器用于接收第六异或器的输出和第四与门器的输出,将第六异或器的输出和第四与门器的输出进行异或运算;第二左移器用于接收第七异或器的输出,将第七异或器的输出左移e位;第五与门器用于接收第十设定值和第二左移器的输出,将第十设定值与第二左移器的输出进行与运算;第八异或器用于接收第五与门器的输出与第七异或器的输出,将第五与门器的输出与第七异或器的输出进行异或运算;第四右移器用于接收第八异或器的输出,将第八异或器的输出右移f位;第九异或器用于接收第八异或器的输出和第四右移器的输出,将第八异或器的输出和第四右移器的输出进行异或运算,将异或结果作为随机数输出。
可选的,第二生成器还包括第三选择器、互通寄存器以及第一存储器;第三选择器,用于接收种子初始化发生子电路输出的旋转前的旋转链和状态旋转子电路输出的旋转后的旋转链,在选择控制端的控制下,将旋转前的旋转链或旋转后的旋转链传输至互通寄存器;互通寄存器,用于接收第三选择器输出的旋转链,将旋转链传输至第一存储器,并从第一存储器中分批调取旋转链中的数据,作为第五数据、第六数据以及第七数据传输至第二pipeline;还用于将状态旋转子电路的输出传输至输出子电路;第一存储器用于接收并存储互通寄存器输出的旋转链。种子初始化发生子电路与状态旋转子电路之间的信号传输,状态旋转子电路与输出子电路之间的信号传输通过互通寄存器来实现的,通过共用同一互通寄存器,可减少互通寄存器的数量。
可选的,随机数生成装置还包括:数据类型转换模块,用于对至少一个生成器生成的随机数进行数据类型转换。由于生成器生成的随机数为固定数据类型的随机数,仅适用于对某种特定数据类型的随机数进行训练的网络训练装置,随机数生成装置的适用范围局限性较大。通过在随机数生成装置中设置数据类型转换模块,可以对生成器生成的随机数的数据类型进行转换,以适用不同的网络训练装置,可提高随机数生成装置的适用范围。
可选的,数据类型转换模块包括至少一个数据类型转换器;数据类型转换器用于 将至少一个生成器生成的随机数转化为预设数据类型的随机数;在数据类型转换模块包括多个数据类型转换器的情况下,数据类型转换模块还包括第四选择器,第四选择器用于根据第二参数,选择对多个数据类型转换器中的一个的结果进行输出;其中,多个数据类型转换器转换得到的随机数的预设数据类型不同。
可选的,随机数生成装置还包括分布转换模块,用于对数据类型转换模块的输出进行分布类型的转换。由于生成器生成的随机数为固定分布类型的随机数,仅适用于对某种特定分布类型的随机数进行训练的网络训练装置,随机数生成装置的适用范围局限性较大。通过在随机数生成装置中设置分布转换模块,可以对生成器生成的随机数的分布类型进行转换,以适用不同的网络训练装置,可提高随机数生成装置的适用范围。
可选的,分布转换模块包括至少一个分布生成器;分布生成器用于将数据类型转换模块输出的随机数转化为服从预设分布的随机数;在分布转换模块包括多个分布生成器的情况下,随机数生成装置还包括第五选择器,第五选择器用于根据第三参数,选择对多个分布生成器中的一个的结果进行输出;其中,多个分布生成器转换得到的随机数服从的预设分布类型不同。
可选的,至少一个分布生成器包括正态分布器,正态分布器采用箱式-穆勒(box-muller)算法将数据类型转换模块输出的随机数转化为服从正态分布的随机数。正态分布发生器采用硬化box-muller结构,box-muller算法是目前主流数深度学习框架使用的正态分布转化算法,采用box-muller算法形成的正态分布随机数的正态分布特性,相对irwin-hall(欧文-霍尔)算法形成的模拟正态分布随机数的正态分布特性较优。另外,以fp32数据类型为例,采用box-muller算法,输入是两个满足均匀分布的uint32随机数,输出为两个满足标准正态分布的fp32随机数。采用irwin-hall算法,输入多个均匀分布随机数相加产生一个正态分布随机数。采用irwin-hall算法对均匀分布随机数的数量要求较大,相对irwin-hall算法,在满足同等数据量输出的情况下,采用box-muller算法对生成器的性能要求较低。
本申请实施例的第二方面,提供一种随机数生成方法,包括:生成器根据随机数种子同步生成多个随机数;在具有多个生成器生成多个随机数的情况下,随机数生成方法还包括第一选择器根据第一参数,选择输出多个生成器中的一个生成的多个随机数。本申请实施例提供的随机数生成方法与第一方面提供的随机数生成装置的有益效果相同,此处不再赘述。
可选的,生成器根据随机数种子同步生成多个随机数,包括:第一生成器中多条并行的第一流水线(pipeline)根据随机数种子同步生成多个随机数。
可选的,生成器根据随机数种子同步生成多个随机数,包括:种子初始化发生子电路根据随机数种子进行初始化,生成包括多个初始值的旋转链;状态旋转子电路中多条并行的第二流水线(pipeline),对旋转链进行旋转;输出子电路中多条并行的输出线对状态旋转子电路的输出进行变形处理,同步生成多个随机数。
可选的,随机数生成方法还包括:数据类型转换模块对生成器生成的多个随机数进行数据类型转换。
可选的,随机数生成方法还包括:分布转换模块对数据类型转换模块的输出进行 分布类型的转换。
本申请实施例的第三方面,提供一种神经网络系统,包括第二存储器和第一方面任一项随机数生成装置,第二存储器用于存储随机数生成装置生成的随机数。
本申请实施例提供的神经网络系统包括第一方面提供的随机数生成装置,其有益效果与随机数生成装置的有益效果相同,此处不再赘述。
可选的,第二存储器还用于存储随机数生成装置生成的最后一个随机数的位标。这样一来,随机数种子不变,随机数生成装置执行下一次任务时,随机数生成装置可从第二存储器中读回上一次任务生成的随机数链和梅森旋转链的截止位标,保证任务的连续下发,随机数的连续生成。
本申请实施例的第四方面,提供一种芯片,包括基底和第一方面任一项随机数生成装置,随机数生成装置设置在基底上。
本申请实施例提供的芯片包括第一方面提供的随机数生成装置,其有益效果与随机数生成装置的有益效果相同,此处不再赘述。
本申请实施例的第四方面,提供一种随机数生成装置,包括:第二生成器;第二生成器,包括种子初始化发生子电路、状态旋转子电路以及输出子电路;种子初始化发生子电路用于根据随机数种子进行初始化,生成包括多个初始值的旋转链;状态旋转子电路包括多条并行的第二流水线(pipeline),多条并行的第二pipeline用于对旋转链进行旋转;输出子电路包括输出线,输出线用于对状态旋转子电路的输出进行变形处理,生成随机数。
附图说明
图1为本申请实施例提供的一种神经网络系统的框架图;
图2a为本申请实施例提供的一种随机数生成装置的框架图;
图2b为本申请实施例提供的另一种随机数生成装置的框架图;
图2c为本申请实施例提供的又一种随机数生成装置的框架图;
图2d为本申请实施例提供的又一种随机数生成装置的框架图;
图2e为本申请实施例提供的又一种随机数生成装置的框架图;
图3a为本申请实施例提供的又一种随机数生成装置的框架图;
图3b为本申请实施例提供的一种随机数生成装置使用场景图;
图4a为本申请实施例提供的一种第一流水线的框架示意图;
图4b为本申请实施例提供的另一种第一流水线的框架示意图;
图4c为本申请实施例提供的一种第一流水线的结构示意图;
图4d为本申请实施例提供的另一种第一流水线的结构示意图;
图5a为本申请实施例提供的一种第一流水线的使用场景图;
图5b为本申请实施例提供的一种随机数链的示意图;
图6a为本申请实施例提供的又一种随机数生成装置的框架图;
图6b为本申请实施例提供的另一种随机数生成装置使用场景图;
图6c为本申请实施例提供的一种box-muller算法的示意图;
图7为本申请实施例提供的又一种随机数生成装置使用场景图;
图8a为本申请实施例提供的又一种随机数生成装置的框架图;
图8b为本申请实施例提供的又一种随机数生成装置的框架图;
图8c为本申请实施例提供的又一种随机数生成装置使用场景图;
图9a为本申请实施例提供的一种子初始化发生子电路的结构示意图;
图9b为本申请实施例提供的一种第二流水线的结构示意图;
图9c为本申请实施例提供的一种输出线的结构示意图;
图10a为本申请实施例提供的一种第二生成器的框架示意图;
图10b为本申请实施例提供的一种第二生成器的结构示意图;
图11为本申请实施例提供的另一种第二生成器的结构示意图;
图12a为本申请实施例提供的一种旋转链的示意图;
图12b为本申请实施例提供的一种第一存储器的内部划分示意图;
图13为本申请实施例提供的又一种随机数生成装置的框架图;
图14a为本申请实施例提供的又一种随机数生成装置使用场景图;
图14b为本申请实施例提供的又一种随机数生成装置使用场景图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
以下,术语“第一”、“第二”等仅用于描述方便,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
此外,本申请实施例中,“上”、“下”、“左”以及“右不限于相对附图中的部件示意置放的方位来定义的,应当理解到,这些方向性术语可以是相对的概念,它们用于相对于的描述和澄清,其可以根据附图中部件附图所放置的方位的变化而相应地发生变化。
在本申请中,除非另有明确的规定和限定,术语“连接”应做广义理解,例如,
“连接”可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以通过中间媒介间接相连。此外,术语“电连接”可以是直接的电性连接,也可以通过中间媒介间接的电性连接。
人工智能(artificial intelligence,AI)技术已经在社会生活和生产方面有着广泛的应用,同时也是未来技术和产品的发展趋势。各种各样的AI技术目前广泛的应用在机器视觉、图像识别、人脸识别、对象侦测、智能驾驶、语音识别、自然语言处理、机器翻译、语音生成和文本转换语音等领域。
AI技术的核心是神经网络系统,如图1所示,神经网络系统通常包括随机数生成装置、第一存储器以及网络训练装置。随机数生成装置用于生成随机数。网络训练装置用于根据随机数生成装置生成的随机数进行网络训练,生成训练结果。第一存储器用于存储随机数生成装置生成的随机数和网络训练装置生成的训练结果。
为了便于网络训练装置对存储在存储器内部的随机数进行调取,存储器可以是高带宽存储器(high bandwidth memory,HBM),例如为双倍速率同步动态随机存储器(double data rate synchronous dynamic random access memory,DDRSDRAM,简称 DDR)。
本申请实施例提供一种随机数生成装置,包括至少一个生成器,至少一个生成器中含有生成器用于根据随机数种子同步生成多个随机数。
其中,同步生成多个随机数,可以理解为,在同一时刻有多个随机数生成,而并非依次一个一个连续多次生成多个随机数。
此外,在本申请实施例提供的随机数生成装置包括一个生成器的情况下,该生成器用于根据随机数种子同步生成多个随机数。
在本申请实施例提供的随机数生成装置包括多个生成器的情况下,多个生成器中至少有一个生成器用于根据随机数种子同步生成多个随机数。多个生成器中的其他生成器可以根据随机数种子同步生成多个随机数,也可以随机数种子依次生成多个随机数。
基于此,在本申请的一些实施例中,如图2a所示,随机数生成装置100包括第一生成器10,第一生成器10用于根据随机数种子同步生成多个随机数。
在本申请的另一些实施例中,如图2b所示,随机数生成装置100包括第一生成器10、第二生成器20以及第一选择器30。
第一生成器10用于根据随机数种子同步生成多个随机数,第二生成器20用于根据随机数种子依次生成多个随机数。第一选择器30用于根据第一参数,选择输出第一生成器10或第二生成器20生成的随机数。
也就是说,在随机数生成装置100包括多个生成器的情况下,在同一时刻只会选择输出其中一个生成器生成的随机数。即,在生成随机数时,在具有多个生成器生成随机数的情况下,第一选择器根据第一参数,选择输出多个生成器中的一个生成的随机数。
基于此,在生成随机数时,若需要输出的为第一生成器10生成的随机数。示例的,第一生成器10根据随机数种子同步生成多个随机数,第二生成器20根据随机数种子依次生成多个随机数,第一选择器30根据第一参数,选择输出第一生成器10生成的随机数。
或者,在生成随机数时,若需要输出的为第二生成器20生成的随机数。示例的,第一生成器10根据随机数种子同步生成多个随机数,第二生成器20根据随机数种子依次生成多个随机数,第一选择器30根据第一参数,选择输出第二生成器20生成的随机数。
在本申请的另一些实施例中,如图2c所示,随机数生成装置100包括第一生成器10、第二生成器20以及第一选择器30。
第一生成器10用于根据随机数种子同步生成多个随机数,第二生成器20用于根据随机数种子同步生成多个随机数。第一选择器30用于根据第一参数,选择输出第一生成器10或第二生成器20生成的随机数。
其中,第一生成器10用于根据随机数种子同步生成多个随机数的原理和第二生成器20用于根据随机数种子同步生成多个随机数的原理可以相同。示例的,第一生成器10和第二生成器20为相同的生成器。
这样一来,在第一生成器10和第二生成器20中的一个无法正常工作的情况下, 另一个可以作为备用,以降低集成有随机数生成装置100的神经网络系统或者芯片的更换次数。
当然,第一生成器10用于根据随机数种子同步生成多个随机数的原理和第二生成器20用于根据随机数种子同步生成多个随机数的原理也可以不同。示例的,第一生成器10和第二生成器20为不同的生成器。
这样一来,虽然接收的是同一随机数种子,但是由于第一生成器10和第二生成器20生成随机数的原理不同,二者最终生成的随机数也不同,可以满足不同训练场景下对随机数的要求,提高随机数生成装置100的适用范围。
可以理解的是,随机数生成装置100中可以包括多个可以同步生成多个随机数的生成器,多个生成器生成随机数的原理可以完全相同,也可以完全不同,还可以不完全相同(即部分相同,部分不同),上述仅是以随机数生成装置100包括第一生成器10和第二生成器20为例进行示意。
本申请实施例提供的随机数生成装置100,包括第一生成器10,第一生成器10可根据随机数种子在同一时刻同步生成多个随机数。也就是说,无需等待上一个随机数生成后,再开始生成下一个随机数。相比于相关技术中采用CPU、GPU或者NPU控制软件程序生成随机数的方式(一次生成一个随机数,生成上一个随机数后,才能生成下一个随机数),本申请实施例提供的随机数生成装置100并行度好(可同步形成多个随机数),可明显提升随机数的生成效率,提高随机数生成装置100的吞吐量。
另外,随机数是由生成器(例如第一生成器10和第二生成器20)这些硬件结构来生成的,CPU、GPU或者NPU等提供随机数种子等参数后,无需CPU、GPU或者NPU再干预(取指令或者运算),可减轻CPU、GPU或者NPU的运行压力。
再者,生成器可同步生成多个随机数,同步生成多个随机数的具体数量可以调整,例如同步生成的随机数的数量可以调到比较多,生成器的扩展性好。
在本申请的一些实施例中,如图2d所示,随机数生成装置100还包括数据类型转换模块40。数据类型转换模块40用于对随机数生成装置100中生成器(例如上述第一生成器10和第二生成器20)生成的随机数进行数据类型转换。
也就是说,随机数生成装置100生成随机数的过程中,生成器生成随机数后,数据类型转换模块40会对生成器生成的随机数进行数据类型转换后再输出。
在一些应用场景中,生成器生成的随机数的数据类型可能不适用于某些网络训练装置,通过设置数据类型转换模块40,可以改变生成器生成的随机数的数据类型,以适用不同的网络训练装置,可提高随机数生成装置100的适用范围。
在本申请的一些实施例中,如图2e所示,随机数生成装置100还包括分布转换模块50。分布转换模块50用于对数据类型转换模块40输出的随机数进行分布类型的转换。
也就是说,随机数生成装置100生成随机数的过程中,数据类型转换模块40对生成器生成的随机数进行数据类型转换后,分布转换模块50会对数据类型转换模块40输出的随机数进行分布类型的转换后再输出。
通过在随机数生成装置100中设置分布转换模块50,可以对生成器生成的随机数的分布类型进行转换,提供丰富的随机数生成功能,以适用不同的网络训练装置。
基于此,本申请实施例提供的随机数生成装置100主要包括引擎(engine)和分布(distribution)两部分。其中,引擎(生成器)用于产生一个伪随机数序列。分布(数据类型转换模块40和分布转换模块50)则将这些数值映射到位于固定范围的某一数学分布中(例如正态分布、均匀分布或者位掩码分布)。功能完备,以适用神经网络训练过程中不同的随机数应用场景,可提高随机数生成装置100的适用范围。
下面,以几个详细的示例对本申请实施例提供的随机数生成装置100进行说明。在对随机数生成装置100进行说明的过程中,为了便于区分,将第一生成器10生成的随机数称为第一随机数,将第二生成器20生成的随机数称为第二随机数。
示例一
如图3a所示,随机数生成装置100包括第一生成器10、数据类型转换模块40以及分布转换模块50。
第一生成器10包括多条并行的第一流水线(pipeline)11;多条并行的第一pipeline11用于根据随机数种子同步生成多个第一随机数。
如图3b所示,随机数种子,例如可以通过CPU、GPU、NPU或者系统调度器通过外围总线(advanced peripheral bus,APB)传输至第一闪存,由第一闪存提供给第一生成器10。
其中,第一闪存例如可以是第一寄存器。
多条并行的第一pipeline11用于根据随机数种子同步生成多个第一随机数,也就是说,在第一生成器10工作过程中,每一条第一pipeline11根据随机数种子生成至少一个第一随机数。多条第一pipeline11并列设置,在同一时刻同步生成多个第一随机数。多条第一pipeline11一次生成多个第一随机数,多条第一pipeline11可循环多次,生成一条包括大量第一随机数的随机数链,多条第一pipeline11每次生成的多个第一随机数在随机数链中有各自对应的位标。
例如,每一条第一pipeline11一次可生成y个第一随机数,有z条并行的第一pipeline11,多条并行的第一pipeline11循环一次可生成y*z个第一随机数。多条并行的第一pipeline11循环w次,可生成一条包括y*z*w个第一随机数的随机数链。每个第一随机数在随机数链中分别有各自对应的位标。
也就是说,多条并行的第一pipeline11循环一次生成多个(例如y*z个)第一随机数,根据第一随机数的目标个数,多条并行的第一pipeline11可以循环多次(例如w次),以生成目标个数的第一随机数。
关于第一pipeline11的结构,在一些可能的实施例中,如图4a所示,第一pipeline11包括多个级联的运算子电路111。
其中,一级运算子电路111表示运算子电路111中的运算迭代一次,图4a中以第一pipeline11包括10个级联的运算子电路111为例进行示意,也就是说运算子电路111的运算的迭代次数为10次。当然,图4a中10个级联的运算子电路111仅为一种示意,本申请实施例对第一pipeline11包括的运算子电路111的个数不做任何限定。示例的,第一pipeline11包括的运算子电路111的个数也可是5个、7个、8个、11个、13个等。
关于运算子电路111的结构,如图4a所示,运算子电路111包括多个并行的数据 变形模块112(图4a以两个并行的数据变形模块112为例进行示意)。
如图4a和图4b所示,多个运算子电路111的级联,是通过运算子电路111中的多个数据变形模块112级联来实现的,前一级运算子电路111中的多个数据变形模块112与后一级运算子电路111中的多个数据变形模块112一一对应连接。
本申请实施例对相邻两级运算子电路111中多个数据变形模块112之间的对应连接关系不作限定,图4a和图4b仅为一种示意。
关于数据变形模块112,在本申请的一些实施例中,如图4c所示,数据变形模块112用于接收第一数据、第二数据、第三数据、第一设定值以及第二设定值,将第一数据和第一设定值的积的低位作为第一输出数据。将第二数据和第三数据异或后的结果,与,第一数据和第一设定值的积的高位,异或后作为第二输出数据。将第三数据与第二设定值之和作为第三输出数据。每级中数据变形模块112的功能相同。
关于数据变形模块112用于实现上述功能的结构,在本申请的一些实施例中,如图4c所示,数据变形模块112包括第一乘法器(在本申请实施例的附图中用第一“x”表示第一乘法器)、第一异或器(在本申请实施例的附图中用第一“xor”表示第一异或器)、第二异或器(在本申请实施例的附图中用第二“xor”表示第二异或器)以及第一加法器(在本申请实施例的附图中用第一“+”表示第一加法器)。
第一乘法器用于接收第一数据和第一设定值,将第一数据与第一设定值相乘,并将得到的积的低位作为第一输出数据输出。
第一异或器用于接收第二数据和第三数据,将第二数据与第三数据进行异或运算。
第二异或器用于接收第一异或器的输出和第一乘法器的积的高位,将第一异或器的输出与第一乘法器的积的高位进行异或运算后,作为第二输出数据输出。
第一加法器用于接收第三数据和第二设定值,将第三数据与第二设定值相加,作为第三输出数据输出。
在本申请的另一些实施例中,如图4d所示,数据变形模块112用于接收第一数据、第二数据、第三数据、第一设定值以及第二设定值,将第一数据和第一设定值的积的低位作为第一输出数据。将第二数据和第三数据异或后的结果,与,第一数据和第一设定值的积的高位,异或后作为第二输出数据。
除最后一级运算子电路111中的数据变形模块112外,其他级运算子电路111中的数据变形模块112还用于将第三数据与第二设定值之和作为第三输出数据。
也就是说,最后一级运算子电路111中的数据变形模块112与其他级运算子电路111中的数据变形模块112结构不同。
关于数据变形模块112用于实现上述功能的结构,如图4d所示,除最后一级运算子电路111中的数据变形模块112外,其他级运算子电路111中的数据变形模块112与前述图4c所示的数据变形模块112相同。最后一级运算子电路111中的数据变形模块112包括第一乘法器、第一异或器以及第二异或器,不再包括第一加法器。
以下为了便于说明,以每一级运算子电路111中数据变形模块112的结构相同为例进行示意。
在本申请的一些实施例中,同一运算子电路111包括的多个数据变形模块112,接收的第一数据、第二数据、第三数据、第一设定值以及第二设定值中至少一个不同。
这样一来,同一运算子电路111包括的多个数据变形模块112得到的第一输出数据、第二输出数据以及第三输出数据至少有一个不同,从而可提高第一pipeline11生成的第一随机数的随机性。
另外,同一数据变形模块112接收的第一设定值和第二设定值可以相同,也可以不同。同理,相邻级中相连接的两个数据变形模块112接收的第一设定值和第二设定值可以相同,也可以不同。
如图4c所示,多个数据变形模块112级联后,前一级运算子电路111中数据变形模块112的第一输出数据、第二输出数据以及第三输出数据,分别作为后一级运算子电路111中数据变形模块112的第二数据、第一数据以及第三数据。
多级运算子电路11中,最后一级运算子电路111的第一输出数据和第二输出数据作为第一pipeline11生成的第一随机数。
其中,第一pipeline11是根据随机数种子同步生成多个第一随机数的。在本申请的一些实施例中,随机数种子的至少一个比特(bit)作为第一级运算子电路111的第三数据。
也就是说,随机数种子是由包括多个bit的字符串构成,在第一级运算子电路111包括的多个数据变形模块112,接收的第三数据不同的情况下,可以将构成随机数种子的字符串拆分为多段,分别作为多个并行的数据变形模块112的第三数据。
示例的,随机数种子为64bit的字符串,运算子电路111包括两个并行的数据变形模块112,随机数种子的高32bit作为一个数据变形模块112的第三数据,随机数种子的低32bit作为另一个数据变形模块112的第三数据。
基于本示例提供的第一pipeline11的结构,在本申请的一些实施例中,多条并行的第一pipeline11用于基于菲洛克斯(philox)算法,根据随机数种子同步生成多个第一随机数。
在本申请的一些实施例中,philox算法的实现可以是philox4_32_10。即,philox算法一次可以生成4个32bit的无符号整数(unit)类型的第一随机数,10表示第一pipeline11中运算子电路111的迭代次数(或者理解为级联级数)。
当然,上述仅为一种示意,philox算法也可以一次生成2个第一随机数。philox算法也可以生成64位无符号整数(unit)类型的第一随机数。运算的迭代次数不限定为10次,也可是5次、7次、8次、11次等。
示例的,如图5a所示,第一pipeline11中的每一级运算子电路111包括第一数据变形模块112'和第二数据变形模块112”。
第一级运算子电路111中的第一数据变形模块112'接收的第一数据counter[1]'、第二数据counter[2]'以及第三数据key',输出第一输出数据result[1]'、第二输出数据result[2]'以及第三输出数据result[3]'。
第一级运算子电路111中的第二数据变形模块112”接收的第一数据counter[1]”、第二数据counter[2]”以及第三数据key”,输出第一输出数据result[1]”、第二输出数据result[2]”以及第三输出数据result[3]”。
上一级运算子电路111中的第一数据变形模块112'的第一输出数据result[1]'和第二输出数据result[2]',作为下一级第二数据变形模块112”的第二数据counter[2]” 和第一数据counter[1]”。上一级运算子电路111中的第二数据变形模块112”的第一输出数据result[1]”和第二输出数据result[2]”,作为下一级第一数据变形模块112'的第二数据counter[2]'和第一数据counter[1]'。
上一级运算子电路111中的第一数据变形模块112'的第三输出数据result[3]',作为下一级第一数据变形模块112'的第三数据key'。上一级运算子电路111中的第二数据变形模块112”的第三输出数据result[3]”,作为下一级第二数据变形模块112”的第三数据key”。
以下为了清楚说明,不再重复说明第一数据变形模块112'接收的第一数据counter[1]'、第二数据counter[2]'以及第三数据key'和第二数据变形模块112”接收的第一数据counter[1]”、第二数据counter[2]”以及第三数据key”,提到第一数据counter[1]'、第二数据counter[2]'以及第三数据key',即表示第一数据变形模块112'接收的数据。提到第一数据counter[1]”、第二数据counter[2]”以及第三数据key”,即表示第二数据变形模块112”接收的数据。
同理,不再重复说明第一数据变形模块112'的第一输出数据result[1]'、第二输出数据result[2]'以及第三输出数据result[3]'和第二数据变形模块112”的第一输出数据result[1]”、第二输出数据result[2]”以及第三输出数据result[3]”。提到第一输出数据result[1]'、第二输出数据result[2]'以及第三输出数据result[3]',即表示第一数据变形模块112'输出的数据。提到第一输出数据result[1]”、第二输出数据result[2]”以及第三输出数据result[3]”,即表示第二数据变形模块112”输出的数据。
如图5a所示,每条第一pipeline11的最后一级运算子电路111的第一输出数据result[1]”、第二输出数据result[2]”、第一输出数据result[1]”以及第二输出数据result[2]”作为第一pipeline11生成的第一随机数。
其中,第一级运算子电路111中的第一数据变形模块112'接收的第一数据counter[1]'和第二数据counter[2]'以及第二数据变形模块112”接收的第一数据counter[1]”和第二数据counter[2]”分别为该条第一pipeline11待生成的4个第一随机数在第一生成器10待生成的随机数链中的位标(一个32bit的数据)。
示例的,如图5a所示,第一级运算子电路111的第一数据counter[1]'、第二数据counter[2]'、第一数据counter[1]”和第二数据counter[2]”可以由第二闪存提供。
第一闪存输出本条第一pipeline11待生成的四个第一随机数在随机数链中的位标(128bit的counter_start数据),第二闪存接收第一闪存输出的128bit的counter_start数据,并输出至第一级运算子电路111。128bit的counter_start数据中对应的四个位标(32bit的数据)分别作为第一数据counter[1]'、第二数据counter[2]'、第一数据counter[1]”和第二数据counter[2]”。
第一级运算子电路111中的第一数据变形模块112'接收的第三数据counter[1]'和第二数据变形模块112”接收的第三数据counter[3]”分别为随机数种子key(64bit数据)的高32bit和低32bit。
示例的,如图5a所示,第一级运算子电路111的第三数据key'和第三数据key”可以由第三闪存提供。
第一闪存输出第一生成器10的随机数种子key,第三闪存接收第一闪存输出的随机数种子key,并输出至第一级运算子电路111。随机数种子key的高32bit和低32bit分别作为第三数据key'和第三数据key”。
其中,第二闪存例如可以是第二寄存器,第三闪存例如可以是第三寄存器。
如图5b所示,一个随机数种子key对应一条随机数链。第一pipeline11生成一次第一随机数称为一个周期,同一周期内多条并行的第一pipeline11同步接收的随机数种子的bit位不同。即,同一周期内多条并行的第一pipeline11同步接收的第三数据key'和第三数据key”不同。
在不同周期内同一条第一pipeline11接收的随机数种子的bit位相同,即,在不同周期内同一条第一pipeline11接收的第三数据key'或第三数据key”相同。也就是说,接收的第三数据key'的第一pipeline11,在每个周期内接收的第三数据key'始终相同。接收的第三数据key”的第一pipeline11,在每个周期内接收的第三数据key”始终相同。
一个counter_start数据对应生成四个第一随机数。在第一随机数生成的过程中,counter_start数据的输入是连续的,每条第一pipeline11的输出也是连续的。在第一pipeline11连续生成第一随机数的过程中,同一第一pipeline11在不同周期接收的counter_start数据不同。
示例的,如图5a所示,在第一个counter_start数据(counter_start[0])的运算进入第二级运算子电路111时,第一级运算子电路111开始对第二个counter_start数据(counter_start[16])进行运算。
示例的,如图3b所示,可以由流水线控制模块(pipe_ctrl)控制第一闪存在不同时刻输出对应的counter_start数据。
关于运算子电路111的内部结构,如图5a所示,第一数据变形模块112'包括第一乘法器、第一异或器、第二异或器以及第一加法器。
第一乘法器用于接收第一数据counter[1]'和第一设定值,将第一数据counter[1]'与第一设定值相乘,并将得到的积的低32bit作为第一输出数据result[1]'输出。
通过上述描述可知,示例的,第一级第一数据变形模块112'接收的第一数据counter[1]'为本条第一pipeline11待生成的4个第一随机数中的第一个第一随机数在随机数链中的位标(32bit的数据)。其他级第一数据变形模块112'接收的第一数据counter[1]'为前一级第二数据变形模块112”的第二输出数据result[2]”。
第一异或器用于接收第二数据counter[2]'和第三数据key',将第二数据counter[2]'与第三数据key'进行异或运算。
通过上述描述可知,示例的,第一级第一数据变形模块112'接收的第二数据counter[2]'为本条第一pipeline11待生成的4个第一随机数中的第二个第一随机数在随机数链中的位标(32bit的数据)。其他级第一数据变形模块112'接收的第二数据counter[2]'为前一级第二数据变形模块112”的第一输出数据result[1]”。
第一级第一数据变形模块112'接收的第三数据key'为随机数种子key的高32bit。其他级第一数据变形模块112'接收的第三数据key'为前一级第一数据变形模块112'的第三输出数据result[3]'。
第二异或器用于接收第一异或器的输出和第一乘法器的积的高32bit,将第一异或器的输出与第一乘法器的积的高32bit进行异或运算后,作为第二输出数据result[2]'输出。
第一加法器用于接收第三数据key'和第二设定值,将第三数据key'与第二设定值相加,作为第三输出数据result[3]'输出。
第二数据变形模块112”包括第一乘法器、第一异或器、第二异或器以及第一加法器。
第一乘法器用于接收第一数据counter[1]”和第一设定值,将第一数据counter[1]”与第一设定值相乘,并将得到的积的低32bit作为第一输出数据result[1]”输出。
通过上述描述可知,示例的,第一级第二数据变形模块112”接收的第一数据counter[1]”为本条第一pipeline11待生成的4个第一随机数中的第三个第一随机数在随机数链中的位标(32bit的数据)。其他级第二数据变形模块112”接收的第一数据counter[1]”为前一级第一数据变形模块112'的第二输出数据result[2]'。
第一异或器用于接收第二数据counter[2]”和第三数据key”,将第二数据counter[2]”与第三数据key”进行异或运算。
通过上述描述可知,示例的,第一级第二数据变形模块112”接收的第二数据counter[2]”为本条第一pipeline11待生成的4个第一随机数中的第四个第一随机数在随机数链中的位标(32bit的数据)。其他级第二数据变形模块112”接收的第二数据counter[2]”为前一级第一数据变形模块112'的第一输出数据result[1]'。
第一级第二数据变形模块112”接收的第三数据key”为随机数种子key的低32bit。其他级第二数据变形模块112”接收的第三数据key”为前一级第二数据变形模块112”的第三输出数据result[3]”。
第二异或器用于接收第一异或器的输出和第一乘法器的积的高32bit,将第一异或器的输出与第一乘法器的积的高32bit进行异或运算后,作为第二输出数据result[2]”输出。
第一加法器用于接收第三数据key”和第二设定值,将第三数据key”与第二设定值相加,作为第三输出数据result[3]”输出。
其中,第一数据变形模块112'接收的第一设定值和第二设定值相同,第二数据变形模块112”接收的第一设定值和第二设定值相同。第一数据变形模块112'接收的第一设定值和第二设定值,与,第二数据变形模块112”接收的第一设定值和第二设定值不同。
随机数生成装置100中的数据类型转换模块40,用于对随机数生成装置100中第一生成器10生成的第一随机数进行数据类型转换。
在本申请的一些实施例中,如图6a所示,数据类型转换模块40包括一个数据类型转换器41,数据类型转换器41用于将第一生成器10生成的第一随机数转化为预设数据类型的随机数。
数据类型转换器41的结构,在本申请的一些实施例中,数据类型转换器41为截断浮点16bit(bfp16)转换器。bfp16转换器用于将第一生成器10生成的第一随机数转化为bfp16类型的随机数。
示例的,基于philox算法,第一生成器10生成的第一随机数的数据类型为uint32,bfp16转换器按照IEEE754标准通过对uint32保留低10bit,高位补9bit(001111111),生成一个范围在1~2的浮点数,然后减1,实现将第一随机数的数据类型由uint32转化为bfp16。
在本申请的另一些实施例中,数据类型转换器41为浮点16bit(fp16)转换器。fp16转换器用于将第一随机数转化为fp16类型的随机数。
示例的,第一随机数的数据类型为uint32,fp16转换器按照IEEE754标准通过对uint32保留低7bit,高位补6bit(001111),生成一个范围在1~2的浮点数,然后减1,实现将第一随机数的数据类型由uint32转化为fp16。
在本申请的另一些实施例中,数据类型转换器41为浮点32bit(fp32)转换器。fp32转换器用于将第一随机数数转化为fp32类型的随机数。
示例的,第一随机数的数据类型为uint32,fp32转换器按照IEEE754标准通过对uint32保留低23bit,高位补9bit(001111111),生成一个范围在1~2的浮点数,然后减1,实现将第一随机数的数据类型由uint32转化为fp32。
在本申请的另一些实施例中,数据类型转换器41为32位无符号整数(uint32)转换器。uint32转换器用于将第一随机数转化为32位无符号整数类型的随机数。
可以理解的是,在第一随机数的数据类型为uint32的情况下,uint32转换器对第一随机数起到传输作用。
在本申请的另一些实施例中,数据类型转换器41为64位无符号整数(uint64)转换器。uint64转换器用于将第一随机数数转化为64位无符号整数类型的随机数。
在本申请的另一些实施例中,数据类型转换器41为32位有符号整数(int32)转换器。int32转换器用于将第一随机数转化为32位有符号整数类型的随机数。
在本申请的另一些实施例中,数据类型转换器41为64位有符号整数(int64)转换器。int64转换器用于将第一随机数转化为64位有符号整数类型的随机数。
通过上述描述可知,数据类型转换器41转换得到的随机数的数据类型与数据类型转换器41的选取有关,数据类型转换模块40包括哪种类型的数据类型转换器41,转换得到的随机数的的数据类型即为与该数据类型转换器41对应的数据类型。因此,此处的预设数据类型可以理解为与数据类型转换器41对应的数据类型。
在本申请的另一些实施例中,如图6b所示,数据类型转换模块40包括多个数据类型转换器41和第四选择器42。
数据类型转换器41用于将第一生成器10生成的第一随机数转化为预设数据类型的随机数。
其中,多个数据类型转换器41转换得到的随机数的预设数据类型不同。数据类型转换器41例如可以是上述bfp16转换器、fp16转换器、fp32转换器、uint32转换器、uint64转换器、int32转换器或者int64转换器。
第四选择器42用于根据第二参数,选择对多个数据类型转换器41中的一个所生成的随机数。
第二参数例如可以通过系统调度器、CPU、GPU或者NPU传输至第一闪存,第一闪存传输至第四选择器42。
由于第一生成器10生成的第一随机数为固定数据类型的随机数,仅适用于对某种特定数据类型的随机数进行训练的网络训练装置,随机数生成装置100的适用范围局限性较大。通过在随机数生成装置100中设置数据类型转换模块40,可以对第一生成器10生成的第一随机数的数据类型进行转换,以适用不同的网络训练装置,可提高随机数生成装置100的适用范围。
随机数生成装置100中的分布转换模块50,用于对数据类型转换模块40输出的随机数进行分布类型的转换。
在本申请的一些实施例中,如图6a所示,分布转换模块50包括一个分布生成器51,分布生成器51用于将数据类型转换模块40输出的随机数转化为服从预设分布的随机数。
在本申请的一些实施例中,分布生成器51为位掩码分布器(bitmask gen)。位掩码分布器用于将数据类型转换模块40输出的随机数转化为服从掩码分布的随机数。
以数据类型转换模块40输出的随机数服从均匀分布为例,位掩码分布器将数据类型转换模块40输出的数,与设定参数(例如软件配置的失活比例(dropout))做比较,小于失活比例则输出0,否则输出1,以达到掩码效果。
在本申请的另一些实施例中,分布生成器51为正态分布器(normal gen),正态分布器用于将数据类型转换模块40输出的随机数转化为服从正态分布的随机数。
正态分布器例如可以是任意均值和方差的正态分布生成器或者为截断正态分布生成器。
示例的,正态分布器可以采用box-muller(箱式-穆勒)算法,生成服从任意均值和方差的正态分布随机数。
如图6c所示,以采用box-muller算法将两个满足均匀分布的uint32类型的数据,转化为两个满足标准正态分布的fp32类型的数据为例:
(1)首先将第一生成器10输出的uint32数据x0、x1转化为0~1的浮点数u1、v1。
(2)将u1与1.0e-7f作比较,如果u1<1.0e-7f,则u1=1.0e-7f;反之u1不变。
(3) v2=2.0*π*v1。
(4)f0_tmp=sin(v2);f1_tmp=cos(v2)。
(5)f0=u2*f0_tmp;f1=u2*f1_tmp。
box-muller算法是目前主流数深度学习框架使用的正态分布转化算法,正态分布器采用采用box-muller算法形成的正态分布随机数的正态分布特性,相对irwin-hall(欧文-霍尔算法)形成的模拟正态分布随机数的正态分布特性较优。
另外,以fp32数据类型为例,采用box-muller算法,输入是两个满足均匀分布的uint32随机数,输出为两个满足标准正态分布的fp32随机数。采用irwin-hall算法,输入多个均匀分布随机数相加产生一个正态分布随机数。采用irwin-hall算法对均匀分布随机数的数量要求较大,相对irwin-hall算法,在满足同等数据量输出的情况下,采用box-muller算法对生成器的性能要求较低。
示例的,也可以将数据类型转换模块40输出的数据取绝对值后,和2比较,小于2的保留,大于等于2的丢弃,以生成服从截断正态分布的随机数。
在本申请的另一些实施例中,分布生成器51为均匀分布器(uniform gen),均匀分布器用于将数据类型转换模块40输出的随机数转化为服从均匀分布的随机数。
可以理解的是,若数据类型转换模块40的输出为服从均匀分布的uint32类型的随机数,均匀分布器相当于用于传输数据类型转换模块40输出的随机数。
通过上述描述可知,分布生成器51转化得到的随机数的服从的分布类型与分布生成器51的选取有关,分布转换模块50包括哪种类型的分布生成器51,转换得到的随机数服从的分布类型即为与该分布生成器51对应的分布类型。因此,此处的预设分布可以理解为与分布生成器51对应的分布类型。
在本申请的另一些实施例中,如图6b所示,分布转换模块50包括多个分布生成器51和第五选择器52。
分布生成器51用于将数据类型转换模块40输出的随机数转化为服从预设分布的随机数。
其中,多个分布生成器51转换得到的随机数服从的预设分布类型不同。分布生成器51例如可以是上述位掩码分布器、正态分布器或者均匀分布器。
第五选择器52用于根据第三参数,选择输出多个分布生成器51中的一个所生成的随机数。
第三参数例如可以通过系统调度器、CPU、GPU或者NPU传输至第一闪存,第一闪存传输至第五选择器。
由于第一生成器10生成的第一随机数为固定分布类型的随机数,仅适用于对某种特定分布类型的随机数进行训练的网络训练装置,随机数生成装置100的适用范围局限性较大。通过在随机数生成装置100中设置分布转换模块50,可以对第一生成器10生成的第一随机数的分布类型进行转换,以适用不同的网络训练装置,可提高随机数生成装置100的适用范围。
在本申请的一些实施例中,如图7所示,随机数生成装置100还包括输出控制模块60。输出控制模块60用于对第一生成器10生成的第一随机数进行缓存,并输出第一生成器10生成的第一随机数。
可以理解的是,在随机数生成装置100还包括数据类型转换模块40和分布转换模块50的情况下,输出控制模块60用于对分布转换模块50生成的随机数进行缓存,并输出分布转换模块50生成的随机数。
当将上述随机数生成装置100应用于上述神经网络系统中时,随机数生成装置100生成的第一随机数存储在上述神经网络系统的第二存储器中,输出控制模块60和第二存储器例如可以通过AXI(advanced extensible interface)协议进行交互,以供网络训练装置调取。第二存储器例如可以是DDRSDRAM。
在一些实施例中,第二存储器还用于存储随机数生成装置100生成的最后一个第一随机数的位标。
也就是说,第二存储器用于存储随机数生成装置100生成的随机数链的截止位标。截止位标可以理解为,随机数链中最后一个第一随机数的位标。
示例的,给定随机数种子后,本次任务执行完毕后,第一生成器10生成了长度为100000的随机数链(包括100000个第一随机数),第100000个第一随机数的位标为 99999,99999存储在第二存储器中。在下一次任务下发后,生成的随机数链的位标从100000开始,而不会再从0开始。也就是说,虽然随机数种子相同,但本次任务接收到的第一个counter_start数据和下一次任务接收到的第一个counter_start数据不同。从而使得每次任务生成的第一随机数不同。
这样一来,通过将随机数生成装置100生成的最后一个第一随机数的位标存储在第二存储器中,随机数生成装置100执行下一次任务时,若随机数种子不变,随机数生成装置100可从第二存储器中读回上一次任务生成的最后一个第一随机数的位标,而不会再从0开始。保证任务的连续下发,并且每次任务生成的第一随机数不同,可实现随机数生成过程中有中间状态存在。
在本申请的一些实施例中,如图7所示,随机数生成装置100还包括中断管理模块。中断管理模块用于输出正常中断请求和异常中断请求。
即,中断请求包括随机数生成完成正常中断和随机数生成未完成异常中断。中断管理模块将中断请求传输至第一闪存,第一闪存通过第一传输线ioc将正常中断请求传输至神经网络系统的处理器(例如系统调度器、CPU、GPU或者NPU),第一闪存通过第二传输线ioe将异常中断请求传输至神经网络系统的处理器。处理器根据接收到的中断请求类型,输出相对应的控制指令。
例如,处理器接收到正常中断请求,表示当前种子对应的随机数生成完成,处理器可向随机数生成装置100输出下一次任务的相关参数。处理器接收到异常中断请求,表示当前种子对应的随机数生成未完成,处理器可向随机数生成装置100重新输出当前任务的相关参数。
通过上述描述可知,本申请实施例的随机数生成装置100中设置有闪存配置接口,硬化调动模块、CPU、GPU或者NPU配置第一闪存,通过第一闪存将第二参数以及第三参数分别传输至第四选择器42和第五选择器52。随机数生成装置100的软硬件接口灵活,可灵活地设定工作模式和参数,随机数生成过程中无需系统调度器、CPU、GPU或者NPU的干预,减轻系统调度器、CPU、GPU或者NPU的运行压力。
另外,系统调度器、CPU、GPU或者NPU下发任务后,随机数生成装置100开始工作。如图7所示,系统调度器、CPU、GPU或者NPU也可以将任务下发至第一闪存,由第一闪存向第一生成器10传输使能信号,后续过程中无需系统调度器、CPU、GPU或者NPU的干预。
在一些实施例中,第一闪存包括参数寄存器和启动寄存器,参数寄存器用于存储参数,启动寄存器用于存储任务指令。
本申请实施例提供的上述随机数生成装置100,接收软件配置的随机数种子等参数,通过硬件结构生成大量的第一随机数存储在配置的第二存储器中。
本示例中,第一生成器10包括多条并行的第一pipeline11,多条并行的第一pipeline11可同步形成多个第一随机数,且并行的第一pipeline11的数量可以根据需要扩展。另外,第一随机数生成过程中,下一个第一随机数的生成开始,无需等待上一个第一随机数的生成结束。因此,本申请实施例提供的随机数生成装置100中第一生成器10的并行度好,可明显提升随机数的生成效率。且第一随机数的生成是由第一pipeline11这个硬件结构来完成的,随机数生成装置100的性能可以满足大规模神经网 络训练场景下对硬件流水线结构的需求。
另外,在第一pipeline11采用philox算法(例如philox4_32_10)生成第一随机数,可以通过TestU01测试。且本发明采用32条并行的第一pipeline11生成第一随机数时,bitmask(位掩码)生成可达100Gb/s,接近100个CPU使用ARS-2(两次高级循环加密)算法的吞吐性能,第一生成器10可达到较高的吞吐量。
示例二
示例二与示例一的不同之处在于,随机数生成装置100包括第二生成器20。
如图8a和图8b所示,随机数生成装置100包括第二生成器20、数据类型转换模块40、分布转换模块50以及输出控制模块60。
第二生成器20包括种子初始化发生子电路21、状态旋转子电路22以及输出子电路23。
种子初始化发生子电路21用于根据随机数种子进行初始化,生成包括多个初始值的旋转链。
如图8c所示,随机数种子,例如可以通过CPU、GPU、NPU或者系统调度器通过APB传输至第一闪存,由第一闪存提供给第二生成器20。
其中,第一闪存例如可以是第一寄存器。
关于种子初始化子电路21生成多个初始值的方式,在本申请的一些实施例中,种子初始化发生子电路21用于接收第四数据、第三设定值、第四设定值以及第五设定值,将第四数据右移a位后和第四数据进行异或运算。将异或运算得到的结果与第三设定值相乘。将相乘得到的积再与第四设定值相加。将相加得到的和与第五设定值进行与运算。将与运算的结果作为初始值输出。
重复该生成初始值的过程,得到包括多个初始值的旋转链。
其中,种子初始化子电路21是用于根据随机数种子进行初始化的。示例的,生成第一个初始值时接收的第四数据为随机数种子。在后续循环生成多个初始值的过程中,生成的初始值作为第四数据。也就是说,上一个初始值作为下一个待生成初始值的第四数据。
关于种子初始化子电路21中用于实现上述功能的结构,在本申请的一些实施例中,如图9a所示,种子初始化子电路21包括第一右移器(在本申请实施例的附图中用第一“>>”表示第一右移器)、第三异或器(在本申请实施例的附图中用第三“xor”表示第三异或器)、第二乘法器(在本申请实施例的附图中用第二“x”表示第二乘法器)、第二加法器(在本申请实施例的附图中用第二“+”表示第二加法器)以及第一与门器(在本申请实施例的附图中用第一“&”表示第一与门器)。
第一右移器用于接收第四数据,将第四数据右移a位。
第三异或器用于接收第一右移器的输出,将第一右移器的输出与第四数据进行异或运算。
第二乘法器用于接收第三异或器的输出和第三设定值,将第三异或器的输出与第三设定值相乘。
第二加法器用于接收第二乘法器的输出和第四设定值,将第三乘法器的输出与第 四设定值相加。
第一与门器用于接收第二加法器的输出和第五设定值,将第二加法器的输出与第五设定值进行与运算。
其中,第一与门的输出作为种子初始化子电路21的输出,即,第一与门的输出作为初始值输出。
通过上述描述可知,第四数据为随机数种子或者初始值。基于此,第一右移器不仅接收第一闪存传输的随机数种子,还接收第一与门器输出的初始值。
示例的,在种子初始化发生子电路21生成第一个初始值时,第一右移器接收随机数种子。在种子初始化发生子电路21生成第二个初始值时,第一右移器接收第一与门输出的第一个初始值。依次类推,种子初始化发生子电路21生成第s个初始值时,第一右移器接收第s-1个初始值。通过调整种子初始化发生子电路21的循环次数,可以调整旋转链中初始值的个数。
如图8a和图8b所示,状态旋转子电路22包括多条并行的第二流水线(pipeline)221,多条并行的第二pipeline221用于对旋转链进行旋转。
状态旋转子电路22包括多条并行的第二pipeline221,在同一时刻,多条并行的第二pipeline221同时对旋转链中的多个值进行旋转。其中,对旋转链进行旋转,可以理解为更新旋转链中的数据。
另外,可以理解的是,由于状态旋转子电路22会对旋转链进行旋转(即,对旋转链中的数据进行更新),这就导致旋转链中的数据是动态变化的。这样一来,状态旋转子电路22对旋转链进行旋转,既包括对初始值进行旋转,也包括对更新值进行旋转。或者理解为,状态旋转子电路22对旋转链进行旋转,包括对含有多个初始值的旋转链进行旋转,也包括对含有多个旋转后的更新值的旋转链进行旋转。
本申请实施例中,种子初始化发生子电路21生成包括多个初始值的旋转链,称之为旋转前的旋转链。随着状态旋转子电路22对旋转链中的初始值不断更新,状态旋转子电路22生成的包括多个更新值的旋转链,称为旋转后的旋转链。多条并行的第二pipeline221可多次循环,不断循环,不断更新旋转链。
关于第二pipeline221对初始值进行旋转的方式,在本申请的一些实施例中,如图9b所示,第二pipeline221包括奇偶选择模块2211、奇数生成模块2212、偶数生成模块2213以及第二选择器2214。
奇偶选择模块2211,用于接收第五数据、第六数据、第六设定值以及第七设定值,将第五数据与第六设定值进行与运算的结果,和,第六数据取模后与第七设定值进行与运算的结果,二者进行或运算。然后对或运算的结果取模,将取模的结果输出至第二选择器2214和偶数生成模块2213。
关于奇偶选择模块2211用于实现上述功能的结构,在本申请的一些实施例中,如图9b所示,奇偶选择模块2211包括第二与门器(在本申请实施例的附图中用第二“&”表示第二与门器)、第一取模器(在本申请实施例的附图中用第一“mod”表示第一取模器)、第三与门器(在本申请实施例的附图中用第三“&”表示第三与门器)、第一或门器(在本申请实施例的附图中用第一“or”表示第一或门器)以及第二取模器(在本申请实施例的附图中用第二“mod”表示第二取模器)。
第二与门器用于接收第五数据和第六设定值,对第五数据和第六设定值进行与运算。
第一取模器用于接收第六数据,对第六数据取模。
第三与门器用于接收第七设定值,对第一取模器的输出和第七设定值进行与运算。
第一或门器用于接收第二与门器的输出和第三与门器的输出,对第二与门器的输出和第三与门器的输出进行或运算。
第二取模器用于接收第一或门器的输出,对第一或门器的输出取模。
奇数生成模块2212,用于接收第五数据和第八设定值,将第五数据与第八设定值进行异或,将异或的结果输出至第二选择器2214。
关于奇数生成模块2212用于实现上述功能的结构,在本申请的一些实施例中,如图9b所示,奇数生成模块2212包括第四异或器(在本申请实施例的附图中用第四“xor”表示第四异或器)。
第四异或器用于接收第五数据和第八设定值,对第五数据和第八设定值进行异或运算,将异或的结果输出至第二选择器2214。
偶数生成模块2213,用于接收第七数据和奇偶选择模块2211的输出,将奇偶选择模块2211的输出右移b位后与第七数据的取模结果进行异或运算,将异或的结果输出至第二选择器2214。
关于偶数生成模块2213用于实现上述功能的结构,在本申请的一些实施例中,如图9b所示,偶数生成模块2213包括第三取模器(在本申请实施例的附图中用第三“mod”表示第三取模器)、第二右移器(在本申请实施例的附图中用第二“>>”表示第二右移器)以及第五异或器(在本申请实施例的附图中用第五“xor”表示第五异或器)。
第三取模器用于接收第七数据,对第七数据取模。
第二右移器用于接收奇偶选择模块2211的输出,将奇偶选择模块2211的输出右移b位。
第五异或器用于接收第三取模器的输出和第二右移器的输出,对第三取模器的输出和第二右移器的输出进行异或运算,将异或的结果输出至第二选择器2214。
第二选择器2214用于根据奇偶选择模块2211的输出,选择输出奇数生成模块2212或者偶数生成模块2213的输出,以对旋转链进行旋转。
其中,奇偶选择模块2211中的第二取模器的输出为奇数或者偶数,第二选择器2214用于根据第二取模器输出的结果的奇偶性,选择输出奇数生成模块2212或者偶数生成模块2213的输出,第二选择器2214的输出为旋转链中的更新值。
第二pipeline221接收的是旋转链中的数据,在本申请的一些实施例中,第五数据、第六数据以及第七数据例如可以为旋转链中的不同数据。
关于输出子电路23,在本申请的一些实施例中,如图8a所示,输出子电路23包括一条输出线231,输出线231用于对状态旋转子电路22输出的多个更新值循环的进行变形后输出,最终实现输出子电路23对状态旋转子电路22的输出进行变形并输出,生成多个第二随机数。
本示例提供的第二生成器20包括多条并行的第二pipeline221,多条并行的第二 pipeline221在同一时刻输出的多个更新值,可同步对旋转链中的多个数据进行旋转,提高对旋转链的旋转更新效率,从而提升第二随机数的生成效率。
在本申请的另一些实施例中,如图8b所示,输出子电路23包括多条并行的输出线231,多条并行的输出线231用于对状态旋转子电路22输出的多个更新值同步进行变形后输出,最终实现输出子电路23对状态旋转子电路22的输出进行变形并输出,同步生成多个第二随机数。
本示例提供的第二生成器20包括多条并行的第二pipeline221的基础上,还包括多条并行的输出线231,多条并行的第二pipeline221在同一时刻输出的多个更新值,可同步对旋转链中的多个数据进行旋转,提高对旋转链的旋转更新效率,多条并行的输出线231在同一时刻对多个更新值进行变形并输出,可进一步提升第二随机数的生成效率。
在一些实施例中,输出子电路23包括的输出线231的条数与状态旋转子电路22包括的第二pipeline221的条数相同。
无论输出子电路23包括几条输出线231,输出线231对更新值进行变形的方式相同。
在本申请的一些实施例中,输出线231用于接收状态旋转子电路22的输出、第九设定值以及第十设定值,将状态旋转子电路22的输出右移c位后与状态旋转子电路22的输出进行异或运算。然后将异或结果,和,异或结果左移d位后和第九设定值进行与运算的结果,二者进行异或运算。然后将异或结果,和,异或结果左移e位后和第十设定值进行与运算的结果,二者进行异或运算。然后将异或结果,和,异或结果右移f位的结果,进行异或运算,将异或结果作为第二随机数输出。
关于输出线231用于实现上述功能的结构,在本申请的一些实施例中,如图9c所示,输出线231包括包括第三右移器(在本申请实施例的附图中用第三“>>”表示第三右移器)、第六异或器(在本申请实施例的附图中用第六“xor”表示第六异或器)、第一左移器(在本申请实施例的附图中用第一“<<”表示第一左移器)、第四与门器(在本申请实施例的附图中用第四“&”表示第四与门器)、第七异或器(在本申请实施例的附图中用第七“xor”表示第七异或器)、第二左移器(在本申请实施例的附图中用第二“<<”表示第二左移器)、第五与门器(在本申请实施例的附图中用第五“&”表示第五与门器)、第八异或器(在本申请实施例的附图中用第八“xor”表示第八异或器)、第四右移器(在本申请实施例的附图中用第四“>>”表示第四右移器)以及第九异或器(在本申请实施例的附图中用第九“xor”表示第九异或器)。
第三右移器用于接收状态旋转子电路的输出,将状态旋转子电路的输出右移c位。
第六异或器用于接收状态旋转子电路的输出和第三右移器的输出,将状态旋转子电路的输出与第三右移器的输出进行异或运算。
第一左移器用于接收第六异或器的输出,将第六异或器的输出左移d位。
第四与门器用于接收第九设定值和第一左移器的输出,将第九设定值与第一左移器的输出进行与运算。
第七异或器用于接收第六异或器的输出和第四与门器的输出,将第六异或器的输出和第四与门器的输出进行异或运算。
第二左移器用于接收第七异或器的输出,将第七异或器的输出左移e位。
第五与门器用于接收第十设定值和第二左移器的输出,将第十设定值与第二左移器的输出进行与运算。
第八异或器用于接收第五与门器的输出与第七异或器的输出,将第五与门器的输出与第七异或器的输出进行异或运算。
第四右移器用于接收第八异或器的输出,将第八异或器的输出右移f位。
第九异或器用于接收第八异或器的输出和第四右移器的输出,将第八异或器的输出和第四右移器的输出进行异或运算,将异或结果作为第二随机数输出。
关于实现种子初始化发生子电路21和状态旋转子电路22之间、状态旋转子电路22和输出子电路23之间信号连通的方式,如图10a和图10b所示,第二生成器20还包括第三选择器24、互通寄存器25以及第一存储器26。
种子初始化发生子电路21输出的旋转前的旋转链和状态旋转子电路22输出的旋转后的旋转链分别传输至第三选择器24。
第三选择器24用于接收种子初始化发生子电路21输出的旋转前的旋转链和状态旋转子电路22输出的旋转后的旋转链,在选择控制端control的控制下,将旋转前的旋转链或旋转后的旋转链传输至互通寄存器25。
互通寄存器25,用于接收第三选择器24输出的旋转链。在选择控制端control输出的控制信号为控制第三选择器24输出种子初始化发生子电路21输出的初始值时,互通寄存器25接收旋转前的旋转链。在选择控制端control输出的控制信号为控制第三选择器24输出状态旋转子电路22输出的更新值时,互通寄存器25接收旋转后的旋转链。
种子初始化发生子电路21生成初始值的过程中,循环一次生成一个初始值,最终生成包括多个初始值的旋转链。在循环的过程中,互通寄存器25分时接收到初始值,需要对接收到的初始值进行存储。
同理,状态旋转子电路22生成更新值的过程中,循环一次生成多个更新值,在循环过程中,互通寄存器25分时接收到更新值,需要对接收到的更新值进行存储。
基于此,互通寄存器25用于将接收到的旋转链传输至第一存储器26,第一存储器26接收并存储互通寄存器25输出的旋转链。
此处,第一存储器26例如可以是静态随机存取存储器(static random-access memory,SRAM)。
通过上述描述可知,在生成第二随机数的过程中,第三选择器24在选择控制端control输出的控制信号的控制下,先将种子初始化发生子电路21生成的包括多个初始值的旋转链传输至互通寄存器25,存储在第一存储器26中。然后状态旋转子电路22的输出传输至第三选择器24,第三选择器24在选择控制端control输出的控制信号的控制下,将状态旋转子电路22输出的更新值传输至互通寄存器25。互通寄存器25将状态旋转子电路22输出的更新值传输至第一存储器26,对第一存储器26中的旋转链进行更新。不断循环,不断更新旋转链。
在本申请的一些实施例中,旋转链存储在第一存储器26中,状态旋转子电路22对旋转链进行旋转时,互通寄存器25向状态旋转子电路22中每条第二pipeline221传 输旋转链中的数据,作为第五数据、第六数据以及第七数据。
基于此,互通寄存器25还用于从第一存储器26中分批调取旋转链中的数据,传输至第二pipeline221。
互通寄存器25从第一存储器26中分批调取旋转链中的数据,是指状态旋转子电路22循环一次,互通寄存器25从第一存储器26中调取一批旋转链中的数据。状态旋转子电路22每次循环过程中,接收到的数据在旋转链中的位标不同,即,接收到的数据为旋转链中的不同数据。
状态旋转子电路22对旋转链进行旋转,输出更新值后,输出子电路23需要接收状态旋转子电路22输出的更新值,以对状态旋转子电路22的输出进行变形处理,输出第二随机数。
基于此,互通寄存器24还用将状态旋转子电路22的输出(更新值)传输至输出子电路23。
在生成第二随机数的过程中,状态旋转子电路22一边对旋转链中的数据(初始值或者更新值)进行旋转,输出子电路23一边对状态旋转子电路22输出的更新值进行变形处理,可同步完成。
例如,状态旋转子电路22对第1轮的初始值进行旋转处理,输出第1轮更新值后。输出子电路23对第1轮的更新值进行变形处理,输出第二随机数。与此同时,状态旋转子电路22对第2轮的初始值进行旋转处理,输出第2轮更新值。对旋转链进行旋转的过程和对更新值进行处理的过程同步进行,可提升第二随机数的生成效率。
基于此,种子初始化发生子电路21与状态旋转子电路22之间的信号传输,状态旋转子电路22与输出子电路23之间的信号传输通过互通寄存器26来实现的,通过共用同一互通寄存器25,可减少互通寄存器25的数量。
基于本示例提供的第二生成器20的结构,在本申请的一些实施例中,第二生成器20用于基于梅森旋转(mersenne twister,MT)算法,根据随机数种子同步生成多个第二随机数。
在本申请的一些实施例中,梅森旋转算法的实现可以是MT19937算法。
示例的,如图11所示,第二生成器20包括种子初始化发生子电路21、状态旋转子电路22、输出子电路23、第三选择器24、互通寄存器25以及第一存储器26。
种子初始化发生子电路21接收随机数种子key,第一右移器将随机数种子key右移30(即a=30)。第三异或器将第一右移器的输出与随机数种子key进行异或运算。第二乘法器将第三异或器的输出与69069(即,第三设定值=69069)相乘。第二加法器将第二乘法器的输出与s相加。第一与门器将第二加法器的输出与0xffffffff(即,第五设定值=0xffffffff)进行与运算,并将与运算的结果作为第一个初始值输出。第一个初始值的位标为0。
其中,s为待形成的初始值在旋转链中的位标。待形成的初始值在旋转链中的位标为0,则s=0。
然后,种子初始化发生子电路21接收前一次形成的初始值,第一右移器将将初始值右移30。第三异或器将第一右移器的输出与初始值进行异或运算。第二乘法器将第三异或器的输出与69069相乘。第二加法器将第二乘法器的输出与i相加。第一与门 器将第二加法器的输出与0xffffffff进行与运算,并将与运算的结果作为下一个初始值输出。
循环上述过程,得到包括624个初始值的旋转链。
第三选择器24在选择控制端control的控制下,将种子初始化发生子电路21的输出传输至互通寄存器25。
互通寄存器25接收第三选择器24的输出,将接收到的初始值传输至第一存储器26,第一存储器26接收并存储互通寄存器25输出的初始值,形成旋转链。
互通寄存器25从第一存储器26中分批调取旋转链中的数据,传输至状态旋转子电路22。
状态旋转子电路22包括16条并行的第二流水线(pipeline)221,每条第二pipeline221接收互通寄存器25调取的旋转链中的数据作为第五数据、第六数据以及第七数据。其中,第五数据为旋转链中的位标为i的数据,第六数据为旋转链中的位标为i+1的数据,第七数据为旋转链中的位标为(i+397)/624的余数的数据。多条并行的第二pipeline221接收到的第五数据、第六数据以及第七数据中i的取值不同。
示例的,如图12a所示,四条并行的第二pipeline221中,一条第二pipeline221接收的第五数据、第六数据以及第七数据依次为旋转链中位标为0、1、397的数据。一条第二pipeline221接收的第五数据、第六数据以及第七数据依次为旋转链中位标为1、2、398的数据。一条第二pipeline221接收的第五数据、第六数据以及第七数据依次为旋转链中位标为2、3、399的数据。一条第二pipeline221接收的第五数据、第六数据以及第七数据依次为旋转链中位标为3、4、400的数据。
每条第二pipeline221包括奇偶选择模块2211、奇数生成模块2212、偶数生成模块2213以及第二选择器2214。
奇偶选择模块2211,接收旋转链中位标为i的数据(第五数据)和旋转链中位标为i+1的数据(第六数据),第二与门器将旋转链中位标为i的数据与0x7fffffff(即,第六设定值=0x7fffffff)进行与运算。第一取模器对旋转链中位标为i+1的数据取模。第三与门器对第一取模器的输出与0x80000000(即,第七设定值=0x80000000)进行与运算。第一或门器对第二与门器的输出和第三与门器的输出进行或运算。第二取模器对第一或门器的输出取模,并将取模的结果输出至第二选择器2214和偶数生成模块2213。
奇数生成模块2212,接收旋转链中位标为i的数据,第四异或器将旋转链中位标为i的数据与第八设定值进行异或,并将异或的结果输出至第二选择器2214。
偶数生成模块2213,用于接收旋转链中位标为(i+397)/624的余数的数据(第七数据),第二右移器将奇偶选择模块2211的输出右移1(即,b=1)位。第三取模器对旋转链中位标为(i+397)/624的余数的数据取模。第五异或器将第三取模器的输出和第二右移器的输出进行异或运算,并将异或的结果输出至第二选择器2214。
如图12a所示,16条并行的第二pipeline221同步接收旋转链中的数据(初始值或者更新值),相邻两条第二pipeline221的第五数据在旋转链中的位标相差1。
状态旋转子电路22的16条并行的第二pipeline221循环39次,以完成对624个数据的旋转。
在这种情况下,考虑到第一存储器26中一次只能读取位于同一行中的数据,而第五数据和第七数据的位标相差较大,二者不位于同一行。
如图12b所示,关于第一存储器26对旋转链中624个数据的存储的调取方式,第一存储器26包括第一缓冲寄存器(buffer)和第二缓冲寄存器,第一缓冲寄存器和第二缓冲寄存器分别对624个数据进行存储,在互通寄存器25从第一存储器26中调取数据时,第一缓冲寄存器和第二缓冲寄存器交替读写,以实现对16条并行的第二pipeline221提供数据。
示例的,采用将第一缓冲寄存器的第39行和第1行两拍攒起来的数据取位标为0、1-16这17个数据,第二缓冲寄存器的第25行和第26行两拍攒起来的数据取位标为397-412这16个数据,对16条并行的第二pipeline221进行并行计算。
第1条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为0、1、397的数据。
其中,(0+397)/624的余数为397,第七数据对应旋转链中位标为397的数据。
第2条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为1、2、398的数据。
其中,(1+397)/624的余数为398,第七数据对应旋转链中位标为398的数据。
第3条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为3、4、400的数据。
第5条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链位中标为4、5、401的数据。
第6条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链位中标为5、6、402的数据。
第7条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为6、7、403的数据。
第8条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为7、8、404的数据。
第9条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应位标为8、9、405的数据。
第10条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为9、10、406的数据。
第11条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为10、11、407的数据。
第12条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为11、12、408的数据。
第13条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为12、13、409的数据。
第14条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为13、14、410的数据。
第15条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转 链位中标为14、15、411的数据。
第16条第二pipeline221的第五数据、第六数据以及第七数据分别依次对应旋转链中位标为15、16、412的数据。
16条第二pipeline221得到的16个数据结果一方面通过互通寄存器25写入输出子电路23,一方面通过互通寄存器25写入第一存储器26的第一缓冲寄存器和第二缓冲寄存器的第一行。依次循环,16条第二pipeline221每拍更新第一缓冲寄存器和第二缓冲寄存器中的16个数据。
输出子电路23包括16条并行的输出线231,每条输出线231接收状态旋转子电路22中一条第二pipeline221的输出。
输出线231中第三右移器将状态旋转子电路22的输出右移11(即,c=11)位。第六异或器将第三右移器的输出与状态旋转子电路22的输出进行异或运算。第一左移器将第六异或器的输出左移7(即,d=7)位。第四与门器将第一左移器的输出与0x9d2c5680(即,第九设定值=0x9d2c5680)进行与运算。第七异或器将第六异或器的输出与第四与门器的输出进行异或运算。第二左移器将第七异或器的输出左移15(即,e=15)位。第五与门器将第二左移器的输出与0xefc60000(即,第十设定值=0xefc60000)进行与运算。第八异或器将第五与门的输出与第七异或器的输出进行异或运算。第四右移器将第八异或器的输出右移11(即,f=11)位。第九异或器将第四右移器的输出与第八异或器的输出进行异或运算,将异或结果作为第二随机数输出。
如图13所示,关于随机数生成装置100中数据类型转换模块40、分布转换模块50以及输出控制模块60、中断管理模块的结构可以与示例一中相同,可参考示例一中的相关描述,此处不再赘述。
示例三
示例三中的随机数生成装置100包括示例一中的第一生成器10和示例二中的第二生成器20。
如图14a和图14b所示,随机数生成装置100包括第一生成器10、第二生成器20、第一选择器30、数据类型转换模块40、分布转换模块50以及输出控制模块60。
第一生成器10、数据类型转换模块40、分布转换模块50以及输出控制模块60的结构可以与示例一中第一生成器10、数据类型转换模块40、分布转换模块50以及输出控制模块60的结构相同,此处不再赘述。
其中,如图14a所示,第二生成器20可以包括多条输出线231。如图14b所示,第二生成器20可以包括一条输出线231。
第二生成器20的结构可以与示例二中第二生成器20的结构相同,可以参考示例二中的相关描述,此处不再赘述。
如图14a所示,第一生成器10输出的第一随机数和第二生成器20输出的第二随机数均传输至第一选择器30。第一选择器30用于根据第一参数,选择输出第一随机数或第二随机数。
第一参数例如可以通过系统调度器、CPU、GPU或者NPU传输至第一闪存,第一闪存传输至第一选择器30。
数据类型转换模块40用于对第一选择器30的输出进行数据类型转换。
也就是说,在第一选择器30输出的第一随机数的情况下,数据类型转换模块40用于对第一随机数进行数据类型转换。在第一选择器30输出的第二随机数的情况下,数据类型转换模块40用于对第二随机数进行数据类型转换。
本示例提供的随机数生成装置100包括第一生成器10和第二生成器20,第一生成器10生成第一随机数的原理和第二生成器20生成第二随机数的原理不同。因此,通过在随机数生成装置100中设置第一生成器10和第二生成器20,可根据需求选取通过第一生成器10生成随机数或者选取通过第二生成器20生成随机数,以适应不同的应用场景。
在本申请的一些实施例中,上述任一种随机数生成装置100,可以集成在芯片的基底上。
示例的,上述随机数生成装置100布局在AI芯片的片上系统(system on chip,SOC)侧。使得AI芯片可以应用在各种需要大规模随机数的AI推理和训练网络中。随机数生成装置100接收的随机数种子、参数、存放地址等通过软件配置完成。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (22)

  1. 一种随机数生成装置,其特征在于,包括:
    至少一个生成器,所述至少一个生成器中含有生成器用于根据随机数种子同步生成多个随机数;
    在所述至少一个生成器为多个生成器的情况下,所述随机数生成装置还包括第一选择器;所述第一选择器用于根据第一参数,选择输出所述多个生成器中的一个生成的随机数。
  2. 根据权利要求1所述的随机数生成装置,其特征在于,所述至少一个生成器包括第一生成器,所述第一生成器包括多条并行的第一流水线(pipeline);所述多条并行的第一pipeline用于根据所述随机数种子同步生成所述多个随机数。
  3. 根据权利要求2所述的随机数生成装置,其特征在于,所述第一pipeline包括多个级联的运算子电路;所述运算子电路包括多个并行的数据变形模块;
    所述数据变形模块用于接收第一数据、第二数据、第三数据、第一设定值以及第二设定值,将所述第一数据和所述第一设定值的积的低位作为第一输出数据;将所述第二数据和所述第三数据异或后的结果,与,所述第一数据和所述第一设定值的积的高位,异或后作为第二输出数据;
    所述数据变形模块还用于将所述第三数据与所述第二设定值之和作为第三输出数据;或者,除最后一级中所述数据变形模块外,每级中所述数据变形模块还用于将所述第三数据与所述第二设定值之和作为第三输出数据;
    前一级中所述数据变形模块的所述第一输出数据、所述第二输出数据以及所述第三输出数据,分别作为后一级中所述数据变形模块的所述第二数据、所述第一数据以及所述第三数据;
    其中,所述随机数种子的至少一个比特作为第一级所述运算子电路的所述第三数据;最后一级所述运算子电路的所述第一输出数据和所述第二输出数据作为所述第一pipeline生成的随机数。
  4. 根据权利要求1-3任一项所述的随机数生成装置,其特征在于,所述至少一个生成器还包括第二生成器;
    所述第二生成器包括种子初始化发生子电路、状态旋转子电路以及输出子电路;
    所述种子初始化发生子电路用于根据所述随机数种子进行初始化,生成包括多个初始值的旋转链;
    所述状态旋转子电路包括多条并行的第二流水线(pipeline),所述多条并行的第二pipeline用于对所述旋转链进行旋转;
    所述输出子电路包括至少一条输出线,所述至少一条输出线用于对所述状态旋转子电路的输出进行变形处理,生成所述多个随机数。
  5. 根据权利要求4所述的随机数生成装置,其特征在于,所述种子初始化发生子电路用于接收第四数据、第三设定值、第四设定值以及第五设定值,将所述第四数据右移a位后和所述第四数据异或的结果,与,所述第三设定值,相乘得到的积;再与,所述第四设定值相加后,与,所述第五设定值进行与运算;将与运算的结果作为所述初始化值输出;
    其中,所述第四数据为所述随机数种子或者所述初始化值。
  6. 根据权利要求4所述的随机数生成装置,其特征在于,所述第二pipeline包括奇偶选择模块、奇数生成模块、偶数生成模块以及第二选择器;
    所述奇偶选择模块,用于接收第五数据、第六数据、第六设定值以及第七设定值,将所述第五数据和所述第六设定值进行与运算的结果,与,所述第六数据取模后和所述第七设定值进行与运算的结果,进行或运算并取模,将取模的结果输出至所述第二选择器和所述偶数生成模块;
    所述奇数生成模块,用于接收所述第五数据和第八设定值,将所述第五数据与所述第八设定值进行异或后输出至所述第二选择器;
    所述偶数生成模块,用于接收第七数据和所述奇偶选择模块的输出,将所述奇偶选择模块的输出右移b位后,与,所述第七数据的取模结果,进行异或后输出至所述第二选择器;
    所述第二选择器用于根据所述奇偶选择模块的输出,选择输出所述奇数生成模块或者所述偶数生成模块的输出,以对所述旋转链进行旋转;
    其中,所述第五数据、所述第六数据以及所述第七数据为所述旋转链中的不同数据。
  7. 根据权利要求4所述的随机数生成装置,其特征在于,所述输出线用于接收所述状态旋转子电路的输出、第九设定值以及第十设定值,将所述状态旋转子电路的输出右移c位后与所述状态旋转子电路的输出进行异或;然后将异或结果,与,异或结果左移d位后和所述第九设定值与运算的结果,进行异或;然后将异或结果,与异或结果左移e位后和所述第十设定值与运算的结果,进行异或;然后将异或结果,与,异或结果右移f位的结果,进行异或后作为随机数输出。
  8. 根据权利要求4-7任一项所述的随机数生成装置,其特征在于,所述第二生成器还包括第三选择器、互通寄存器以及第一存储器;
    所述第三选择器,用于接收所述种子初始化发生子电路输出的旋转前的所述旋转链和所述状态旋转子电路输出的旋转后的所述旋转链,在选择控制端的控制下,将旋转前的所述旋转链或旋转后的所述旋转链传输至所述互通寄存器;
    所述互通寄存器,用于接收所述第三选择器输出的所述旋转链,将所述旋转链传输至所述第一存储器,并从所述第一存储器中分批调取所述旋转链中的数据,作为第五数据、第六数据以及第七数据传输至所述第二pipeline;还用于将所述状态旋转子电路的输出传输至所述输出子电路;
    所述第一存储器用于接收并存储所述互通寄存器输出的所述旋转链。
  9. 根据权利要求1-8任一项所述的随机数生成装置,其特征在于,所述随机数生成装置还包括:数据类型转换模块,用于对所述至少一个生成器生成的随机数进行数据类型转换。
  10. 根据权利要求9所述的随机数生成装置,其特征在于,所述数据类型转换模块包括至少一个数据类型转换器;所述数据类型转换器用于将所述至少一个生成器生成的随机数转化为预设数据类型的随机数;
    在所述数据类型转换模块包括多个数据类型转换器的情况下,所述数据类型转换 模块还包括第四选择器,所述第四选择器用于根据第二参数,选择对所述多个数据类型转换器中的一个的结果进行输出;
    其中,所述多个数据类型转换器转换得到的随机数的预设数据类型不同。
  11. 根据权利要求9所述的随机数生成装置,其特征在于,所述随机数生成装置还包括:分布转换模块,用于对所述数据类型转换模块的输出进行分布类型的转换。
  12. 根据权利要求11所述的随机数生成装置,其特征在于,所述分布转换模块包括至少一个分布生成器;所述分布生成器用于将所述数据类型转换模块输出的随机数转化为服从预设分布的随机数;
    在所述分布转换模块包括多个分布生成器的情况下,所述随机数生成装置还包括第五选择器,所述第五选择器用于根据第三参数,选择对所述多个分布生成器中的一个的结果进行输出;
    其中,所述多个分布生成器转换得到的随机数服从的预设分布类型不同。
  13. 根据权利要求12所述的随机数生成装置,其特征在于,所述至少一个分布生成器包括正态分布器,所述正态分布器采用箱式-穆勒(box-muller)算法将所述数据类型转换模块输出的随机数转化为服从正态分布的随机数。
  14. 一种随机数生成方法,其特征在于,包括:
    生成器根据随机数种子同步生成多个随机数;
    在具有多个生成器生成所述多个随机数的情况下,所述随机数生成方法还包括第一选择器根据第一参数,选择输出所述多个生成器中的一个生成的所述多个随机数。
  15. 根据权利要求14所述的随机数生成方法,其特征在于,生成器根据随机数种子同步生成多个随机数,包括:
    第一生成器中多条并行的第一流水线(pipeline)根据所述随机数种子同步生成所述多个随机数。
  16. 根据权利要求14所述的随机数生成方法,其特征在于,生成器根据随机数种子同步生成多个随机数,包括:
    种子初始化发生子电路根据所述随机数种子进行初始化,生成包括多个初始值的旋转链;
    状态旋转子电路中多条并行的第二流水线(pipeline),对所述旋转链进行旋转;
    输出子电路中多条并行的输出线对所述状态旋转子电路的输出进行变形处理,同步生成所述多个随机数。
  17. 根据权利要求14-16任一项所述的随机数生成方法,其特征在于,所述随机数生成方法还包括:数据类型转换模块对所述生成器生成的所述多个随机数进行数据类型转换。
  18. 根据权利要求17所述的随机数生成方法,其特征在于,所述随机数生成方法还包括:分布转换模块对所述数据类型转换模块的输出进行分布类型的转换。
  19. 一种神经网络系统,其特征在于,包括第二存储器和权利要求1-13任一项所述随机数生成装置,所述第二存储器用于存储所述随机数生成装置生成的随机数。
  20. 根据权利要求19所述的神经网络系统,其特征在于,所述第二存储器还用于存储所述随机数生成装置生成的最后一个所述随机数的位标。
  21. 一种芯片,其特征在于,包括基底和权利要求1-13任一项所述随机数生成装置,所述随机数生成装置设置在所述基底上。
  22. 一种随机数生成装置,其特征在于,包括:第二生成器;
    所述第二生成器,包括种子初始化发生子电路、状态旋转子电路以及输出子电路;
    所述种子初始化发生子电路用于根据随机数种子进行初始化,生成包括多个初始值的旋转链;
    所述状态旋转子电路包括多条并行的第二流水线(pipeline),所述多条并行的第二pipeline用于对所述旋转链进行旋转;
    所述输出子电路包括输出线,所述输出线用于对所述状态旋转子电路的输出进行变形处理,生成随机数。
CN202180087448.XA 2021-03-26 2021-03-26 随机数生成装置及生成方法、随机数生成系统、芯片 Pending CN116710890A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/083344 WO2022198652A1 (zh) 2021-03-26 2021-03-26 随机数生成装置及生成方法、随机数生成系统、芯片

Publications (1)

Publication Number Publication Date
CN116710890A true CN116710890A (zh) 2023-09-05

Family

ID=83395092

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180087448.XA Pending CN116710890A (zh) 2021-03-26 2021-03-26 随机数生成装置及生成方法、随机数生成系统、芯片

Country Status (2)

Country Link
CN (1) CN116710890A (zh)
WO (1) WO2022198652A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117390610A (zh) * 2023-12-13 2024-01-12 中国人民解放军国防科技大学 一种身份标识生成方法、系统及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN204883682U (zh) * 2015-08-12 2015-12-16 中国电子科技集团公司第四十一研究所 一种多通道伪随机信号发生器
CN109615370A (zh) * 2018-10-25 2019-04-12 阿里巴巴集团控股有限公司 对象选取方法及装置、电子设备
CN110058843B (zh) * 2019-03-27 2023-03-03 创新先进技术有限公司 伪随机数的生成方法、装置和服务器
CN112328206B (zh) * 2020-11-03 2024-07-23 广州科泽云天智能科技有限公司 面向向量化部件的并行随机数生成方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117390610A (zh) * 2023-12-13 2024-01-12 中国人民解放军国防科技大学 一种身份标识生成方法、系统及装置

Also Published As

Publication number Publication date
WO2022198652A1 (zh) 2022-09-29

Similar Documents

Publication Publication Date Title
TWI804200B (zh) 執行複數的熔合乘-加指令的系統與方法
JP3851115B2 (ja) 暗号回路
EP3362887B1 (en) Generating pseudorandom number sequences by nonlinear mixing of multiple subsidiary pseudorandom number generators
CN112114776A (zh) 一种量子乘法运算方法、装置、电子装置及存储介质
Le et al. Parallel AES algorithm for fast data encryption on GPU
Nagendra et al. Performance improvement of advanced encryption algorithm using parallel computation
CN111796797B (zh) 一种利用ai加速器实现环上多项式乘法计算加速的方法和装置
CN105913118A (zh) 一种基于概率计算的人工神经网络硬件实现装置
JP2019159566A (ja) 計算装置
CN112650471A (zh) 用于处理掩蔽数据的处理器和方法
CN116710890A (zh) 随机数生成装置及生成方法、随机数生成系统、芯片
Pircher et al. Exploring the RISC-V vector extension for the Classic McEliece post-quantum cryptosystem
US7136892B2 (en) Method for multiplying two factors from the Galois field and multiplier for performing the method
CN117692126A (zh) 一种基于低复杂度模乘算法的Paillier同态加密方法及系统
CN112564890A (zh) 一种加速sm4算法的方法、装置、处理器及电子设备
Wu et al. A fast GPU-based implementation for MD5 hash reverse
TW202401243A (zh) 模乘器、安全晶片、電子設備及加密方法
WO2023285830A1 (en) Cryptographic system for post-quantum cryptographic operations
CN118525320A (zh) 用于全同态加密(fhe)应用的密码处理器
CN115809707A (zh) 量子比较运算方法、装置、电子装置及基础算术组件
EP4145355A1 (en) Calculation device
CN115879553B (zh) 量子模数完整乘法运算方法、装置及模数算术组件
CN115344525B (zh) 一种椭圆曲线点加硬件加速方法及装置
CN113971015B (zh) Uia2计算电路及其数据处理方法、芯片、电子设备及存储介质
Mirzaee et al. Design and Implementation of an ASIP-Based Crypto Processor for IDEA and SAFER K-64.

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