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

Reply via email to