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? 
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>
>

Reply via email to