【问题标题】:Non-recursive random number generator非递归随机数生成器
【发布时间】:2019-08-03 03:13:35
【问题描述】:

我已经搜索了伪 RNG 算法,但我能找到的似乎都是通过使用以前的结果作为种子来生成下一个数字。有没有办法以非递归方式生成它们?

我需要这个的场景是在 OpenCL 并发编程期间,每个线程/像素需要一个独立的 RNG。我尝试使用BIG_NUMBER + work_id 为它们播种,但结果中有强烈的视觉模式。我尝试了几种不同的 RNG 算法,都遇到了这个问题。显然,它们仅在您以递归方式生成时保证数字是独立的,但在您使用序列号作为种子时则不能。

所以我的问题是:我可以从一个序列号数组中生成一个随机数数组,每个数字独立且恒定的时间吗?还是在数学上是不可能的?

作为我的 openCL 问题的解决方案,我可以先递归地预先生成大量随机数并存储在 GPU 内存中,然后使用种子作为索引来使用它们。但我对上面的问题很好奇,因为根据我对混沌理论的非常简单的理解,通过一堆溢出和截止似乎很有可能。

【问题讨论】:

    标签: random concurrency opencl random-seed


    【解决方案1】:

    我可以从一个序列号数组中生成一个随机数数组,每个数字独立且恒定的时间吗?还是在数学上是不可能的?

    当然可以 - 在计数模式下使用分组密码。它通常被称为Counter based RNG,第一个被广泛使用的是Fortuna RNG

    【讨论】:

    • 正是我正在寻找的东西,在这些链接之后我最终借用了一个实现here,输出像素看起来完全随机化。
    • @extrAme Hot cipher/hash 现在好像是 ChaCha20,你可能想看看它:en.wikipedia.org/wiki/Salsa20#ChaCha_variant
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2011-11-24
    • 2011-07-03
    • 1970-01-01
    • 2022-11-14
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多