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

冴木 元

tag: 組み込み

技術解説 2008年11月 6日

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

● DMA転送を活用する

 外部メモリにデータを置いていることが処理速度のネックになる場合,DMA(direct memory access)を使って外部メモリと内部メモリとの間で転送を行う方法が考えられます[図1(b)].すなわち,

  1. DMA転送(外部メモリ→内部メモリ)
  2. CPUによる処理(内部メモリにアクセス)
  3. DMA転送(内部メモリ→外部メモリ)
というステップを踏むわけです.


 DMAを用いる理由の一つは,転送そのものにCPUの負担をかけないためです.メモリ間のデータ転送をCPUで行わなければ,その分だけCPUは画像データそのものの処理に集中できます.しかし,DMAによる転送を加えただけでは,まだ最適化は不十分です.なぜなら,DMAの転送中の空き時間をCPUが有効利用していないからです.

● 転送のパイプライン化で対応

 CPU処理とDMA転送は別々のハードウェアを利用するので,当然同時に動作させられます.従って,DMA転送中にCPUは別の処理を行えます.この「DMA転送中の空き時間をうまく活用する」というところに,最適化の余地が残されています.すなわち,DMA転送とCPU処理をうまくパイプライン化することで,初めて十分に最適化できたと言えます(図2)

zu02_01.gif
図2 転送と演算の並列化
 処理データが大きい場合の解決策として,演算そのものは内部メモリに置いて,演算の前後で外部メモリと内部メモリとの間で転送を行う方法がある.
 転送処理にはCPUではなく,DMAを用いる.いわば,データ・キャッシュが行う処理をプログラマが手書きするイメージ.

 具体的には,外部メモリ-内部メモリ間のDMA転送を,CPUによる処理の前後に置きます.DMAで外部メモリから内部メモリに転送したデータをCPUで処理し,それを再びDMAで内部メモリから外部メモリへと書き戻す必要があります.この転送(DMA)→処理(CPU)→転送(DMA)という一連の流れを矛盾なく並列に処理できるようにすれば,大きな最適化の効果が見込めます.
 ここまでに述べた最適化のポイントを表1にまとめます.

最適化設計の方法 対処方法
DMAの活用 DMAにより,内部メモリと外部メモリとの間でデータを転送し,演算処理をパイプライン化する
データ・キャッシュ データ・キャッシュを用いる(補足的なものにとど まる)
表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日