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?
