您现在的位置是:新闻 >>正文

开源随机数生成器库OpenRNG助力完成移植到Arm渠道时的最佳功能

新闻15人已围观

简介作者:Arm。工程部资深软件。工程师。Kevin Mooney。OpenRNG 是一个开源随机数生成器 (RNG) 库,开端随 Arm Pe。rf。or。mance Libraries 24.04 一 ...

作者:Arm。工程部资深软件。工程师。Kevin Mooney。

OpenRNG 是一个开源随机数生成器 (RNG) 库,开端随 Arm Pe。rf。or。mance Libraries 24.04 一起发布。OpenRNG 旨在进步。人工智能。(。AI。) 结构功用,有助于科学运用及金融软件的开发,因而广受欢迎。而在上一年晚些时候,Arm 推出了 OpenRNG 的首个开源版别。

OpenRNG 可直接代替。英特尔。矢量核算库 (Vector Statist。ic。s Library, VSL) 的随机数生成组件,开发者。然后能够更轻松地将运用移植到 Arm 渠道。VSL 是 OneMKL 的一部分,专为 x86 架构。处理器。而规划。OpenRNG 有助于进步功用,例如与 Arm 渠道上已有完成比较,OpenRNG 仅需很少的代码改动,就使 PyTorch 的 Dropout 层的功用进步了 44 倍。OpenRNG 的功用也较。 C++。规范库进步了 2.7 倍。

尽管起先的优化是针对根据 Arm 架构的体系,但咱们的方针是将 OpenRNG 开展成为跨渠道项目,因而咱们欢迎针对任何架构的补丁。

英特尔依照常识同享答应协议向咱们敞开了这个。接口。。该答应协议使咱们能够为根据 Arm 架构体系的用户完成这一功用,然后在不修正代码的状况下完成不同架构之间软件的可移植性。

源代码现已公开在 Arm 的 GitLab 上,可查阅 Arm Performance Libraries 参阅攻略获取相关。信息。

随机数为什么有用。

随机数在各种运用中都非常重要,可用于。模仿。本质上不行猜测的天然进程。例如,在物理学中,随机数常用于树立随机模型,模仿确认性模型无法处理的问题;在金融范畴,随机数常用于模仿金融市场;在游戏中则常用于完成 AI。

物理进程和金融市场扑朔迷离,触及许多输入,不行能进行彻底的了解、建模和猜测。而一些输入被视为随机变量,需求快速、可重复地生成;银行在核算危险敞口时,不应该由于从头运转相同的模型得到不同的随机数而发生变化。

为游戏开发 AI 时,行为动作应是不行猜测的,因而要引进随机性。随机数生成的速度越快,一起生成的 AI 就越多。相同,多人游戏需求在多台设备上生成相同的随机数。不同玩家应该在同一个方位看到敌人,随机性很重要。

库里有什么?

OpenRNG 完成了多种生成器和散布办法。生成器。算法。可生成“看似随机”并具有某些核算特性的序列,咱们将在下文进行评论。散布办法会将序列映射到常见的概率散布概念,如高斯散布或二项散布。

OpenRNG 还供给仿制和保存序列的东西,以及在不同线程间分发序列的东西。这些东西可完成高效的多线程处理和检查点等功用。

随机数生成器。

OpenRNG 完成了三种类型的随机数生成器:伪随机数生成器、准随机数生成器、非确认性随机数生成器。

伪随机数生成器 (PRNG) 算法生成的数字序列在核算学上看似随机,但却能重复生成。PRNG 一般能经过许多随机性核算测验,但一旦知道当时序列中的方位,就能确认下一个数字;这便是咱们说它看似随机的原因。OpenRNG 选用了多种类型的 PRNG,如线性同余生成器 (LCG)、多重递归生成器 (MRG)、梅森旋转算法(如 MT19937)和根据计数器的生成器(如 Philox)。

准随机数生成器 (QRNG) 的算法可生成低差异序列。该类东西无法经过随机性核算测验,但能生成在 n 维超立方体上均匀散布的 n 维向量,然后均匀地填充空间。OpenRNG 供给用于生成低差异序列的 SOBOL 生成器。

大多数现代硬件都装备了非确认性随机数生成器,也称真随机数生成器 (TRNG),OpenRNG 为这些生成器供给了一个接口,以便开发者拜访。TRNG 能够供给高质量随机数,其序列来自于外部。TRNG 一般比 PRNG 速度慢,且序列不行再现。

咱们极力保证运用的生成器和初始化办法与 oneMKL 文档中界说的相同。这意味着,在或许的状况下,OpenRNG 和 oneMKL 之间的序列能够按位替换。

概率散布。

除了完成 RNG 之外,OpenRNG 还供给了将随机序列转换为常见概率散布的快捷办法。OpenRNG 能够生成具有常见概率散布(离散和接连)的随机数。

接连散布是实数的概率散布,例如 0 和 1 之间的可表明小数。接连散布能够恳求为单精度或双精度浮点数。OpenRNG 支撑多种接连散布,包括均匀散布、高斯散布和指数散布。

离散散布是仅限于整数的概率散布。OpenRNG 选用了常见的离散散布,如均匀散布、泊松散布、二项散布和伯努利散布。

OpenRNG 散布生成的切当值或许与 oneMKL 的值略有不同,由于两个库之间各种操作的精度不同。

高效多线程。

许多运用都需求生生长序列的随机数。多线程运转时,具有不同的独立序列非常重要。OpenRNG 有两种不同的办法可供挑选:越过和跳动。

越过法让序列越过必定数量的元素。此刻功率至关重要,这种办法能够越过许多元素,例如 2 的 32 次方的倍数,独自生成这些元素会发生很多不必要的开支。

跳动法适用于线程交织耗费元素的状况。例如,在有 n 个线程的状况下,第 k 个线程从“大局”序列的第 k 个元素开端,则该线程序列中的第 i 个元素便是“大局”序列的第 (k + i*n) 个元素。

功用。

C++ 规范库。

C++ 规范库供给三种类型的生成器:线性同余生成器、梅森旋转算法生成器和带进位减法生成器。OpenRNG 未选用带进位减法生成器,而是选用了线性同余生成器和梅森旋转算法,只需稍加装备,咱们就能比较 OpenRNG 和 C++ 规范库中的 MCG31 和 MT19937 完成状况。C++ 规范库和 OpenRNG 包括多种常见散布,咱们挑选了两种广泛运用的散布,即均匀散布和高斯散布(也称正态散布)。

下图展现了 AWS Graviton3 上运用 GCC 14 和 -O3 的基准数据。基准测验包括重复填充一个包括 5,000 个元素的缓冲区,并核算每个库在热门循环中花费的总时刻的份额。咱们对所选生成器和散布的一切组合重复执行了基准测验。

关于均匀散布,大部分运转时刻都用于生成随机序列。组合运用 MCG31 生成器与均匀散布完成了更大地提速比,比率高达 2.73。

关于高斯散布,大部分运转时刻都用于将随机序列转换为高斯散布。与 libst。dc。++ 比较,运用 MT19937 生成器的最大提速比为 1.88。

柱状图展现了 OpenRNG 相较于 C++ 规范库的功用优势。每个柱形的高度是运用两个库生成随机数所花时刻的比率。大于 1 表明 OpenRNG 的速度更快。

PyTorch。

下图显现了在 Arm 渠道上运用 VSL RNG 进行 PyTorch。 机器学习。(ML) 取得的优势。PyTorch 能够装备为在 Dropout 层运用 OpenRNG 的 VSL RNG,从伯努利散布中提取随机值。例如,当批次巨细为 16,输入张量为 [16, 128, 3072] 时,与运用 PyTorch 中的默许 RNG 比较,次序执行时功用进步了四倍。此外,当启用 VSL 接口时,PyTorch 会运用越过法来并行生成随机值。假如不运用 VSL,随机值始终是按次序生成的,没有并行。运用 16 个线程为输入张量 [16, 128, 3072] 完成并行处理能够进一步进步功用,在 Dropout 层中运用 OpenRNG 的速度比默许的速度快 44 倍左右。

柱状图展现了结合 OpenRNG 与 PyTorch 的功用优势。每个柱形的高度表明均匀耗时。装备速度越快,高度越低。

欢迎供给补丁。

咱们很快乐能发布 OpenRNG 并涵盖了 VSL 的大部分功用,但仍有一些范畴需进一步开发。现在某些功用还未完成。此外,现在一切的优化都专门针对根据 Arm 架构的体系。咱们期望 OpenRNG 能成为一个跨渠道项目,因而咱们欢迎针对任何架构的新参阅完成和功用优化补丁。假如你想提交自己的开发作业、陈述过错、提交功用恳求或其他任何事项,请在 GitLab 上提出问题并与咱们联络。

Arm Performance Libraries 未来将持续包括 OpenRNG,并在 GitLab 中符号发布的代码。OpenRNG 库房将坚持敞开,以供开发者运用。GitLab 上有奉献攻略。咱们已极力保证 OpenRNG 选用 MIT 和 Apache-2.0 技能授权答应,让用户能够将源代码添加到自己的项目中,而不会遭到繁琐的约束。

相关链接:

[1]Arm GitLab:https://gitlab.arm.com/libraries/openrng。

[2] Arm Performance Libraries 参阅攻略:

https://developer.arm.com/documenta。ti。on/101004/2404/Open-Random-Number-Generation--OpenRNG--Reference-Guide。

[3] Arm GitLab 发问页面:

https://gitlab.arm.com/libraries/openrng/issues。

[4]奉献攻略:

https://gitlab.arm.com/libraries/openrng/-/blob/main/CONTRIBUTING.md。

* Arm。 原创。文章。

内容来源:https://a02.webvip.vn/app-1/tú lơ khơ và bạn gái,http://chatbotjud.saude.mg.gov.br/app-1/game-70-bet

Tags:

系统发生错误

系统发生错误

您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ]

[ 错误信息 ]

页面发生异常错误,系统设置开启调试模式后,刷新本页查看具体错误!