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), 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. --- ## To Do - [x] Reimplement the extension module builder without pybind11 to accelerate compilation
issue