ゲームベクトル/マトリックス操作のためにiPhoneでアームSIMDを利用する正しい方法は何ですか?

StackOverflow https://stackoverflow.com/questions/2749417

質問

iPhoneでSIMDユニットを使用するゲーム用のベクトル/マトリックスライブラリを作成しています(3GS以降)。これどうやってするの?私はこれについて検索しました、今私はいくつかのオプションを知っています:

  • Apple(iPhone OS 4)からのフレームワーク(BLAS+LAPACK+...)を加速
  • ARMからOpenMax実装ライブラリ
  • GCCオートベクトル化機能

ゲームにベクトル/マトリックスライブラリに最も適した方法は何ですか?

役に立ちましたか?

解決

それをうまく行うには、おそらくあなた自身のSIMDルーチンを書く必要があります。これを行うことの痛みを和らげるために、アセンブラーではなくGCCのネオンCの興味深いものを使用します。

他のヒント

GCCがコードを自動化しないと仮定する必要があります。なぜなら、それは非常に起こりそうにないと思われるからです!

Paulが言ったように、iPhoneで最もパフォーマンスを得るには、Neon Simdの指示を使用して、できるだけ多くのことを使用して、独自のアームアセンブリコードを作成する必要があります。しかし、それはあなたがネオン、タイミングの遅延などをアームアセンブリ言語を理解していることを前提としています。したがって、アームアセンブリ言語を学びたくない場合、Appleの加速フレームワークとARMのOpenMaxライブラリは両方ともARMアセンブリですでに書かれている多数の機能を持っていますNeon Simdの指示を含む言語。

したがって、加速またはOpenMaxのいずれかを使用できれば非常に良いはずです。 2つを比較して実際に速いのかを確認していませんが、ArmのOpenMaxはAmbがNeon Specsを設計したため、Appleの実装よりもわずかに高速であると思います。しかし、どちらも非常に速く走るべきです。

新しい答えが来ます:

Bullet Physics Engineは、AppleによるNeon Simd向けに最適化されています。 http://bulletphysics.org/bullet/phpbb3/viewtopic.php?t=8490

インラインASMを使用して、いくつかのネオン最適化されたマット*マットとマット*VECルーチンを作成しました。それらはウーロンエンジンの一部ですが、彼らはMITライセンスの下にあるので、あなたはそれらを好きなように使用できます:

http://code.google.com/p/oolongengine/source/browse/trunk/oolong%20engine2/math/neonmath/neon_matrix_impl.cpp

Appleは今持っています <simd/simd.h> これは、あなたが言及した加速フレームワークの一部として、小さなベクトル、マトリックス、および四項用の最適化された数学ルーチンのライブラリです。それはおそらく今日の最も簡単な方法のようです。https://developer.apple.com/documentation/accelerate/simd?language=objc

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top