Performance-Test von Funktionen

stimmen
3

linux gcc 4.4.1 C99

Ich frage mich, was der beste Weg ist, um die Leistung eines C-Programms zu testen.

Ich habe einige Funktionen, die ich umgesetzt haben. Allerdings habe ich könnte ein anderes Design für jede Funktion verwendet.

Grundsätzlich sollte ich testen wollen, um zu sehen, welches Design eine bessere Leistung gibt.

Danke vielmals,

Veröffentlicht am 30/12/2009 um 03:38
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
4

Werfen Sie einen Blick auf diesen Beitrag auf Code - Profiler.

Beantwortet am 30/12/2009 um 03:44
quelle vom benutzer

stimmen
1

Das erste, was, um herauszufinden, ob Sie diese Funktionen optimieren müssen. Es sei denn, sie in dem kritischen Pfad für Ihren Code sind, können sie mehr als schnell genug sein.

Wenn Sie Ihre Anwendung profiliert haben und fanden sie langsam sind, ein guter Weg, um die Leistung zu testen, ist die Funktion eine große Anzahl von Malen zu rufen und um die durchschnittliche Zeit, die laufen dauert herausfinden.

Sie sollten auch CPU-Zeit zu verwenden, anstatt Wanduhr-Zeit versuchen, so dass eine genauere Spurweite ist.

Beantwortet am 30/12/2009 um 03:44
quelle vom benutzer

stimmen
2

Meistens möchten Sie einen Profiler verwenden. Die Post weist von Fragsworth ist ein guter Anfang. Ich persönlich ziehe Shark für Mac OS X und gprof für Linux.

Aber in Ihrem Fall, dass Sie auch Uhr () aufrufen oder getrusage () zum Beispiel auf diese Weise:

clock_t t = clock();
for (i = 0; i < 1000; ++i) my_func();
printf("time = %lf\n", (double)(clock() - t) / CLOCKS_PER_SEC);

Profiler ist nützlich, wenn Sie graben möchten, welche Teil des Codes am meisten Zeit in Anspruch nimmt. Aufruf Uhr () / getrusage () ist bequemer (für mich), wenn Sie möchten, vergleichen / Benchmark verschiedene Implementierungen.

Beantwortet am 30/12/2009 um 05:00
quelle vom benutzer

stimmen
3

Ich möchte testen, um zu sehen, welche Design eine bessere Leistung gibt.

Warum spielt es eine Rolle? Dies ist keine Flip Frage! Sie sollen ein Erfolgsziel im Auge haben, und wenn Sie es gerecht zu werden, ist der Code schnell genug.

Wie wissen Sie, wie schnell ist „schnell genug“? Es stellt sich heraus, die Benutzer-Schnittstelle Menschen auf die Wirkung der Reaktionszeit auf den Benutzererfahrung gute Daten haben:

  • 0,1 Sekunden beträgt etwa die Grenze dafür, dass der Benutzer das Gefühl, dass das System augenblicklich reagiert, was bedeutet, dass keine spezielle Rückkopplung ist notwendig, außer um das Ergebnis anzuzeigen. (Die meisten Menschen haben eine Reaktionszeit von etwa 0,1 Sekunden; Düsenjäger Piloten um 0.08s get down, dh 80 ms.)

  • 1 Sekunde über die Grenze für den Fluss des Benutzers gedacht ununterbrochen zu bleiben, auch wenn der Benutzer die Verzögerung bemerken. Normalerweise ist kein spezielles Feedback bei Verspätungen von mehr als 0,1 erforderlich, jedoch weniger als 1,0 Sekunden, aber der Benutzer hat das Gefühl, direkt „Fahren“ Ihre Anwendung verlieren.

  • 10 Sekunden geht es um die Grenze für das Halten die Aufmerksamkeit des Benutzers auf der App konzentriert. Bei längeren Verzögerungen, werden die Nutzer wollen andere Aufgaben während des Wartens auf den Computer zu beenden, so sollten sie Feedback gegeben werden, das anzeigt, wenn der Computer getan werden erwartet. Feedback während der Verzögerung ist besonders wichtig, wenn die Reaktionszeit ist schwer vorherzusagen, oder ist sehr unterschiedlich.

Die quantitativen Ergebnisse oben gelten nur für Interaktion, natürlich, die in Sekunden Wartezeit gemessen wird. Aber selbst wenn Ihr Ziel ist Netzwerkpakete gesendet, Seiten RAM zugewiesen, die Blöcke von der Festplatte gelesen / geschrieben, oder einfach nur Watt Leistung verbraucht wird , die Botschaft , die ich zu kommunizieren versuchen ist , dass Sie ein Performance - Ziel haben sollten , sollte das Ziel sein quantifiziert und das Ziel sollte auf die Bedürfnisse der Benutzer angeschlossen werden . Wenn Sie nicht über ein quantifizierbares Ziel haben, sind Sie nicht Engineering zu tun; Sie nur im Dunkeln pfeifen. Es sei denn , Ihr Ziel sich selbst zu erziehen (oder Leerlauf Neugier zu befriedigen), die Frage , die Sie stellen sollten , ist „mein Code ist gut genug , dass ich weitermachen kann?“


Wenn Sie nicht Ihre Leistung Ziel zu treffen, oder wenn Sie sich selbst zu erziehen versuchen, ich denke , die beste Kombination aus lesbar und detaillierten Informationen kommt den von der Verwendung valgrind Profiler ( --tool=callgrind --dump-instr=yes) zusammen mit dem kcachegrindVisualizer.

Beantwortet am 30/12/2009 um 05:20
quelle vom benutzer

stimmen
1

Sie können gprof verwenden, die ein kostenloser Profiler ist.

Beantwortet am 30/12/2009 um 18:05
quelle vom benutzer

stimmen
0

Ich Neben Profilierungs benötigen Sie den im Test befindlichen Code aus einem Gurtzeug (Fahrer) ausgeführt werden, um die Messwerte mitteln. Auf diese Weise werden Ihre Vergleiche nicht durch einmalige Messungen verzerrt, so haben Sie eine große Probenpopulation mit Mittelwert und Standardabweichung zu vergleichen. Es gibt viele Multi-Threaded-Frameworks, die die Last der Fahrt für Sie erreichen können.

Beantwortet am 29/03/2013 um 16:53
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more