Memory allocation was 93896 bytes when I ran the function in iJulia Notebook. When I run it from the console it allocates only 96 bytes as you suggested!
Thanks very much to all the helpful messages! On Wednesday, February 18, 2015 at 8:10:35 PM UTC-6, Stefan Karpinski wrote: > > Time it twice – those 93896 bytes allocated are from code generation. This > code should not allocate any memory except the return value, which should > be about 96 bytes or something like that. > > On Wed, Feb 18, 2015 at 8:01 PM, Rohan Fernando <[email protected] > <javascript:>> 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-global-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)/CLOC >>>>>> KS_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? >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >
