gpt4 book ai didi

c# - 为什么 .NET 中的矩阵乘法这么慢?

转载 作者:可可西里 更新时间:2023-11-01 03:14:14 26 4
gpt4 key购买 nike

我不太明白是什么让 C#/.NET(甚至 Java)中的矩阵乘法如此缓慢。

看看这个基准 ( source): 试图找到一个更新的基准。

Java vs C# vs C++ breakdown

C# 的整数和 double 性能非常接近用 MSVC++ 编译的 C++。 double 的速度提高了 87%,32 位整数的速度提高了 99%。非常好,我会说。但是再看看矩阵乘法。差距扩大到 C# 大约快 19%。这是一个非常大的差异,我不明白。矩阵乘法只是一堆简单的数学。怎么变得这么慢?它不应该与同等数量的简单浮点或整数运算大致一样快吗?

这对于游戏和 XNA 尤其重要,因为矩阵和矢量性能对于物理引擎等事物至关重要。前段时间,Mono 通过一些漂亮的向量和矩阵类添加了对 SIMD 指令的支持。它缩小了差距并使 Mono 比手写的 C++ 更快,尽管不如带有 SIMD 的 C++ 快。 ( source )

Matrix multiplication comparison

这是怎么回事?

编辑:仔细观察,我误读了第二张图。 C# 看起来非常接近。 第一个基准测试只是做了一些可怕的错误吗? 抱歉,我错过了第一个基准测试的版本号。我捕获它作为我经常听到的“C# 线性代数很慢”的方便引用。我会尝试找到另一个。

最佳答案

对于这样的大型矩阵,CPU 缓存成为限制因素。最重要的是矩阵的存储方式。基准代码正在比较苹果和橘子。 C++代码使用交错数组,C#代码使用二维数组。

重写 C# 代码以使用交错数组也使速度提高了一倍。重写矩阵乘法代码来避免数组索引边界检查似乎毫无意义,没有人会使用这样的代码来解决实际问题。

关于c# - 为什么 .NET 中的矩阵乘法这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com