No entiendo muy bien qué hace que la multiplicación de matrices en C# /. NET (e incluso Java) sea tan lenta.¿Por qué la multiplicación de matrices en .NET es tan lenta?
Eche un vistazo a este índice de referencia (
source):
Intentando encontrar un punto de referencia actualizado.
Java vs C# vs C++ breakdown http://img411.imageshack.us/img411/9324/perf.gif
número entero C# 's y el doble de rendimiento es maldita cerca de C++ compilado con MSVC++. 87% más rápido para el doble y 99% más rápido para el entero de 32 bits. Bastante malditamente bueno, diría. Pero luego mira la multiplicación de la matriz. La brecha se amplía a C# siendo aproximadamente el 19% más rápido. Esta es una gran discrepancia que no entiendo. La multiplicación de matrices es solo un montón de matemáticas simples. ¿Cómo se está poniendo tan lento? ¿No debería ser más o menos 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 matrices y vectores es crítico para cosas como los motores de física. Hace algún tiempo, Mono agregó soporte para las instrucciones SIMD a través de algunas clases ingeniosas de vectores y matrices. Se cierra la brecha y hace Mono más rápido que el C++ escrito a mano, aunque no tan rápido como C++ con SIMD. (source)
Matrix multiplication comparison http://img237.imageshack.us/img237/2788/resultse.png
lo que está pasando aquí?
Editar: Mirando más de cerca, he leído mal el segundo gráfico. C# parece bastante cerca.
¿El primer punto de referencia solo está haciendo algo terriblemente incorrecto?
Lo siento, me perdí el número de versión en el primer punto de referencia. Lo agarré como una referencia práctica para el "álgebra lineal C# es lento" que siempre he escuchado. Trataré de buscar otro.
C# Versión + Opciones: .Net Framework 1.1.4322 ¿No hay una versión más reciente? – GalacticJello
* se sienta y espera para ver qué tiene que decir JonSkeet al respecto * :-) – WestDiscGolf
La prueba se realizó con VS 2003. (Observe también la versión de C++). De ahí la versión antigua de .net. – cHao