2009-09-17 49 views
16

我有一個用C#編寫的項目,我需要在矩陣上進行各種線性代數運算(如LU分解)。由於該程序主要是爲確認理論而創建的原型,因此C#實現就足夠了(與可能更快的C++實現相比),但我仍然希望有一個好的BLAS或LAPACK庫可用來爲我節省一些編碼。長期以來,任何人都可以推薦免費/開源的BLAS或LAPACK庫,以便與.net一起使用嗎?什麼是.net(C#)的免費(開源)BLAS/LAPACK庫?

最好的問候埃吉爾。

更新:今天發現Math.NET Numerics,看起來很有趣,任何人都有這方面的經驗嗎?

回答

9

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將執行大約以及英特爾的MKL,但它依賴於算法,矩陣大小,核心數量,內存拓撲和速度等等等等。您的里程可能會有所不同。唯一可以肯定的方法是運行自己的基準。在某些情況下,即使在Itel硬件上,ACML也比MKL更快。

對於矩陣,其中任何一個都將顯着快於任何「天真」實現。兩者都被設計爲在多核處理器上使用多線程,並且具有手動調整的彙編語言內核以及大量針對各種機器上的緩存行爲的調整。

對於小的矩陣,性能通常是不在乎的,因爲任何現代cpu都可以在幾毫秒內解決一個小的matix,即使使用最簡單的代碼。在這種情況下,您只使用庫來避免編寫和調試已經寫入數百次的代碼。

+0

所以,如果我的目標是英特爾CPU,AMDS ACML的性能不如英特爾MLK,但仍然比天真的C#實現更好? – 2009-09-18 11:10:07

+0

嗯,你的編輯很矛盾的答案[這裏](http://stackoverflow.com/questions/1644905/intel-mkl-vs-amd-math-core-library)。他們也提到很好[來源](http://www.advancedclustering.com/company-blog/high-performance-linpack-on-xeon-5500-v-opteron-2400.html)...不確定這編輯是正確的答案......但你是對的,至少ACML是免費的... – 2013-02-28 08:16:05

2

盧茨羅德使用了過去的各種項目良好的開放性源端口Mapack.Net

,發現它eary與

5

工作數學庫DotNumerics是自由/開源項目用C#編寫,幷包含將Lapack,Blas和Eispack翻譯成C#。

相關問題