新人技術者のためのロジカル・シンキング入門(8) ―― CPUの演算量をひたすら削る
限られたハードウェア・リソース上で開発する組み込みシステムにおいて,最適化設計を実施して求められる性能を確保することは必要不可欠な作業である.今回は,CPUの演算量を減らすことにより性能を確保する方法について解説する. (編集部)
技術解説・連載「新人技術者のためのロジカル・シンキング入門」 記事一覧
第1回 いかにしてバグの原因を突き止めるか
第2回 プログラミングにおける良いデータ構造
第3回 「必要とされる設計書」の作り方
第4回 直したバグがゾンビのごとく復活する
第5回 ソース・コード規約の作り方
第6回 ハードウェア基礎の基礎
第7回 「ひたすら流すだけのテスト」にさよなら
第8回 CPUの演算量をひたすら削る
第9回 メモリ転送速度の最適化設計
第10回 「工学の知」を実務に生かす
●お知らせ
本連載記事を元に加筆・再編集した書籍『組み込みエンジニアのためのロジカル・シンキング入門』が好評発売中!
Fさんは,今度発売する新しい携帯ゲーム機の開発に携わっています.このゲーム機は「3Dグラフィックスの立体画像がきめ細かくてきれいであること」を売りにしようとしていました.
しかし,開発も終盤にさしかかったところで,思わぬ事態が生じました.画面の動きがトロトロと遅いのです.これでは,迫力ある画像を
楽しむどころか,描画を待つ時間のイライラの方が大きく,とても商品として売れそうにありません.
さらに,場合によっては,プレイ中にゲーム自体がハングアップしてしまうこともあると分かりました.どうやら,処理速度がリアルタイムでは間に合わず,システム全体が動かなくなってしまうのが原因のようでした.元凶は3Dグラフィックスなのではないか,とすぐに疑われました.3D画像は,ポリゴンと呼ばれる小さな三角形で物体の表面を覆うようにして表現します.このポリゴンの数を増やせば増やすほど画像はきれいになりますが,計算量が増えるため,その分描画に時間がかかるようになります.
処理量を費やす部分を切り分けていった結果,まず,3D描画を行うライブラリ関数の性能が不十分であり,最適化を行う余地があることが分かってきました.また,3D画像処理を行うビデオ・チップそのものの性能が不十分であることも分かりました.どのビデオ・チップを採用するかに当たっては,当然各社のベンチマークをとって評価したのですが,評価方法に問題があったようです.そのため,評価時の成績と実際にシステムを組み上げたときの処理性能とでは,かなり差があるらしいことが分かりました.
そうはいっても,今からビデオ・チップを取り換えて開発し直すわけにはいきません.結局,3D描画ライブラリの最適化でなんとかすることになってしまいました.
ゲームの作り自体を変更して3Dグラフィックスの描画を簡素化する手はありそうですが,この手段を用いると商品価値に響いてしまいます.また,そもそも各ゲーム・メーカはある程度開発を進めてしまっており,今さら後には引けません.Fさんたちは苦しい立場に立たされてしまいました注1.
注1;現在の組み込みシステム開発では,3Dグラフィックスは専用のハードウェア・アクセラレータを用いて,大規模なライブラリ環境を使いこなすのが一般的である.本文中で解説した最適化のテクニックが必ずしもそのまま使えるわけではないので,注意していただきたい.