2.5. Environment variables

Numba allows its behaviour to be changed by using environment variables. Unless otherwise mentioned, those variables have integer values and default to zero.

2.5.1. Errors and warnings display

NUMBA_WARNINGS

If set to non-zero, printout of Numba warnings is enabled, otherwise the warnings are suppressed. The warnings can give insight into the compilation process.

2.5.2. Debugging

These variables influence what is printed out during compilation of JIT functions.

NUMBA_DEBUG

If set to non-zero, print out all possible debugging information during function compilation. Finer-grained control can be obtained using other variables below.

NUMBA_DEBUG_FRONTEND

If set to non-zero, print out debugging information during operation of the compiler frontend, up to and including generation of the Numba Intermediate Representation.

NUMBA_DEBUG_TYPEINFER

If set to non-zero, print out debugging information about type inference.

NUMBA_DEBUG_CACHE

If set to non-zero, print out information about operation of the JIT compilation cache.

NUMBA_TRACE

If set to non-zero, trace certain function calls (function entry and exit events, including arguments and return values).

NUMBA_DUMP_BYTECODE

If set to non-zero, print out the Python bytecode of compiled functions.

NUMBA_DUMP_CFG

If set to non-zero, print out information about the Control Flow Graph of compiled functions.

NUMBA_DUMP_IR

If set to non-zero, print out the Numba Intermediate Representation of compiled functions.

NUMBA_DUMP_ANNOTATION

If set to non-zero, print out types annotations for compiled functions.

NUMBA_DUMP_LLVM

Dump the unoptimized LLVM assembler source of compiled functions. Unoptimized code is usually very verbose; therefore, NUMBA_DUMP_OPTIMIZED is recommended instead.

NUMBA_DUMP_FUNC_OPT

Dump the LLVM assembler source after the LLVM “function optimization” pass, but before the “module optimization” pass. This is useful mostly when developing Numba itself, otherwise use NUMBA_DUMP_OPTIMIZED.

NUMBA_DUMP_OPTIMIZED

Dump the LLVM assembler source of compiled functions after all optimization passes. The output includes the raw function as well as its CPython-compatible wrapper (whose name begins with wrapper.). Note that the function is often inlined inside the wrapper, as well.

NUMBA_DEBUG_ARRAY_OPT

Dump debugging information related to the processing associated with the parallel=True jit decorator option.

NUMBA_DEBUG_ARRAY_OPT_RUNTIME

Dump debugging information related to the runtime scheduler associated with the parallel=True jit decorator option.

NUMBA_DEBUG_ARRAY_OPT_STATS

Dump statistics about how many operators/calls are converted to parallel for-loops and how many are fused together, which are associated with the parallel=True jit decorator option.

NUMBA_DUMP_ASSEMBLY

Dump the native assembler code of compiled functions.

2.5.3. Compilation options

NUMBA_OPT

The optimization level; this option is passed straight to LLVM.

Default value: 3

NUMBA_LOOP_VECTORIZE

If set to non-zero, enable LLVM loop vectorization.

Default value: 1 (except on 32-bit Windows)

NUMBA_ENABLE_AVX

If set to non-zero, enable AVX optimizations in LLVM. This is disabled by default on Sandy Bridge and Ivy Bridge architectures as it can sometimes result in slower code on those platforms.

NUMBA_COMPATIBILITY_MODE

If set to non-zero, compilation of JIT functions will never entirely fail, but instead generate a fallback that simply interprets the function. This is only to be used if you are migrating a large codebase from an old Numba version (before 0.12), and want to avoid breaking everything at once. Otherwise, please don’t use this.

NUMBA_DISABLE_JIT

Disable JIT compilation entirely. The jit() decorator acts as if it performs no operation, and the invocation of decorated functions calls the original Python function instead of a compiled version. This can be useful if you want to run the Python debugger over your code.

NUMBA_CPU_NAME and NUMBA_CPU_FEATURES

Override CPU and CPU features detection. By setting NUMBA_CPU_NAME=generic, a generic CPU model is picked for the CPU architecture and the feature list (NUMBA_CPU_FEATURES) defaults to empty. CPU features must be listed with the format +feature1,-feature2 where + indicates enable and - indicates disable. For example, +sse,+sse2,-avx,-avx2 enables SSE and SSE2, and disables AVX and AVX2.

These settings are passed to LLVM for configuring the compilation target. To get a list of available options, use the llc commandline tool from LLVM, for example:

llc -march=x86 -mattr=help

Tip

To force all caching functions (@jit(cache=True)) to emit portable code (portable within the same architecture and OS), simply set NUMBA_CPU_NAME=generic.

2.5.4. GPU support

NUMBA_DISABLE_CUDA

If set to non-zero, disable CUDA support.

NUMBA_FORCE_CUDA_CC

If set, force the CUDA compute capability to the given version (a string of the type major.minor), regardless of attached devices.

NUMBA_ENABLE_CUDASIM

If set, don’t compile and execute code for the GPU, but use the CUDA Simulator instead. For debugging purposes.

2.5.5. Threading Control

NUMBA_NUM_THREADS

If set, the number of threads in the thread pool for the parallel CPU target will take this value. Must be greater than zero. This value is independent of OMP_NUM_THREADS and MKL_NUM_THREADS.

Default value: The number of CPU cores on the system as determined at run time, this can be accessed via numba.config.NUMBA_DEFAULT_NUM_THREADS.