我有一个用C#编写的项目,我需要对矩阵进行各种线性代数运算(如LU分解)。
由于该程序主要是为确认理论而创建的原型,因此C#实现就足够了(与可能更快的C ++实现相比),但我仍然希望有一个好的BLAS或LAPACK库可以为我节省一些编码。 / p>
长话短说,有人可以推荐免费/开源BLAS或LAPACK库与.net一起使用吗?
最好的问候Egil。
更新:今天找到Math.NET Numerics,看起来很有趣,有人有这方面的经验吗?
答案 0 :(得分:11)
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
编辑回应评论:
在Intel CPU上,AMD的ACML将执行大约以及Intel的MKL,但它取决于算法,矩阵大小,内核数量,内存拓扑和速度等等。 。 你的旅费可能会改变。要确定的唯一方法是运行自己的基准测试。在某些情况下,即使在Itel硬件上,ACML也比MKL快。
任何一个都比大矩阵的任何“天真”实现快得多。两者都被设计为在多核处理器上使用多个线程,并且手动调整汇编语言内核并对各种机器上的缓存行为进行大量调整。
对于小矩阵,性能通常是无关紧要的,因为任何现代cpu都可以在几毫秒内解决小型matix,即使使用最简单的代码也是如此。在这种情况下,您只使用库来避免编写和调试已经写过数百次的代码。
答案 1 :(得分:5)
数学库DotNumerics是用C#编写的免费/开源项目,包含Lapack,Blas和Eispack到C#的翻译。
答案 2 :(得分:3)
类似于BLIS的库实例化软件(BLIS)是开源BLAS库的当前黄金标准。 https://github.com/flame/blis在所有CPU上,它的速度不及MKL(尽管接近),但比传说中的GotoBLAS的OpenBLAS快,并且在所有CPU上都更快(并且在包括Intel,AMD和ARM在内的最新架构上也要快得多)。维护得很好。
另一个答案中提到的ACML已不存在。 AMD现在将开放源代码软件用作其ACL(AMD计算库)软件堆栈的一部分。 BLIS是该软件堆栈的一部分:https://developer.amd.com/amd-cpu-libraries/blas-library/。
鱼子酱:海报是BLIS项目的一部分。以上声明已得到充分证明。
(以后添加了注释:没注意到“ .NET”。不幸的是,Windows尚不支持BLIS。)
答案 3 :(得分:2)
Lutz Roeder有一个很好的开源端口Mapack.Net
过去用于各种项目,并发现它可以与
一起使用