Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 10, 2008 Unrolling loops | ||||
---|---|---|---|---|
| ||||
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 |
March 10, 2008 Re: Unrolling loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjaeraas | "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. |
March 11, 2008 Re: Unrolling loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | 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
>>
> 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.
>
you can do it with tuple a foreach, but it's not very clean
|
March 11, 2008 Re: Unrolling loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjaeraas | 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.
|
March 11, 2008 Re: Unrolling loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjaeraas | 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 |
March 11, 2008 Re: Unrolling loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjaeraas | 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
|
Copyright © 1999-2021 by the D Language Foundation