【问题标题】:Sparse linear algebra solvers for C#C# 的稀疏线性代数求解器
【发布时间】:2010-11-27 04:50:06
【问题描述】:

我正在用 C# 实现 Goldenthal et.al 的不可扩展布料算法的实验性实现。

首先我使用 Math.NET Iridium 来组装和求解矩阵,但很快将其替换为 dnAnalytics,因为后者允许我重用矩阵,几乎消除了进一步的内存分配,这对实时性能很重要(小布​​)或一般的迭代求解。

问题在于 dnAnalytics 中的求解器(主要关注的是 LU 和 Bi-CG)仍在幕后分配矩阵和向量,而不是重用过去的分配。

=> 是否有任何稀疏线性代数库可以开箱即用地重用内存,还是我必须自己重写代码?

【问题讨论】:

  • 你有什么新发现吗?请告诉我们!
  • 很遗憾,没有。我没有在 .NET 中找到任何其他免费的求解器包(尽管有一些商业化且昂贵的 [如 MKL],但我不会投资我不会使用那么多的库)。我目前正在研究自己的求解器和稀疏矩阵存储,每次运行不会分配任何内存。

标签: c# performance memory linear-algebra sparse-matrix


【解决方案1】:

此建议可能是多余的,但在使用 dnAnalytics 时,请确保使用英特尔数学内核库。尽管纯 C# 实现的想法听起来很诱人,但我发现性能差异是惊人的。密集系统的求解速度提高了大约 100 倍。

【讨论】:

  • 这种速度差异可能是由于程序员在“纯 C# 实现”中糟糕的内存管理。
  • 可能是。 Intel Math Kernel 库应该包含大量手动优化的汇编代码,当然,这些代码的性能将优于大多数托管代码。无论如何,差异远远大于我预期的次要线性因子加速。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2012-07-05
  • 2015-08-07
相关资源
最近更新 更多