新人技術者のためのロジカル・シンキング入門(8) ―― CPUの演算量をひたすら削る

冴木 元

tag: 組み込み

技術解説 2008年10月21日

【2】演算速度を向上するには

 CPUの演算量がボトルネックとなるケースの最適化方針を,図4に示します.演算処理が重いわけですから,ポイントとなるのは,「仕様を満たす機能の実装をいかにして効率の良い命令に置き換えるのか」です.そのため,最適化の工程においては,C言語のような高級言語で実装されたモジュールをアセンブリ言語などの低級言語に置き換えて実装することが求められるようになります.

zu04_01.gif
図4 処理速度向上のためのアプローチ
すべての最適化がアセンブリ記述で解決するものではない.メモリの使い方を工夫しなければならないこともある.アセンブリ記述による最適化は,コンパイル結果の流用から始めてハンド・アセンブルに移るとスムーズ.

 組み込みシステムにおけるコンパイラの生成効率は近年飛躍的に向上しています.とはいえ,CPUのアーキテクチャによっては,コンパイラの生成効率に限界があることがあります.そのため,プログラマがコンパイラに代わって最適なアセンブリ・コードを書く必要が生じることがあります.

● まずはコンパイル結果の流用から

 さて,「効率的なアセンブリ・コードを書く」といっても,初心者の場合には,アセンブリ言語で一からコーディングするのはなかなか難しいと思います.アセンブリ言語は,C言語のような高級言語とはコーディングのやり方がかなり異なります.ましてや,最近の組み込み開発で用いられるCPUは,一昔前のものと異なり,アーキテクチャが複雑です.従って,命令体系を理解して使いこなすには,なかなか敷居が高い面もあるでしょう.

 そこで,初心者が最適化実装をこなすに当たっては,まずはコンパイル結果の改造から着手することをお勧めします.まず,コンパイラにアセンブル結果を生成させて,それを流用することから始めるのです.そして慣れてきたら,今度は一からアセンブリ言語でコーディングすることにします.すなわち,

  1. C言語などでコーディング
  2. コンパイル結果のアセンブリ・コードを改造
  3. アセンブリ言語で一からコーディング

という順番で最適化を進めていきます(図5).これは技術を順に習得していく上からも,開発効率の上からも望ましいと思います.もちろん,1)の段階で,仕様を満たすように実装する必要があるのは言うまでもありません.

zu05_01.gif
図5 アセンブリ言語によるコーディング
コンパイラが生成するアセンブリ・コードの改造から始める.コンパイル結果の流用では効率の良いコードが書けないモジュールもあるので,一からアセンブリ言語で書く必要も生じる.開発効率や技術の習熟度を考えて工夫するとよい.

 初心者から見ると,CPUの命令解説書の記述から最適なコーディングへとつなげていくのは,なかなか難しいものがあると思われます.そんなときはまず,コンパイル結果のアセンブリ言語を眺めて,その無駄な記述を見破れるようになることで,最適化実装への第1歩とすることができます.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日