Description
| The functionality described in this section requires support for OpenCL C 2.0 or newer. |
The __attribute__((opencl_unroll_hint)) and
__attribute__((opencl_unroll_hint(n))) attribute qualifiers can be used
to specify that a loop (for, while and do loops) can be unrolled.
This attribute qualifier can be used to specify full unrolling or partial
unrolling by a specified amount.
This is a compiler hint and the compiler may ignore this directive.
n is the loop unrolling factor and must be a positive integral compile time constant expression. An unroll factor of 1 disables unrolling. If n is not specified, the compiler determines the unrolling factor for the loop.
|
The |
Examples:
__attribute__((opencl_unroll_hint(2)))
while (*s != 0)
*p++ = *s++;
The tells the compiler to unroll the above while loop by a factor of 2.
__attribute__((opencl_unroll_hint))
for (int i=0; i<2; i++)
{
...
}
In the example above, the compiler will determine how much to unroll the loop.
__attribute__((opencl_unroll_hint(1)))
for (int i=0; i<32; i++)
{
...
}
The above is an example where the loop should not be unrolled.
Below are some examples of invalid usage of
__attribute__((opencl_unroll_hint(n))).
__attribute__((opencl_unroll_hint(-1)))
while (...)
{
...
}
The above example is an invalid usage of the loop unroll factor as the loop unroll factor is negative.
__attribute__((opencl_unroll_hint))
if (...)
{
...
}
The above example is invalid because the unroll attribute qualifier is used on a non-loop construct
kernel void
my_kernel( ... )
{
int x;
__attribute__((opencl_unroll_hint(x))
for (int i=0; i<x; i++)
{
...
}
}
The above example is invalid because the loop unroll factor is not a compile-time constant expression.
Document Notes
For more information, see the OpenCL C Specification
This page is extracted from the OpenCL C Specification. Fixes and changes should be made to the Specification, not directly.