Added issue #6914 to describe this performance issue.

--Pete

On Wednesday, May 21, 2014 6:48:31 PM UTC-7, Jeff Bezanson wrote:
>
> I think this is because the loop might have zero iterations, and in that 
> case `i` might not be initialized. Variables that might be used 
> uninitialized get pessimized. We could improve this by representing such 
> variables internally as a pair of a fast variable and a boolean flag.
> On May 21, 2014 3:41 PM, <[email protected] <javascript:>> wrote:
>
>> Good catch. I have no idea the reason behind this behaviour. It would be 
>> interesting to know why.
>>
>> On Wednesday, May 21, 2014 7:58:02 PM UTC+2, Peter Simon wrote:
>>>
>>> I don't think this slowness is because of type instability, as I 
>>> understand the concept.  On a 64-bit machine `Int === Int64` is true. 
>>>  Also, the following is also slow and results in lots of allocation:
>>>
>>> local i::Int64
>>>
>>> as does simply declaring
>>>
>>> local i
>>>
>>> However, if one completely leaves off the declaration/initialization of 
>>> i (and returns nothing), the code is again fast.  Also
>>>
>>> local i::Int64 = 0
>>>
>>> results in fast code.  Apparently, if the loop variable is to be 
>>> retained after the loop terminates, then for best performance it must be 
>>> initialized and not just declared `local` prior to the loop  I'm not sure 
>>> why this is so.
>>>
>>> --Peter
>>>
>>

Reply via email to