2011-01-05 26 views
12

Tenía curiosidad si alguien tiene alguna sugerencia para pruebas de rendimiento de bibliotecas y interfaces que producirán buenos gráficos para C++ (como cómo gcov produce datos de cobertura y hay interfaces para ver los datos de cobertura de código) . Ser capaz de producir gráficos como:Utilidades de prueba de rendimiento para C++

http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0

sería bastante resbaladiza. Usamos cppunit ahora mismo para pruebas unitarias, así que tal vez haya algo que se integre con eso.

Algo más de información: Estamos compilando en Linux (utilizamos Ubuntu Lucid/Maverick) en máquinas Intel x86-64.

+0

http://stackoverflow.com/questions/4394606/beyond-stack-sampling-c-profilers, tiene una interesante lista permanente de tales cosas ... – Nim

+0

Esto dependerá en gran medida qué sistema operativo y la CPU está ejecutando en en cuanto a lo que está disponible ... ¿está buscando más pruebas automatizadas o perfiles de rendimiento? – AJG85

+0

Estaba pensando en una configuración de prueba de regresión automática que estaría especialmente orientada a las métricas de rendimiento. Sería bueno aprovechar cppunit, pero no es necesario y estaría interesado en cualquier tipo de arnés de prueba de rendimiento. La creación de perfiles sería el paso que daríamos después de que nuestras pruebas de regresión noten un gran golpe de tiempo de ejecución o algo similar. –

Respuesta

4

Algunas sugerencias:

  • El googletest C++ marco es capaz de producir informes compatible con JUnit.
  • Hudson se puede utilizar para ejecutar sus pruebas. Solo requiere que su aplicación C++ se pueda ejecutar como una aplicación de consola.
  • El Hudson Performance Plugin puede generar gráficos de informes JUnit.
  • Hay muchos otros plugins.
2

En Linux puede probar el kit de herramientas valgrind. Valgrind incluye la herramienta callgrind que puede perfilar su código. KCacheGrind visualiza muy bien la salida de cachegrind.

+1

La idea no es perfilar el código, per se, es crear un sistema de compilación nocturno que nos notifique las regresiones de rendimiento tomando algunas medidas simples (tal vez incluso solo el tiempo de ejecución) en algunos perf. pruebas unitarias que tendremos. Por lo tanto, no queremos particularmente instrumentar nuestro código, solo queremos ver el desempeño crudo de este. –

+0

@Kenny: Puede analizar la salida de 'cg_diff' para producir el tipo de gráficos que desea. –

2

Algunas notas con la esperanza de mi experiencia de este tipo de cosas en las respuestas here y here.

No hay razón por la que su configuración de CppUnit existente combinada con algo como el scoped_timer (vea el segundo de los anteriores) y un poco de procesamiento posterior en algunos gráficos quizás no satisfaga sus necesidades. Si bien creo que CppUnit incluye un complemento ("Clocker"?) Que desconectará las pruebas unitarias, no creo que en realidad sea tan útil para este tipo de pruebas de rendimiento en la práctica porque invariablemente terminas queriendo cronometrar solo una parte de cada prueba. y no todo el código de configuración.

1

Existen dos marcos de prueba de rendimiento que pueden ayudarlo.

Ambos se inspiran en el marco de prueba Google y proporcionar la interfaz para apoyar las pruebas de rendimiento, por lo que es fácil de transportar a su googletest originales a Hayai o SkyPat.

SkyPat combina pruebas unitarias y perf_evnet. Extiende el concepto de Google Test y proporciona una interfaz para acceder a PMU. perf_event proporciona SkyPat recuentos de ciclos precisos que son útiles para las herramientas que son sensibles a la variación del tiempo, como los compiladores. SkyPat también puede perfilar un fragmento de código por eventos de PMU (por ejemplo: ciclos, instrucciones, referencia de caché, falta de caché, etc.).

Hayai admite varios métodos de medición de rendimiento de los diferentes sistemas operativos (Windows: QueryPerformanceCounter(), Linux: gethrtime(), de Apple (OSX, iOS): mach_absolute_time()) en su marco de pruebas de rendimiento.

Cuestiones relacionadas