www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Unrolling loops

reply Simen Kjaeraas <simen.kjaras gmail.com> writes:
Is it possible to unroll loops in D2.0? I have a templated struct with a static
array with length set through a template parameter. Does that get automatically
unrolled with 4 elements (I doubt it), do I have to use some magic string
mixin, or could I fix this with tuples and their automatic loop unrolling?

Actually, that latter one is worth a question of its own. Can I convert a
static array into a tuplem and if so, how?

-- Simen
Mar 10 2008
next sibling parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Simen Kjaeraas" <simen.kjaras gmail.com> wrote in message 
news:fr4ec8$kd3$1 digitalmars.com...
 Is it possible to unroll loops in D2.0? I have a templated struct with a 
 static array with length set through a template parameter. Does that get 
 automatically unrolled with 4 elements (I doubt it), do I have to use some 
 magic string mixin, or could I fix this with tuples and their automatic 
 loop unrolling?

 Actually, that latter one is worth a question of its own. Can I convert a 
 static array into a tuplem and if so, how?

 -- Simen

In the presentation Walter and Andrei gave at the D con last year, they presented a "static loop" feature that would unroll the loop at compile time. static foreach(blah; something) { //... } So it's "in the works" for D2, I guess, but who knows when it'll actually be implemented.
Mar 10 2008
parent BCS <ao pathlink.com> writes:
Reply to Jarrett,

 "Simen Kjaeraas" <simen.kjaras gmail.com> wrote in message
 news:fr4ec8$kd3$1 digitalmars.com...
 
 Is it possible to unroll loops in D2.0? I have a templated struct
 with a static array with length set through a template parameter.
 Does that get automatically unrolled with 4 elements (I doubt it), do
 I have to use some magic string mixin, or could I fix this with
 tuples and their automatic loop unrolling?
 
 Actually, that latter one is worth a question of its own. Can I
 convert a static array into a tuplem and if so, how?
 
 -- Simen
 

they presented a "static loop" feature that would unroll the loop at compile time. static foreach(blah; something) { //... } So it's "in the works" for D2, I guess, but who knows when it'll actually be implemented.

you can do it with tuple a foreach, but it's not very clean
Mar 10 2008
prev sibling next sibling parent Robert Fraser <fraserofthenight gmail.com> writes:
Simen Kjaeraas wrote:
 Is it possible to unroll loops in D2.0? I have a templated struct with a
static array with length set through a template parameter. Does that get
automatically unrolled with 4 elements (I doubt it), do I have to use some
magic string mixin, or could I fix this with tuples and their automatic loop
unrolling?
 
 Actually, that latter one is worth a question of its own. Can I convert a
static array into a tuplem and if so, how?
 
 -- Simen

If the compiler knows it to be 4 elements at the code generation stage (which it will if it's a static array - template resolution is done in the semantic pass, so it doesn't matter if it's from a template or coded directly in), it should probably unroll it. Check the assembly.
Mar 10 2008
prev sibling next sibling parent downs <default_357-line yahoo.de> writes:
Simen Kjaeraas wrote:
 Is it possible to unroll loops in D2.0? I have a templated struct with a
static array with length set through a template parameter. Does that get
automatically unrolled with 4 elements (I doubt it), do I have to use some
magic string mixin, or could I fix this with tuples and their automatic loop
unrolling?
 
 Actually, that latter one is worth a question of its own. Can I convert a
static array into a tuplem and if so, how?

Use a union :) union TupleAndStaticArrayTest { uint[4] whee; Repeat!(uint, 4) whoo; }
 
 -- Simen

Mar 10 2008
prev sibling parent Bill Baxter <dnewsgroup billbaxter.com> writes:
Simen Kjaeraas wrote:
 Is it possible to unroll loops in D2.0? I have a templated struct with a
static array with length set through a template parameter. Does that get
automatically unrolled with 4 elements (I doubt it), do I have to use some
magic string mixin, or could I fix this with tuples and their automatic loop
unrolling?
 
 Actually, that latter one is worth a question of its own. Can I convert a
static array into a tuplem and if so, how?
 
 -- Simen

Also I believe GDC can do automatic loop unrolling. At least it happily accepts the flag "-funroll-loops". --bb
Mar 10 2008