Ich möchte meine Ausführung in einer nicht standardmäßigen Weise profilieren. Mit gprof, Valgrind, Oprofile ... für eine bestimmte Funktion, ich bekomme nur das Mittel seiner Ausführungszeit. Was ich möchte, ist die Standardabweichung dieser Ausführungszeit zu erhalten.Wie profiliere ich jeden Anruf einer Funktion?
Beispiel:
void a()
sleep (rand() % 10 + 10)
void b()
sleep (rand() % 14 + 2)
main
for (1 .. 100)
a()
b()
mit Standard-Werkzeugen, ein und b Funktionen ähnliches Verhalten haben. Kennst du irgendein Werkzeug, das mir dieses Ergebnis mit einem automatischen Ansatz geben könnte?
Ich habe bereits mit TAU getestet, aber bis jetzt ist es nicht wirklich relevant. Ich denke, dass es eine Lösung auf diese Weise gibt, aber ich bin nicht genug zuversichtlich mit TAU. Wenn jemand Tau-Experte ist, versuche ich, alle Ausführungszeiten der Funktion beizubehalten, und am Ende die Mathematik zu machen. Aber ich weiß nicht, wie ich es in Tau angeben soll.
Ich möchte Profil C/C++ - Code, aber wenn Sie irgendeine andere Programmiersprache führen, bin ich offen.
Muss es automatisch sein? Schreiben Sie einfach ein paar Makros und haben Sie eine Tabelle, in der Sie die Ergebnisse aufschreiben. Dann können Sie berechnen, was Sie wollen. – Makis
würde ich besser sein. Wenn dies nicht der Fall ist, muss ich für jede Funktion eine Tabelle verwalten, die dynamische Zuweisung verwalten (die Anzahl der Funktionsaufrufe kann nicht vorhergesagt werden).Und wenn Sie ein Programm mit Hunderten von Funktionen profilieren möchten, erscheint es unrealistisch, die Makros manuell hinzuzufügen. –
Hm, ich kann dir da nicht helfen, aber wie bei der dynamischen Zuweisung: du brauchst es nicht, nur einen Zähler für die Anzahl der Anrufe und einen Ringpuffer. Natürlich werden Sie nicht die Ergebnisse aller Anrufe erhalten, aber diese beiden sollten Ihnen helfen, die Funktionen einzugrenzen, die die meiste Zeit benötigen. Oh, und wenn Sie Funktionsaufrufe auf irgendeine Weise blockieren können, können Sie dies automatisch machen. – Makis