Optimizar: C/C++ omitir referencias de apuntamiento vs gprof/gcov para obtención de datos de cobertura y pruebas





Introduccion

Muchos conocen herramientas de testeo en java y similares para php, pero como hacer profiling con C/C++???

cuando compilaba un caso de prueba propio, me vi con este error: 

gcc-4.1.real: -pg and -fomit-frame-pointer are incompatible

Esto es porque quise agregar "-fomit-frame-pointer" , explico que hace esto y depues el resto:

1) Omitir asignaciones de apuntamiento.

En C la magia esta en los punteros, asi que obvio el tema, sin punteros ud es un windosero.
Esta opcion crea un puntero de referencia que permite una depuración para saber dónde y a que variable local o un argumento es una constante con simplemente un desplazamiento. Cuando se agrega esta opcion, se evita estas referencias y no puede encontrarse buenas referencias en memoria ante un fallo (crash), dado por medio de estas referencias es que el depurador peude ver hacia y por donde transita el flujo de trabajo de un programa.

¿Por qué los compiladores necesitan esta referencia? Facilita el cambio de referencia en variables locales al hacerlas referentes, pero el ejecutable generado es mas pesado, omitiendo estas el programa anda 0.2% mas rapido, multipliquen ese 0.2% por cada modulo y veces que se ejecuta/llama una referencia: por eso existe este parametro.

Mientras que con esta referencia, un depurador puede averiguar donde las variables locales y los argumentos están utilizando los símbolos (partes de acceso a la libreria/programa, equivale a tus funciones creadas).

2) Ahora acerca de la opcion -pg y profiling?

Ahora que explique lo peluo, lo explicare mas en castellano:

Usar esta opcion (-pg) prepara los programas para generar información suscpetible de ser utilizada por gprof para obtener información de optimizacion y rendimiento. Tras la ejecución de la aplicación generada con esta opción, se crea el fichero gmon.out que es el de interes para analizar.

Este archivo para los pobres mortales no les sirve de nada, si no se combina con (-fprofile-arcs) el cual genera los ficheros main.gcno y main.gcda, que contienen los datos utilizados por gcov para generar información “legible” de cobertura para poder interpretarse comunmente.

El programa gcov ayuda a visualizar la cantidad de referencias realizadas en el codigo, si dentro del programa se llama demasiadas (o execivas veces) a un determinado funcion o variable. El ingeniero analiza esto y debe mandar/optimizar el resultado para tener mejor rendimiento.

Cuando usar que?

Antes de una release o termino de fase de desarrollo es bueno implementar gcov siempre, viendo si en verdad se ha programado como los grandes, y despeus si usar  "-fomit-frame-pointer" , pero ojo, compilar con  "-fomit-frame-pointer" causa que no se pueda analizar si algun fallo se presenta despues....

Comentarios

Entradas populares de este blog

canaimitas: modelos (info mas completa)

Boton parpadeante canaimitas EF10MI2 FALLAS comunes

Destripando el instalador debian para usuarios medios.