c gcc pragma unroll

Dile a gcc que desenrolle específicamente un ciclo



pragma unroll (2)

GCC te da algunas formas diferentes de manejar esto:

  • Utilice las directivas #pragma , como #pragma GCC optimize ("string"...) , como se ve en los documentos de GCC . Tenga en cuenta que pragma hace que las optimizaciones sean globales para las funciones restantes. Si utilizó #pragma push_options y pop_options macros inteligentemente, probablemente podría definir esto solo con una función como esta:

    #pragma GCC push_options #pragma GCC optimize ("unroll-loops") //add 5 to each element of the int array. void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } } #pragma GCC pop_options

  • Anota funciones individuales con la sintaxis de atributos de GCC : consulta los documentos de atributos de funciones de GCC para obtener una disertación más detallada sobre el tema. Un ejemplo:

    //add 5 to each element of the int array. __attribute__((optimize("unroll-loops"))) void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } }

Nota: No estoy seguro de cuán bueno es GCC para desenrollar bucles iterados en reversa (lo hice para que Markdown juegue bien con mi código). Los ejemplos deberían compilar bien, sin embargo.

¿Cómo puedo decirle a GCC que desenrolle un ciclo en particular? He usado CUDA SDK donde los lazos se pueden desenrollar manualmente usando #pragma unroll . ¿Hay alguna característica similar para gcc? Busqué en Google un poco pero no pude encontrar nada.


-funroll-loops podría ser útil (aunque activa el bucle-desenrollar globalmente, no por-loop). No estoy seguro de si hay un #pragma para hacer lo mismo ...