[Numpy-discussion] The NumPy Mandelbrot code 16x slower than Fortran
Sebastian Haase
seb.haase at gmail.com
Sun Jan 22 06:13:32 EST 2012
How does the algorithm and timing compare to this one:
http://code.google.com/p/priithon/source/browse/Priithon/mandel.py?spec=svna6117f5e81ec00abcfb037f0f9da2937bb2ea47f&r=a6117f5e81ec00abcfb037f0f9da2937bb2ea47f
The author of original version is Dan Goodman
# FAST FRACTALS WITH PYTHON AND NUMPY
-Sebastian Haase
2012/1/22 Ondřej Čertík <ondrej.certik at gmail.com>
>
> Hi,
>
> I read the Mandelbrot code using NumPy at this page:
>
> http://mentat.za.net/numpy/intro/intro.html
>
> but when I run it, it gives me integer overflows. As such, I have
> fixed the code, so that it doesn't overflow here:
>
> https://gist.github.com/1655320
>
> and I have also written an equivalent Fortran program.
>
> You can compare both source codes to see
> that that it is pretty much one-to-one translation.
> The main idea in the above gist is to take an
> algorithm written in NumPy, and translate
> it directly to Fortran, without any special
> optimizations. So the above is my first try
> in Fortran. You can plot the result
> using this simple script (you
> can also just click on this gist to
> see the image there):
>
> https://gist.github.com/1655377
>
> Here are my timings:
>
> Python Fortran Speedup
> Calculation 12.749 00.784 16.3x
> Saving 01.904 01.456 1.3x
> Total 14.653 02.240 6.5x
>
> I save the matrices to disk in an ascii format,
> so it's quite slow in both cases. The pure computation
> is however 16x faster in Fortran (in gfortran,
> I didn't even try Intel Fortran, that will probably be
> even faster).
>
> As such, I wonder how the NumPy version could be sped up?
> I have compiled NumPy with Lapack+Blas from source.
>
> Would anyone be willing to run the NumPy version? Just copy+paste
> should do it.
>
> If you want to run the Fortran version, the above gist uses
> some of my other modules that I use in my other programs, my goal
> was to see how much more complicated the Fortran code gets,
> compared to NumPy. As such, I put here
>
> https://gist.github.com/1655350
>
> a single file
> with all the dependencies, just compile it like this:
>
> gfortran -fPIC -O3 -march=native -ffast-math -funroll-loops mandelbrot.f90
>
> and run:
>
> $ ./a.out
> Iteration 1
> Iteration 2
> ...
> Iteration 100
> Saving...
> Times:
> Calculation: 0.74804599999999999
> Saving: 1.3640850000000002
> Total: 2.1121310000000002
>
>
> Let me know if you figure out something. I think the "mask" thing is
> quite slow, but the problem is that it needs to be there, to catch
> overflows (and it is there in Fortran as well, see the
> "where" statement, which does the same thing). Maybe there is some
> other way to write the same thing in NumPy?
>
> Ondrej
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
More information about the NumPy-Discussion
mailing list