45 Stimmen

Optimiert die .NET CLR wirklich für den aktuellen Prozessor?

Wenn ich über die Leistung von JIT-gestützten Sprachen wie C# oder Java lese, sagen die Autoren in der Regel, dass sie theoretisch viele nativ kompilierte Anwendungen übertreffen sollten/könnten. Die Theorie ist, dass native Anwendungen in der Regel nur für eine Prozessorfamilie (z. B. x86) kompiliert werden, so dass der Compiler bestimmte Optimierungen nicht vornehmen kann, da sie möglicherweise nicht auf allen Prozessoren wirklich optimiert werden. Auf der anderen Seite kann die CLR während des JIT-Prozesses prozessorspezifische Optimierungen vornehmen.

Weiß jemand, ob die CLR von Microsoft (oder Mono) tatsächlich prozessorspezifische Optimierungen während des JIT-Prozesses durchführt? Wenn ja, welche Art von Optimierungen?

0 Stimmen

Soweit ich weiß, im Moment nicht wirklich.

1 Stimmen

Ein Verschwörungstheoretiker könnte auch darüber nachdenken, ob MS das JIT so programmieren könnte, dass es eine De-Optimierung vornimmt, wenn die Software unter einem System eines Konkurrenten läuft, z. B. virtualisiert auf einem x86-Mac, vorausgesetzt, sie könnten erkennen, dass es sich um einen Mac handelt.

8 Stimmen

@aaronls: MacBU bringt Microsoft schätzungsweise 350 Millionen Dollar pro Jahr an Einnahmen ein. Macs sind ein Profit-Center für Microsoft, den weltweit größten Anbieter von Mac-Software außerhalb von Apple selbst. Wie passen diese Fakten zu Ihrer Verschwörungstheorie?

1voto

Ben Voigt Punkte 268424

Ich denke, einige Java-Compiler tun dies, Microsoft .NET nicht, und es schlägt nur vorkompiliert, wenn Sie Äpfel mit Birnen vergleichen. Precompiled kann mit Bibliotheksvarianten ausgeliefert werden, die auf verschiedene CPUs (oder, was wahrscheinlicher ist, auf verschiedene Befehlssätze) abgestimmt sind, und die Laufzeitprüfung zur Auswahl der zu ladenden Bibliothek ist viel billiger als JIT. Zum Beispiel tut mplayer dies (google für mplayer enable-runtime-cpudetection).

0 Stimmen

Haben Sie eine Referenz, um Ihre Behauptung zu untermauern, dass MS .NET dies nicht tut? Ich stelle das nicht in Frage, frage mich nur, ob das eine Meinung oder eine dokumentierte Tatsache ist.

2 Stimmen

Nun, es hat sich herausgestellt, dass Microsoft .NET einige Optimierungen auf der Grundlage des Befehlssatzes vornimmt, nicht aber auf der Grundlage bestimmter CPU-Eigenschaften wie dem Cache-Layout ( blogs.msdn.com/davidnotario/archive/2005/08/15/451845.aspx ). Mein Punkt über vorkompilierten Code in der Lage, die gleichen Optimierungen (und mehr, die zu kostspielig sind, um in einem JIT-Compiler zu finden) zu verwenden, gilt jedoch immer noch.

0voto

Jonathan Allen Punkte 65707

Ich weiß, dass sich die Regeln für das Einbinden von Funktionen je nach Prozessortyp (x86, x64) ändern. Und natürlich variieren die Zeigergrößen je nachdem, ob es als 32-Bit oder 64-Bit läuft.

0 Stimmen

Ja, aber Zeigergröße つねに ändert, unabhängig davon, ob Sie einen traditionellen Compiler verwenden oder nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X