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 |
