新人技術者のためのロジカル・シンキング入門(9) ―― メモリ転送速度の最適化設計

冴木 元

tag: 組み込み

技術解説 2008年11月 6日

【1】メモリ速度を向上させるには(1/2)

 Fさんのケースに見られるように,最適化が新たなバグを生んでしまうことはよくあります.前回も述べたように,最適化というのはあくまでも製品が仕様通り動くことが前提であるため,最適化の結果,仕様を満たさなくなってしまうのでは元も子もありません.また,最適化というのは「何を基準にするか」というのも難しい問題となります.普通は処理速度が最悪になるデータを選んで,これを基準に最適化の度合いを測っていきます.しかし,後からもっと処理速度が遅くなるデータが見つかってしまう,ということはしばしば起こり得ます.最適化には「既に作ったものをいかに守るか」という観点も落とせないのです.

 さて,前回はCPUの演算量がボトル・ネックになるケースを取り上げました.今回は,メモリ速度がボトル・ネックになるケースを取り上げます.また,冒頭のエピソードのようなバグを防ぐ方法についても考えてみたいと思います.

● 外部メモリの巨大なデータにアクセスしたいのだが...

 画像データのように大きなデータは,CPUの内部メモリに置くことができないので,通常,外部メモリに配置します.ここで外部メモリにアクセスするには,大抵の場合1クロックではすまないため,CPUが外部メモリに直接アクセスする構成にしてしまうと,処理速度が著しく遅くなってしまいます[図1(a)].

zu01_01.gif
図1 メモリ速度がボトル・ネックとなるケースと対策
処理データが大きすぎてCPUの内部メモリに乗りきらない場合(画像処理などに多い),データを外部メモリに置くのだが,外部メモリに直接CPUがアクセスすると処理が遅くなる.そこで,DMAなどを用いて,データをいったん内部メモリに転送して処理する.

 「いや,データ・キャッシュがCPUに実装されていれば問題はないはずだ」と考える方もいらっしゃるかもしれません.確かに,データ・キャッシュが実装されていれば,外部メモリへのCPUアクセスはキャッシュに対するアクセスに変わるため,処理速度の問題は生じないとも考えられそうです.しかし,実際には巨大なデータを外部メモリに置いて処理を進める場合,データ・キャッシュの機能に頼るだけでは最適化が不十分な場合が多くあるのです.

 要するに,「最適化」と一言で言っても,さまざまなアプローチが必要になるということです.前回に紹介した最適化のテクニックは,CPUの命令を効果的に使いこなしてコーディングすることで処理速度の向上を図るものでした.しかし,今ここで例に挙げているようなケースでは,CPUの命令の使い方を工夫しても最適化は図れません.では,どのような解決策が考えられるでしょうか.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! 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日