15

私はC#で書かれたプロジェクトを持っており、行列に対してさまざまな線形代数演算(LU分解など)を実行する必要があります。

プログラムは主に理論を確認するために作成されたプロトタイプであるため、C#の実装で十分です(おそらくより高速なC ++の実装と比較して)が、コーディングを節約するために利用できる優れたBLASまたはLAPACKライ​​ブラリが必要です。

簡単に言えば、.netで使用するための無料/オープンソースのBLASまたはLAPACKライ​​ブラリを誰かが推奨できますか?

よろしくエギル。

更新:今日Math.NET Numericsを見つけましたが、面白そうですが、誰かがそれを経験したことがありますか?

4

4 に答える 4

12

AMDのACMLは無料でダウンロードできますが、バイナリのみであり、オープンソースではなく、ネイティブコードであり、.NETではありません。

パフォーマンスは一般的にNetlib.orgコードよりも優れており、一般的にIntelのMKLとほぼ同じです。これは無料のIIRCではありません。

ダウンロードには、C#にバインドする方法を示す1つのサンプルが含まれています。C#から他のCまたはC++ライブラリを呼び出すのと何ら変わりはありません。

ライブラリは、BLAS、LAPACK、FFT、およびRNGを実装します。

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

コメントに返信するために編集:

Intel CPUでは、AMDのACMLはIntelのMKLとほぼ同じように動作しますが、アルゴリズム、マトリックスサイズ、コア数、メモリトポロジ、速度などによって異なります。マイレージは異なる場合があります。確実に判断する唯一の方法は、独自のベンチマークを実行することです。場合によっては、ICMLはItelハードウェア上でもMKLよりも高速です。

どちらも、大きなマトリックスの「ナイーブ」な実装よりも大幅に高速になります。どちらもマルチコアプロセッサで複数のスレッドを使用するように設計されており、アセンブリ言語カーネルを手動で調整し、さまざまなマシンでのキャッシュ動作を大幅に調整しています。

小さなマトリックスの場合、パフォーマンスは一般的に気になりません。最新のCPUは、最も単純なコードを使用しても、わずか数ミリ秒で小さなマトリックスを解決できるためです。その場合、ライブラリを使用しているのは、すでに何百回も記述されているコードの記述とデバッグを回避するためだけです。

于 2009-09-17T18:49:06.143 に答える
5

数学ライブラリDotNumericsは、C#で記述されたフリー/オープンソースプロジェクトであり、Lapack、Blas、およびEispackのC#への翻訳が含まれています。

于 2010-01-17T16:16:50.207 に答える
5

BLISのようなライブラリインスタンス化ソフトウェア(BLIS)は、オープンソースBLASライブラリの現在のゴールドスタンダードです。 https://github.com/flame/blis MKLほど高速ではありませんが(近いですが)、基本的にすべてのCPUで、伝説的なGotoBLASのフォークであるOpenBLASよりも高速です(Intel、AMDを含む最新のアーキテクチャでははるかに高速です) 、およびARM)。手入れが行き届いています。

別の回答で言及されているACMLは、もはや存在しません。AMDは現在、ACL(AMD Compute Library)ソフトウェアスタックの一部としてオープンソースソフトウェアを使用しています。BLISは、そのソフトウェアスタックの一部です:https ://developer.amd.com/amd-cpu-libraries/blas-library/ 。

Caviat:ポスターはBLISプロジェクトの一部です。上記の主張は十分に文書化されています。

(コメントは後で追加されます:「。NET」に気づきませんでした。残念ながら、BLISはまだWindowsで十分にサポートされていません。)

于 2018-09-02T15:25:56.117 に答える
2

LutzRoederには優れたオープンソースポートMapack.Netがあります

過去にさまざまなプロジェクトで使用され、一緒に作業するのは簡単だとわかりました

于 2009-09-17T18:52:13.083 に答える