Frage

Ich arbeite an einem Qt-basierten MacOS / X Audio-Metering-Anwendung, die Audio-Metering-Widgets enthält (möglicherweise eine Menge von ihnen), von denen jeder soll alle 50ms aktualisiert werden (dh bei 20 Hz).

Das Programm funktioniert, aber wenn viele Meter auf einmal aktualisiert werden, verwendet es viele CPU-Zeit und kann biegt (spinny-Farbrad, oh nein!).

Das Merkwürdige ist dies: Ursprünglich war diese App würde nur Update () aufrufen, auf dem Zähler-Widget, wenn der Wert Meter geändert, und damit die gesamte Meter-Widget würde neu gezeichnet alle 50ms sein. Aber ich dachte, dass ich klug sein würde und nur den Bereich des Zählers berechnen, die tatsächlich neu gezeichnet werden muss, und neu zu zeichnen nur den Teil des Widgets (zB Update (x, y, w, h), wobei y und h berechnet auf der Grundlage der alten und neuen Werte des Zählers). Allerdings, wenn ich das umgesetzt, es tatsächlich die CPU-Auslastung viermal höher gemacht (!) ... obwohl die ca. 50% weniger Pixel pro Sekunde zeichnen.

erklären kann jemand, warum diese Optimierung tatsächlich erweist sich als ein Pessimierung zu sein? Ich habe eine triviale Beispiel-Anwendung geschrieben, die die Wirkung zeigt, hier:

http://www.lcscanada.com/jaf/meter_test.zip

Wenn ich Kompilierung (qmake; make) die über App und führen Sie es wie folgt aus:

$ ./meter.app/Contents/MacOS/meter 72 
Meter:  Using numMeters=72 (partial updates ENABLED)

... oben zeigt den Prozess mit ~ 50% CPU.

Wenn ich deaktivieren Sie die clever-partial-Updates Logik, indem es wie folgt ausgeführt werden:

$ ./meter.app/Contents/MacOS/meter 72 disable_partial_updates
Meter:  Using numMeters=72 (partial updates DISABLED)

... oben zeigt das Verfahren nur ~ 12% CPU. Huh? Sollte dies nicht Fall mehr CPU nehmen, nicht weniger?

Ich habe versucht, die App Profilierungs mit Shark, aber die Ergebnisse bedeuten nicht viel zu mir. FWIW, ich bin mit Snow Leopard auf einem 8-Core Xeon Mac Pro.

War es hilfreich?

Lösung

GPU Zeichnung ist ein Los schneller dann im Stich gelassen CPU caclulate das Teil (zumindest neu zu zeichnen für OpenGL dies in Betracht zieht, ich habe das Buch OpenGL superbible, und es heißt, dass OpenGL Build ist neu zeichnen nicht, Delta, da dies möglicherweise eine Los mehr Arbeit zu tun) zu zeichnen. Auch wenn Sie Software-Rendering verwenden, werden die Bibliotheken higly optimierter ihre Arbeit richtig zu tun und schnell . So einfach ist neu gezeichnet Stand der Technik.

Andere Tipps

FWIW top auf meiner Linux-Box zeigt ~ 10-11% ohne partielles Updates und 12% unter Verwendung von teilweise Updates. Ich hatte 400 Meter verlangen aber, dass die CPU-Auslastung zu erhalten.

Vielleicht ist es nur, dass der Aufwand für Qt einen Farbbereich der Einrichtung Zwerge tatsächlich Ihre Farbe Zeit? Nachdem alle Ihre Malerei ist wirklich einfach, es ist nur zwei rechteckigen Füllungen.

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