habilitar flags de optimización para gcc utilizando cmake

habilitar flags de optimización para gcc utilizando cmake

de Alejandro Rivero Perez -
Número de respuestas: 3

Buenas, estoy teniendo algunos problemas para habilitar las banderas de optimización del gcc utilizando cmake. Probé algunas opciones que vi por internet pero no parece estar optimizando el código ya que la cantidad de ciclios que consume el programa sigue siendo la misma. Puede que cmake ya asuma por defecto algun nivel de optimización?

La instrucción con la que probé es set(CMAKE_CXX_FLAGS "-O3") variando el número a continuación de la "O" para cambiar el nivel.

Saludos

En respuesta a Alejandro Rivero Perez

Re: habilitar flags de optimización para gcc utilizando cmake

de Juan Cardelino -

Cmake está preparado para compilar varios lenguajes, entre ellos C y C++.

Y a veces los dos mezclados. Por lo cual hay juegos de flags de C y otros de C++. En particular, CXX_FLAGS son para C++ y C_FLAGS para C. Esto es así tanto para cmake como para el propio gcc. Resumiendo, no hace nada porque estás seteando las banderas para C++.

De todas formas aprovecho para hacer una aclaración. Se pueden pasar banderas así, pero ya hay algunos modos de compilación de alto nivel. Debug, Release, RelWithDebInfo, etc. Cada uno de esos juegos ya setea un conjunto de banderas acordes como vimos en clase. 

De todas formas en este caso está bueno que jueguen más a bajo nivel.

El otro día estuvimos jugando un poco con Martín con algunas opciones de compilación. En particular les recomiendo que investiguen el -funroll-loops.

Tiene un efecto dramático sobre la performance.

Saludos,

           Juan

En respuesta a Juan Cardelino

Re: habilitar flags de optimización para gcc utilizando cmake

de Martin Rocamora -

Otra cosa que creo que vale la pena probar además del -funroll-loops es el -Ofast.

-Ofast
           Disregard strict standards compliance.  -Ofast enables all -O3
           optimizations.  It also enables optimizations that are not valid
           for all standard compliant programs.  It turns on -ffast-math

Por lo que pude ver hace diferencia entre máquinas de 64 y 32 bits. En máquinas de 32 bits no obtuve diferencias entre activar o no activar el flag, pero en máquinas de 64 bits sí. Mirando un poco el --fast-math entiendo que debe venir por la posibilidad de hacer varias operaciones de 32 bits.

Estaría bueno si alguien lo confirma, porque tal vez sea que soy yo que estoy pirando acá :)Igual la diferencia más notoria que obtengo es con el -funroll-loops.

Saludos,

Martín