[Numpy-discussion] speed of random number generator compared to Julia

Jaime Fernández del Río jaime.frio at gmail.com
Mon Apr 3 09:44:36 EDT 2017


On Mon, Apr 3, 2017 at 3:20 PM, Pierre Haessig <pierre.haessig at crans.org>
wrote:

> Hello,
> Le 30/03/2017 à 13:31, Pierre Haessig a écrit :
>
> [....]
>
> But how come Julia is 4-5x faster since Numpy uses C implementation for
> the entire process ? (Mersenne Twister -> uniform double -> Box-Muller
> transform to get a Gaussian https://github.com/numpy/
> numpy/blob/master/numpy/random/mtrand/randomkit.c). Also I noticed that
> Julia uses a different algorithm (Ziggurat Method from Marsaglia and Tsang
> , https://github.com/JuliaLang/julia/blob/master/base/random.jl#L700) but
> this doesn't explain the difference for uniform rng.
>
> Any ideas?
>

This
<https://github.com/JuliaLang/julia/blob/7fb758a275a0b4cf0e3f4cbf482c065cb32f0011/doc/src/stdlib/numbers.md#L116>
says
that Julia uses this library
<http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/#dSFMT>, which is
different from the home brewed version of the Mersenne twister in NumPy.
The second link I posted claims their speed comes from generating double
precision numbers directly, rather than generating random bytes that have
to be converted to doubles, as is the case of NumPy through this magical
incantation
<https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/randomkit.c#L514>.
They also throw the SIMD acronym around, which likely means their random
number generation is parallelized.

My guess is that most of the speed-up comes from the SIMD parallelization:
the Mersenne algorithm does a lot of work
<https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/randomkit.c#L221>
to
produce 32 random bits, so that likely dominates over a couple of
arithmetic operations, even if divisions are involved.

Jaime

Do you think Stackoverflow would be a better place for my question?
>
> best,
>
> Pierre
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
>


-- 
(\__/)
( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes
de dominación mundial.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20170403/4aaf0f0c/attachment.html>


More information about the NumPy-Discussion mailing list