2008-09-10 4 views
11

Ich versuche, mehrere Engpässe bei einer Anwendung zu optimieren, die auf einer wirklich breiten Palette von CPUs und Architekturen laufen soll (einige von ihnen sind sehr nahe bei eingebetteten Geräten).Begrenzung der CPU-Geschwindigkeit für das Profiling

Die Ergebnisse meines Profilers sind jedoch wegen der Geschwindigkeit meiner CPU nicht wirklich signifikant. Gibt es eine Möglichkeit (vorzugsweise unter Windows oder Mac OS X), die Geschwindigkeit meiner CPU für Profiling-Zwecke zu begrenzen?

Ich habe über die Verwendung einer virtuellen Maschine nachgedacht, aber keine solche Funktionalität gefunden.

Antwort

0

Es gab kürzlich eine App auf Downloadsquad.com. Ich erinnere mich nicht an den Namen, aber es hat ein bisschen Spaß mit Prozessoren und Task-Manager. Es könnte nur gewesen sein zu verwalten, welche Apps auf welcher CPU sind, aber vielleicht würde es dir das geben. Ich werde versuchen, es heute Nachmittag zu suchen, und antworten, wenn ich es finde.

0

Viele Profiler (zum Beispiel oprofile - aber das ist nur Linux) können Sie die Häufigkeit einstellen, dass sie Daten sammeln. Sehen Sie, ob Ihr Profiler dies unterstützt, und wenn nicht, versuchen Sie es mit einem anderen.

+0

Ich glaube, er will die CPU verlangsamen, so dass die Beziehung zwischen CPU-Geschwindigkeit und Geschwindigkeit anderer Operationen (wie I/O, Benutzereingabe ...) näher an den Beziehungen auf alten Systemen ist. Ich sehe nicht, wie die zunehmende Häufigkeit der Sammlung dort helfen würde. – sleske

+0

@sleske Ich nahm an, er meinte, dass die CPU so schnell war, dass sehr wenige Profilproben gesammelt wurden, so dass keine aussagekräftigen Daten zurückgegeben wurden. –

1

Ich fürchte, ich weiß keine andere Antwort, als sich in Ihrer Gegend nach alter Hardware umzusehen. Die CPU ist nicht die einzige Variable, die (normalerweise) Dinge beeinflussen kann. Die Größe des L1/L2-Caches, die Geschwindigkeit des Speicherbusses, die Speichergeschwindigkeit/-latenz, die Festplattengeschwindigkeit usw. sind bei vielen Anwendungen wichtige Faktoren.

2

Es ist ein weit verbreitetes Missverständnis, dass Sie wissen müssen, wie schnell Ihr Code ist, um zu wissen, wo Ihre Leistungsprobleme liegen. Das verwirrt die Problemfindung mit der Problemmessung.

This is the method I use.

Wenn es etwas verschwenderisch Logik im Programm ist, wird es verschwenderisch sein, egal welche CPU es läuft.

Was Sie wissen müssen, ist, wo es ist. Für die Messung müssen Sie nicht wissen, wie groß es ist; Sie müssen nur wissen, dass es groß genug ist, um repariert werden zu müssen.

Normalerweise gibt es eine Reihe von Problemen unterschiedlicher Größe. Sie werden wahrscheinlich zuerst die größten finden, aber egal, in welcher Reihenfolge Sie sie reparieren, jedes einzelne, das Sie reparieren, wird es einfacher machen, die restlichen zu finden, weil sie einen größeren Prozentsatz annehmen werden.

+0

Sie haben einen Punkt, aber vor allem müssen Sie herausfinden, * wenn Sie ein Problem haben *. Wenn Sie über ineffizienten Code verfügen, aber die Ineffizienzen durch I/O-Wartezeiten verringert werden, ist es sinnlos, ihn zu optimieren. Daher sind die Beziehungen zwischen den Geschwindigkeiten der Systemkomponenten für Leistungstests wichtig, und deshalb muss er die CPU verlangsamen. – sleske

+0

@sleske: Deshalb möchte ich nicht zu sehr zwischen CPU-Zeit und blockierter Zeit unterscheiden. Ein Performance-Bug kann zu viel sein, aber das OP hat I/O nicht wirklich erwähnt. Mein Punkt ist, etwas mit 10 Anweisungen zu tun, wobei 1 die Aufgabe erledigen würde, so verschwenderisch bei 1 GHz wie bei 1 Hz. Ich denke Prozente sind wichtiger als Zeiten, um den Müll zu isolieren. –

+1

@sleske: ... ich glaube nicht, dass ich es sehr gut gesagt habe. Hier ist ein Beispiel (http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773), wo es eine Reihe von Leistungsproblemen gab, die in der Größenordnung von ungefähr 2 Größenordnungen lagen Eines davon war ein I/O-Problem. Nachdem einige größere entfernt wurden, kam es zu einem Punkt, an dem die E/A am größten war. Wenn die CPU mit einer anderen Geschwindigkeit läuft, würde das nur an einem anderen Punkt kommen. –

0

Ich habe darüber nachgedacht, eine virtuelle Maschine, haben aber nicht mit solche Funktionalität gefunden.

Warum benötigen Sie eine VM, die diese Funktionalität explizit anbietet? Beschränken Sie einfach die CPU-Auslastung der VM im Host-Betriebssystem (wo es nur ein regulärer Prozess ist). Das sollte genau die gleiche Wirkung haben.

Sie können dies z.B. Verwenden von cpulimit unter Linux; Ähnliche Lösungen gibt es für MS Windows.

+0

Dies macht eine sehr unruhige CPU, z.B. schnell für eine halbe Sekunde, dann nichts für die nächste halbe Sekunde - je nachdem, wie das VM-System funktioniert. –