Description

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 __attribute__((opencl_unroll_hint(n))) attribute qualifier must appear immediately before the loop to be affected.

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.

See Also

No cross-references are available

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.

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.