5

SIMD (ネオン、SSE、SSE2) でうまく機能する、低次元 (約 4) の行列式を計算するためのアプローチはありますか? 私は手の拡張式を使用していますが、うまく機能しません。私は SSE3 とネオンまでずっと SSE を使っています。行列要素はすべて float です。

4

1 に答える 1

3

これが私の5セントです。

2x2 行列の行列式:

これは読者の演習であり、簡単に実装できるはずです

3x3 行列の行列式:

スカラー三重積を使用します。これには、スマートcross()dot()実装が必要です。これらのレシピは広く入手可能です。

4x4 行列の行列式:

ここにあるトリックの 1 つを使用します。私のコード:

template <class T>
inline T det(matrix<T, 4, 4> const& m) noexcept
{
  auto const A(make_matrix<T, 2, 2>(m(0, 0), m(0, 1), m(1, 0), m(1, 1)));
  auto const B(make_matrix<T, 2, 2>(m(0, 2), m(0, 3), m(1, 2), m(1, 3)));
  auto const C(make_matrix<T, 2, 2>(m(2, 0), m(2, 1), m(3, 0), m(3, 1)));
  auto const D(make_matrix<T, 2, 2>(m(2, 2), m(2, 3), m(3, 2), m(3, 3)));

  return det(A - B * inv(D) * C) * det(D);
}

5x5+ 行列の行列式:

おそらく上記のトリックを使用します。

于 2015-05-02T19:22:52.587 に答える