Releasing the GIL to take advantage of multi-core 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.
The code in this recipe has been written for GCC on Ubuntu. It can be adapted to other systems with minor changes to the %%cython
options.
How to do it...
Our simple ray tracing engine implementation is embarrassingly parallel (see https...