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


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?


75
2017-08-25 19:09


origen


Respuestas:


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.


31
2017-08-25 19:32



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?

24
2017-09-16 08:22



Mi única experiencia en el código de C ++ es con AQTime por 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.


6
2017-08-25 19:23



EN MI HUMILDE OPINIÓN, muestreo utilizando un depurador es el mejor método. Todo lo que necesita es un IDE o depurador que le permita detener el programa. Soluciona los problemas de rendimiento incluso antes de instalar el perfilador.


6
2017-11-05 00:33



he usado Glowcode ampliamente en el pasado y no han 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.


5
2017-08-25 19:27



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


5
2017-09-22 07:18



Nunca he hecho perfiles antes. Ayer programé una clase ProfilingTimer con un horario estático (un mapa <std :: string, long long>) 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?)


5
2017-11-20 14:33



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


4
2017-09-16 08:24



Para Windows, echa un vistazo 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 pilas 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!


4
2017-09-24 13:54



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 compilado)? ¿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.


3
2017-08-25 19:12