[llvm-dev] thread safety ExecutionEngine::getFunctionAddress

koffie drinker via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 6 07:26:05 PST 2017


Ok, so I've reworked it to have one jit/context per expression. It uses a
lot of memory.
Is there a way to clone/get the jitted mem after getfunctionaddress()
invocation ? If I oculd get the size, I could do a memcpy on the address,
and delete the jit. This should save a lot of memory.

On Thu, Dec 22, 2016 at 9:18 AM, koffie drinker <gekkekoe at gmail.com> wrote:

> So I've made code to invoke the getfunctionaddress() in parallel. I did
> verify that the code was good, by substituting getfunctionaddress() with
> a bunch bogus computations.
>
> It seems that the code with getfunctionaddress() is being serialized. Is
> there a giant lock somewhere per executionengine?
> I have one execution engine that holds all the modules. Going through the
> llvm-dev list archives, it seems that I have to have a execution engine per
> module. Is this still the case ? (the posting were quite old). Is there a
> difference between mcjit and orc in this case?
>
> I was hoping that by not modifying IR during getfunctionaddress() would
> work :(
>
> Cheers,
>
> On Tue, Dec 20, 2016 at 6:13 PM, koffie drinker <gekkekoe at gmail.com>
> wrote:
>
>> Hi,
>>
>> I'm trying to speed up the JIT time with llvm (3.9.1).
>> So far i've implemented the object cache, used FastISel and disabled
>> optimizations.
>> Jit time is still too slow for my purpose (I do have a lot of code to
>> Jit).
>>
>> http://llvm.org/docs/ProgrammersManual.html#threads-and-the-jit states
>> that we can invoke ExecutionEngine::getPointerToFunction() concurrently.
>> This function was replaced by ExecutionEngine::getFunctionAddress(). Is
>> this function also thread safe?
>>
>> I want to speed up codegen by invoking parallel calls to
>> getfunctionaddress(). Currently  due the the large amount of code that has
>> to be Jitted, the getfunctionaddress() takes around 40% of my load time.
>>
>> What is meant with "he user must still ensure that only one thread
>> accesses IR in a given LLVMContext while another thread might be
>> modifying it" ?
>>
>> If I pre-generate all IR, and before execution, invoke the parallel
>> getfunctionaddress() I should be fine right ? Since IR won't be modified
>> anymore.
>>
>> Cheers,
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170106/f540b6e8/attachment.html>


More information about the llvm-dev mailing list