digitalmars.D - Results are in: static foreach is a slower than hand unrolling your
- Gareth Charnock <gareth.tpc gmail.com> Apr 29 2010
- Gareth Charnock <gareth.tpc gmail.com> Apr 29 2010
- bearophile <bearophileHUGS lycos.com> Apr 29 2010
- BCS <none anon.com> Apr 30 2010
- Gareth Charnock <gareth oerc.ox.ac.uk> Apr 30 2010
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
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
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
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
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









Gareth Charnock <gareth.tpc gmail.com> 