Dies ist eine Fortsetzung eines bestehenden Threads (http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application) - Ich habe festgestellt, dass es nicht der Cache ist, der meine Anwendung behindert. Um es kurz zu machen, ich habe eine Anwendung, die 70 Prozent der Laufzeit in einer Funktion verbringt (15 Sekunden von 22). Daher möchte ich die Laufzeit dieser Funktion so weit wie möglich verkürzen, da die geplante Verwendung der Funktion für VIEL größere Daten erfolgt (dh 22 Sekunden sind nicht die geplante Laufzeit :)
Das Problem ist, dass mich die Ausgabe von VTune verwirrt, der Code scheint eine enorme Menge an Zeit an absolut unerwarteten Stellen zu verbringen. Ich bin ideenlos, also poste ich mein Projekt hier zusammen mit den Profilerergebnissen.
Beim Blick auf die inkriminierte evaluateExits() Funktion, verwirren mich diese Dinge:
1/ Die Funktion verbringt 2,2s damit, eine Inline-Funktion aufzurufen, die unabhängig von Parametern 1 zurückgibt (Zeile 425, this->contractManager->contractCount()). Hinweis: Die Version, in der die Funktion unabhängig von den Parametern 1 zurückgibt, ist einer der möglichen Fälle, daher kann ich nicht "contractCount=1" angeben und es dabei belassen. Kann die Umleitung von einem virtuellen Tabellenzeiger diese 2,2 Sekunden aufbrauchen (contractCount() ist eine virtuelle Methode)?
2/ Die Funktion verbringt 3,3s mit min(uint1, uint2) (Zeile 432), obwohl ich eine Version von wmin verwende, die so CPU-freundlich wie möglich sein sollte.
3/ Die Funktion verbringt 1,6s mit Zeile 512, was eine sehr triviale Operation ist und die aufgerufene Funktion keine virtuelle ist..
Also die Fragen lauten: Warum dauern diese drei Codezeilen so lange? Was übersehe ich? Und wie könnte ich meinen Code optimieren, um ihn schneller auszuführen? Sollte ich das wmin() durch eine SSE-Version von min für ganze Arrays ersetzen?
Jede Eingabe wird sehr geschätzt. Daniel
BEARBEITEN: Beim Betrachten des Assemblies fand ich heraus, dass in Fall 1/ tatsächlich der vfptr den Code "langsam" macht. Ich ersetzte den Aufruf einer virtuellen Funktion durch einen FastDelegate von Don Clugston, aber es trat keine Leistungsänderung auf (Ich habe keine Ahnung warum). Aufgrund des Kommentars von Nightingale sollten die Anhänge nun alle erforderlichen Dateien enthalten. Allerdings kann die Binärdatei nicht erfolgreich ausgeführt werden, da sie sich mit gemeinsamem Speicher verbindet, in dem Hunderte von MB an Daten vorhanden sind.
Also, ich hänge das gesamte Projekt zusammen mit den Ergebnissen von VTune hier und hier