¿Por qué la multiplicación de matrices en .NET es tan lenta?

No entiendo qué hace que la multiplicación de matrices en C # /. NET (e incluso Java) sea tan lenta.

Echa un vistazo a este punto de referencia (fuente): Intentando encontrar un punto de referencia actualizado.

Desglose de Java vs C # vs C ++ http://img411.imageshack.us/img411/9324/perf.gif

El entero y el doble rendimiento de C # están muy cerca de C ++ compilado con MSVC ++. 87% tan rápido para el doble y 99% tan rápido para un entero de 32 bits. Bastante bueno, diría yo. Pero luego mira la multiplicación de matrices. La brecha se amplía hasta que C # es aproximadamente un 19% más rápido. Esta es una discrepancia bastante grande que no entiendo. La multiplicación de matrices es solo un montón de matemáticas simples. ¿Cómo se está volviendo tan lento? ¿No debería ser aproximadamente tan rápido como un número equivalente de operaciones simples de punto flotante o entero?

Esto es especialmente preocupante con los juegos y con XNA, donde el rendimiento de la matriz y el vector son críticos para cosas como los motores de física. Hace algún tiempo, Mono agregó soporte para instrucciones SIMD a través de algunas ingeniosas clases de vectores y matrices. Cierra la brecha y hace que Mono sea más rápido que C ++ escrito a mano, aunque no tan rápido como C ++ con SIMD. (fuente)

Comparación de multiplicación de matrices http://img237.imageshack.us/img237/2788/resultse.png

¿Que está pasando aqui?

Editar: Mirando más de cerca, leí mal el segundo gráfico. C # aparece bastante cerca.¿El primer punto de referencia está haciendo algo terriblemente mal? Lo siento, me perdí el número de versión en el primer punto de referencia. Lo tomé como una referencia práctica para el "álgebra lineal C # es lento" que siempre he escuchado. Intentaré encontrar otro.

Respuestas a la pregunta(4)

Su respuesta a la pregunta