Any time you see a lot of bytes allocated in a function that shouldn't 
allocate any, you have type instability problems. See the "performance tips" 
page of the manual.

--Tim

On Wednesday, February 18, 2015 03:48:15 PM Rohan Fernando wrote:
> Wrapped in function, but timing did not change.
> 
> function f1()
>     a=2
>     for i=1:1000000
>         a+=log(a%2+1);
>     end
>     a
> end
> @time f1()
> 
> output:
> 
> elapsed time: 0.151813773 seconds (64080600 bytes allocated, 15.55% gc time)
> On Wednesday, February 18, 2015 at 5:19:21 PM UTC-6, Stefan Karpinski wrote:
> > Try wrapping the Julia code in a function and try again. The slow part is
> > incrementing `a` not the exp.
> > 
> > 
> > http://julia.readthedocs.org/en/latest/manual/performance-tips/#avoid-glob
> > al-variables
> > 
> > On Wed, Feb 18, 2015 at 6:15 PM, Rohan Fernando <[email protected]
> > 
> > <javascript:>> wrote:
> >> Here is the C++ code:
> >> 
> >> 
> >> #include <iostream>
> >> 
> >> #include <cmath>
> >> 
> >> 
> >> 
> >> int main(int argc, const char * argv[]) {
> >> 
> >>     srand (time(NULL));
> >>     
> >>     
> >>     clock_t t;
> >>     
> >>     int a=2;
> >>     
> >>     t = clock();
> >>     
> >>     for (unsigned i=0; i<1000000; i++) {
> >>     
> >>         //a+=(log(a));
> >>         
> >>         a+=exp(a%2);
> >>         
> >>         //a+=(rand()%2+1);
> >>     
> >>     }
> >>     
> >>     
> >>     
> >>     t = clock() - t;
> >>     
> >>     printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/
> >> 
> >> CLOCKS_PER_SEC);
> >> 
> >>     std::cout<<a<<std::endl;
> >>     
> >>     return 0;
> >> 
> >> }
> >> 
> >> 
> >> The output:
> >> 
> >> 
> >> *It took me 22177 clicks (0.022177 seconds).*
> >> 
> >> *2000001*
> >> 
> >> Program ended with exit code: 0
> >> 
> >> Julia Code:
> >> 
> >> a=2
> >> @time for i=1:1000000
> >> 
> >>     a+=exp(a%2);
> >> 
> >> end
> >> 
> >> ouput:
> >> 
> >> elapsed time: 0.136568599 seconds (47999984 bytes allocated, 18.22% gc
> >> time)
> >> 
> >> 
> >> 
> >> Thanks.
> >> 
> >> On Wednesday, February 18, 2015 at 4:56:40 PM UTC-6, Stefan Karpinski
> >> 
> >> wrote:
> >>> How did you do the timing?
> >>> 
> >>> On Wed, Feb 18, 2015 at 5:54 PM, Rohan Fernando <[email protected]>
> >>> 
> >>> wrote:
> >>>> I ran both, Julia and C++, on Mac OS X 10.10.2.
> >>>> 
> >>>> Is that the information you asked for?
> >>>> 
> >>>> Thanks!
> >>>> 
> >>>> On Wednesday, February 18, 2015 at 2:32:23 PM UTC-6, Stefan Karpinski
> >>>> 
> >>>> wrote:
> >>>>> Depends on how fast your system libm is – and how accurate. There's a
> >>>>> tradeoff.
> >>>>> 
> >>>>> On Wed, Feb 18, 2015 at 3:07 PM, Rohan Fernando <[email protected]>
> >>>>> 
> >>>>> wrote:
> >>>>>> The log and exponential functions in Julia are about five times
> >>>>>> slower than in C++. Is this reasonable?

Reply via email to