digitalmars.D - Results are in: static foreach is a slower than hand unrolling your
- Gareth Charnock (8/8) Apr 29 2010 I managed to get some free time to look at this and it would appear that...
- Gareth Charnock (3/16) Apr 29 2010 Correction, two of the loops were going backwards (mixin and hand
- bearophile (4/4) Apr 29 2010 You can try LDC compiler too (D1 only) with few changes.
- BCS (5/10) Apr 30 2010 Last time I checked, static foreach tended to load the index onto the st...
- Gareth Charnock (3/15) Apr 30 2010 I don't actually know assembly language so no, this is all purely
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