how to ensure loop unrolling with template programming

Frank Winter frank.winter@desy.de
Mon Jul 12 13:57:00 GMT 2010


Thanks for your reply!

Your provided code doesn't seem to work:

unroll.cc: In constructor repeat<I>::repeat(F):
unroll.cc:4: error: declaration of repeat<(I - 1)> f shadows a parameter
unroll.cc: In function void foo():
unroll.cc:14: error: no matching function for call to repeat<4u>::repeat()
unroll.cc:2: note: candidates are: repeat<4u>::repeat(const repeat<4u>)

Frank


On Fri, 9 Jul 2010, me22 wrote:

> On 9 July 2010 02:29, Frank Winter <frank.winter@desy.de> wrote:
>>
>> How can I make sure the compiler unrolls the loop and inlines all function
>> calls? Do I have to use the preprocessor in my case?
>>
>
> if you're *really* sure you know so much better than the heuristics, then:
> - __attribute__((__force_inline__)) or something like that will inline the calls
> - And change the loop to one at compile time using template specialization
>
> template <unsigned I>
> struct repeat {
>    template <typename F>
>    repeat(F f) { f(); repeat<I-1>(f); }
> };
> template <>
> struct repeat<0> {
>    template <typename F>
>    repeat(F) {}
> };
>
> void bar();
> void foo() {
>    repeat<4>(bar);
> }
>
> HTH,
> ~ Scott
>




More information about the Gcc-help mailing list