Sure looks like it.  Thanks!

On Thu, Jun 9, 2016 at 6:18 PM, Yichao Yu <yyc1...@gmail.com> wrote:

> On Thu, Jun 9, 2016 at 6:36 PM, Arch Robison <arch.d.robi...@gmail.com>
> wrote:
> >
> >
> > The following example exhibits performance that is counter-intuitive to
> me.
> > Why?
>
> I believe this is https://github.com/JuliaLang/julia/issues/12219
>
> >
> > type fast
> >     x
> > end
> >
> > type slow
> >     x :: Unsigned
> > end
> >
> > function flog(y)
> >     s = 0.0
> >     for i=1:1000000
> >         s += sqrt(y.x)
> >     end
> >     s
> > end
> >
> > for i=1:3
> >     @time flog(fast(42))
> >     @time flog(slow(42))
> > end
> >
> > Here is the output I get:
> > $ julia sq.jl
> >   0.088505 seconds (2.00 M allocations: 30.519 MB, 38.67% gc time)
> >   0.803340 seconds (3.00 M allocations: 45.784 MB, 3.86% gc time)
> >   0.048212 seconds (2.00 M allocations: 30.518 MB, 4.71% gc time)
> >   0.770123 seconds (3.00 M allocations: 45.776 MB, 0.25% gc time)
> >   0.047239 seconds (2.00 M allocations: 30.518 MB, 2.01% gc time)
> >   0.769541 seconds (3.00 M allocations: 45.776 MB, 0.25% gc time)
> >
> > It shows that the "fast" structure makes the code run significantly
> faster.
> > That seems backwards.  I was expecting that with the "Unsigned" type
> > assertion, the compiler might be able to deduce that sqrt will always
> return
> > a Float64, or at least narrow down the dispatch choices.  But as the
> times
> > show, the type assertion makes the code run much slower.  What's going
> on?
> >
> > Yes, I know if I declare x with a concrete type such as Int, the code
> will
> > do blazingly fast.  But I was poking around to see if declaring it with
> an
> > abstract type narrower than Any would help.
> >
>

Reply via email to