www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Results are in: static foreach is a slower than hand unrolling your

reply Gareth Charnock <gareth.tpc gmail.com> writes:
I managed to get some free time to look at this and it would appear that 
static foreach is slower than hand unrolling a loop. Fortunately there 
are no detectable differences between hand unrolling a loop and building 
the body of the loop in a compile time string and using a mixin. Results 
are here:

http://github.com/gcharnock/phoboslinalgebra/blob/4d1f62ce2f866acf24f237be77a2b59158571de0/staticloop_results.txt

Test program is here:

http://github.com/gcharnock/phoboslinalgebra/blob/4d1f62ce2f866acf24f237be77a2b59158571de0/staticloops.d
Apr 29 2010
next sibling parent Gareth Charnock <gareth.tpc gmail.com> writes:
Correction, two of the loops were going backwards (mixin and hand 
unrolled). Fixed this but the conclusion remains the same.

Gareth Charnock wrote:
 I managed to get some free time to look at this and it would appear that 
 static foreach is slower than hand unrolling a loop. Fortunately there 
 are no detectable differences between hand unrolling a loop and building 
 the body of the loop in a compile time string and using a mixin. Results 
 are here:
 
 http://github.com/gcharnock/phoboslinalgebra/blob/4d1f62ce2f866acf24f237be77a2b59158571de0/st
ticloop_results.txt 
 
 
 Test program is here:
 
 http://github.com/gcharnock/phoboslinalgebra/blob/4d1f62ce2f866acf24f237be77a2b59158
71de0/staticloops.d 
 

Apr 29 2010
prev sibling next sibling parent bearophile <bearophileHUGS lycos.com> writes:
You can try LDC compiler too (D1 only) with few changes.
Note: LDC isn't using LLVM 2.7 yet.

Bye,
bearophile
Apr 29 2010
prev sibling parent reply BCS <none anon.com> writes:
Hello Gareth,

 I managed to get some free time to look at this and it would appear
 that static foreach is slower than hand unrolling a loop. Fortunately
 there are no detectable differences between hand unrolling a loop and
 building the body of the loop in a compile time string and using a
 mixin. Results are here:

Last time I checked, static foreach tended to load the index onto the stack for each iteration even if it was never used. Did you take a look at the ASM? -- ... <IXOYE><
Apr 30 2010
parent Gareth Charnock <gareth oerc.ox.ac.uk> writes:
I don't actually know assembly language so no, this is all purely 
empirical.

BCS wrote:
 Hello Gareth,
 
 I managed to get some free time to look at this and it would appear
 that static foreach is slower than hand unrolling a loop. Fortunately
 there are no detectable differences between hand unrolling a loop and
 building the body of the loop in a compile time string and using a
 mixin. Results are here:

Last time I checked, static foreach tended to load the index onto the stack for each iteration even if it was never used. Did you take a look at the ASM?

Apr 30 2010