Pythran as a Numpy backend#
Using the flag --np-pythran, it is possible to use the Pythran numpy
implementation for numpy related operations. One advantage to use this backend
is that the Pythran implementation uses C++ expression templates to save memory
transfers and can benefit from SIMD instructions of modern CPU.
This can lead to really interesting speedup in some cases, going from 2 up to 16, depending on the targeted CPU architecture and the original algorithm.
Please note that this feature is experimental.
Usage example with setuptools#
You first need to install Pythran. See its documentation for more information.
Then, simply add a cython: np_pythran=True directive at the top of the
Python files that needs to be compiled using Pythran numpy support.
Here is an example of a simple setup.py file using setuptools:
from setuptools import setup
from Cython.Build import cythonize
import numpy
import pythran
setup(
name = "My hello app",
ext_modules = cythonize('hello_pythran.pyx'),
include_dirs = [numpy.get_include(), pythran.get_include()]
)
Then, with the following header in hello_pythran.pyx:
# cython: np_pythran=True
hello_pythran.pyx will be compiled using Pythran numpy support.
Please note that Pythran can further be tweaked by adding settings in the
$HOME/.pythranrc file. For instance, this can be used to enable Boost.SIMD support.
See the Pythran user manual for
more information.