Warum ist die Matrixmultiplikation in .NET so langsam?

Ich verstehe nicht ganz, was die Matrixmultiplikation in C # /. NET (und sogar in Java) so langsam macht.

Schauen Sie sich diesen Benchmark an Quell): Es wird versucht, einen aktualisierten Benchmark zu finden.

Java vs C # vs C ++ Aufschlüsselung http://img411.imageshack.us/img411/9324/perf.gi

ie Integer- und Double-Performance von @ C # kommt der mit MSVC ++ kompilierten von C ++ verdammt nahe. 87% so schnell wie Double und 99% so schnell wie 32-Bit-Integer. Verdammt gut, würde ich sagen. Aber dann schauen Sie sich die Matrixmultiplikation an. Die Lücke vergrößert sich auf C # und ist etwa 19% so schnell. Dies ist eine ziemlich große Diskrepanz, die ich nicht verstehe. Matrixmultiplikation ist nur ein Haufen einfacher Mathematik. Wie wird es so langsam? Sollte es nicht ungefähr so schnell sein wie eine entsprechende Anzahl einfacher Gleitkomma- oder Ganzzahloperationen?

Dies ist besonders bei Spielen und bei XNA von Bedeutung, bei denen die Leistung von Matrizen und Vektoren für Dinge wie Physik-Engines von entscheidender Bedeutung ist. Vor einiger Zeit hat Mono die Unterstützung für SIMD-Anweisungen durch einige raffinierte Vektor- und Matrixklassen hinzugefügt. Es schließt die Lücke und macht Mono schneller als handgeschriebenes C ++, wenn auch nicht so schnell wie C ++ mit SIMD. Quell)

Matrix Multiplikationsvergleich http://img237.imageshack.us/img237/2788/resultse.pn

Was ist denn hier los

Edit: Bei näherer Betrachtung habe ich die zweite Grafik falsch verstanden. C # erscheint ziemlich nah.Ist der erste Benchmark, der etwas schreckliches falsch macht? Sorry, ich habe die Versionsnummer beim ersten Benchmark verpasst. Ich habe es als handliches Nachschlagewerk für die "C # -Linearalgebra ist langsam" genommen, die ich immer gehört habe. Ich werde versuchen, einen anderen zu finden.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage