2009-09-10 44 views
1

我正在研究Goldenthal et.al在C#中不可伸展的布料算法的实验实现。C#的稀疏线性代数解算器#

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

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

=>是否有任何稀疏线性代数库,在那里,再利用内存不足的即装即用,否则我将不得不重写代码自己?

+0

你有没有找到新的东西?请告诉我们! – Mikhail 2009-12-09 07:53:12

+0

不幸的是,不。我还没有在.NET中找到任何其他免费的求解器包(虽然有一些商业和昂贵的[像MKL],但我不打算投资一个库,我不会那么多)。我目前正在努力研究自己的求解器和稀疏矩阵存储器,它不会为每次运行分配任何内存。 – 2009-12-09 13:35:33

回答

1

这个建议可能是多余的,但使用dnAnalytics时,请确保您使用英特尔数学核心函数库。作为纯C#实现的想法听起来很诱人,我发现性能差异是惊人的;密集系统解决了大约一百倍的速度。

+0

这种速度差异很可能是由于'pure-C#implementation'中编程人员的内存管理不善造成的。 – Paul 2009-12-02 03:16:00

+0

可能。据推测,英特尔数学内核库包含大量手动优化的汇编代码,当然,这些代码将胜过大多数托管代码。无论如何,这个差距远远大于我预期的微小线性因子加速。 – 2009-12-03 09:20:03