Beim Testen der Arbeit von benutzerdefinierten Heap-Manager (um System eins zu ersetzen) habe ich einige Verlangsamungen im Vergleich zu System-Heap aufgetreten.Profiler zeigt keine Zeit für Sprünge, aber viel Zeit für Vergleiche
Ich verwendete AMD CodeAnalyst für Profilerstellung x64-Anwendung auf Windows 7, Intel Xeon CPU E5-1620 v2 @ 3,70 GHz. Und bekam die folgenden Ergebnisse:
Dieser Block verbraucht etwa 90% der Zeit für die gesamte Anwendung laufen. Wir können eine Menge Zeit auf "cmp [rsp+18h], rax"
und "test eax, eax"
verbringen, aber keine Zeit auf Sprünge direkt unterhalb der Vergleiche verbracht. Ist es in Ordnung, dass Sprünge keine Zeit brauchen? Liegt es am Verzweigungsvorhersagemechanismus?
änderte ich die Klausel in die entgegengesetzten und hier, was ich habe (die Ergebnisse etwas anders in absoluten Zahlen, weil ich manuell gestoppt Sitzungen Profilieren - aber immer noch eine Menge Zeit durch vergleichen genommen wird):
Es gibt so viele Aufrufe an diese Vergleiche, dass sie zu einem Flaschenhals werden ... So kann ich diese Ergebnisse interpretieren. Und wahrscheinlich ist die beste Optimierung die Überarbeitung des Algorithmus, richtig?
Ich habe es geschafft, den Algorithmus zu verbessern, jetzt benutzerdefinierte Heap ist von der gleichen Geschwindigkeit wie System eins in Release-Konfiguration. Es bleibt jedoch die Frage, warum Vergleiche Zeit brauchen, aber keine Sprünge? – greenpiece
Sie schreiben einen Heap-Manager, um ihn zu testen, müssen Sie ihn stark laden. Du schaust eindeutig auf die innere Schleife. Wenn Sie möchten, dass es schnell ist, verwenden Sie die gesamte verstrichene Zeit, um die Beschleunigung zu messen. Wie viel Prozent ist es, Ihnen zu sagen, wo Sie nach Beschleunigungen suchen. Wenn Sie den Prozentsatz in einem Codeabschnitt nach unten drücken, erhöhen Sie ihn in einem anderen Code, da er immer noch zu 100% addiert werden muss. Es könnte also eine Frage von Cache-Misses und Verzweigungsvorhersage sein. Das sind die CPU-Ingenieure, die versuchen, Ihnen Zeit zu sparen. Aber du kannst dir das ansehen und sagen "Kann ich das weniger machen?" So sparen Sie Zeit. –