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? >>>> >>> >>> >> >