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