このページは、ソフトウェア、機器組込みのエンベデット・ソフトウェア(ファームウェア)の開発に関連したコラムのページです。このコラムはメールマガジン「アメニティ&サウンド 音と快適の空間へ」で連載していた技術・開発コラムを再編集したものを掲載しています。
前回は、組込系CPU,DSPなどのメモリアクセスについて簡単にご紹介しました。今回はメモリアクセスのコードの注意についてです。
メモリアクセスに関しての注意点の1例をご紹介します。
一般に、高速プロセッサは、外部メモリアクセスは低速な動作となる場合が多いのでオプティマイザは、メモリアクセス数を少なくするようなコードを生成しようとします。
同一アドレスにマッピングされたI/Oポートを複数アクセスすることで、読み出し回数によって内容を変更するように設計された周辺I/Oなどの場合、連続して読み出しアクセスしている行為は無駄なので、初回に読み出した値を代替として利用するようなコードが生成される場合があります。
これは、読み込みと書き込みが異なるレジスタへの書き込みとなるチップの場合も、同様に注意が必要です。
例えば、1つのI/Oアドレスを共用し、読み出したいレジスタの指定をAというアドレスに設定し、リカバリータイム後にAというアドレスを読み出すと、指定した内容が読み出せるというような設計のチップでは
a)ウエイトコードの削除
b)読み出しデータの置き換え
このような2つのオプティマイズが行なわれたコードが生成される可能性があります。
最近のパソコン用のPentiumなどのようなパイプラインの予測がなされた場合(Pentiumにこのような周辺I/Oは使わないと思いますが)、プロセッサ自身のデータキャッシュすら問題となる可能性があります。
余談ですが、Pentium IVでは、高速化するつもりのコードは、メモリアクセス量(空間的量)とコードサイズの比重が非常に大きくなっています。
キャッシュメモリによる高速化が非常に有効に機能しているため、同じメモリアクセスであっても集中的に狭い範囲のメモリアクセスを繰り返してもそれほど実行速度に影響しませんが、広い範囲のメモリをアクセスするコードでは途端に実行速度が低下します。
また、コードキャッシュの方式変更(OP CODE化)に伴いコードサイズが小さいもののキャッシュによる高速化の性能が高いため、コピー&ペーストして作られたコードサイズの大きなコードや、ループ展開されたコードの性能が芳しくなく、OP CODEと分岐予測などの技術によって、C++が生成し勝ちな、断片的な関数コードの実行性能が向上する傾向にあります。
パイプラインまで考慮した最低時間のウエイトコードは実際には、どうしているか?と思われるかもしれませんが……
高速化を狙っている場合には、ウエイトを挿入しないコードを設計します。
例えば、プリフェッチやパイプラインを考慮して、2つの計算処理を並列に実行しながら最速となるように設計することで、ウエイト時間に別の必要な計算処理時間が相当し、ウエイトコードがないコードが実現できるよう実装上の工夫をすることで高速化するなどです(目的の処理内容によっては実現不能ですが)
コンパイラなどのツール評価時には、オプティマイザの性質をいくつかのコードパターンで把握しておくことで、オプティマイザの生成コードに対する期待と問題を十分認識したソースコードを設計することが可能になります(コード生成やオプティマイズの法則をつかむ)。
パソコン用のコンパイラは、近年、オプティマイザが高度化してきているため、安直なハンドアセンブルによる高速化は適していない場合がありますが、最高速度が必要な場合にはアセンブラによる最適化が必要なこともあります。
このようなコードの最適化は、保守性については劣る傾向があるため、必要な時を除いては高級言語レベル、または、極局所的な最適化に押さえる傾向にあります。
ARIはハードウェア設計、製造、ファームウェア開発、 Windowsアプリケーションの開発をしています。 実績等に興味をお持ちいただけましたら、会社情報に主な開発実績を 「音響と開発」のコーナーには事例など関連情報を掲載していますのでご覧ください。
ソフトウェア開発と開発ツール関連の雑記
機器組込みのエンベデット・ソフトウェア(ファームウェア)の開発に関連したコラムです。 メールマガジン「アメニティ&サウンド 音と快適の空間へ」に連載していた技術・開発コラムを編集掲載しています。
ソフト、ハードウェア 技術関連の雑記
このコラムは無料メールマガジン「アメニティ&サウンド 音と快適の空間へ」 vol.36〜vol.64(2003年8/21〜2004年11/18)に 音響と開発の関連コラムとして連載していたものを編集掲載したものです。
技術・開発の閑話-2- vol.11〜20F1とコンピュータ技術 / ソフトウェアの標準と部品化
( 戦術と戦略の誤解 / アジャイル開発 / リファクタリング / 遺産と再生産 / 標準と生産管理 ほか)
|
技術・開発の閑話-2- vol.01〜10「ありえない」フェイルセーフと安全機能の連鎖 / HDD容量の差(天使の分け前) / リアルタイムとベストエフォート / エラーとコスト(ブルースクリーン/XP) / NDAと情報公開 / 専門ドメインの基礎範囲 / NHK技研公開(超高精細映像システム) |
エーアールアイはPCアプリケーション、デジタル機器の組込み(CPU)、信号処理(DSP)ソフトウェアの開発を行っています。 お客様のお役に立てることがございましたらご用命ください。