0

我目前正在实施 George Marsaglia 的 Ziggurat 随机数生成器的一个版本。尽管它被认为是生成高质量正态分布随机数生成器的最快方法之一,但它充满了循环控制代码(即循环中间的返回语句、if 语句、分支等),它使多次调用标准 C 函数,如 exp() 和 log()。更不用说无限循环了。

这使得编译器无法流水线化的代码。最终,我觉得一个基本的方法,比如直接使用中心极限定理,最终可能会更快,因为它可以很容易地流水线化。不幸的是,它不适合高斯分布的尾部,因此它不适合我的应用程序。

这里有没有人对如何减少控制代码和函数调用有任何想法。我目前正在使用Colin Green 的我移植到 C 的算法的实现。我的底层统一生成器是 Tiny Mersenne Twister(所以请不要像我看到其他人那样告诉我使用 MT,我已经那里。这个讨论是针对正态分布的RNG,而不是均匀的RNG)。

4

1 回答 1

2

您可以在 这里查看我的 C 实现。main 函数只有 20 多行代码,所以应该很容易展开循环。它还使您可以选择使用整数或浮点比较,以您的机器上更快的为准。您可以插入任何后端 RNG。

于 2013-07-24T21:38:56.873 回答