Gezielt für x64 würde manchmal zu einer sehr schlechten Leistung führen als bei anycpu

9

Dies sind 2 Funktionen, fun1 benötigt 1 Parameter, fun2 benötigt 4 zusätzliche nutzlose Parameter. Wenn ich für x64 anvisierte, benötigt fun1 4s, aber fun2 benötigt weniger als 1s. Wenn ich anycpu anvisiere, dann brauchen beide weniger als 1s.

Es gibt eine ähnliche Frage, die ich hier gestellt habe warum Seq.iter ist 2x schneller als for-Schleife, wenn das Ziel für x64 ist?

Es ist in .Net 4.5 Visual Studio 2012, F # 3.0, in Windows 7 x64

kompiliert %Vor%     
colinfang 05.10.2012, 22:50
quelle

2 Antworten

2

Dies ist keine vollständige Antwort, es ist die erste Diagnose des Problems.

Ich kann das Verhalten mit der gleichen Konfiguration reproduzieren. Wenn Sie F # Interactive 64-bit in Tools -> Options -> F# Tools -> F# Interactive aktivieren, können Sie dort dasselbe Verhalten beobachten.

Anders als die andere Frage , x64 Jitter ist kein Problem. Die Option "Tailaufrufe generieren" in der Projekteigenschaft führt zu einer erheblichen Verlangsamung von test1 im Vergleich zu test2 . Wenn Sie diese Option deaktivieren, haben zwei Fälle ähnliche Geschwindigkeiten.

Andererseits können Sie das inline -Schlüsselwort für fun1 verwenden, damit kein Tail-Aufruf erforderlich ist. Zwei Beispiele sind in der Ausführungszeit wieder vergleichbar, egal fun2 ist inline oder nicht.

Es ist seltsam, dass das Hinzufügen von tail. opcode zu fun1 es sehr viel langsamer macht als das Gleiche mit fun2 . Sie können F # Team für weitere Untersuchungen kontaktieren.

    
pad 08.11.2012 14:01
quelle
0

Der Unterschied ist mit ziemlicher Sicherheit eine Eigenart des JITer. Es erklärt auch die inkonsistenten Ergebnisse. Dies ist ein häufiges Problem bei Micro-Benchmark-Tests wie diesem. Führen Sie eine oder mehrere redundante Ausführungen der Methoden durch, um das Ganze hinter den Kulissen zu kompilieren und das letzte zu zeihen. Sie werden identisch sein.

Aufgrund dieser Eigenart können Sie bizarrere Ergebnisse erzielen.

    
GregRos 07.10.2012 08:27
quelle

Tags und Links