You should ignore the first run---functions in both `@time` and `f1` itself may be being compiled. What is the comparison on the second run?
--Tim On Wednesday, February 18, 2015 05:01:43 PM Rohan Fernando wrote: > Sorry, I used log in the earlier script. Now with a=2.0, C++ is only twice > as fast. > > function f1() > a=2.0 > for i=1:1000000 > a+=exp(a%2+1); > end > a > end > @time f1() > > elapsed time: 0.051447387 seconds (93896 bytes allocated) > > On Wednesday, February 18, 2015 at 6:11:41 PM UTC-6, Peter Simon wrote: > > Not sure why this is, but when I replace 2 with 2.0 in the first line of > > the function it seems to speed up by a factor of 8. > > > > On Wednesday, February 18, 2015 at 3:48:15 PM UTC-8, 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-gl > >>> obal-variables > >>> > >>> On Wed, Feb 18, 2015 at 6:15 PM, Rohan Fernando <[email protected]> > >>> > >>> 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?
