¿Cuál es su herramienta de creación de perfiles favorita (para C ++)

Hasta ahora, solo he usado Rational Quantify. He oído muchas cosas sobre el VTune de Intel, ¡pero nunca lo he intentado!

Editar: Principalmente estoy buscando un software que instrumente el código, ya que supongo que esa es la única forma de obtener resultados muy buenos.


Ver también:

¿Cuáles son algunos buenos perfiladores para C ++ nativo en Windows?

Para el desarrollo de Linux (aunque algunas de estas herramientas podrían funcionar en otras plataformas). Estos son los dos grandes nombres que conozco, hay muchos otros más pequeños que no han visto un desarrollo activo desde hace tiempo.

  • Valgrind
  • TAU – Utilidades de ajuste y análisis

Para Linux: Google Perftools

  • Más rápido que valgrind (sin embargo, no tan fino)
  • No necesita instrumentación de código
  • Buena salida gráfica (-> kcachegrind)
  • ¿Tiene perfil de memoria, perfil de la CPU, control de fugas?

Mi única experiencia en la creación de perfiles de código C ++ es con AQTime de AutomatedQA (ahora SmartBear Software). Tiene varios tipos de perfiladores integrados (rendimiento, memoria, controladores de Windows, rastreo de excepciones, análisis estático, etc.) e instrumenta el código para obtener los resultados.

Disfruté usarlo, siempre fue divertido encontrar esos lugares donde un pequeño cambio en el código podría mejorar dramáticamente el rendimiento.

En mi humilde opinión, el muestreo con un depurador es el mejor método. Todo lo que necesita es un IDE o depurador que le permita detener el progtwig. Soluciona los problemas de rendimiento incluso antes de instalar el perfilador.

He usado Glowcode extensivamente en el pasado y no he tenido más que experiencias positivas con él. Su integración con Visual Studio es realmente agradable, y es el generador de perfiles más eficiente / intuitivo que he usado (incluso en comparación con los perfiles para el código administrado).

Obviamente, eso es inútil si no se está ejecutando en Windows, pero la pregunta no me deja claro cuáles son sus requisitos.

El generador de perfiles en Visual Studio 2008 es muy bueno: rápido, fácil de usar, claro y bien integrado en el IDE.

Nunca he hecho perfiles antes. Ayer programé una clase ProfilingTimer con un horario estático (un mapa ) para el almacenamiento de tiempo.

El constructor almacena la marca de partida y el destructor calcula el tiempo transcurrido y lo agrega al mapa:

ProfilingTimer::ProfilingTimer(std::string name) : mLocalName(name) { sNestedName += mLocalName; sNestedName += " > "; if(sTimetable.find(sNestedName) == sTimetable.end()) sTimetable[sNestedName] = 0; mStartTick = Platform::GetTimerTicks(); } ProfilingTimer::~ProfilingTimer() { long long totalTicks = Platform::GetTimerTicks() - mStartTick; sTimetable[sNestedName] += totalTicks; sNestedName.erase(sNestedName.length() - mLocalName.length() - 3); } 

En cada función (o {bloque}) que quiero crear, necesito agregar:

 ProfilingTimer _ProfilingTimer("identifier"); 

Esta línea es un poco engorrosa para agregar en todas las funciones que quiero perfilar ya que tengo que adivinar qué funciones toman mucho tiempo. Pero funciona bien y la función de impresión muestra el tiempo consumido en%.

(¿Alguien más está trabajando con un “perfil casero” similar? ¿O es simplemente estúpido? ¡Pero es divertido! ¿Alguien tiene sugerencias de mejora?

¿Hay algún tipo de agregar automáticamente una línea a todas las funciones?)

oprofile, sin duda; es simple, confiable, hace el trabajo, y puede dar todo tipo de desgloses de datos agradables.

Para Windows, mira Xperf . Utiliza un perfil muestreado, tiene una IU útil y no requiere instrumentación. Muy útil para rastrear problemas de rendimiento. Puede responder preguntas como:

  • ¿Quién usa la mayor cantidad de CPU? Desplácese hasta el nombre de la función usando stacks de llamadas.
  • ¿Quién está asignando la mayor cantidad de memoria?
  • ¿Quién está haciendo la mayoría de las consultas de registro?
  • ¿Escritura en disco? etc.

Te sorprenderás cuando encuentres los cuellos de botella, ¡ya que probablemente no estén donde esperabas!

Existen diferentes requisitos para el perfil. ¿Está bien el código instrumentado o necesita un código de perfil optimizado (o incluso un código ya comstackdo)? ¿Necesita información de perfil línea por línea? ¿Qué SO estás ejecutando? ¿Necesita crear perfiles de bibliotecas compartidas también? ¿Qué hay de rastrear en las llamadas al sistema?

Personalmente, utilizo Oprofile para todo lo que hago, pero esa podría no ser la mejor opción en todos los casos. Vtune y Shark también son excelentes.

Como no mencionas la plataforma en la que estás trabajando, diré cachegrind en Linux. Seguro. Es parte del conjunto de herramientas Valgrind.

http://valgrind.org/info/tools.html

Nunca utilicé su subcaracterística Callgrind, ya que la mayor parte de mi optimización de código es para funciones internas .

Tenga en cuenta que hay un frontend KCachegrind disponible.

Para el desarrollo de Windows, he estado usando el Validator de rendimiento de Verificación de software: es rápido, razonablemente preciso y tiene un precio razonable. Lo mejor es que puede instrumentar un proceso en ejecución, y le permite activar y desactivar la recostackción de datos en tiempo de ejecución, tanto manualmente como en base a la stack de llamadas, ideal para perfilar una pequeña sección de un progtwig más grande.

Yo uso devpartner para la plataforma de la pc.

He intentado Cuantificar un AQTime y Cuantificar ganado debido a sus inestimables funciones ‘enfocar en árbol secundario’ y ‘eliminar árbol secundario’.

La única respuesta sensible es PTU de Intel. Por supuesto, es mejor usarlo en un procesador Intel y obtener resultados aún más valiosos, al menos en una máquina C2D, ya que la architecture en sí misma es más fácil para devolver perfiles significativos.

He usado VTune en Windows y Linux durante muchos años con muy buenos resultados. Las versiones posteriores han empeorado, cuando subcontrataron ese producto a su equipo de desarrollo ruso, la calidad y el rendimiento disminuyeron (se incrementaron los lockings de VTune, a menudo más de 15 minutos para abrir un archivo de análisis).

Con respecto a la instrumentación, puede descubrir que es menos útil de lo que cree. En el tipo de aplicaciones en las que he trabajado, añadir instrumentos ralentiza tanto el producto que ya no funciona (historia real: iniciar la aplicación, ir a casa, volver al día siguiente, la aplicación aún se está inicializando). Además, con la creación de perfiles no instrumentados, puede reactjsr ante problemas en vivo. Por ejemplo, con VTune remote date collector puedo iniciar una sesión de muestreo en un servidor en vivo con cientos de conexiones simultáneas que están experimentando problemas de rendimiento y detectando problemas que ocurren en la producción que nunca podría replicar en un entorno de prueba.

Para Windows, probé AMD Codeanalyst, Intel VTune y Profiler en Visual Studio Team Edition.

Codeanalyst tiene errores (se bloquea con frecuencia) y en mi código, sus resultados a menudo son inexactos. Su interfaz de usuario no es intuitiva. Por ejemplo, para alcanzar la visualización de la stack de llamadas en los resultados del perfil, debe hacer clic en la pestaña “Procesos”, luego hacer clic en el nombre de archivo EXE de su progtwig y luego hacer clic en un botón de la barra de herramientas con las minúsculas “CSS”. Pero es freeware, por lo que puede intentarlo, y funciona (con menos funciones) sin un procesador AMD.

VTune ($ 700) tiene una interfaz de usuario terrible IMO; en un progtwig grande, es difícil encontrar el árbol de llamadas particular que desea, y solo puede mirar un “nodo” en un progtwig a la vez (una función con sus llamadas y calles inmediatas) – no puede ver un completo árbol de llamadas. Hay una vista de gráfico de llamadas, pero no pude encontrar una manera de hacer que los tiempos de ejecución relativos aparezcan en el gráfico. En otras palabras, las funciones en el gráfico tienen el mismo aspecto, independientemente de la cantidad de tiempo que se haya gastado en ellas; es como si hubieran perdido totalmente el punto de creación de perfiles.

El generador de perfiles de Visual Studio tiene la mejor GUI de las tres, pero por alguna razón no puede recostackr muestras de la mayoría de mi código (las muestras solo se recostackn para algunas funciones en todo mi progtwig C ++). Además, no pude encontrar el precio o la forma de comprarlo directamente; pero viene con la suscripción de MSDN de mi compañía. Visual Studio admite código administrado, nativo y mixto; No estoy seguro acerca de los otros dos perfiladores en ese sentido.

En conclusión, ¡todavía no sé de un buen perfilador! Me aseguraré de revisar las otras sugerencias aquí.

ElectricFence funciona bien para la depuración malloc

Mi herramienta favorita es Easy Profiler: http://code.google.com/p/easyprofiler/

Es un generador de perfiles en tiempo de comstackción: el código fuente debe ser instrumentado manualmente usando un conjunto de rutinas para describir las regiones objective. Sin embargo, una vez que se ejecuta la aplicación y las medidas se escriben automáticamente en un archivo XML, solo es cuestión de abrir la aplicación Observer y hacer pocos clics en las herramientas de análisis / comparación, antes de que pueda ver el resultado en un gráfico cualitativo.

Visual Studio 2010 Profiler en Windows. VTune tenía una gran herramienta de gráfico de llamadas, pero se rompió a partir de Windows Vista / 7. No sé si lo arreglaron.

Déjame dar un plug-in para EQATEC … justo lo que estaba buscando … fácil de aprender y usar y que me da la información que necesito para encontrar los puntos de acceso rápido. Lo prefiero mucho al construido en Visual Studio (aunque todavía no he probado el VS 2010, para ser justo).

La capacidad de tomar instantáneas es ENORME. A menudo obtengo un análisis y una optimización adicionales mientras espero que se ejecute el análisis del objective real … me encanta.

Ah, y su versión base es gratis!
http://www.eqatec.com/Profiler/