新人技術者のためのロジカル・シンキング入門(9) ―― メモリ転送速度の最適化設計
【1】メモリ速度を向上させるには(2/2)
● DMA転送を活用する
外部メモリにデータを置いていることが処理速度のネックになる場合,DMA(direct memory access)を使って外部メモリと内部メモリとの間で転送を行う方法が考えられます[図1(b)].すなわち,
- DMA転送(外部メモリ→内部メモリ)
- CPUによる処理(内部メモリにアクセス)
- DMA転送(内部メモリ→外部メモリ)
DMAを用いる理由の一つは,転送そのものにCPUの負担をかけないためです.メモリ間のデータ転送をCPUで行わなければ,その分だけCPUは画像データそのものの処理に集中できます.しかし,DMAによる転送を加えただけでは,まだ最適化は不十分です.なぜなら,DMAの転送中の空き時間をCPUが有効利用していないからです.
● 転送のパイプライン化で対応
CPU処理とDMA転送は別々のハードウェアを利用するので,当然同時に動作させられます.従って,DMA転送中にCPUは別の処理を行えます.この「DMA転送中の空き時間をうまく活用する」というところに,最適化の余地が残されています.すなわち,DMA転送とCPU処理をうまくパイプライン化することで,初めて十分に最適化できたと言えます(図2).
図2 転送と演算の並列化
処理データが大きい場合の解決策として,演算そのものは内部メモリに置いて,演算の前後で外部メモリと内部メモリとの間で転送を行う方法がある.
転送処理にはCPUではなく,DMAを用いる.いわば,データ・キャッシュが行う処理をプログラマが手書きするイメージ.
具体的には,外部メモリ-内部メモリ間のDMA転送を,CPUによる処理の前後に置きます.DMAで外部メモリから内部メモリに転送したデータをCPUで処理し,それを再びDMAで内部メモリから外部メモリへと書き戻す必要があります.この転送(DMA)→処理(CPU)→転送(DMA)という一連の流れを矛盾なく並列に処理できるようにすれば,大きな最適化の効果が見込めます.
ここまでに述べた最適化のポイントを表1にまとめます.
最適化設計の方法 | 対処方法 |
DMAの活用 | DMAにより,内部メモリと外部メモリとの間でデータを転送し,演算処理をパイプライン化する |
データ・キャッシュ | データ・キャッシュを用いる(補足的なものにとど まる) |
tag: 技術教育