Skip to content

Object-Oriented CPU JIT Compiler

The CPU JIT compiler in pystencils shall be rebuilt using an object-oriented design.

The JIT-compiler shall be implemented as a class and represented at runtime by objects of that class. Each JIT instance shall act as a configurable factory for executable Python kernels. It shall be incrementally configurable. Its produced kernel wrappers shall check any kernel preconditions (see #119 (closed)), potentially with configurable granularity, either in Python or C code. It shall cache the results of these checks (c.f. cupy-JIT) and not re-perform then for repeated calls.

The JIT compiler shall be tested using an extensive test suite. Tests shall cover

  • Various valid kernels
  • Error behavior when trying to compile an invalid kernel
  • Error behavior when calling kernels with illegal arguments
    • Wrong array / scalar types
    • Incompatible array shapes
    • Non-satisfied pointer alignments
  • Parameter caching
  • Compatibility with various host compilers available on the current machine

The API design for the JIT compiler, and a prototype implementation based on pybind11, were contributed in !445 (merged).


To Do

  • Reimplement the extension module builder without pybind11 to accelerate compilation
Edited by Frederik Hennig