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

冴木 元

tag: 組み込み

技術解説 2008年11月 6日

【2】フロー全体を見渡した最適化が必要(2/2)

● 「全体を見通す」という意味:Wait抜けの例

 ここで,プログラム・フロー全体を見通す難しさについて,DMAのウェイト(wait)処理を例に説明してみたいと思います.DMAの転送は大きく分けて,次の3段階から成ります(図4)

zu04_01.gif

図4 DMAのウェイト抜け
DMAの転送は大きく分けて,1)転送パラメータの設定,2)転送開始,3)ウェイト処理,の3段階から成る.最後のウェイト処理を抜かしてしまうと,次のDMA転送時にハングアップする原因となる.これは単純ミスのようでいて,実際のコーディングでは防ぐのがなかなか難しい.

  1. DMAの転送パラメータの設定
  2. DMA転送開始
  3. ウェイト処理

 このウェイト処理とは,DMAのレジスタに用意されている転送終了を知らせるフラグをCPUが見張っている処理のことです.DMAには,転送処理が終了すると反転するようなフラグがレジスタに必ず用意されています.そのため,CPUはこれを見張ることでDMAの転送終了を知ることができます.

 従って,最後のウェイト処理を抜かしてしまうと,正しい転送シーケンスとは言えなくなります.また,次のDMA転送時にハングアップしてしまう原因となります.

 この「ウェイト処理の抜け」というのは,一見単純ミスのようでいて,実際のコーディングでは防ぐのがなかなか難しいものです.なぜなら,2)DMA転送開始と3)ウェイト処理はプログラマが一目で見渡せる個所に記述されるとは限らないからです.パイプライン化による最適化をギリギリまで推し進めると,例えば,2)DMA転送開始と3)ウェイト処理が異なった関数の中に記述されることも起こり得ます(図5)

zu05_01.gif
図5 フロー全体を考えた最適化
パイプライン化による最適化を突き詰めると,コードのフロー全体にまたがった最適化が必要となってくる.この中でCPUの処理とDMA転送を最適に配置し,かつウェイト抜けのようなミスを防ぐのは難易度が高い.

 従って,プログラマはDMA転送のタイミング・チャート(図3)を考える設計の段階から,ウェイト抜けなどのミスが生じないように注意しなければなりません.そして,実際のコーディングでも,ウェイト処理の記述に抜けはないかという観点からソース・コード・レビューを行う必要があるでしょう.また,最適化後もミスがなかったかどうかを確認するために,適切なテスト項目が用意されている必要があります.すなわち,設計,コーディング,テストの各工程において,注意深い確認が必要になります.

組み込みキャッチアップ

お知らせ 一覧を見る

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