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

由于该程序主要是为确认理论而创建的原型,因此C#实现就足够了(与可能更快的C ++实现相比),但我仍然希望有一个好的BLAS或LAPACK库可以为我节省一些编码。 / p>

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

最好的问候Egil。

更新:今天找到 Math.NET Numerics ,看起来很有趣,有没有人有这方面的经验?

有帮助吗?

解决方案

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

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

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

库实现了BLAS,LAPACK,FFT和RNG。

http://developer.amd.com/cpu/库/ ACML /下载/页/ Default.aspx的

编辑回应评论:

在Intel CPU上,AMD的ACML将执行大约以及Intel的MKL,但它取决于算法,矩阵大小,内核数量,内存拓扑和速度等等。 。 你的旅费可能会改变。要确定的唯一方法是运行自己的基准测试。在某些情况下,即使在Itel硬件上,ACML也比MKL快。

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

对于矩阵,性能通常是无关紧要的,因为任何现代cpu都可以在几毫秒内解决小型matix,即使使用最简单的代码也是如此。在这种情况下,您只使用库来避免编写和调试已经写过数百次的代码。

其他提示

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

类似BLIS的库实例化软件(BLIS)是开源BLAS库的当前黄金标准。 https://github.com/flame/blis 它没有MKL那么快(虽然关闭)但是比传统的GotoBLAS的分支OpenBLAS更快,基本上所有的CPU(并且在包括Intel,AMD和ARM在内的最新架构上更快)。它维护得很好。

另一个答案中提到的ACML已不复存在。 AMD现在使用开源软件作为其ACL(AMD计算库)软件堆栈的一部分。 BLIS是该软件堆栈的一部分: https://developer.amd的.com / AMD-CPU-库/ BLAS库/

Caviat:海报是BLIS项目的一部分。上述声明已有详细记载。

(评论后来添加:没有注意到“.NET”。不幸的是,BLIS尚不能很好地支持Windows。)

Lutz Roeder有一个很好的开源端口 Mapack.Net

过去用于各种项目,并发现它可以与

一起使用
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top