CPU/GPU Multiprecision Mandelbrot Set
Eric Bainville - Dec 2009Simple C implementation
The color of a pixel p=(IX,IY) usually corresponds to the number of iterations required to exit from the (O,2) disc for the corresponding value C(p) of the parameter. This algorithm is trivially implemented as follows:
for (int iy=0;iy<height;iy++) for (int ix=0;ix<width;ix++) { double cx = leftX + ix * stepX; double cy = topY - iy * stepY; // Z = X+I*Y double x = 0; double y = 0; int it; for (it=0;it<maxIt;it++) { double x2 = x*x; double y2 = y*y; // Stop iterations when |Z| > 2 if (x2 + y2 > 4.0) break; double twoxy = 2.0*x*y; // Z = Z^2 + C x = x2 - y2 + cx; y = twoxy + cy; } // Here IT is in 0..ITMAX, get the corresponding COLOR unsigned int color = getColor(it,maxIt); // Store the color in the A array a[ix+iy*width] = color; }
width,height are the dimensions of the output image. leftX,topY are the coordinates of the top-left pixel of the image in the complex plane, and stepX,stepY are the increments between horizontal and vertical pixels. a is an array of width*height unsigned integers receiving the 32-bit RGBA colors. maxIt is the max number of iterations.
In the next page, we see how this code translates to an OpenCL kernel.
GPU Mandelbrot Set : Introduction | Top of Page | GPU Mandelbrot Set : Simple OpenCL Code |