User Interface
Proteus offers five ways to define JIT work. All five eventually feed the same runtime specialization, caching, and execution pipeline, but they differ in how JIT code is described and in their build-time requirements.
| Interface | Best for | Specialization support | Runtime template instantiation | Compiler requirement |
|---|---|---|---|---|
| Code Annotations | Incremental adoption in existing host, CUDA, or HIP code | Values, arrays, objects, and launch configuration | No | Application must be compiled with Clang |
| C++ Frontend API | Source-string JIT, runtime template instantiation, and compiler control | Values, arrays, objects, and launch configuration | Yes | Application can be compiled with any compatible compiler |
| LLVM IR Frontend API | Direct LLVM IR JIT from text or bitcode | Encoded directly in the provided LLVM IR | No | Application can be compiled with any compatible compiler |
| MLIR Frontend API | Source-string MLIR JIT and direct access to MLIR lowering | Encoded directly in the provided MLIR source | No | Application can be compiled with any compatible compiler |
| DSL API | Programmatic IR construction and advanced runtime code generation | Values, arrays, and launch configuration | No | Application can be compiled with any compatible compiler |
For more detail on each path:
For runtime knobs that affect specialization, caching, and compilation, see the runtime configuration guide.