Verwendung der Cachegrind-Ausgabe zur Optimierung der Anwendung

8

Ich muss den Durchsatz des Systems verbessern.

Der übliche Optimierungszyklus wurde bereits durchgeführt und wir haben bereits einen 1,5-fach besseren Durchsatz erreicht.

Ich frage mich jetzt, ob ich die cachegrind-Ausgabe verwenden kann, um den Systemdurchsatz zu verbessern.

Kann mir jemand zeigen, wie ich damit anfangen soll?

Was ich verstehe, ist, dass wir sicherstellen müssen, dass die am häufigsten verwendeten Daten klein genug sind, damit sie im L1-Cache verbleiben und die nächsten Daten in den L2 passen.

Ist das die richtige Richtung, die ich nehme?

    
rajeshnair 12.11.2009, 17:33
quelle

4 Antworten

6

Es ist richtig, dass die Ausgabe von cachegrind selbst nicht zu viele Informationen darüber liefert, wie man Code optimieren kann. Man muss wissen, wie man es interpretiert und was man über die Anpassung von Daten in L1 und L2 sagt, ist in der Tat die richtige Richtung.

Um zu verstehen, wie Speicherzugriffsmuster die Leistung beeinflussen, empfehle ich, ein exzellentes Papier "Was jeder Programmierer über das Gedächtnis wissen sollte" zu lesen. von Ulrich Drepper, dem GNU-libc-Betreuer.

    
Laurynas Biveinis 12.11.2009, 19:20
quelle
3

Wenn Sie Probleme beim Parsen der Cachegrind-Ausgabe haben, schauen Sie sich KCacheGrind an (es sollte in Ihrer Distribution Ihrer Wahl verfügbar sein). Ich benutze es und finde es sehr hilfreich.

    
Stephen Newell 12.11.2009 17:59
quelle
2

die Cachegrind-Dokumentation , die Ihnen zur Verfügung gestellten Informationen by cachegrind ist die Anzahl der Cache-Misses für einen bestimmten Teil Ihres Codes. Sie müssen wissen, wie Caches an der Architektur arbeiten, auf die Sie ausgerichtet sind, damit Sie wissen, wie Sie den Code reparieren können. In der Praxis bedeutet dies, Daten kleiner zu machen oder das Zugriffsmuster einiger Daten zu ändern, so dass sich zwischengespeicherte Daten immer noch im Cache befinden. Sie müssen jedoch den Daten- und Datenzugriff Ihres Programms verstehen, bevor Sie auf die Informationen zugreifen können. Wie es im Handbuch heißt,

  

Kurz gesagt, Cachegrind kann Ihnen sagen, wo einige der Engpässe in Ihrem Code sind, aber es kann Ihnen nicht sagen, wie Sie diese beheben können. Sie müssen das selbst herausfinden. Aber zumindest hast du die Information!

    
quelle
2

1.5x ist eine schöne Beschleunigung. Es bedeutet, dass du etwas gefunden hast, das 33% der Zeit gekostet hat, die du loswerden konntest. Ich wette, Sie können mehr tun, sogar bevor Sie auf Low-Level-Probleme wie Datenspeicher-Cache zugreifen. Dies ist ein Beispiel dafür. Im Grunde könnte man haben zusätzliche Leistungsprobleme (und Möglichkeiten zur Beschleunigung), die vorher nicht groß waren, sagen 25%. Nun, mit der 1,5-fachen Beschleunigung sind diese 25% jetzt 37,5%, also ist es "mehr wert" als es war. Oft liegt ein solches Problem in der Form eines Mid-Stack-Funktionsaufrufs, der eine Arbeit anfordert, die, wenn Sie wissen, wie viel es kostet, Sie möglicherweise entscheiden, nicht vollständig notwendig ist. Da kcachegrind diese nicht wirklich festlegt, kann es sein, dass Sie nicht erkennen, dass es ein Problem ist.

    
Mike Dunlavey 19.11.2009 14:18
quelle

Tags und Links