Por que a multiplicação de matrizes no .NET é tão lenta?

Eu não entendo direito o que torna a multiplicação de matrizes em C # /. NET (e até Java) tão lenta.

Veja esta referência (fonte): Tentando encontrar uma referência atualizada.

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

O número inteiro e o desempenho duplo do C # são muito próximos do C ++ compilado com o MSVC ++. 87% mais rápido para o dobro e 99% mais rápido para o número inteiro de 32 bits. Muito bom, eu diria. Mas então veja a multiplicação de matrizes. A diferença aumenta para C #, sendo cerca de 19% mais rápido. Esta é uma discrepância enorme que eu não entendo. A multiplicação de matrizes é apenas um monte de matemática simples. Como está ficando tão lento? Não deveria ser tão rápido quanto um número equivalente de operações simples de ponto flutuante ou inteiro?

Isso é especialmente preocupante nos jogos e no XNA, onde o desempenho da matriz e do vetor é fundamental para coisas como os mecanismos de física. Há algum tempo, o Mono adicionou suporte para instruções SIMD por meio de algumas classes bacanas de vetores e matrizes. Ele fecha a lacuna e torna o Mono mais rápido que o C ++ escrito à mão, embora não tão rápido quanto o C ++ com SIMD. (fonte)

Comparação da multiplicação de matrizes http://img237.imageshack.us/img237/2788/resultse.png

Oque esta acontecendo aqui?

Edit: Olhando mais de perto, eu li errado o segundo gráfico. C # parece bem próximo.O primeiro benchmark está apenas fazendo algo terrivelmente errado? Desculpe, perdi o número da versão no primeiro benchmark. Peguei-o como uma referência útil para a "álgebra linear C # é lenta" que eu sempre ouvi. Vou tentar encontrar outro.

questionAnswers(4)

yourAnswerToTheQuestion