I wonder how to get something like this:
Write
copy(a, b, 2, 3)
And then get
a[2] = b[2];
a[3] = b[3];
a[4] = b[4];
I know that C #defines can't be used recursively to get that effect. But I'm using C++, so I suppose that template meta-programming might be appropriate.
I know there is a Boost library for that, but I only want that "simple" trick, and Boost is too "messy".
The UNROLL pragma specifies to the compiler how many times a loop should be unrolled. The UNROLL pragma is useful for helping the compiler utilize SIMD instructions. It is also useful in cases where better utilization of software pipeline resources are needed over a non-unrolled loop.
Loop overhead, i.e., incrementing and testing of the loop counter, is reduced. Reducing jumps back to a loop's entry might improve the pipeline behavior. Unrolling makes instruction-level parallelism in loops explicit and thus potentially enables other compiler optimizations.
The most straightforward solution to this is to write a loop where the start and end values are known:
for(int i = 2; i <= 4; i++) {
a[i]=b[i];
}
I think this is better than any sort of template/runtime-call mixture: The loop as written is completely clear to the compilers' optimizer, and there are no levels of function calls to dig through just to see what's going on.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With