Chapter11-4(前半) 6311627 加藤健 4章 システムレベルでの パイプラインの作り方 システムレベルでのパイプラインの作り方 エッジ検出アルゴリズムでの先読み → バイトバッファ配列へのアクセスが必要 → パフォーマンスが低下 → パイプラインレベルでの並列処理を行う → 劇的にフィルタの実効スループットが向上 システムレベルでのパイプラインの作り方 • イメージフィルタアルゴリズムをサブプロセス へ分割 •フィルタの複雑さが軽減 •アルゴリズムのパフォーマンスが改善 システムレベルでのパイプラインの作り方 • パイプラインの動作は7章で説明したものと ほぼ同様(今回は高レベル) • パイプラインはプログラマにより設計される (コンパイラにより自動的に生成されない) システムレベルでのパイプラインの作り方 • エッジ検出の実装には各ピクセルを処理する ために3×3のウインドウが必要 • 本書のアルゴリズムでは、上流のプロセスが 3つのストリームとしてウインドウを生成 バイトバッファとそれに対応する 循環バッファのオーバーヘッドが不要に システムレベルでのパイプラインの作り方 1. 画像データをco_memory_readblockを使用 してイメージバッファからロード。その後 co_stream_writeを使用して24ビットのピクセ ルのストリームに変換 2. ジェネレータによりウインドウの各列を表す ストリームを生成する。 システムレベルでのパイプラインの作り方 3. 3つのピクセルデータは中央のピクセルの値 を計算するために使われる。 この値はco_stream_writeからストリーミング される 4. co_stream_readを使用して結果のピクセル データを呼び出し、co_memory_writeblock を使用して新しいイメージバッファに格納 システムレベルでのパイプラインの作り方 4つのプロセスはパイプラインにより並列で動作 2クロックサイクルの速度で 処理されたピクセルを生成可能 リアルタイム動画処理に十分な速さを実現 DMAの入力プロセス • これまでのアルゴリズムでは入出力画像が 保存されているかを無視していた • 実際は、外部RAMやハードウェアインターフェ イスを介して入出力される • Impulse C は大量のデータを移動するための ストリームと、共有メモリのメカニズムを提供 している DMAの入力プロセス • これまでの例ではストリームを使用 特定のアプリケーションでは 共有メモリを使用するとパフォーマンスが向上 • 選択決定の要因はプラットフォーム固有 • 留意する点は4つ DMAの入力プロセス 1. 各ストリームの処理に何サイクル必要か • プロセッサが転送に関わっているかとCPUと バスの組み合わせに依存 • バスがストリーム上でデータを受信する際、 ポーリングすると、大幅なオーバーヘッドが 発生 DMAの入力プロセス 2. メモリ転送のために何サイクル必要か • 1と同様に使用されているメモリとバスの アーキテクチャに依存している DMAの入力プロセス 3-1. CPUがキャッシュを持っているか 3-2. そのデータはキャッシュに存在するか DMAの入力プロセス 4. Impulse Cのハードウェアのプロセスと 同じバス上のメモリか • そうであるなら、CPUへのアクセス競合をおこ し、パフォーマンスが低下する DMAの入力プロセス • 4章においてベンチマークの例を用いてこれら の問題について議論した • 今回はストリーミングデータを用いるアプロー チと共有メモリを用いるアプローチの比較実 験のためにNiosⅡが埋め込まれたAlteraの Stratix FPGAを使用 DMAの入力プロセス • NiosⅡが埋め込まれたAlteraのStratix FPGA はストリームよりもDMA転送を使用したほうが 効率的なFPGA • 他のプラットフォームにおいてXilinxの MicroBlazeプロセッサとFSLバスを使用すると DMA転送より高速なパフォーマンスになるこ ともある DMAの入力プロセス • DMAを用いた共有メモリとのアクセスはハー ドウェアが転送中、別の処理を行うと転送が ブロックされる欠点がある データ転送が計算とオーバーラップできるように 共有メモリ操作を処理するためのプロセスを含む必要がある • 画像データを読み込み、データストリームから 送信することがパイプラインの第一プロセス DMAの入力プロセス • 図11‐9からわかること 1. • • • to_streamプロセスは co_signal go co_memory imgmem co_stream output_stream の3要素を持つ DMAの入力プロセス 2. プロセス実行機能では、それぞれ • co_memory_readblock関数は共有メモリからの ピクセルデータの読み取り • co_stream_write関数は出力ストリームへの書き 込みを行う • co_signalはCPUと同期し、画像メモリの処理準 備ができているかを確認 を行っている。 DMAの入力プロセス 3. • 24bitのデータを受け入れるように設計されて いるため16bitのピクセルデータを受理する • 画像データは16bit符合なし整数として格納す るが32bitのメモリが使用されている • DMAは配列に1つずつ要素を転送することで、 倍のバストランザクションを必要とする DMAの入力プロセス • これらのプロセスは多くの種類の入力ソース と共に使用できるように変更する、あるいは 手製のハードウェアブロックに置き換えること が可能
© Copyright 2024 ExpyDoc