2011-08-03 9 views
4

iPhone 3GでiOSゲームをプロファイリングすると、pthread_setspecific(多くの一見無関係な場所から呼び出されている)システムコールが最大のCPUボトルネックになっていることが計測器によって報告されています。 Googleはスレッドのメタデータを格納することについてこれを扱っていますが、エンジン全体が単一スレッドなので、これをどのように追跡するのかはわかりません。これはCADisplayLinkと関係がありますか?これをよりよく説明するために、特定のシナリオを最適化することはできますか?ここで iPhoneゲームのCPUプロファイリングとpthread_setspecific

は私の質問に答えるに役立つかもしれないいくつかの関連情報です:

  • 端末:iPhone 3G
  • iOSのバージョン:4.2.1
  • ゲーム・コードは、アプリケーション層でので、完全にC++でobj-C。
  • このゲームではOpenglES1.1を使用しています。
  • 残念ながら、RTTIとC++の両方の例外が必要であり、有効になっています。
  • これは、計測器のCoreAnimationプロファイラでリリースビルド(デバッグシンボル付き)を実行しています。
+0

「セルフタイム」という言い方をすれば、それを最もよく使用している可能性があります。あなたが知る必要があるのは、どのルーチンがそれを呼び出しているか、どのルーチンが呼び出しているかなどです。基本的にシステム関数を呼び出すプログラムは、そのように見えます。 –

+0

@Mikeプロファイリング情報を見ると、一見無作為な場所(シングルトンインスタンスメソッドなど)から多数呼び出されています。 gcc/iOSが関数呼び出しに追加するものか、スレッドコンテキストを切り替えることと関係がありますか?申し訳ありませんが、スレッドに慣れていません。 :/ – grahamp

+0

ええ、それはいくつかのプロファイラーがあなたに与えるナンセンスのようなものです。だから私は[私はこの方法を使う](http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024)です。そのルーティンに気を配るのに十分な時間を費やしているなら、あなたはそれをキャッチして、それがなぜ呼び出されているのかを正確に知ることができます。 –

答えて

2

例外処理によって生成されたコードは、スレッドローカルストレージを使用して、巻き戻しスタックを格納しています。あなたが簡単に行うことは何もありません。可能であれば例外を削除してください。コードなしでコードの一部をコンパイルします。

関連する問題