4.13~4.15 共有メモリとまとめ
Post on 15-Jan-2016
43 Views
Preview:
DESCRIPTION
TRANSCRIPT
4.13~4.15 共有メモリとまとめ
情報科学研究科 1 年 6311608 石塚絢子
4.13 共有メモリの使用
4.13 共有メモリ
• ImpulseC プログラミングモデル– ストリームの代わりに共有メモリの使用をサポート
– 共有メモリ• 頻繁に使用される配列値でプロセスの初期化をするのに役立つ• ハードウェアとソフトウェアのプロセス間のデータ転送で、
より高いパフォーマンスを出す可能性がある
– 共有メモリのインターフェース• 外部メモリリソースへのジェネリックインタフェースとして使
用できる• メモリコントローラインタフェースを開発するためのハード
ウェア設計専門知識が必要
共有メモリの使用法
• HelloFPGA– Producer プロセスから DoHello プロセスへテ
キストデータを運ぶストリームインターフェイスの代替として、共有メモリを使用する
Producer DoHello Consumer
ストリーム 1
ストリーム 2
共有メモリ
共有メモリの使用法
• HelloFPGA– DoHello プロセスから Producer プロセスへテ
キストデータを運ぶストリームインターフェイスの代替として、共有メモリを使用する
• stream s1 のようなサブルーチンを削除• co_stream → co_memory
• co_stream_create→co_memory_create
co_memory_create 関数と co_stream_create 関数
• co_memory_create
– 基本的には同じ
– 読み書きのために指定されたバイト数のメモリ割り当て、
メモリに読み書きのアクセスをする任意の数のプロセスへ渡せるハンドルを返す
• 実際の読み書き: co_memory_readblock と co_memory_writeblock
• co_stream_create との違い– メモリリソースの物理的な位置を示すプラットホーム特有の識別子
を含んでいる• 第二引数で使用する識別子は、使用するプラットホームに依存する• 一般的な ( ジェネリック? )VHDL のプラットフォームの場合:• 識別子“ memO” は、一般的なデュアルポート同期 RAM を表している
ストリームとメモリの違い
• ストリームインターフェース– 実装に使用される FIFO バッファによって常に同期を
とっている• 値をあるプロセスから別のプロセスに渡すとき、生産者と消
費者のストリーム上のデータは衝突しない• 生産者のプロセスによって送られたデータは、消費者プロセ
スから "half baked" 状態にされることはない
• メモリインターフェース– データ通信の際に、慎重に同期する必要がある
• シグナルもしくはストリーム ( またはレジスタと呼ばれる低レベル通信回線 ) が、要求されるかもしれない
HelloFPGA の変更:同期
• ストリーム s1 を同等なメモリインタフェースに取り替えたい– DoHello プロセスと Producer プロセスの動作をどうにか同期
させる必要がある• DoHello は、 Producer がメモリへの書き込みを完了するまで、共
有メモリからデータを読みこんではいけない
– シグナル: Ready• Producer から DoHello まで状態を伝える手段として作成、使用され
る• シグナルは整数値を運ぶこともできる
→ count(“Hello FPGA!” の文字数 ) を DoHello プロセスに渡すのにも使用
共有メモリの使用法
Producer
DoHello Consumer
ストリーム 2共有メモリ
count:16co_memory_writeblock で書きこみready をポスト
待機中 印字
4.14 メモリとストリームの性能
4.14 メモリとストリームの性能
• FPGA ベースの computing platforms :多くのタイプのメモリを含む
– 組み込みメモリ• FPGA 骨組み自体の中で統合されて、論理素子に使用されるのと
同じ内部リソースを使用することで実装される
– 外部メモリ• ボードレベルの接続を介して FPGA に接続される 1 つ以上の別々
のチップに位置している
– FPGA プラットホーム• たいてい SRAM か Flash などのいくつかの外部メモリを含む• いくつかの構成可能なオンチップの組み込みメモリを含んでいる
共有メモリとストリームの使用
• ImpulseC のプログラミングモデルは外部メモリと埋め込みメモリをサポートしている– Impulse C ライブラリの使用
• 特定のメモリおよびデータへのコピーブロックや、 共有メモリへのアクセス権を持つすべてのプロセスのメモ
リからスペースを割り当てる
→ プロセスからプロセスへデータを移動させるストリームの便利な代替手段
• いつ通信用に共有メモリを使用するか?• いつストリームを使用するか?
使用タイミング
• 2 つの HW プロセスのコミュニケーション– 選択は簡単
• データが連続⇒ストリームは、データ転送の最も効率的な手段• プロセスがデータへのランダムまたはイレギュラーなアクセス
を必要とする場合、共有メモリは唯一のオプション
• SW プロセスと HW プロセスとのコミュニケーション– 選択は複雑
• アプリケーションや、選択したプラットフォームの使用可能なメモリのタイプなどに依存
■マイクロベンチマーク序論
• メモリとストリームの評価– データ転送性能をテストするマイクロベンチ
マーク• ストリーム (片道 ) テスト• ストリーム (双方向 ) テスト• RAM-CPU-Stream テスト• Shared Mem-4B• Shared Mem-16B• Shared Mem-1024B
ストリームテスト
• ストリーム (片道 ) テスト– Impulse C のストリームを使用して、ハードウェアのプ
ロセスに CPU からのデータを送信する転送速度を測定する
– ローカル変数を使用してデータを転送• データが CPU 上で最初に計算され、ハードウェアでのさらな
る処理のために渡されるアプリケーション
• ストリーム(双方向)テスト– ストリーム (片道 ) +データが返る時間– データがハードウェアプロセスに転送され、それから
CPU のループに戻される filter-type のアプリケーション
RAM-CPU-Stream テスト
• RAM-CPU-Stream テスト– メモリの使用と CPU のストリームを組み合わ
せた性能を測定する• CPU はメモリからデータを読み出し、ストリームを
用いてデータを直接ハードウェアプロセスに書きこむ
• CPU がデータに対して計算を実行する必要がないアプリケーション
• CPU は単にハードウェアプロセスのためのデータを取ってくるのに使用される
Shared Mem テスト
• Shared Mem(-4B/-16B/-1024B)
– メモリからハードウェアプロセスへの直接転送の性能を測定する• ハードウェアプロセスがデータブロックを外部メモ
リからローカル配列に繰り返し読み込む– メモリのデータが処理の準備ができているアプリケーショ
ンをエミュレート– CPU の介入なしに、直接ハードウェアプロセスで読める
• 転送ブロックのサイズが異なるだけ
■プラットホームへのメモリテスト結果• 以下の 3 つに対して行う
– Altera Nios プラットホーム
– Xilinx Power PC プラットホーム
– Xilinx MicroBiaze プラットホーム
Altera Nios プラットホーム
• Nios CPU – Altera's Avalon バスを介して外部 SRAM と
ImpulseC のハードウェアプロセスに接続されている
Altera Nios プラットホーム
• アバロンバス– バスの上のすべてのコンポーネントによって共有され
た 1 セットのデータとアドレス信号がない– 実際にバスに接続されたコンポーネントにカスタム設
計されて、ソフトウェアによって自動的に生成される
– 2 つのマスターが同じスレーブで通信をしていない場合、同時に転送を実行できる
– 例: CPU が ImpulseC ストリームとシグナルに同時にアクセスできる
Altera Nios プラットホーム
• Nios プロセッサー上で動作しているプログラムは外部メモリに格納されている– CPU が外部 RAM から指示を求めて頻繁に要求を行うこ
とで、共有メモリテストを減速させる可能性がある
• パフォーマンスの向上– プログラム格納用の、別の組み込みメモリの使用
• ハードウェアプロセスが同時に外部メモリにアクセスしている間、 Avalon バスアーキテクチャは CPU の内蔵メモリにアクセスできる
• 組み込みメモリが、外部メモリよりはるかに速く、プログラム実行も早い
Xilinx Power PC プラットホーム
• FPGA は PLB(Processor Local Bus) と OPB(On-
chip Peripheral Bus) の両方によって構成される– パワー PC で動くテストプログラム
• 外部メモリが OPB に接続されている間、 PLB に接続された組み込みメモリに格納されている
– PLB/OPB• 標準の共有バスアーキテクチャ• ハードウェアプロセスが OPB 上で同時に外部メモリにア
クセスする間、 2 つのバスを使用することで、 PLB バス上の組み込みメモリから PowerPC がプログラムを実行できるようにする
Xilinx Power PC プラットホーム
Xilinx MicroBlaze プラットホーム
• FPGA は単一の OPB 、プログラム格納用内蔵メモリ、および外部の SDRAM によって構成される
Xilinx MicroBlaze プラットホーム
• ストリーム ( 一方向 ) テストで得られた、大規模な転送速度– MicroBlaze に提供された FSL(Fast Simplex Link)
を使用する、 MicroBlaze-to-hardware ストリームの実装• FSL は直接 MicroBlaze プロセッサに接続され
た、 FIFO 専用チャンネル
システムバスを完全に回避しハードウェアからデータの読み書きのための単一命令を提供
Xilinx MicroBiaze プラットホーム
• FSL– 1 つのシステムバスしかない– MicroBlaze は専用命令と、より高速なパフォーマ
ンスのために組み込みメモリに接続できるデータラインを持っている
• テスト用の構成– 専用接続を使用して、組み込みメモリを OPB か
ら切断–命令フェッチからの干渉を回避
Xilinx MicroBiaze プラットホーム
• シグナルの使用について– OPB 上の I/O にマッピングされたメモリとして
実装される
– プロセス間通信に共有メモリを利用するアプリケーション• ソフトウェアプロセスはハードウェアプロセスから
のシグナルで待機
– サンプルでは、 1 つの共有バスを使用している
→ 信号のポーリングは、メモリ使用量を妨げる
4.15 概要
4.15 概要
• 本章– ストリーム指向のプログラミングの本質を示しなが
ら、 Impulse C ライブラリを紹介して、簡潔な例を提供した• テストデータを作成するために生産者と消費者プロセスがどの
ように使用されるか• シグナルと共有メモリを含む、プロセス間通信の代替方法
– 特定の FPGA プラットフォームにおける、ストリームベースとメモリベースの通信のトレードオフ
4.15 概要
• 次章– 実際のアプリケーションに対する開発とプロセ
スのテスト過程について
– C言語のコーディング技法によって、どのように ImpulseC アプリケーションのパフォーマンスを向上するか
ご清聴ありがとうございました
top related