NumPy has a few import-time, compile-time, or runtime options which change the global behaviour. Most of these are related to performance or for debugging purposes and will not be interesting to the vast majority of users.
NumPy itself is normally intentionally limited to a single thread during function calls, however it does support multiple Python threads running at the same time. Note that for performant linear algebra NumPy uses a BLAS backend such as OpenBLAS or MKL, which may use multiple threads that may be controlled by environment variables such as OMP_NUM_THREADS depending on what is used. One way to control the number of threads is the package threadpoolctl
OMP_NUM_THREADS
When working with very large arrays on modern Linux kernels, you can experience a significant speedup when transparent hugepage is used. The current system policy for transparent hugepages can be seen by:
cat /sys/kernel/mm/transparent_hugepage/enabled
When set to madvise NumPy will typically use hugepages for a performance boost. This behaviour can be modified by setting the environment variable:
madvise
NUMPY_MADVISE_HUGEPAGE=0
or setting it to 1 to always enable it. When not set, the default is to use madvise on Kernels 4.6 and newer. These kernels presumably experience a large speedup with hugepage support. This flag is checked at import time.
1
The array function protocol which allows array-like objects to hook into the NumPy API is currently enabled by default. This option exists since NumPy 1.16 and is enabled by default since NumPy 1.17. It can be disabled using:
NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0
See also numpy.class.__array_function__ for more information. This flag is checked at import time.
numpy.class.__array_function__
The compile-time environment variables:
NPY_RELAXED_STRIDES_DEBUG=0 NPY_RELAXED_STRIDES_CHECKING=1
control how NumPy reports contiguity for arrays. The default that it is enabled and the debug mode is disabled. This setting should always be enabled. Setting the debug option can be interesting for testing code written in C which iterates through arrays that may or may not be contiguous in memory. Most users will have no reason to change these; for details see the memory layout documentation.
Within NumPy 1.20 it is possible to enable the new experimental casting implementation for testing purposes. To do this set:
NPY_USE_NEW_CASTINGIMPL=1
Setting the flag is only useful to aid with NumPy developement to ensure the new version is bug free and should be avoided for production code. It is a helpful test for projects that either create custom datatypes or use for example complicated structured dtypes. The flag is expected to be removed in 1.21 with the new version being always in use.
numpy.typing
numpy.distutils