On 01/02/17 20:30, Nitorami wrote:
Just a note - I learned that for very short "for" loops it may be even a bit
faster to count downwards (to zero) rather than upwards if possible, because
the comparison to zero is very effiicient. Not sure though whether that
still makes a difference on modern processors.

Testing that on fpc 3.0.0 x86, compiled with -O4 but without looking at the generated code:


program test1;

const   top = $7fffffff;

var     a, i: longint;

begin
  for i := 0 to top do
    a := i;
  writeln(a)
end.

real    0m4.353s
user    0m3.284s
sys     0m0.000s


program test2;
  for i := top downto 0 do
    a := i;

real    0m4.449s
user    0m3.256s
sys     0m0.000s


program test3;
  for i := top downto 0 do
    a := top - i;

real    0m4.671s
user    0m3.264s
sys     0m0.000s


It's interesting that the real (wallclock) and user times are consistently in a different sequence. /If/ the user time is to be believed, there's a very small advantage to counting down even if the sequence you want is ascending (i.e. test3) rather than simply counting up.

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to