0

次のような行列乗算を行う必要があるコードがあります

    ML2=ML+uMc+c1+c2
    MC2=v*ML+(u*v+1)*Mc+c2

ここで、ML は次の MXXX 行列です。

    ML=[1 1 1 1....1;2 2 2 2...2......;M M M.....M]
    MC=[1 2 3 4 ...M;1 2 3 4...M......;1 2 3.....M]

u、v、c1、c2 は 8 ビットの定数です。

任意の高速ライブラリを使用して、高速実行時間で ML2,MC2 の値を見つけたい

4

3 に答える 3

1

これが必要なプラットフォームについては述べていませんが、行列演算の場合、Intel CPU 用の Intel Math Kernel Library よりも高速なものはありません

http://software.intel.com/en-us/intel-mkl

これは、私が見た限り、CPU で可能なピークフロップに近づきます。ただし、MKL は高価でクローズド ソースです。優れたオープンソースの無料の代替手段が必要な場合は、Eigen をチェックしてください。これは C++ を使用していますが、本当に C のみのコードに制限されているかどうかはわかりません。Eigen は、AMD (Intel は AMD CPU のライブラリを無効にします) や ARM などの他のハードウェアでもうまく動作します。

http://eigen.tuxfamily.org/index.php?title=3.0

自分で作成する 3 番目のオプション。数週間の努力の後、AVX と OpenMP (Eigen は SSE のみをサポートします) で Eigen を打ち負かすことはそれほど難しくありませんが、MKL を打ち負かす可能性はほとんどありません。

于 2013-06-17T13:50:52.953 に答える
0

ML は 1:M の同一ベクトルの束であり、MC は ML の転置にすぎないため、一般的な行列乗算は必要ありません。代数的な近道を取ることができます。

于 2013-06-18T12:49:55.553 に答える