11

グラフィック用のSIMDライブラリに焦点を当てた小さな(4x4)行列演算を探しています。単精度のものはたくさんありますが、単精度と倍精度の両方をサポートする必要があります。

IntelのIPPMXライブラリを見てきましたが、ソース付きのものがいいと思います。私はこれらの特定の操作のSSE3+実装に非常に興味があります:

  1. Mat4 * Mat4
  2. Mat4 * Vec4
  3. Mat4*Mat4の配列
  4. Mat4*Vec4の配列
  5. Mat4反転(持っているといい)

編集:「時期尚早の最適化」の答えはありません。小さな行列を扱ったことがある人なら誰でも、GCCがこれらをベクトル化せず、手動で最適化された組み込み関数やASMもベクトル化しないことを知っています。そしてこの場合、それは重要です、さもなければ私は尋ねないでしょう。

4

5 に答える 5

9

多分Eigenライブラリ?

SSE 2/3/4、ARM NEON、AltiVec命令セットをサポートしています。

于 2011-04-21T19:57:41.853 に答える
3

Eigenは固定サイズの行列をサポートしています。パフォーマンスを向上させるために、小さな固定サイズの行列をスタックに割り当てることができます。SSEのベクトルサイズは128ビットであるため、4x4はSSEに適しています。4つの倍精度数の行または列は、2x128ビットのSSEベクトルに均等に収まります。これにより、SIMDの実装が容易になります。

もう1つのオプションは、自分でコーディングすることです。行列は小さく、L1キャッシュに収まるため、大きな行列に必要なメモリタイトルを気にする必要はありません。さらにパフォーマンスを向上させるためにAVXを使用できます。GCCおよびVisualC++ 2010の新しいバージョンは、AVX組み込み関数をサポートしています。AVXベクトルサイズは256ビットで、正確に4つの倍精度数を保持できます。

于 2011-04-21T23:17:00.223 に答える
1

まだ完全には完成していませんが、自分のライブラリ(glsl-sse2)を売り込みたいと思いました。

于 2011-04-24T04:39:41.033 に答える
1

ここに4x4AVXの実装があります。これはサンプルアプリケーションとして書かれていますが、誰もが興味深い部分を共有ライブラリに抽出するのはそれほど難しいことではないと確信しています。将来ここに降りる人のための元の質問の年齢にもかかわらず、私はこれを投稿すると思いました。

于 2012-03-02T21:24:32.060 に答える
-4

最新のコンパイラを使用している場合は、おそらく気にする必要はありません。forほとんどのコンパイラからの自動ベクトル化は、固定境界のループをSIMDコードに簡単に変換できるはずです。GCCはこれをかなり前から持っていて、Intelのコンパイラの主なセールスポイントの1つです(ただし、AMDチップを使用する場合はIntelのコンパイラの使用に注意する必要があります)。

于 2011-04-21T19:48:19.337 に答える