2009-09-17 4 views
16

Ich habe ein Projekt in C# geschrieben, wo ich verschiedene lineare algebraische Operationen auf Matrizen durchführen muss (wie LU-Faktorisierung).Was ist eine gute freie (Open Source) BLAS/LAPACK-Bibliothek für .net (C#)?

Da das Programm hauptsächlich ein Prototyp ist, um eine Theorie zu bestätigen, wird eine C# -Implementierung ausreichen (im Vergleich zu einer möglicherweise schnelleren C++), aber ich möchte immer noch eine gute BLAS- oder LAPACK-Bibliothek zur Verfügung stellen, um mir etwas Code zu sparen.

Lange Rede, kurzer Sinn, kann jemand eine kostenlose/Open-Source-BLAS- oder LAPACK-Bibliothek zur Verwendung mit .net empfehlen?

Mit freundlichen Grüßen Egil.

Update: Gefunden Math.NET Numerics heute, sieht interessant aus, hat jemand irgendwelche Erfahrungen damit?

Antwort

9

AMDs ACML ist ein kostenlos herunterladen, aber es ist nur Binärcode, nicht Open Source und nativen Code, nicht .NET.

Leistung ist in der Regel besser als der Netlib.org-Code und im Allgemeinen in etwa gleich wie Intels MKL - die nicht kostenlos IIRC ist.

Der Download enthält ein Beispiel, das zeigt, wie es an C# gebunden wird. Nicht anders als andere C- oder C++ - Bibliotheken von C# aus aufzurufen.

Bibliothek implementiert BLAS, LAPACK, FFTs und RNGs.

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

EDIT KOMMENTAR zu REAGIEREN:

Auf einem Intel-CPU, ACML AMD wird etwa sowie Intels MKL durchführen, aber es hängt von dem Algorithmus, Matrixgrößen, Anzahl der Kerne , Speicher-Topologie und -Geschwindigkeit usw. usw. usw. Ihre Laufleistung kann variieren. Die einzige Möglichkeit, um sicher zu sein, ist, einen eigenen Benchmark zu betreiben. In einigen Fällen ist ACML sogar auf Itel-Hardware schneller als MKL.

Einer wird wesentlich schneller sein als jede "naive" Implementierung für große Matrizen. Beide sind dafür ausgelegt, mehrere Threads auf Multicore-Prozessoren zu verwenden, und haben von Hand manipulierte Assemblersprachen-Kernel und eine Menge Optimierung für das Cache-Verhalten auf verschiedenen Maschinen.

Für kleine Matrizen ist die Leistung in der Regel keine Sorge, da jede moderne CPU eine kleine Matrix in nur wenigen Millisekunden lösen kann, selbst mit dem einfachsten Code. In diesem Fall verwenden Sie nur eine Bibliothek, um das Schreiben und Debuggen von Code zu vermeiden, der bereits hunderte Male geschrieben wurde.

+0

Also, wenn ich eine Intel-CPU anvisiere, AMDS ACML wird nicht so gut wie Intels MLK, aber immer noch viel besser als eine naive C# Implementierung? –

+0

Ummm, deine Editierung widerspricht der Antwort [hier] (http://stackoverflow.com/questions/1644905/intel-mkl-vs-amd-math-cor-library).Sie beziehen sich auch auf gute [Quellen] (http://www.advancedclustering.com/company-blog/high-performance-linpack-on-xeon-5500-v-opteron-2400.html) dort ... Nicht sicher, dass dies Bearbeiten ist die richtige Antwort ... Aber du hast Recht, zumindest ist ACML kostenlos ... –

2

Lutz Roeder hat eine gute Open-Source-Port Mapack.Net

in der Vergangenheit für verschiedene Projekte und fand es eary mit

5

Die Mathematik-Bibliothek arbeiten DotNumerics ist Projekt frei/Open Source in C# geschrieben und enthält die Übersetzung von Lapack, Blas und Eispack nach C#.