什么是.net(C#)的免费(开源)BLAS / LAPACK库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

我有一个用C#编写的项目,我需要在矩阵上进行各种线性代数运算(如LU分解)。

由于该程序主要是为了确认理论而创建的原型,所以C#实现就足够了(与可能更快的C ++实现相比),但我仍然想要一个良好的BLAS或LAPACK库来保存一些编码。

长话短说,任何人都可以推荐免费/开源的BLAS或LAPACK库,以便与.net一起使用吗?

今天发现Math.NET Numerics,看起来很有趣,任何人都有这方面的经验?

提问于
用户回答回答于

AMD的ACML是免费下载的,但它只是二进制文件,不是开源的,而且是本地代码,而不是.NET。

性能通常优于Netlib.org代码,并且通常与英特尔的MKL大致相同 - 这不是免费的IIRC。

下载包含一个演示如何将其绑定到C#的示例。与从C#中调用任何其他C或C ++库没什么不同。

库实现BLAS,LAPACK,FFT和RNG。

http://developer.amd.com/cpu/Libraries/acml/downloads/pages/default.aspx

在英特尔CPU上,AMD的ACML 与英特尔的MKL 大致相同,但取决于算法,矩阵大小,内核数量,内存拓扑结构和速度等等。您的续航里程可能会有所不同。唯一可以肯定的方法是运行自己的基准。在某些情况下,即使在Itel硬件上,ACML也比MKL更快。

对于大型矩阵,任何一个都比任何“天真”的实现要快得多。两者都被设计为在多核处理器上使用多线程,并且具有手动调整的汇编语言内核以及大量针对各种机器上的缓存行为的调整。

对于小型矩阵来说,性能通常不会太在意,因为即使使用最简单的代码,任何现代cpu都可以在几毫秒内解决小型matix问题。在这种情况下,只使用库来避免编写和调试已经写入数百次的代码。

用户回答回答于

数学库DotNumerics是用C#编写的免费/开源项目,包含Lapack,Blas和Eispack到C#的翻译。

扫码关注云+社区