我不太明白是什么让 C#/.NET(甚至 Java)中的矩阵乘法如此缓慢。
看看这个基准(来源):试图找到一个更新的基准。
C# 的整数和双精度性能非常接近用 MSVC++ 编译的 C++。双精度的 87% 和 32 位整数的 99%。相当不错,我会说。但是再看看矩阵乘法。差距扩大到 C# 的速度大约是 19%。这是一个相当大的差异,我不明白。矩阵乘法只是一堆简单的数学运算。怎么变得这么慢?它不应该与等量的简单浮点或整数运算大致一样快吗?
这对于游戏和 XNA 尤其重要,其中矩阵和矢量性能对于物理引擎之类的东西至关重要。前段时间,Mono 通过一些漂亮的向量和矩阵类增加了对 SIMD 指令的支持。它缩小了差距,使 Mono 比手写 C++ 更快,尽管不如带有 SIMD 的 C++ 快。(来源)
这里发生了什么?
编辑:仔细看,我误读了第二张图。C# 看起来非常接近。第一个基准测试只是做一些可怕的错误吗?抱歉,我错过了第一个基准测试的版本号。我把它作为我一直听到的“C# 线性代数很慢”的方便参考。我会尝试找到另一个。