4.13~4.15 共有メモリとまとめ

31
4.13~4.15 共共共共共共共共共 共共共共共共共 1 共 6311608 共共共共

Upload: anoush

Post on 15-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

4.13~4.15 共有メモリとまとめ. 情報科学研究科  1 年 6311608  石塚絢子. 4.13 共有メモリの使用. 4.13 共有メモリ. ImpulseC プログラミングモデル ストリームの代わりに共有メモリの使用をサポート 共有メモリ 頻繁に使用される配列値でプロセスの初期化をするのに役立つ ハードウェアとソフトウェアのプロセス間のデータ転送で、 より高いパフォーマンスを出す 可能性がある 共有メモリのインターフェース 外部メモリリソースへのジェネリックインタフェースとして使用できる - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 4.13~4.15  共有メモリとまとめ

4.13~4.15 共有メモリとまとめ

情報科学研究科  1 年  6311608  石塚絢子

Page 2: 4.13~4.15  共有メモリとまとめ

4.13 共有メモリの使用

Page 3: 4.13~4.15  共有メモリとまとめ

   4.13 共有メモリ

• ImpulseC プログラミングモデル– ストリームの代わりに共有メモリの使用をサポート

– 共有メモリ• 頻繁に使用される配列値でプロセスの初期化をするのに役立つ• ハードウェアとソフトウェアのプロセス間のデータ転送で、

  より高いパフォーマンスを出す可能性がある

– 共有メモリのインターフェース• 外部メモリリソースへのジェネリックインタフェースとして使

用できる• メモリコントローラインタフェースを開発するためのハード

ウェア設計専門知識が必要

Page 4: 4.13~4.15  共有メモリとまとめ

  共有メモリの使用法

• HelloFPGA– Producer プロセスから DoHello プロセスへテ

キストデータを運ぶストリームインターフェイスの代替として、共有メモリを使用する

Producer DoHello Consumer

ストリーム 1

ストリーム 2

共有メモリ

Page 5: 4.13~4.15  共有メモリとまとめ

  共有メモリの使用法

• HelloFPGA– DoHello プロセスから Producer プロセスへテ

キストデータを運ぶストリームインターフェイスの代替として、共有メモリを使用する

• stream s1  のようなサブルーチンを削除• co_stream → co_memory

• co_stream_create→co_memory_create

Page 6: 4.13~4.15  共有メモリとまとめ

co_memory_create 関数と co_stream_create 関数

• co_memory_create

– 基本的には同じ

– 読み書きのために指定されたバイト数のメモリ割り当て、

  メモリに読み書きのアクセスをする任意の数のプロセスへ渡せるハンドルを返す

• 実際の読み書き: co_memory_readblock と co_memory_writeblock

• co_stream_create との違い– メモリリソースの物理的な位置を示すプラットホーム特有の識別子

を含んでいる• 第二引数で使用する識別子は、使用するプラットホームに依存する• 一般的な ( ジェネリック? )VHDL のプラットフォームの場合:• 識別子“ memO” は、一般的なデュアルポート同期 RAM を表している

Page 7: 4.13~4.15  共有メモリとまとめ

  ストリームとメモリの違い

• ストリームインターフェース– 実装に使用される FIFO バッファによって常に同期を

とっている• 値をあるプロセスから別のプロセスに渡すとき、生産者と消

費者のストリーム上のデータは衝突しない• 生産者のプロセスによって送られたデータは、消費者プロセ

スから "half baked" 状態にされることはない

• メモリインターフェース– データ通信の際に、慎重に同期する必要がある

• シグナルもしくはストリーム ( またはレジスタと呼ばれる低レベル通信回線 ) が、要求されるかもしれない

Page 8: 4.13~4.15  共有メモリとまとめ

   HelloFPGA の変更:同期

• ストリーム s1 を同等なメモリインタフェースに取り替えたい– DoHello プロセスと Producer プロセスの動作をどうにか同期

させる必要がある• DoHello は、 Producer がメモリへの書き込みを完了するまで、共

有メモリからデータを読みこんではいけない

– シグナル: Ready• Producer から DoHello まで状態を伝える手段として作成、使用され

る• シグナルは整数値を運ぶこともできる

 → count(“Hello FPGA!” の文字数 ) を DoHello プロセスに渡すのにも使用

Page 9: 4.13~4.15  共有メモリとまとめ

  共有メモリの使用法

Producer

DoHello Consumer

ストリーム 2共有メモリ

count:16co_memory_writeblock で書きこみready をポスト

待機中 印字

Page 10: 4.13~4.15  共有メモリとまとめ

4.14 メモリとストリームの性能

Page 11: 4.13~4.15  共有メモリとまとめ

  4.14  メモリとストリームの性能

• FPGA ベースの computing platforms :多くのタイプのメモリを含む

– 組み込みメモリ• FPGA 骨組み自体の中で統合されて、論理素子に使用されるのと

同じ内部リソースを使用することで実装される

– 外部メモリ• ボードレベルの接続を介して FPGA に接続される 1 つ以上の別々

のチップに位置している

– FPGA プラットホーム• たいてい SRAM か Flash などのいくつかの外部メモリを含む• いくつかの構成可能なオンチップの組み込みメモリを含んでいる

Page 12: 4.13~4.15  共有メモリとまとめ

  共有メモリとストリームの使用

• ImpulseC のプログラミングモデルは外部メモリと埋め込みメモリをサポートしている– Impulse C ライブラリの使用

• 特定のメモリおよびデータへのコピーブロックや、 共有メモリへのアクセス権を持つすべてのプロセスのメモ

リからスペースを割り当てる

→ プロセスからプロセスへデータを移動させるストリームの便利な代替手段

• いつ通信用に共有メモリを使用するか?• いつストリームを使用するか?

Page 13: 4.13~4.15  共有メモリとまとめ

 使用タイミング

• 2 つの HW プロセスのコミュニケーション– 選択は簡単

• データが連続⇒ストリームは、データ転送の最も効率的な手段• プロセスがデータへのランダムまたはイレギュラーなアクセス

を必要とする場合、共有メモリは唯一のオプション

• SW プロセスと HW プロセスとのコミュニケーション– 選択は複雑

• アプリケーションや、選択したプラットフォームの使用可能なメモリのタイプなどに依存

Page 14: 4.13~4.15  共有メモリとまとめ

 ■マイクロベンチマーク序論

• メモリとストリームの評価– データ転送性能をテストするマイクロベンチ

マーク• ストリーム (片道 ) テスト• ストリーム (双方向 ) テスト• RAM-CPU-Stream テスト• Shared Mem-4B• Shared Mem-16B• Shared Mem-1024B

Page 15: 4.13~4.15  共有メモリとまとめ

  ストリームテスト

• ストリーム (片道 ) テスト– Impulse C のストリームを使用して、ハードウェアのプ

ロセスに CPU からのデータを送信する転送速度を測定する

– ローカル変数を使用してデータを転送• データが CPU 上で最初に計算され、ハードウェアでのさらな

る処理のために渡されるアプリケーション

• ストリーム(双方向)テスト– ストリーム (片道 ) +データが返る時間– データがハードウェアプロセスに転送され、それから

CPU のループに戻される filter-type のアプリケーション

Page 16: 4.13~4.15  共有メモリとまとめ

   RAM-CPU-Stream テスト

• RAM-CPU-Stream テスト– メモリの使用と CPU のストリームを組み合わ

せた性能を測定する• CPU はメモリからデータを読み出し、ストリームを

用いてデータを直接ハードウェアプロセスに書きこむ

• CPU がデータに対して計算を実行する必要がないアプリケーション

• CPU は単にハードウェアプロセスのためのデータを取ってくるのに使用される

Page 17: 4.13~4.15  共有メモリとまとめ

   Shared Mem テスト

• Shared Mem(-4B/-16B/-1024B)

– メモリからハードウェアプロセスへの直接転送の性能を測定する• ハードウェアプロセスがデータブロックを外部メモ

リからローカル配列に繰り返し読み込む– メモリのデータが処理の準備ができているアプリケーショ

ンをエミュレート– CPU の介入なしに、直接ハードウェアプロセスで読める

• 転送ブロックのサイズが異なるだけ

Page 18: 4.13~4.15  共有メモリとまとめ

 ■プラットホームへのメモリテスト結果• 以下の 3 つに対して行う

– Altera Nios プラットホーム

– Xilinx Power PC プラットホーム

– Xilinx MicroBiaze プラットホーム

Page 19: 4.13~4.15  共有メモリとまとめ

   Altera Nios プラットホーム

• Nios CPU – Altera's Avalon バスを介して外部 SRAM と

ImpulseC のハードウェアプロセスに接続されている

Page 20: 4.13~4.15  共有メモリとまとめ

   Altera Nios プラットホーム

• アバロンバス– バスの上のすべてのコンポーネントによって共有され

た 1 セットのデータとアドレス信号がない– 実際にバスに接続されたコンポーネントにカスタム設

計されて、ソフトウェアによって自動的に生成される

– 2 つのマスターが同じスレーブで通信をしていない場合、同時に転送を実行できる

– 例: CPU が ImpulseC ストリームとシグナルに同時にアクセスできる

Page 21: 4.13~4.15  共有メモリとまとめ

   Altera Nios プラットホーム

• Nios プロセッサー上で動作しているプログラムは外部メモリに格納されている– CPU が外部 RAM から指示を求めて頻繁に要求を行うこ

とで、共有メモリテストを減速させる可能性がある

• パフォーマンスの向上– プログラム格納用の、別の組み込みメモリの使用

• ハードウェアプロセスが同時に外部メモリにアクセスしている間、 Avalon バスアーキテクチャは CPU の内蔵メモリにアクセスできる

• 組み込みメモリが、外部メモリよりはるかに速く、プログラム実行も早い

Page 22: 4.13~4.15  共有メモリとまとめ

  Xilinx Power PC プラットホーム

• FPGA は PLB(Processor Local Bus) と OPB(On-

chip Peripheral Bus) の両方によって構成される– パワー PC で動くテストプログラム

• 外部メモリが OPB に接続されている間、 PLB に接続された組み込みメモリに格納されている

– PLB/OPB• 標準の共有バスアーキテクチャ• ハードウェアプロセスが OPB 上で同時に外部メモリにア

クセスする間、 2 つのバスを使用することで、 PLB バス上の組み込みメモリから PowerPC がプログラムを実行できるようにする

Page 23: 4.13~4.15  共有メモリとまとめ

  Xilinx Power PC プラットホーム

Page 24: 4.13~4.15  共有メモリとまとめ

Xilinx MicroBlaze プラットホーム

• FPGA は単一の OPB 、プログラム格納用内蔵メモリ、および外部の SDRAM によって構成される

Page 25: 4.13~4.15  共有メモリとまとめ

Xilinx MicroBlaze プラットホーム

• ストリーム ( 一方向 ) テストで得られた、大規模な転送速度– MicroBlaze に提供された FSL(Fast Simplex Link)

を使用する、 MicroBlaze-to-hardware ストリームの実装• FSL は直接 MicroBlaze プロセッサに接続され

た、 FIFO 専用チャンネル

 

システムバスを完全に回避しハードウェアからデータの読み書きのための単一命令を提供

Page 26: 4.13~4.15  共有メモリとまとめ

Xilinx MicroBiaze プラットホーム

• FSL– 1 つのシステムバスしかない– MicroBlaze は専用命令と、より高速なパフォーマ

ンスのために組み込みメモリに接続できるデータラインを持っている

• テスト用の構成– 専用接続を使用して、組み込みメモリを OPB か

ら切断–命令フェッチからの干渉を回避

Page 27: 4.13~4.15  共有メモリとまとめ

Xilinx MicroBiaze プラットホーム

• シグナルの使用について– OPB 上の I/O にマッピングされたメモリとして

実装される

– プロセス間通信に共有メモリを利用するアプリケーション• ソフトウェアプロセスはハードウェアプロセスから

のシグナルで待機

– サンプルでは、 1 つの共有バスを使用している

→ 信号のポーリングは、メモリ使用量を妨げる

Page 28: 4.13~4.15  共有メモリとまとめ

4.15 概要

Page 29: 4.13~4.15  共有メモリとまとめ

   4.15 概要

• 本章– ストリーム指向のプログラミングの本質を示しなが

ら、 Impulse C ライブラリを紹介して、簡潔な例を提供した• テストデータを作成するために生産者と消費者プロセスがどの

ように使用されるか• シグナルと共有メモリを含む、プロセス間通信の代替方法

– 特定の FPGA プラットフォームにおける、ストリームベースとメモリベースの通信のトレードオフ

 

Page 30: 4.13~4.15  共有メモリとまとめ

   4.15 概要

• 次章– 実際のアプリケーションに対する開発とプロセ

スのテスト過程について

– C言語のコーディング技法によって、どのように ImpulseC アプリケーションのパフォーマンスを向上するか

Page 31: 4.13~4.15  共有メモリとまとめ

          ご清聴ありがとうございました