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

4.13~4.15 共有メモリとまとめ
情報科学研究科 1年
6311608 石塚絢子
4.13 共有メモリの使用
4.13 共有メモリ
• ImpulseCプログラミングモデル
– ストリームの代わりに共有メモリの使用をサポート
– 共有メモリ
• 頻繁に使用される配列値でプロセスの初期化をするのに役立つ
• ハードウェアとソフトウェアのプロセス間のデータ転送で、
より高いパフォーマンスを出す可能性がある
– 共有メモリのインターフェース
• 外部メモリリソースへのジェネリックインタフェースとして使用できる
• メモリコントローラインタフェースを開発するためのハードウェア設計
専門知識が必要
共有メモリの使用法
• HelloFPGA
– Producer プロセスからDoHelloプロセスへテキスト
データを運ぶストリームインターフェイスの代替とし
て、共有メモリを使用する
Producer
DoHello
ストリーム
1
共有メモリ
Consumer
ストリーム 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
count:16
co_memory_writeblockで書きこみ
readyをポスト
DoHello
Consumer
待機中
共有メモリ
印字
ストリーム 2
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(Onchip 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アプリケーションのパフォーマンスを向上
するか
ご清聴ありがとうございました