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

问题描述 投票:15回答:4

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

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

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

最好的问候Egil。

更新:今天找到Math.NET Numerics,看起来很有趣,有人有任何经验吗?

.net matrix scientific-computing lapack blas
4个回答
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

编辑回应评论:

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

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

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


5
投票

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


3
投票

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-libraries/blas-library/

Caviat:海报是BLIS项目的一部分。上述权利要求已有详细记载。

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


2
投票

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

过去用于各种项目,发现它很容易使用

© www.soinside.com 2019 - 2024. All rights reserved.