Help optimizing code?

Uknown sireeshkodali1 at gmail.com
Tue Jan 2 07:17:23 UTC 2018


On Monday, 1 January 2018 at 15:09:53 UTC, Lily wrote:
> I started learning D a few days ago, coming from some very 
> basic C++ knowledge, and I'd like some help getting a program 
> to run faster. The code is here: 
> https://github.com/IndigoLily/D-mandelbrot/blob/master/mandelbrot.d
>
> Right now it runs slower than my JavaScript Mandelbrot renderer 
> on the same quality settings, which is clearly ridiculous, but 
> I don't know what to do to fix it. Sorry for the lack of 
> comments, but I can never tell what will and won't be obvious 
> to other people.

Hey! I happened to also write a Mandelbrot generator in D. It was 
based of the version given on rossetacode for C[0].
Some of the optimizations I used were:

0. Use LDC. It is significantly faster.
1. Utilize the fact that the Mandelbrot  set is symmetric about 
the X axis.You can half the time taken.
2. Use std.parallelism for using multiple cores on the CPU
3. Use @fastmath of LDC
4. imageData.reserve(width * height * 3) before the loop
5. [1] is a great article on this specific topic

For reference, on my 28W 2 core i5, a 2560x1600 image took about 
2 minutes to
render, with 500,000 iterations per pixel.
[2] is my own version.

[0]: 
https://rosettacode.org/wiki/Mandelbrot_set#PPM_non_interactive
[1]: 
https://randomascii.wordpress.com/2011/08/13/faster-fractals-through-algebra/
[2]: 
https://github.com/Sirsireesh/Khoj-2017/blob/master/Mandelbrot-set/mandlebrot.d


More information about the Digitalmars-d-learn mailing list