三浦 盛生

CHAPTER3
A Programming Model for
FPGA-Based Applications 後半
6311676 三浦 盛生
3.2(残り) Adding Soft Processors
to the Mix
3.2-ソフトプロセッサと
FPGAについて

FPGAベースの計算機をそれぞれが個別の計算能力を
持つ並列機械の集合とみなすことで、マイクロプロセッサ
として扱う事が出来る

「ソフト」プロセッサにFPGAベースの広い利用可能性を
与えると、古いC言語の必要性とアプリケーション独自の
ハードウェアの高速化の必要性のバランスをとるのに妥
当な実践的な方法となる
FPGAベースのプロセッサについて

FPGAベースのプロセッサは以下のような様々な理由から
役立つと言える






古典的なコードを実行することが可能
ソフトウェアテスト生成プログラム[software test generators]として開発の
間で使うことが可能
コストの掛かる基本入出力[standardizing I/O]や埋め込み型のステート
マシンのハードウェア構造と置換可能
OSを実行させることや、ハードウェアとして構築すると巨大なも
のになるが重要でない計算を実行することも可能
グリッドコンピューティング[grid]として使われたとき、プロセッサは
相互に並列計算プラットフォームを形成することが可能
FPGAベースのプロセッサは、低レベルのFPGAゲート(おそ
らく論理ゲートの事)で構成されている
ソフトウェアプロセッサとFPGAについて


最近のソフトウェアプロセッサ利用の革新(激増?)[explosion]
はFPGAが完全な「プログラマブルなチップシステム」に
対して順応性が高く、強力なハードウェア基盤に適用で
きることを証明している
FPGAの売り手は今、ごく低コストかあるいはコスト無しで、
必要なプロセッサ全てと、シングルコンピュータ基板をア
センブリに翻訳する必要のある周辺機器を提供しており、
それらのプラットフォームはハードウェアの高速化と高度
なパラレルソフトウェア等のカスタマイズを含んでいる
FPGAの利点

このように使われてきたFPGAは粗粒度並列プロ
グラムを実行するのに良いプラットフォームであ
る

他の並列計算機モデルと比較して、このアプロー
チはプロセス間のやりとりのオーバーヘッドが
より少ない

もし各プロセスがローカルメモリと明示された
タスクを持っていると、アプリケーションは異なる
FPGAのエリアと独立したFPGAデバイスとして分
割することができる
FPGAの利点

(FPGAによって得られる)多くの種類の計算は次のよう
な粗粒度並列処理に提供される




ベクトル配列計算
パイプラインによる画像や音声処理
他の多段式[multistage]シグナルフィルタリング
その他
3.3 Programming For
Parallelism
並列処理のためのプログラミング
3.3-1 C言語の問題点

C言語で汎用ハードウェア(又は非ノイマン型コンピュータ)を
プログラムするには問題が存在する

並列処理[Parallelism processing]と並列システムのプログラミングは


使用する言語の並列処理へのサポート
プログラマの複数の半独立コンピュータの要素[multiple quasi-independent computational element]
の扱い方に関する理解
が必要

しかしスタンダードなC言語はこれらの特徴を全く含んでいな
い
3.3-1 C言語の問題点

VHDLとベリログは抽象度が低いレベルであったにも関
わらず、正しく並列処理のために設計されていた

これらは、別のハード上の接続されたハードウェア構成要素
[hardware components]の高度な並列システムを記述するために作ら
れている
3.3-2 MPI

C言語プログラミングの文脈で並列処理プログラミング
のモデルに最も近い物はスレッドへサポートであり、C言
語の基本的な特徴ではないが、ポピュラーでアドオン
(OSの特殊なライブラリ)という形で容易に利用出来る

正直訳しててよく分からなかったが、次のスライドの「このタイ
プ」というのはこの文章が該当すると思われる。
3.3-2 MPI

ほとんど存在しないこのタイプのプログラムのための一般的
なライブラリにMessage-Passing Interface (MPI) がある

MPIは複数の一般的なデスクトップPCを集めてより大きな
スーパーコンピュータとするアプリケーションや、その他の強
力なプラットフォームの意図して設計されている

Wikipedeiaによると


MPIとは、 並列コンピューティング利用するための標準化された規格
複数のCPUが情報をバイト列からなるメッセージとして送受信すること
で協調動作を行えるようにする
3.3-3 妥協案

もしC言語(又はC言語を拡張した物やその他のフォン・ノ
イマン型計算機の為に作られたプログラミング言語)が
ハードウェアのプログラミングにふさわしくなかったら
もしハードウェア(例えばHDLs)の為に特別に作られた言
語が低レベルなものだったら
このような場合、どうすればいいか

結局は妥協案[compromise solution]がベスト


3.3-3 妥協案

ハードウェア側では


全てのハードウェア要素(プログラム可能なゲートとFPGAを作
るフリップフロップ回路)を高度なプログラミングにふさわしい
抽象的な構造としてアセンブリで記述する必要がある
幸運なことに、コンパイラはアプリケーションと低レベルFPGA
ハードウェアの知識を用いて自動的にこの構造を創ることが
出来る
3.3-3 妥協案

ソフトウェア側では

アセンブリで記述しなくてはならない抽象的な並列処理計算
機のプログラミングのサポートのために言語の選択を広げる
必要がある
*PE:Processing Element
S/W
process
S/W
process
PE
PE
S/W
process
S/W
process
PE
PE
Parallel Software model
Parallel machine model
Figure: Multinode parallel machine model and multiprocess programming model
3.3-4 まとめ[To summarize]

FPGAベースのハードウェアを(ゼロからそれを設計する
ことに対して)プログラミングする感覚を理解するために
は、抽象的な計算機モデルを作成し、そのモデルにふさ
わしいソフトウェアプログラミングモデルを選択する必要
がある
3.3-5 CSP

並列処理プログラミングの研究では一般的に、以下のよ
うな物を作ることは粗粒度並列処理を表現するのに良い
方法だと見出されてきた



抽象[an abstract](的なモデル?)
複数から構成されるMultinode Machine
(Multicomputerとも呼ぶ)
半自律処理ノード[semi-autonomous processing nodes]
(Processing Elements (PEs)とも呼ぶ)
3.3-5 CSP

この抽象的な計算機を対象とすることで、(基盤とな
るハードウェアが実際にそのようなシステムを使うか
どうか)使用可能なプログラミングモデルを構成する
ことは容易である

communicating sequential process (CSP)プログラミン
グモデルはよく研究されてきており、実際の
アプリケーションをビルドするのと同様にFPGAデザ
インのための形式的なメソッドを適用するのに使わ
れてきている
3.4 Communicating Process
Programming Models
3.4-1 CSPの歴史



この章で注目するプログラミングモデルは
1978年Sir Anthony Hoareによって作られた。
その後Communicating Sequential Processes という
題目の本で1985年に発表
Hoareによって作られたSCPは以下の2つから成り
立っていた


プログラミングモデル
プロセスから呼ばれる独立したオペレーティングコンポーネ
ント[operating components]の相互作用のパターン記述の為の言語
3.4-1 CSPの歴史

このシステムの各プロセスは過去のソフトウェアプログラ
ム(内部動作で連続して動作するモノ)だと言えるかもし
れない

だが、プロセスは明確なチャンネルを経由して他のプロ
セスと情報をやり取りすること[communicating]を制限されてい
た
3.4-2 CSPについて

CSPアプリケーションの各プログラムは、独立した
ハードウェアプロセスとして実行されることもできるし、
伝統的なフォン・ノイマン型計算機として動作するこ
ともできる

アプリケーション全体としては、サブルーチンとして
他のプロセスを呼び出すメインのプロセス[main controling
process]を持つよりはむしろ、バッファ用のデータチャン
ネルを経由してシステムを通してデータを移動させる
ように設計されている
3.4-2 CSPについて

それぞれの実行中のプロセスがローカルメモリ資源にア
クセスしている間、ストリームと呼ばれるデータチャンネ
ルを経由する物を除いて、独立したプロセスのやりとり
[communication]はほとんど、あるいはまったくない
3.4-3 CSPについて

理想的なCSPアプリケーションでは、時間的なディレ
イや他のオーバーヘッドは、それらのロケーションに
関係なく(比較的小さな容量のペイロードから成ると
みなされている)データの2つのノード間の移動に関
係している


ペイロード:通信するデータのヘッダ等の付加情報を除
いたデータ本体の事
特にもしアプリケーションがFPGAハードウェアや
埋め込み型プロセスのように大きく異なるタイプの
プロセスの要素に分割されたら、かなりの帯域幅と
待ち時の問題が存在するかもしれない
3.4-3 CSPについて

純粋なCSPの実行[A “pure” implementation of CSP] には、データとプ
ロセスを同期させる考えに違反するため、データチャン
ネル、データストリームを用いないやりとりは全く含まれ
ない

(2つのプロセスが同じメモリにアクセスする等)
3.4-4 ローカリティ

CSPモデルの重要な特徴はローカルメモリへのアクセスがリ
モート(ノード外の)メモリやデータチャンネルを用いたデータ
バッファへのアクセスよりコストが掛からない事

そのため、CSPのシステムをプログラミングする時、パフォー
マンスを最大限に活かすためには、外部へのアクセスより、
可能ならばローカルのデータにアクセスすることが重要であ
る

この並列処理プログラミングのコンセプトはローカリティ[locality]呼
ばれており、高いパフォーマンスの並列処理アプリケーション
を作成する方法の基本的な理解である
3.4-5
CSPについて

CSPをベースにした計算機モデルはC言語の粗粒度並列
処理アプリケーションのコンパイルにとって理想的な目
標[target]である

CSPアプリケーションのプロセスコンポーネントは、コンパ
イラが比較的容易に基本的なC言語の文章から生成す
ることが出来るハードウェアやソフトウェアにとって扱い
やすい計算ブロックを含んでいる
3.4-5

CSPについて
システムレベルでは、(ライブラリのフォームで提供され
た)C言語の拡張はストリーム指向型並列[streams-oriented
parallel] プログラミングモデルを表現するのに必要とされる
inter-process communication channels を提供することが
出来る
3.4-6
モデルの適切な利用

結果として出来上がる、(全くソフトウェアというわけ
でもなく、全くハードウェアというわけでもない)ハイブ
リッドプログラミングモデルは全てのアプリケーション
にとって正しい選択なのか?

高度なパラレルプラットフォームにより適したFPGA
ベースの高速化により最大の利益を得ることが出来
るアプリケーションを除いて確実にNOである
3.5 The Impulse C
Programming Model
インパルスCプログラミングモデル
3.5-1 ストリーム指向型ハードウェア
ソフトウェア混合アプリケーション

インパルスCのプログラミングモデルはストリーム指向型ハー
ドウェアソフトウェア混合アプリケーション[stream-oriented, mixed
hardware/software application]のために意図されたCSPモデルである

これらのアプリケーションは非常に一般的になっており、ハードウェ

そのようなアプリケーションの例
アの高速化を必要とするコンピュータの内包的な問題の大きな割
合を占めている。





(セキュリティやテレビ会議と同様な消費者製品のための)画像処理
データの圧縮や暗号化、復号化などのデータのやり取り
ワイヤレス通信[communications]
地球物理学や生物遺伝学、医療などの解析
その他諸々を含む多くの分野
3.5-2 インパルスCについて

インパルスCプログラミングモデルの中心はプロセスとス
トリームにある。
Shared
memory
C language
process
Signal
Controlling
C language
process
C language
process
Signal
C language
process
Shared
memory
C language
process
Streams
Figure: The data processed by an application flows from process to process by
means of streams, or in some cases by means of signals and/or shared memories
3.5-2 インパルスCについて

プロセスは独立して同期しており、同時にアプリケー
ションのコンポーネントを操作している

これらのプロセスを



データストリームかメモリやその他のシステム資源への
書き込みかのどちらかの出力の発生
明確な計算の実行
様々なデータの受け入れ
などの永続的なサブプログラムとして考えることは
有用ある
3.5-2 インパルスCについて

伝統的なソフトウェアのサブルーチンと違って、これ
らのプロセスは「呼び出される」(プログラムの動作の
進行の間、繰り返し呼び出される)のではなく、代わ
りに「常に動作して」おり、それらのインプットのデー
タに常に返答している

プロセスは永続的であり、データの受け入れや
計算の実行、出力の生成などを行うことによって
アプリケーションの仕事を行なっている
3.5-4 CSPモデルに適する条件

CSPプログラミングモデルはデータの移動、処理と同
期にストリーム指向のアプローチを使った高度な並
列処理アプリケーションの作成を簡単にするために
設計されている

上記のような表現をできるアプリケーションは数多く
存在するかもしれないが、具体的には次に挙げる特
性のいくつか、又はすべてがあるアプリケーションは
CSPモデルに最も適切である
3.5-4 CSPモデルに適する条件




アプリケーションの特徴として、処理要素とデータ源の間の
データ信号速度が速い物
パケットサイズが固定で、ストリームの
ペイロードが比較的小さい物
複数が関連しているが、独立した計算が、
同じデータストリーム上で実行されることを
必要としている
データが



低精度又精度固定の値
典型的な固定幅の整数型
固定小数点の値
のどれかで構成されている
3.5-4 CSPモデルに適する条件

溜まっている計算結果[deposit results of computations]や配列データや、
係数[coefficients]、その他の定数が保管の為に使われているかも
しれないローカル又は共有メモリへの参照がある

複数の独立したプロセスが、メッセージ経由で必要な同期を
伴い、渡されるデータを通して更新を行なっている
3.5-4 CSPモデルに適する条件

インパルスCは特にaddress streaming application や大量
のデータを比較的激しい動作を通して処理しなくてはな
らないアプリケーションのために設計された

(Celoxicaによって提供されているHandle-C言語を含むその他
のCベースのハードウェアデザイン言語も同様の能力を提供
している)
3.5-5 インパルスCの仕様

インパルスCでは、小さなデータタイプセットと、平凡なC
プログラムから呼ぶことが出来る固有のライブラリの機
能の中でCSPモデルが具体化されている

インパルスCで定義された固有のライブラリの機能は、プ
ロセス間でシグナルデータとストリームをやりとりするこ
とや、共有メモリやローカルメモリのデータを出し入れし
て移動することに使われる

C言語と互換性のある拡張部分は、ストリームやシグナ
ルなど、共有メモリを経由したプロセスのやりとりの集合
としてアプリケーションを記述する[specify]のに使われる
3.5-5 インパルスCの仕様

プロセスは追加されたインパルスCのライブラリの
機能を使うことで、実際の目的のプログラム可能
プラットフォームのリソースに割り当てられる
3.5-6 ストリームについて

ストリームは複数のプロセスがお互いにやり取りしたり、
それぞれの動作を同期するための最重要なメソッドである

ストリームのインターフェースで上手く設計されたアプリケー
ションは実際のハードウェアとソフトウェアとして作られた[mapped]
とき効率的に処理される

それゆえ、そのようなアプリケーションをつくるための多大な
努力はデータの移動を最大限利用した時と、ストリームのイ
ンターフェースの設計で見ることができる
3.6 SUMMARY
まとめ
3.6 3章まとめ

この章では、高度な並列処理を記述のためのプログラミング
モデルや、ソフトウェア、ハードウェア混同のアプリケーション
について曖昧に説明してきた

このプログラミングモデルは、プログラム可能ハードウェアプ
ラットフォームに最も適したアプリケーションや、アルゴリズム
のタイプを記述する効率のよい方法であることを証明してき
た

次の章では例を通して、C言語の文脈の中でこのプログラミ
ングモデルを使う方法を学習する