[LLVMdev] [RFC] MCJIT usage models

Eric Christopher echristo at gmail.com
Mon Dec 9 11:53:39 PST 2013


There are also the uses in this sort of thing:

http://en.wikipedia.org/wiki/Gallium3D

which covers a bit of 5 but also 3.

-eric


On Mon, Dec 9, 2013 at 11:08 AM, Kaylor, Andrew <andrew.kaylor at intel.com> wrote:
> Below is an outline of various usage models for MCJIT that I put together
> based on conversations at last month’s LLVM Developer Meeting.  If you’re
> using or thinking about using MCJIT and your use case doesn’t seem to fit in
> one of the categories below then either I didn’t talk to you or I didn’t
> understand what you’re doing.
>
>
>
> In any case, I’d like to see this get worked into a shape suitable for
> inclusion in the LLVM documentation.  I imagine it serving as a guide both
> to those who are new to using MCJIT and to those who are developing and
> maintaining MCJIT.  If you’re using MCJIT the latter (yes, the latter) case
> is particularly important to you right now as having your use case properly
> represented in this document is the best way to ensure that it is adequately
> considered when changes are made to MCJIT and when the decision is made as
> to when we are ready to deprecate the old JIT engine (probably in the 3.5
> release, BTW).
>
>
>
> So here’s what I’m asking for: if you are currently using MCJIT or
> considering using MCJIT, can you please find the use case that best fits
> your program and comment on how well the outline describes it.  If you
> understand what I’m saying below but you see something that is missing,
> please let me know.  If you aren’t sure what I’m saying or you don’t know
> how MCJIT might address your particular issues, please let me know that too.
> If you think my outline is too sketchy and you need me to elaborate before
> you can provide meaningful feedback, please let me know about that.  If you
> think it’s the best piece of documentation you’ve read all year and you
> can’t wait to read it again, that’s good information too.
>
>
>
> Thanks in advance for any and all feedback.
>
>
>
> -Andy
>
>
>
> ------------------------------------------------------------------------------------------
>
>
>
> Models for MCJIT use
>
>
>
> 1. Interactive dynamic code generation
>
>     - user types code which is compiled as needed for execution
>
>     - example: Kaleidoscope
>
>     - compilation speed probably isn't critical
>
>     - use one MCJIT instance with many modules
>
>     - create new modules on compilation
>
>     - MCJIT handles linking between modules
>
>         - external references still need prototypes
>
>         - we can at least provide a module pass to automate it
>
>     - memory overhead may be an issue but MCJIT can fix that
>
>     - see model 2 for pre-defined library
>
>     - if processing a large script pre-optimize before passing modules to
> MCJIT
>
>
>
> 2. Code generation for external target execution
>
>     - client generates code to be injected into an external process
>
>     - example: LLDB expression evaluation
>
>     - target may be another local or remote
>
>     - target architecture may not match host architecture
>
>     - may use one or more instances of MCJIT (client preference)
>
>     - MCJIT handles address remapping on request
>
>     - custom memory manager handles code/data transfer
>
>     - speed/memory requirements may vary
>
>
>
> 3. Large pre-defined module compilation and execution
>
>     - code/IR is loaded from disk and prepared for execution
>
>     - example: Intel(R) OpenCL SDK
>
>     - compilation speed matters but isn't critical
>
>     - initial startup time is somewhat important
>
>     - execution speed is critical
>
>     - memory consumption isn't an issue
>
>     - tool integration may be important
>
>     - use one MCJIT instance with multiple (but usually) few modules
>
>     - use object caching for commonly used code
>
>     - for very large, sparsely used libraries pre-link modules
>
>     - object and archive support may be useful
>
>
>
> 4. Hot function replacement
>
>     - client uses MCJIT to optimize frequently executed code
>
>     - example: WebKit
>
>     - compilation time is not critical
>
>     - execution speed is critical
>
>     - steady state memory consumption is very important
>
>     - client handles pre-JIT interpretation/execution
>
>     - MCJIT instances may be created as needed
>
>     - custom memory manager transfers code memory ownership after
> compilation
>
>     - MCJIT instance is deleted when no longer needed
>
>     - client handles function replacement and lifetime management
>
>
>
> 5. On demand "one-time" execution
>
>     - client provides a library of code which is used by small, disposable
> functions
>
>     - example: database query?
>
>     - initial load time isn't important
>
>     - execution time is critical
>
>     - if library code is fixed, load as shared library
>
>     - if library code must be generated use a separate instance of MCJIT to
> hold the library
>
>         - this instance can support multiple modules
>
>         - use a custom memory manager to link with functions in this module
>
>         - object caching and archive support may be useful in this case
>
>     - if inlining/lto is more important than compile time keep library in an
> IR module and pre-link just before invoking MCJIT
>
>     - create one instance of MCJIT as needed and destroy after execution
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list