2011-01-08 14 views
2

Ich habe eine Anwendung in C++ geschrieben, die jemand anders in einer Weise geschrieben hat, die CPU-Caches maximal nutzen soll. Diese Anwendung läuft auf einem Gast-Ubuntu-Betriebssystem, das Paravirtualisierung verwendet. Ich habe cachegrind ausgeführt und sehr niedrige Cache-Miss-Raten erhalten.Cachegrind unter Xen

Da mein Betriebssystem virtualisiert ist, kann ich sicher sein, dass diese Werte tatsächlich korrekt sind, um zu zeigen, dass der CPU-Cache für meine Anwendung gut genutzt wird?

+0

Schlüsselwort hier ist "soll". Programmierer sind sehr gut darin, sich selbst zu täuschen, was aus einer Zeitperspektive in einem Programm passiert. Das erste, was ich vorschlagen würde ist, das Ding zu probieren und zu sehen, was es wirklich macht. [Hier ein Beispiel.] (Http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773) –

+0

+1 Gute Frage. Ich arbeite gerade jetzt daran. Irgendwelche Updates seit der ursprünglichen Frage? – Iterator

+0

@Iterator Ich habe nie wirklich einen guten Weg gefunden, dies zu testen, und meine Organisation hat schließlich die Anwendung auf eine eigene Standalone-Maschine verschoben, anstatt sie virtualisiert zu halten. –

Antwort

-1

Cachegrind ist ein Simulator. Eine reale CPU kann sich tatsächlich anders verhalten (z. B. kann Ihre reale CPU eine andere Cache-Hierarchie als Cache-Grind, unterschiedliche Cache-Größen, eine andere Ersetzungsrichtlinie usw. aufweisen). Sie müssten die Leistungsindikatoren der realen CPUs beobachten, um sicher zu wissen, wie gut Ihr Programm tatsächlich auf echter Hardware in Bezug auf den Cache funktioniert.