On Sun, Nov 8, 2015 at 5:24 PM, Cristóvão Duarte Sousa <cris...@gmail.com> wrote: > The times for Julia code in my previous email are wrong, I wanted to write: > 0.000126 seconds > 0.004695 seconds (99.49 k allocations: 1.518 MB) > 0.000871 seconds
FYI, I see a 25-40% performance improvement on my yyc/call-site-cache branch. https://github.com/JuliaLang/julia/pull/11862 > > On Sun, Nov 8, 2015 at 10:19 PM Cristóvão Duarte Sousa <cris...@gmail.com> > wrote: >> >> I agree, in fact my knowledge about branch prediction mechanisms is rather >> limited. >> But doing if(rand()%2) instead of if(i%i) yields times close to the given >> one. On the other hand, with a single type (with if(true)) the times drop to >> around 320 μs. >> >> For julia code, randomness seems to have higher impact: >> 0.000103 seconds >> 0.002179 seconds >> 0.000915 seconds >> (again, these times highly variable) >> >> Anyway, I updated the codes to choose the type randomly. >> >> On Sun, Nov 8, 2015 at 3:44 AM Stefan Karpinski <ste...@karpinski.org> >> wrote: >>> >>> Yeah, that's a good point. >>> >>> On Saturday, November 7, 2015, Gustavo Goretkin >>> <gustavo.goret...@gmail.com> wrote: >>>> >>>> I think branch predictors on many platforms today use a table indexed on >>>> the history of the last couple of branches, so the period-two cycle you >>>> have >>>> is likely getting a lot of correct branch hits. If you mean to totally >>>> defeat the branch prediction, I think you should use something >>>> pseudorandom. >>>> >>>> On Nov 6, 2015 12:27 PM, "Cristóvão Duarte Sousa" <cris...@gmail.com> >>>> wrote: >>>>> >>>>> Hi, >>>>> >>>>> I've been wondering how Julia dispatching system would compare to the >>>>> C++ virtual functions dispatch one. >>>>> Hence, I write a simple test in both Julia and C++ that measures the >>>>> calling of a function over the elements of both an array of concrete >>>>> objects >>>>> and another of abstract pointers to objects of derived types. >>>>> >>>>> Here is the code https://gist.github.com/cdsousa/f5d669fe3fba7cf848d8 . >>>>> >>>>> The usual timings for C++ in my machine, for the concrete and the >>>>> abstract arrays respectively, are around >>>>> 0.000143 seconds >>>>> 0.000725 seconds >>>>> >>>>> For the Julia code the timings have much more variability, but they are >>>>> around >>>>> 0.000133 seconds >>>>> 0.002414 seconds >>>>> >>>>> This shows that Julia (single) dispatch performance is not that bad >>>>> while it has some room to improvement. >>>>> >>>>> If I'm doing something terribly wrong in these tests, please tell me :) >>>>> >>>>> PS: Thank you all, developers of Julia! >>>>> >>>>> >