2d & 3d ベクトルと 3x3 & 4x4 行列用の軽量ライブラリが必要です。基本的なC.
助言がありますか?
Meschachは c のみのベクトル/マトリックス ライブラリであり、たとえば LAPACK よりも大幅に小さくなっています (FAQ によると、少なくとも :)
多くの人がさまざまなBLASライブラリを使用するように言っていますが、小さなマトリックスで作業しているため、これはおそらく非常に遅くなるでしょう。それらのほとんどは、行列を固定サイズ (約 50 個の要素 - キャッシュ サイズによって異なります) にチャンクし、最適化されたアルゴリズムでチャンクを操作し、残りの部分を自明なアルゴリズムで操作するように最適化されています。小さな行列では、単純なアルゴリズムを呼び出すよりもさらに遅くなります。
FWIW、これを fortran (2x2 および 4x4 正方行列 mults) で行う必要があったとき、完全に展開されたバージョンをハードコードしただけで十分に機能しました(gfortran の組み込み MATMUL の約 20 倍の速度ですが、これの一部はおそらく事実によるものでしたそのMATMULは適切ではなく、私のバージョンはそうでした) . これを行うための優れたライブラリを見つけることができませんでした。
C++ ではBLITZを使用できるので問題ありませんが、残念ながら...
x86 用にコーディングしていると仮定すると、Intel のIntegrated Performance Primitives (IPP) とMath Kernel Library (MKL)を調べることができます。これらは、ベクトルや行列を含む多くの一般的な操作用の超高速ライブラリ (非公開のマイクロアーキテクチャの詳細に合わせて最適化されているため、おそらく他の誰よりも高速です) を提供します。
CIMG ( cimg.sourceforge.net)を試してください。これは画像処理に重点を置いていますが、無料で非常に軽量 (ライブラリ全体が 1 つの .h ファイルで構成されています!) であり、すべての標準的なベクトル/行列操作を備えています。
これは C++ であるため、ストレート C を実行している場合は機能しませんが、一見の価値があります。
おそらく、DirectX math lib (Windows のみ...) を試す必要があります。ベクトル、行列、演算など、必要なものはおそらくそこにあります。DX全体ではなく、これのみを使用できます。バージョン 9 または 10 を使用できます。高速です :)
#include <D3DX9Math.h>
Mathtools.netには多くのオプションがあります。Object-Oriented Numericsには、あなたに役立つかもしれないいくつかのパッケージもリストされています。あなたが何をしているのか正確にはわからないので (多くの最適化された線形代数が必要ですか? それとも単純な演算で十分でしょうか?)、より具体的に説明するのは困難です。
一般に、Matrix Template Libraryは非常によく考えられています。また、深刻な線形代数のうなり声が必要な場合は、BLASとLAPACKを検討する必要があります。
Armadillo C++ ライブラリも参照してください。