Releasing the GIL to take advantage of multicore processors with Cython and OpenMP
As we have seen in this chapter's introduction, CPython's GIL prevents pure Python code from taking advantage of multi-core processors. With Cython, we have a way to release the GIL temporarily in a portion of the code in order to enable multi-core computing. This is done with OpenMP, a multiprocessing API that is supported by most C compilers.
In this recipe, we will see how to parallelize the previous recipe's code on multiple cores.
Getting ready
To enable OpenMP in Cython, you just need to specify some options to the compiler. There is nothing special to install on your computer besides a good C compiler. See the instructions in this chapter's introduction for more details.
In this recipe, we use Microsoft's Visual C++ compiler on Windows, but the code can be easily adapted to other systems.
How to do it…
Our simple ray tracing engine implementation is embarrassingly parallel; there is a main loop over all pixels...