Frage

Ist es möglich, den Durchsatz einer Anwendung auf einem Prozessor aus den Taktzahlen (Prozessor-Befehlszyklen) durch die Anwendung verbraucht zu bestimmen? Wenn ja, wie es berechnen?

War es hilfreich?

Lösung

Wenn der Prozess vollständig CPU gebunden ist, dann teilen Sie die Prozessorgeschwindigkeit durch die Anzahl der Zyklen, um den Durchsatz zu erhalten.

In Wirklichkeit sind einige Prozesse vollständig CPU gebunden, obwohl, in dem Fall, dass Sie andere Faktoren nehmen (Plattengeschwindigkeit, Speichergeschwindigkeit, Serialisierung, etc.) berücksichtigt werden.

Andere Tipps

Ganz einfach:

#include <time.h>
clock_t c;
c = clock(); // c holds clock ticks value
c = c / CLOCKS_PER_SEC; // real time, if you need it

Beachten Sie, dass der Wert, den Sie erhalten, ist eine Annäherung, für weitere Informationen finden Sie in der clock() Manpage .

Einige CPUs verfügen über interne Leistungsregister , die es Ihnen ermöglichen, alle möglichen interessanten Statistiken zu sammeln, wie Befehlszyklen (manchmal sogar auf einer Pro-Ausführungseinheit-Basis), Cache-Misses, Anzahl der Cache / Speicher liest / schreibt, etc. Sie diese direkt zugreifen können, aber je nachdem, was CPU und OS Sie es verwenden vorhandenen Tools kann gut sein, das alle Details für Sie über eine GUI zu verwalten. Oft ist ein gutes Werkzeug Profilierungs Unterstützung für Leistungsregister haben und ermöglichen es Ihnen zu sammeln Statistiken mit ihnen.

Wenn Sie die Cortex-M3 verwenden von TI / Luminary Micro, können Sie nutzen die driverlib geliefert von TI / Luminary Micro machen. die SysTick Funktionen können Sie die SysTickPeriod auf 1 Prozessorzyklus gesetzt: So können Sie 1 Prozessortakt zwischen Unterbrechungen haben. Durch Zählen der Anzahl der Interrupts sollten Sie eine „nahe genug Schätzung“ auf, wie viel Zeit eine Funktion oder ein Funktionsblock nehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top