HEXA BLOG
ヘキサブログ
プログラム
プロファイラ
こんにちは。平尾です
学生さんは来年の就職活動に向けて制作にとりかかり始める時期でしょうか。
PC上で動く作品だと機種によって大きく性能が変わってくるのであまり意識していないかもしれませんが、今回は処理時間測定プログラムについて説明したいと思います
処理時間測定プログラムは一般的にはプロファイラと呼ばれています。
プロファイラはゲームを作る上でとても重要な機能で、どんなゲームタイトルでも開発用機能として用意されていると思います。
ゲームの処理時間は1/60秒や 1/30秒といった感じで非常にシビアなため、高速化できるところはできるだけ行っています
ところが、プログラムを組んでいて
「ここは時間がかかるだろうなぁ」
と思っていても、意外と処理時間が短かかったり、逆に
「ここは簡単な処理なので大丈夫だろう…」
と思っていても、呼び出し回数が膨大ですごく処理時間が長くなったりします
実際にどれくらい時間がかかっているのかを知るためには、測定するプログラムを書けばいいわけです!
プログラムのためのプログラム。
というわけで、非常に簡単なプロファイラの説明をします。
考え方は非常にシンプルです。
処理したい区間の前後で現在の時間を測定して、時間の差分を表示する、というものです
int function(void) { // 開始時間(A)を取得 : : // 終了時間(B)を取得 // (B) - (A) で差分を求め、画面に表示する }
PCでの時間測定には次の関数を使用します。
QueryPerformanceFrequency : 高分解能パフォーマンスカウンタの更新頻度(1秒間の更新回数)
QueryPerformanceCounter : 高分解能パフォーマンスカウンタの現在の値
時間測定には timeGetTime(), GetTickCount() などもありますが、上記関数がより細かい粒度で時間を取得できます。
計測開始と終了で QueryPerformanceCounter を呼び出し、カウンタを取得します。
カウンタの差分を QueryPerformanceFrequency で割れば、処理に何秒かかったか測定できます。
QueryPerformanceFrequencyをそのまま使うと結果には非常に小さい値しか出てこないので、1/1000, 1/1000000 などにして使うことで、ミリ秒やマイクロ秒といった単位で取得することが出来ます。
プロファイラの基本は上記の形です。
さらに使いやすく&分かりやすく変更するなら
・プロファイラに文字列を渡し、同じ名前の処理を後で集計、一覧表示する
・グラフなど使用してグラフィカルに表示する
・使いやすくするため、クラスのコンストラクタとデストラクタを使って時間を測定
といったことが挙げられると思います。
この辺の詳細が気になる方は GameProgrammingGems (3巻1-17、2巻1-11、1巻1-14)を参考にすると良いと思います。
処理時間に余裕が出来れば、より多くのキャラクタを表示できたり、さらに追加でいろんな演出が出来たりします。プロファイラを使い、一番処理の重い箇所(ボトルネック)を見つけ、そこを高速化していきましょう!
あっと驚く作品が出来上がるのをお待ちしています
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (4)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (872)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年