Domanda

Cosa suggeriresti lo strumento migliore per profilare il codice C / C ++ e determinare quali parti impiegano più tempo. Attualmente sto solo facendo affidamento sui registri, ma ovviamente le informazioni non sono accurate poiché vengono introdotti ritardi non necessari.

Preferibilmente, lo strumento sarebbe anche in grado di rilevare / suggerire aree che potrebbero essere ottimizzate, se tale strumento esiste.

Piattaforma: Linux

L'applicazione deve essere utilizzata in un ambiente incorporato, quindi dovrebbe essere leggera ed esterna (non un plug-in su alcuni IDE).

È stato utile?

Soluzione

Posso consigliare vivamente callgrind in combinazione con KCachegrind .

Altri suggerimenti

" gprof " su linux / freebsd è uno strumento abbastanza semplice ed efficace per identificare quali routine stanno eseguendo il cPU durante l'esecuzione. Fornisce un profilo nidificato e piatto delle funzioni. Fornisce la percentuale di tempo CPU impiegata da ciascuna funzione eseguita durante il runtime del profiler, nonché la percentuale rilevata all'interno della funzione stessa e la percentuale assunta dalle sue funzioni figlio. Questo ti aiuta a separare facilmente le funzioni offensive.

Ho fatto buone esperienze usando il profiler di Microsoft Visual C ++, ci sono altri programmi esterni come Intels VTune , ma la maggior parte di essi non sono gratuiti.

Dipende dalla piattaforma. Se stai usando MSVC, alcune versioni di esso ha un profiler integrato. AMD e Intel hanno entrambi disponibili anche i profiler (CodeAnalyst e VTune).

Su Linux, l'unico che ho usato è gprof, ma so che ce ne sono altri (e penso che quelli di AMD o Intels potrebbero essere disponibili anche nelle versioni Linux)

E ovviamente anche l'intera suite Valgrind può essere utile. Alcuni strumenti come callgrind o cachegrind possono darti molte informazioni sulle prestazioni.

Esistono molti buoni strumenti di profilazione per questo come Quantify o KCachegrind. L'unico problema con questi strumenti è che rallentano le prestazioni del tempo di esecuzione, quindi su alcuni sistemi di grandi dimensioni potrebbero non essere sufficientemente scalabili.

A volte è sufficiente eseguire il debugger e premere ctrl-c, guardare la traccia dello stack e ripeterlo forse 4 volte.

Se ti trovi sempre nella stessa parte del codice, hai scoperto dove probabilmente stai trascorrendo la maggior parte del tempo.

Volete chiaramente due cose:

  1. Per profilare il tuo codice e amp; misuralo.

  2. Per rilevare aree che potrebbero essere ottimizzate.

Questi sono problemi diversi. Non sono gli stessi, nonostante ciò che ti potrebbe essere stato detto.

Per il problema (1) verranno suggeriti molti buoni profiler.

Per i problemi (2) i profiler aiutano solo indirettamente.
Esiste una tecnica molto più semplice e generalmente più efficace.

Guarda qui

Andrò con gprof / oprofile, se stiamo parlando del mondo UNIX.

Devi ricompilare la tua app (almeno con gprof).

Gprof

Oprofile

Se sei su Windows, suggerisco AQTime . Supporta quasi tutti i compilatori là fuori, inclusi .NET, Delphi e VB (e tutti i compilatori C ++, ovviamente (;) ed è solo il miglior strumento di profilazione che io abbia mai provato. E non è solo un profiler delle prestazioni.

Per le misurazioni delle prestazioni oprofile è una buona scelta in quanto esiste un plug-in intuitivo per l'eclissi nella Progetto Linux Tools .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top