Skip to content

Instantly share code, notes, and snippets.

@harrism
Last active January 28, 2022 00:37
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save harrism/f5707335f40af9463c43 to your computer and use it in GitHub Desktop.
Save harrism/f5707335f40af9463c43 to your computer and use it in GitHub Desktop.
CUDA Python Mandelbrot set iPython Notebook using Anaconda Accelerate.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "A NumbaPro Mandelbrot Example"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"A NumbaPro Mandelbrot Example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook was written by Mark Harris based on code examples from Continuum Analytics that I modified somewhat. This is an example that demonstrates accelerating a Mandelbrot fractal computation using \"CUDA Python\" with NumbaPro.\n",
"\n",
"Let's start with a basic Python Mandelbrot set. We use a numpy array for the image and display it using pylab imshow."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from pylab import imshow, show\n",
"from timeit import default_timer as timer"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 24
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `mandel` function performs the Mandelbrot set calculation for a given (x,y) position on the imaginary plane. It returns the number of iterations before the computation \"escapes\"."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def mandel(x, y, max_iters):\n",
" \"\"\"\n",
" Given the real and imaginary parts of a complex number,\n",
" determine if it is a candidate for membership in the Mandelbrot\n",
" set given a fixed number of iterations.\n",
" \"\"\"\n",
" c = complex(x, y)\n",
" z = 0.0j\n",
" for i in range(max_iters):\n",
" z = z*z + c\n",
" if (z.real*z.real + z.imag*z.imag) >= 4:\n",
" return i\n",
"\n",
" return max_iters"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 35
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`create_fractal` iterates over all the pixels in the image, computing the complex coordinates from the pixel coordinates, and calls the `mandel` function at each pixel. The return value of `mandel` is used to color the pixel."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def create_fractal(min_x, max_x, min_y, max_y, image, iters):\n",
" height = image.shape[0]\n",
" width = image.shape[1]\n",
"\n",
" pixel_size_x = (max_x - min_x) / width\n",
" pixel_size_y = (max_y - min_y) / height\n",
" \n",
" for x in range(width):\n",
" real = min_x + x * pixel_size_x\n",
" for y in range(height):\n",
" imag = min_y + y * pixel_size_y\n",
" color = mandel(real, imag, iters)\n",
" image[y, x] = color"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 36
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next we create a 1024x1024 pixel image as a numpy array of bytes. We then call `create_fractal` with appropriate coordinates to fit the whole mandelbrot set."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"image = np.zeros((1024, 1536), dtype = np.uint8)\n",
"start = timer()\n",
"create_fractal(-2.0, 1.0, -1.0, 1.0, image, 20) \n",
"dt = timer() - start\n",
"\n",
"print \"Mandelbrot created in %f s\" % dt\n",
"imshow(image)\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Mandelbrot created in 6.921606 s\n"
]
},
{
"output_type": "display_data",
"png": "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\nvXjx4qWf8v/OHc/P08rinAAAAABJRU5ErkJggg==\n"
}
],
"prompt_number": 38
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can play with the coordinates to zoom in on different regions in the fractal."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"create_fractal(-2.0, -1.7, -0.1, 0.1, image, 20) \n",
"imshow(image)\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "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\n"
}
],
"prompt_number": 29
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Faster Execution with Numba"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Numba](https://github.com/numba/numba) is a Numpy-aware dynamic Python compiler based on the popular LLVM compiler infrastructure. \n",
"\n",
"Numba is an Open Source NumPy-aware optimizing compiler for Python sponsored by Continuum Analytics, Inc. It uses the remarkable compiler infrastructure to compile Python syntax to machine code. It is aware of NumPy arrays as typed memory regions and so can speed-up code using NumPy arrays, such as our Mandelbrot functions.\n",
"\n",
"The simplest way to use Numba is to decorate the functions you want to compile with @autojit. Numba will compile them for the CPU (if it can resolve the types used)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numba import autojit\n",
"\n",
"@autojit\n",
"def mandel(x, y, max_iters):\n",
" \"\"\"\n",
" Given the real and imaginary parts of a complex number,\n",
" determine if it is a candidate for membership in the Mandelbrot\n",
" set given a fixed number of iterations.\n",
" \"\"\"\n",
" c = complex(x, y)\n",
" z = 0.0j\n",
" for i in range(max_iters):\n",
" z = z*z + c\n",
" if (z.real*z.real + z.imag*z.imag) >= 4:\n",
" return i\n",
"\n",
" return max_iters\n",
"\n",
"@autojit\n",
"def create_fractal(min_x, max_x, min_y, max_y, image, iters):\n",
" height = image.shape[0]\n",
" width = image.shape[1]\n",
"\n",
" pixel_size_x = (max_x - min_x) / width\n",
" pixel_size_y = (max_y - min_y) / height\n",
" \n",
" for x in range(width):\n",
" real = min_x + x * pixel_size_x\n",
" for y in range(height):\n",
" imag = min_y + y * pixel_size_y\n",
" color = mandel(real, imag, iters)\n",
" image[y, x] = color"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 39
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's run the `@autojit` code and see if it is faster."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"image = np.zeros((1024, 1536), dtype = np.uint8)\n",
"start = timer()\n",
"create_fractal(-2.0, 1.0, -1.0, 1.0, image, 20) \n",
"dt = timer() - start\n",
"\n",
"print \"Mandelbrot created in %f s\" % dt\n",
"imshow(image)\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Mandelbrot created in 0.065591 s\n"
]
},
{
"output_type": "display_data",
"png": "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\nvXjx4qWf8v/OHc/P08rinAAAAABJRU5ErkJggg==\n"
}
],
"prompt_number": 41
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On my desktop computer, the time to compute the 1024x1024 mandelbrot set dropped from 6.92s down to 0.06s. That's a speedup of 115x! The reason this is so much faster is that Numba uses Numpy type information to convert the dynamic Python code into statically compiled machine code, which is many times faster to execute than dynamically typed, interpreted Python code. "
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Even Bigger Speedups with CUDA Python"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Anaconda](https://store.continuum.io/cshop/anaconda/), from Continuum Analytics, is a \"completely free enterprise-ready Python distribution for large-scale data processing, predictive analytics, and scientific computing.\" [Anaconda Accelerate](https://store.continuum.io/cshop/accelerate/) is an add-on for Anaconda that includes the NumbaPro Python compiler.\n",
"\n",
"[NumbaPro](http://docs.continuum.io/numbapro/index.html) is an enhanced Numba that targets multi-core CPUs and GPUs directly from simple Python syntax, providing the performance of compiled parallel code with the productivity of the Python language.\n",
"\n",
"CUDA Python\n",
"-----------\n",
"\n",
"In addition to various types of automatic vectorization and generalized Numpy Ufuncs, NumbaPro also enables developers to access the CUDA parallel programming model using Python syntax. With CUDA Python, you use parallelism explicitly just as in other CUDA languages such as CUDA C and CUDA Fortran. \n",
"\n",
"Let's write a CUDA version of our Python Mandelbrot set. We need to import `cuda` from the `numbapro` module. Then, we need to create a version of the mandel function compiled for the GPU. We can do this without any code duplication by calling `cuda.jit` on the function, providing it with the return type and the argument types, and specifying `device=True` to indicate that this is a function that will run on the GPU *device*.\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numbapro import cuda\n",
"from numba import *\n",
"\n",
"mandel_gpu = cuda.jit(restype=uint32, argtypes=[f8, f8, uint32], device=True)(mandel)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 43
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In CUDA, a *kernel* is a function that runs in parallel using many threads on the device. We can write a kernel version of our mandelbrot function by simply assuming that it will be run by a *grid* of threads. NumbaPro provides the familiar CUDA `threadIdx`, `blockIdx`, `blockDim` and `gridDim` intrinsics, as well as a `grid()` convenience function which evaluates to `blockDim * blockIdx + threadIdx`.\n",
"\n",
"Our example juse needs a minor modification to compute a grid-size stride for the x and y ranges, since we will have many threads running in parallel. We just add these three lines:\n",
"\n",
" startX, startY = cuda.grid(2)\n",
" gridX = cuda.gridDim.x * cuda.blockDim.x;\n",
" gridY = cuda.gridDim.y * cuda.blockDim.y;\n",
"\n",
"And we modify the range in the `x` loop to use `range(startX, width, gridX)` (and likewise for the `y` loop).\n",
"\n",
"We decorate the function with @cuda.jit, passing it the type signature of the function. Since kernels cannot have a return value, we do not need the `restype` argument."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"@cuda.jit(argtypes=[f8, f8, f8, f8, uint8[:,:], uint32])\n",
"def mandel_kernel(min_x, max_x, min_y, max_y, image, iters):\n",
" height = image.shape[0]\n",
" width = image.shape[1]\n",
"\n",
" pixel_size_x = (max_x - min_x) / width\n",
" pixel_size_y = (max_y - min_y) / height\n",
"\n",
" startX, startY = cuda.grid(2)\n",
" gridX = cuda.gridDim.x * cuda.blockDim.x;\n",
" gridY = cuda.gridDim.y * cuda.blockDim.y;\n",
"\n",
" for x in range(startX, width, gridX):\n",
" real = min_x + x * pixel_size_x\n",
" for y in range(startY, height, gridY):\n",
" imag = min_y + y * pixel_size_y \n",
" image[y, x] = mandel_gpu(real, imag, iters)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 46
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Device Memory"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"CUDA kernels must operate on data allocated on the device. NumbaPro provides the cuda.to_device() function to copy a Numpy array to the GPU. \n",
"\n",
" d_image = cuda.to_device(image)\n",
"\n",
"The return value (`d_image`) is of type DeviceNDArray, which is a subclass of numpy.ndarray, and provides the `to_host()` function to copy the array back from GPU to CPU memory\n",
"\n",
" d_image.to_host()"
]
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Launching Kernels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To launch a kernel on the GPU, we must configure it, specifying the size of the grid in blocks, and the size of each thread block. For a 2D image calculation like the Mandelbrot set, we use a 2D grid of 2D blocks. We'll use blocks of 32x8 threads, and launch 32x16 of them in a 2D grid so that we have plenty of blocks to occupy all of the multiprocessors on the GPU.\n",
"\n",
"Putting this all together, we launch the kernel like this."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"gimage = np.zeros((1024, 1536), dtype = np.uint8)\n",
"blockdim = (32, 8)\n",
"griddim = (32,16)\n",
"\n",
"start = timer()\n",
"d_image = cuda.to_device(gimage)\n",
"mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20) \n",
"d_image.to_host()\n",
"dt = timer() - start\n",
"\n",
"print \"Mandelbrot created on GPU in %f s\" % dt\n",
"\n",
"imshow(gimage)\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Mandelbrot created on GPU in 0.003409 s\n"
]
},
{
"output_type": "display_data",
"png": "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\nvXjx4qWf8v/OHc/P08rinAAAAABJRU5ErkJggg==\n"
}
],
"prompt_number": 73
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You may notice that when you ran the above code, the image was generated almost instantly. On the NVIDIA Tesla K20c GPU installed in my desktop, it ran in 311 milliseconds, which is an additional 19.3x speedup over the `@autojit` (compiled CPU) code, or a total of over 2000x faster than interpreted Python code."
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment