No, I'm saying it wouldn't make a difference whether we are generating IR or binary during system image generation, because the binary that gets saved is not the binary that gets jitted.
On Thu, Jun 12, 2014 at 12:10 PM, Stefan Karpinski <ste...@karpinski.org> wrote: > Wait, so precompile does less during system image generation right now? > > > On Thu, Jun 12, 2014 at 11:54 AM, Keno Fischer < > kfisc...@college.harvard.edu> wrote: > >> During sysimage generation it doesn't make a difference. I believe we >> still generate LLVM IR (if we don't that really needs to be fixed), which >> gets dumped and compiled into sys.so accordingly. The only question is in >> REPL usage. >> >> >> On Thu, Jun 12, 2014 at 11:52 AM, Stefan Karpinski <ste...@karpinski.org> >> wrote: >> >>> It would be nice if you could precompile something to do the actual code >>> gen. I understand why we didn't do it before when we couldn't save >>> generated code, but now we do save generated code in sys.so, wouldn't >>> making precompile generate machine code be helpful? >>> >>> >>> On Thu, Jun 12, 2014 at 11:42 AM, Keno Fischer < >>> kfisc...@college.harvard.edu> wrote: >>> >>>> By way of explanation what precompile does is reduce the julia function >>>> to an intermediate representation suitable for final binary generation. It >>>> is mainly used when building the system image, as what basically happens at >>>> the end of system image generation is that all functions in intermediate >>>> representation get collected and then collectively assembled into the final >>>> binary. In JIT operation, both steps usually happen when you call the >>>> function, though in your example precompile does the first step. The reason >>>> you don't see much of an impact of what precompile does is that your >>>> function is relatively simple so type inference and codegen don't have to >>>> work very hard as compared to the actual binary generation. >>>> >>>> Maybe precompile in REPL mode should also do the final compilation, but >>>> I hope that explanation is at least useful. >>>> >>>> >>>> On Thu, Jun 12, 2014 at 10:47 AM, Cristóvão Duarte Sousa < >>>> cris...@gmail.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> With Julia 0.3.0-prerelease+3609 (Commit 664cab5 (2014-06-10 05:18 >>>>> UTC)) in Arch Linux x86_64, >>>>> precompile() doesn't seems to effectively improve functions first call >>>>> time. >>>>> For example, this code: >>>>> >>>>> N = 10 >>>>> A = rand(N,N) >>>>> B = rand(N,N) >>>>> >>>>> >>>>> function f(a, b) >>>>> c=a+b >>>>> c >>>>> end >>>>> >>>>> >>>>> @time precompile(f, typeof((A,B))); >>>>> @time f(A,B); >>>>> @time f(A,B); >>>>> @time f(A,B); >>>>> >>>>> usually outputs something like >>>>> >>>>> elapsed time: 0.001388013 seconds (21972 bytes allocated) >>>>> elapsed time: 0.001305722 seconds (1008 bytes allocated) >>>>> elapsed time: 7.486e-6 seconds (1008 bytes allocated) >>>>> elapsed time: 7.128e-6 seconds (1008 bytes allocated) >>>>> >>>>> >>>>> Isn't precompile supposed mitigate the first call time overhead? >>>>> Am I missing something? >>>>> >>>> >>>> >>> >> >