[LLVMdev] LLVM 3.3 JIT code speed

Stéphane Letz letz at grame.fr
Thu Jul 18 22:24:31 PDT 2013


Le 18 juil. 2013 à 23:51, Stéphane Letz <letz at grame.fr> a écrit :

> 
> Le 18 juil. 2013 à 21:05, "Kaylor, Andrew" <andrew.kaylor at intel.com> a écrit :
> 
>> I understand you to mean that you have isolated the actual execution time as your point of comparison, as opposed to including runtime loading and so on.  Is this correct?
> 
> We are testing actual execution time yes :  time used in a given JIT compiled function.
>> 
>> 
>> One thing that changed between 3.1 and 3.3 is that MCJIT no longer compiles the module during the engine creation process but instead waits until either a function pointer is requested or finalizeObject is called.  I would guess that you have taken that into account in your measurement technique, but it seemed worth mentioning.
> 
> OK, so I guess our testing is then correct since we are testing actual execution time of the function pointer.
>> 
>> 
>> What architecture/OS are you testing?
> 
> 64 bits OSX (10.8.4)
>> 
>> With LLVM 3.3 you can register a JIT event listener (using ExecutionEngine::RegisterJITEventListener) that MCJIT will call with a copy of the actual object image that gets generated.  You could then write that image to a file as a basis for comparing the generated code.  You can find a reference implementation of the interface in lib/ExecutionEngine/IntelJITEvents/IntelJITEventListener.cpp.
> 
> Thanks I'll have a look.
>> 
>> -Andy
>> 
> 
> Stéphane
> 


And since the 1) DSL  ==> C/C++  ===> clang/gcc -03 ===> exec  code chain has the "correct" speed, there is no reason the JIT based one should be slower right? 

So I still guess something is wrong in the way we use the JIT and/or some LTO issue possibly?

Stéphane



More information about the llvm-dev mailing list