3

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

  • Apple(iPhone OS 4)のフレームワーク(BLAS + LAPACK + ...)を高速化
  • ARMのOpenMAX実装ライブラリ
  • GCC自動ベクトル化機能

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

4

5 に答える 5

2

GCCはコードを自動ベクトル化しないと想定する必要があります。これは、発生する可能性が非常に低いように思われるためです。

Paulが言ったように、iPhoneのパフォーマンスを最大限に引き出すには、NEONSIMD命令を使用して独自のARMアセンブリコードをできるだけ多く作成する必要があります。ただし、これは、ARMアセンブリ言語とNEON、タイミング遅延などを理解していることを前提としています。したがって、ARMアセンブリ言語を学びたくない場合は、AppleのAccelerateフレームワークとARMのOpenMAXライブラリの両方に、ARMアセンブリですでに記述されている多数の関数があります。 NEONSIMD命令を使用した言語。

したがって、AccelerateまたはOpenMAXのいずれかを使用できる場合は、それらのいずれかが非常に優れているはずです。どちらが実際に速いかを確認するために2つを比較していませんが、ARMがNEON仕様を設計したため、ARMのOpenMAXはAppleの実装よりもわずかに速いと思います。ただし、どちらも非常に高速に実行されるはずです。

于 2010-10-13T11:47:49.753 に答える
2

時間とともに新しい答えが来ます:

弾丸物理エンジンは、AppleによってNEONSIMD用に最適化されました。http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=8490

于 2012-10-17T13:28:21.130 に答える
1

それをうまく行うには、おそらく独自のSIMDルーチンを作成する必要があります。これを行う手間を軽減するために、アセンブラーではなくgccでNeonC組み込み関数を使用してください。

于 2010-05-01T09:33:44.790 に答える
1

インラインASMを使用して、NEONに最適化されたMat*MatおよびMat*Vecルーチンをいくつか作成しました。これらはOolongEngineの一部ですが、MITライセンスの下にあるため、次のように使用できます。

http://code.google.com/p/oolongengine/source/browse/trunk/Oolong%20Engine2/Math/neonmath/neon_matrix_impl.cpp

于 2011-04-21T19:02:00.730 に答える
0

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

于 2018-07-12T17:01:46.613 に答える