[LLVMdev] Caching ExecutionEngine / MCJIT

Philip Reames listmail at philipreames.com
Mon Dec 29 10:36:49 PST 2014


On 12/29/2014 05:23 AM, Paweł Bylica wrote:
> Hello everyone,
>
> I need some advises about (re)using ExecutionEngine with MCJIT as a 
> driver. I'm developing a service that receives a piece of high-level 
> code, compiles it into LLVM IR function "main" and uses MCJIT to 
> execute the function.
>
> It can happen that the same piece of code is sent to the service many 
> times. I would like to cache the results (keep generated machine code 
> alive) and do just the execution step. But I'm having problems with that.
>
> My first attempt was to cache ExecutionEngine instance and function 
> address (from getFunctionAddress() method). Executing cached function 
> second time crashes the process.
>
> I noticed that doing getFunctionAddress() each time helps a bit. There 
> is no crash but results produced by executed function are incorrect 
> and there are probably some memory access violations going on.
>
> Using the same function name for each code is probably a bad idea in 
> case of MCJIT, so I changed the names to some random value. However, 
> it did not help in any of previous problems.
>
> I thinking about using single instance of ExecutionEngine or share 
> Memory Manager. Can I get any advice on that?
My suggestion would be to use a single long lived instance of EE and 
MM.  Use some hashing mechanism to map your high level requests to a 
unique key.  If you've already generated it, just reuse the existing 
code.  Otherwise, create a new module, add it to the EE, and compile.

This will cause you to "leak" memory for code that isn't being reused.  
I don't know of a good solution to that within the framework of MCJIT, 
but you can get something reasonable by simply recreating your EE and MM 
instances every N (10000?) compiles. Until you have something like that 
working, I won't worry about trying to improve the memory caching strategy.

p.s. You can also look at using the on-disk cache capabilities.  I have 
never used that and have no idea how useful it is.
> Happy New Year,
> Paweł Bylica
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141229/153252f8/attachment.html>


More information about the llvm-dev mailing list