nullprogram.com/blog/2007/10/01/
The project page with source code and documentation,
This the the second part of my post about clusters. Finally, here are
some more pretty pictures and video to look at! It is an extremely
parallel Mandelbrot set generator written in C.
This image was generated by my program on a cluster at my university,
and my favorite image generated so far.
The reason I built my own cluster was to run this program. The
generator forks off an arbitrary number of jobs (defined by a config
file) to generate a single fractal, or a fractal zoom sequence. The
cluster then automatically moves these jobs around to different nodes,
making the fractal generation fast.
I wrote it with two goals in mind. I wanted it to be parallel so that
it could easily take advantage of a cluster. I also wanted it to not
use any external libraries. This is because a cluster is often a
shared resource. Programs and libraries may only be available if
installed by an administrator, meaning that extra libraries like
libpng may not be available. For inter-process communication
the generator uses simple pipes. So all you need here is a POSIX
interface to the operating system, rather than some MPI
implementation.
I used Andy Owen’s handy bitmap library for writing out
the bitmaps. I don’t know how I could have done without it!
The only thing you need in order to run the fractal generator is a C
compiler and a POSIX interface (GNU/Linux, *BSD, and other Unix-like
systems). Extra capabilities are available if gzip is installed.
I use GNU Xaos to find good locations in the set for zoom
sequences. It lets you zoom in real-time. Once I find a good spot, I
tell my generator to render some nice images as a zoom sequence to it.
Sometime I hope to write in an algorithm for auto-zooming. This way
the generator could create zoom sequences automatically for hours on
end. Xaos already has this capability for its real-time zooming.
An interesting thing I discovered: for these fractals at least, the
gzipped bitmaps are (barely) smaller than the equivalent PNG versions.
For the image above, the PNG version (produced by ImageMagick
defaults) is 11586185 bytes. The gzipped bitmap version is 11586074
bytes. Plus, gzipping is faster. On my laptop, BMP to PNG
(ImageMagick’s convert) took 13.678s. Gzipping (default options) took
5.167s. I am as surprised as you are.