2012-02-23 13 views
0

これは質問へのアップデートです:iPhone GCC/LLVM GCC or LLVM?...その質問が尋ねられてから1年以上経ちました。iOS5&OpenGL ES 2.0ベストコンパイラ

私はグラフィックス処理に新しく、OpenGL ESを学び始めました。http://www.dpfiles.com/dpfileswiki/index.php?title=Black_Art_of_3D_Game_Programming%2C_Chapter_10:_3D_Fundamentals#Fixed_Point_Mathematicsを...との情報の一部は古くなっていることを知っている:

私はこれを読んでいました。

このセクションに記載されている制限事項は、まだiPhoneに適用されますか?

つまり、固定小数点演算を使用しても、浮動小数点よりも劇的に改善されていますか?

マトリックス演算を最適化するためにどのコンパイラを使用しますか?

答えて

2

最初に、I stated in answer to the question you've linked aboveとして、LLVMは一般に、iOSをターゲットとするときにコンパイルされたコードのパフォーマンスを向上させます。 AppleはXcodeからコンパイラとしてGCCを削除しているので、あなたはそれについて本当に選択肢がありません。 LLVMを使用します。

第2に、iOSデバイス上のOpenGL ESの実装には固定小数点数学に関するこの記事のステートメントは適用されません。これらのデバイスで使用されるPowerVR GPUは、浮動小数点入力を使用するように調整されており、固定小数点データを扱うときに実際にパフォーマンスが低下する可能性があります。 AppleのOpenGL ES Programming Guide

OpenGL ES GL_FIXEDデータ型は使用しないでください。同じ の量のメモリがGL_FLOATとして必要ですが、値の範囲は小さくなります。 すべてのiOSデバイスはハードウェア浮動小数点ユニットをサポートしているため、浮動小数点 の浮動小数点値をより迅速に処理できます。

IOSデバイスでARMプロセッサは、ネイティブ浮動小数点命令 を処理します。可能であれば、 ポイント計算の代わりに浮動小数点を使用する必要があります。 が固定小数点演算を使用するアプリケーションを移植する場合は、浮動小数点 型を使用するようにコードを書き換えてください。

私はPowerVRのドキュメント(無料のSDKの一部として利用可能)にもこれが言及されていると思います。

また、ARMv7デバイス(iPhone 3G S以降)でThumb用のビルドを有効にし、ARMv6デバイス用に無効にする必要があります。これにより、浮動小数点計算が遅くなるため、前者では計算が遅くなり、以前のクラスのデバイスでのパフォーマンス

最後に、行列演算については、iOS 5.0のみをターゲットにする場合は、GLKitに付属の新しい行列演算関数を使用する必要があります。それらは、高速ベクトル演算を実行するNEONアクセラレーションの実装を使用します。自分自身をロールバックしたり、Accelerateフレームワークを使用する既存の実装を見つけたり、NEONの計算を指示したりすることもできます。

OpenGL ESレンダリングを実行するとき、これらの領域はどれもボトルネックにはなりません。インストゥルメントと他のツールを使用して、アプリケーション内でレンダリングを遅くする実際の領域を見つけます。私が言及したこれらの最適化は、これのわずかな時間を削減するだけです。

+0

いつものように、ブラッド、あなたは最高です!私はGPUImageフレームワークにいくつかのフィルタを提供することができますので、このすべての基礎を学んで作業してください! https://github.com/BradLarson/GPUImage –

+1

@MatisseVerDuyn - ありがたいことに、OpenGLのフラグメントシェーダに関する多くのドキュメントがOpenGL ESに翻訳されています。また、イマジネーションテクノロジーズでは、SDKのPDFの一部としてかなり役立つチューニング情報を提供しています。http://www.imgtec.com/powervr/insider/powervr-sdk-docs.asp –

1

最も簡単なのは、コードを書いてコンパイラでコンパイルするだけです。次に、パフォーマンスを測定し、プロジェクト設定で別のコンパイラに切り替えます(オプションを変更するのと同じくらい簡単です)。次に、新しいパフォーマンスを再コンパイルして測定します。したがって、どのコンパイラがより良いパフォーマンスを提供するかを簡単に確認することができます。私のゲームのためにclangはより良いパフォーマンスを出していました。

浮動小数点演算の場合 - 古い携帯電話をターゲットにしていない場合、その3GSは固定小数点を心配しません。 3D変換には浮動小数点を使用します。大丈夫だよ。