Re: Strange performance behaviour

  • From: Drake Wilson <drake@xxxxxxxxxxxxxx>
  • To: luajit@xxxxxxxxxxxxx
  • Date: Sat, 25 Aug 2012 16:48:11 -0500

Quoth Henk Boom <henk@xxxxxxx>, on 2012-08-25 17:01:18 -0400:
> for i = 0, 4e8 do
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
>   buffer[0] = buffer[0] + buffer[n] * 0.1
> end

This specific example _can_ exhibit similar behavior in C.  I imagine
this is because repeatedly doing buffer[0] = buffer[0] + buffer[0] *
0.1 will (assuming it starts out initialized to a nonzero finite) take
that value toward an infinity pretty fast, and operations on
non-normalized values (Inf, NaN, denormal) can be much slower for the
FPU to execute.

Try explicitly initializing both of the doubles to zero and see
whether it still happens.

   ---> Drake Wilson

Other related posts: