Sorry:  I forgot that  this function got called thousands of times.  I 
guess in that case calling the size()  function  might result in some 
allocation which would then get magnified by the number of calls.  (Am I on 
the right track?)

On Thursday, January 8, 2015 at 7:19:52 PM UTC-8, Petr Krysl wrote:
>
> Andreas,,
>
> Good point about the global scope. What I was  really trying to understand 
> was  this observation:
>
>         - function getconn!{T<:FESet}(self::T,conn::JFIntMat,j::JFInt)
>   5959808     for i=1:size(self.conn,2)
>         0         conn[i]=self.conn[j,i];
>         -     end
>         0     return self
>         - end
>
> Isn't  the size  here in  the local context, and also  of a definite type?
>
> Petr
>
> On Thursday, January 8, 2015 at 7:09:35 PM UTC-8, Andreas Noack wrote:
>>
>> The reason is the usual global variable problem. Because n is global the 
>> type is not inferred well and the loop is therefore not well optimized. 
>> This doesn't happen in local scope e.g.
>>
>> julia> let
>>
>>        m = 1000000
>>
>>        @allocated for i = 1:m end
>>
>>        end
>>
>> 0
>>
>> and it can also be avoided if you specify the type in the loop range
>>
>> julia> @allocated for i = 1:n::Int
>>
>>        end
>>
>> 0
>>
>> 2015-01-08 22:02 GMT-05:00 Petr Krysl <[email protected]>:
>>
>>> julia> a=rand(1000000);
>>>
>>> julia> n=length(a);
>>>
>>> julia> @allocated for j=1:n
>>>        end
>>> 63983688
>>>
>>> 64 MB to run this loop?  Is that expected?
>>>
>>> Thanks for any insight.
>>>
>>> Petr
>>>
>>
>>

Reply via email to