310 likes | 459 Views
4.13~4.15 共有メモリとまとめ. 情報科学研究科 1 年 6311608 石塚絢子. 4.13 共有メモリの使用. 4.13 共有メモリ. ImpulseC プログラミングモデル ストリームの代わりに共有メモリの使用をサポート 共有メモリ 頻繁に使用される配列値でプロセスの初期化をするのに役立つ ハードウェアとソフトウェアのプロセス間のデータ転送で、 より高いパフォーマンスを出す 可能性がある 共有メモリのインターフェース 外部メモリリソースへのジェネリックインタフェースとして使用できる
E N D
4.13~4.15 共有メモリとまとめ 情報科学研究科 1年 6311608 石塚絢子
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プロセスに渡すのにも使用
共有メモリの使用法 count:16 co_memory_writeblockで書きこみ readyをポスト Producer DoHello Consumer ストリーム 2 待機中 印字 共有メモリ
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つに対して行う • AlteraNiosプラットホーム • Xilinx Power PCプラットホーム • Xilinx MicroBiazeプラットホーム
AlteraNiosプラットホーム • Nios CPU • Altera's Avalon バスを介して外部SRAMとImpulseCのハードウェアプロセスに接続されている
AlteraNiosプラットホーム • アバロンバス • バスの上のすべてのコンポーネントによって共有された1セットのデータとアドレス信号がない • 実際にバスに接続されたコンポーネントにカスタム設計されて、ソフトウェアによって自動的に生成される • 2つのマスターが同じスレーブで通信をしていない場合、同時に転送を実行できる • 例: CPUがImpulseCストリームとシグナルに同時にアクセスできる
AlteraNiosプラットホーム • Niosプロセッサー上で動作しているプログラムは外部メモリに格納されている • CPUが外部RAMから指示を求めて頻繁に要求を行うことで、共有メモリテストを減速させる可能性がある • パフォーマンスの向上 • プログラム格納用の、別の組み込みメモリの使用 • ハードウェアプロセスが同時に外部メモリにアクセスしている間、AvalonバスアーキテクチャはCPUの内蔵メモリにアクセスできる • 組み込みメモリが、外部メモリよりはるかに速く、プログラム実行も早い
Xilinx Power PCプラットホーム • FPGAはPLB(ProcessorLocal Bus)とOPB(On-chip Peripheral Bus)の両方によって構成される • パワーPCで動くテストプログラム • 外部メモリがOPBに接続されている間、PLBに接続された組み込みメモリに格納されている • PLB/OPB • 標準の共有バスアーキテクチャ • ハードウェアプロセスがOPB上で同時に外部メモリにアクセスする間、2つのバスを使用することで、PLBバス上の組み込みメモリからPowerPCがプログラムを実行できるようにする
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概要 • 本章 • ストリーム指向のプログラミングの本質を示しながら、Impulse Cライブラリを紹介して、簡潔な例を提供した • テストデータを作成するために生産者と消費者プロセスがどのように使用されるか • シグナルと共有メモリを含む、プロセス間通信の代替方法 • 特定のFPGAプラットフォームにおける、ストリームベースとメモリベースの通信のトレードオフ
4.15概要 • 次章 • 実際のアプリケーションに対する開発とプロセスのテスト過程について • C言語のコーディング技法によって、どのようにImpulseCアプリケーションのパフォーマンスを向上するか
ご清聴ありがとうございました ご清聴ありがとうございました