Dataflow140711-a@Kernel/VM北陸1
Transcript of Dataflow140711-a@Kernel/VM北陸1
非ノイマン・アーキテクチャデータ駆動計算機Data Flow Machine
とは
2014/JUL/12たけおか@takeoka
AXE, Inc. / たけおかラボ(株)
たけおかって誰?1970年代から、並列計算&記号処理に興味あり。1977年,電卓500ステップで「#○×」を打つプログラムを
書く
1980年代、UNIXの仮名漢字変換システムWnnや Temporal Prolog(時相論理Prolog)を作ったり。国産X Window端末などの設計開発に携わる。
1990年ごろ、豊橋技科大 湯淺研にて、1024PE規模の超並列計算機“SM-1”のLSIハードウェア、基本ソフトウェアの設計開発に携わる。
湯淺研 SM-1:1024PE超並列計算機ザウルスのOS組込みプレス No.8 (2007/AUG) 読者モデル
スパコン研究の低レイヤ
1992年~ AXE; OSとコンパイラとか。 大きなものから小さなものまで… 最近は AI もやってます
実時間Linux極小Lisp
デジカメのOS
ノイマン・アーキテクチャ● 普通の計算機● 構成要素
● PC(プログラム・カウンタ)● メモリ/レジスタ● ALU
● PCが指す命令を● デコード● オペランド・データ・フェッチ(読み出し)● 演算● 結果書き込み
ノイマン・ボトルネック● 演算器は、たくさん載せられる
● レジスタもたくさんある
● 命令を取ってこれない
● 演算器の個数に対して、● 命令語が来ない
↓● 演算器が使い倒せない
● (主に)命令フェッチのネックを
「ノイマン・ボトルネック」
という
● 本当は、命令フェッチだけが、ボトルネックではないだが…● データフローマシンが,ノイマン・ボトルネックを解決
● 命令フェッチがネックなら、
命令なんか読まなければいいじゃない! (本気
ここがボトルネック
メモリ
命令 & データ
非ノイマン・アーキテクチャ● アニメのネタじゃないよ
● PC(プログラム・カウンタ)が *無い*● 明示的なメモリ/レジスタ が *無い* (ピュアなものは)
● i-structure(配列みたいなもの)とかは、あるが
● ALU
● データによって駆動● オペランド・データが揃ったら● 演算する
非ノイマン・アーキテクチャの代表● データフローマシン
● 「データ駆動計算機」と呼ぶべき、と言われているが、
昔のことすぎて、「データフローマシン」の方がとおりが良い
● スーパースカラ計算機● みんなの x86 の中身もスーパースカラ● スーパースカラは、データ依存関係で駆動されている
– データフローマシンとまったく同じ
並列計算計算の並列
並列計算の粒度● 並行プロセス, スレッド/ 粗粒度 並列
● 大きい単位で並列に計算● スレッド/プロセスの中はシーケンシャル● 今時のフツーの並列計算機。マルチコア、クラスタ計算機
● 命令レベル並列/ 細粒度 並列● VLIW,SIMD, SuperScalar● 複数の演算を同時(並列)に実行● VLIWは、様々な命令を組み合わせて、同時(並列)に実行可能● SIMDは、同一演算を並列に実行
– データ・パラレル● SuperScalarは、同時実行する演算が、CPU内部で、動的にスケジュールされる
● データフローマシンは、命令レベル並列に近い
データ並列とか● SIMDは、データ・パラレル
● 命令は一つ。演算は同時に多数
● GPGPU● 高速パイプライン
– パイプライン方向の並列処理● 各ステージが同時に動作
– パイプラインを埋めるには、
規則正しい、データの並びが必須● ばらばらなデータでは、パイプは埋まらない
● マルチ・パイプ– 高速パイプラインを複数もつ– 192個~2048個~
● データフローマシンは、マルチ・パイプだが、
バラバラのデータでも、パイプを埋めることができる
レジスタ
ファイル
ベクトル
レジスタ
今のアーキテクチャ
普通のアーキテクチャ MIPS
http://web.sfc.keio.ac.jp/~rdv/keio/sfc/teaching/architecture/computer-architecture-2013/lec07-cache.html より引用
● レジスタ・ファイル(Registers)を複数持つ
● 各スレッドは、 各レジスタ・ファイルに保持
● メモリ・アクセスが長時間になる:キャッシュ外れ の時、
レジスタ・ファイルを切り替え、待機していた別スレッドを動かす
IR RegisterFile
今のアーキテクチャHyper thread って、なんだっけ?
ここが遅いとき別スレッドを
動かすとALUが生きる
今のアーキテクチャ Hyper thread● この発想は、1980年代 中~後期のデータフローマシン
研究の中で出てきた(と言って、過言ではないだろう)
今のアーキテクチャ Super Scalar● 複数の処理ユニットを、効率的に回す
● ALUが複数個ある● それを、間断なく回す
● 命令は十分読み込めていなければならない● 命令キャッシュとのバンド幅が十分● CPU内部でμOPにバラすとか
● データ/演算レベルで、動的なスケジューリング● データ依存関係&実行ユニットの空き で駆動(スケジュール)● 通常の機械では、
分岐が入るまでの、プログラム・セグメント中で、Out of Order (OoO)処理
● Reorder Buffer, Reservation Station, Score BoardなどでOoOを実現
今のアーキテクチャ Super Scalar● データ依存関係、実行ユニットの空きなどを
見ながら、動的にスケジュール
※ここの例では、ALUは2個のつもり。
この例では実行ユニットの数は重要ではない
プログラムC=A*B;M=K*L;P=M+N;D=C+P; ←これが後回しZ=X+Y;
*
A B
*
K L
C M
+
D
+
P
N
+
X Y
Z
src \ dest C*
D+
M*
P+
Z+
A x
B x
C x
D
K x
L x
M x
N x
P x
X x
Y x
Zデータ(レジスタ)依存関係を示すスコア・ボード
Pの生成が遅れるので、後に回して、
ALUはX+Yをやる
データフローマシンデータ駆動マシン
非ノイマン・アーキテクチャ● プログラムは、フローグラフ
● 単一代入● Single Assignment Data flow Graph– 現代的な(C言語などの)コンパイラ
は、ソースを
SSA(Static Single Assignment form)に変換して最適化
● 演算ノードへのデータ(オペランド)が揃ったら、演算を行う
● データフローの対義語は
コントロール・フロー● 「フローチャート」はコントロール・
フローグラフそのもの
+
<
22 33
-
12 4
gategate
-10001000
TrueFalse
If( (22+33)<(12-4) ) return 1000;else return -1000;
FPGAでありがちなデータフロー・アーキテクチャ・マシン
● フローグラフをそのまま、
ハードウェアにマッピング● 応用ごとに論理(パイプライン)を生成しなければならない
● パイプラインがちゃんと流れれば高速● 繰り返しの表現方法が、各機械
の個性●
+
<
22 33
-
12 4
gategate
-10001000
TrueFalse
latch
+
latch latch
-
latch
latch
<
latch
Const1000
gate
latch latch
gate
Const-1000
日本はデータフローマシン大国日本の代表的データフローマシン● Sigma-1 (1987年)
電総研(現 産総研)
● EM-4
電総研(現 産総研)
● DFM
電電公社(現 NTT) 通研
● NEDIPS/ImPP(μPD7281)
NEC
環状(サーキュラ)パイプライン● パイプラインの色々
Pease FFT algorithm(もともとのアルゴリズム)
Linear Pipeline implementation
Circular Pipeline implementation
http://asim.csail.mit.edu/redmine/projects/mit6s078/wiki/Lab_FFT より引用
汎用データフローマシン● 基本はサーキュラ(環状)・パイプライン
マッチングメモリ
(オペランドの待ち合わせを
行う)
命令ユニット(データが
処理されるべき演算を出す)
行き先ユニット(新しい
アーク情報を付ける)
演算 要素ユニット
インターコネクト(スイッチネットワーク/バスなど であることが通常)
演算 要素ユニット
サーキュラ・パイプラインを持つ、典型的な汎用データフローマシンのブロック図
実行ユニット
汎用データフローマシン● 基本はサーキュラ(環状)・パイプライン
● データに、アークを示すタグが付いている● アークを見ると
– 対になるデータ (通常、計算機命令は2オペランド)
– 適用される命令(演算/関数)
が判る
● マッチングメモリで、オペランドが揃うのを待つ
● オペランドが揃うと、「発火可能」
● 発火可能になると、発火可能キューに入る
● 演算ユニットが空くと、発火可能キューからデータは取り出され
● 対応する演算を行う● 命令は、データ(中のアーク情報)を見ると分かる
● 演算結果に、新しい行き先(新しいアーク)を付加● 元のアークから、新しい行き先が判る
● できたデータを、マッチングメモリに返す
汎用データフローマシン● データは、パケットに収められている● パケットには
● 対になるデータの情報● 適用される演算/関数● 結果の行き先(新しいタグ情報)● インスタンスを表す情報
– リニア・パイプラインではデータの順序が保存されるので不要– サーキュラ・パイプラインは演算途中のデータが順不同に混在するの
で、インスタンスを判別する必要あり– 通常、「カラー」などと呼ばれる整数を使用する
● ハードウェアでカラーを扱う(比較的少ない資源)ので、カラーは回収が必要
日本の代表的データフローマシン● Sigma-1 (1987年)
● 平木先生が電総研時代に作ったスパコン・データフローマシン
● システムのクロックは100ns(10MHz)● 170MFLOPS,200MIPS● ピーク最大性能427MFLOPS,640MIPS● 128台の要素プロセッサ(PE)
● 128台の構造データ処理装置(SE)
● DFC(data flow C),DFC II● ファームウェア(micro code)、
ソフトウェアは、関口さん
● http://museum.ipsj.or.jp/computer/other/0007.html● http://museum.ipsj.or.jp/guide/pdf/magazine/IPSJ-MGN430211.pdf
日本の代表的データフローマシン● EM-4
● 電総研(現 産総研)の、プログラム・カウンタのあるデータフローマシン
● 1986年~1990年● データフロー型,フォン・ノイマン型を融合したアーキテクチャ● 記号処理用・シミュレーション用データフロー型並列計算機● 1024プロセッサ
● プロトタイプ最高性能は1 GIPS,ネットワーク性能は14.63 Gbps● CRAY/XMPの21倍,SUN Sparc-330の94倍 高速
● データフロー用プロセッサチップLSI “EMC-R” ● Cコンパイラ● 現在のスーパースカラと同じ考え● http://museum.ipsj.or.jp/computer/other/0017.html● http://news.mynavi.jp/articles/2006/01/01/dataflow/● 坂井先生,児玉先生ほか
日本の代表的データフローマシン● DFM
● 電電公社(NTT)武蔵野通研 雨宮真人さんたちが作った● http://jglobal.jst.go.jp/public/20090422/200902077371351099● プログラミング言語は、pure functional● Lisp系(?)言語を動かそうとしていた● データフローマシンで記号処理を目指す
日本の代表的データフローマシン● NEDIPS/ImPP(μPD7281)
● NEDIPS: NECが開発した、画像処理のための大型データフローマシン
● ImPPは、NEDIPSの要素プロセッサをLSIにしたもの● http://jglobal.jst.go.jp/public/20090422/200902052562513991● http://www.shmj.or.jp/museum2010/exhibi704.htm● http://ieeexplore.ieee.org/xpl/login.jsp?
tp=&arnumber=1169141&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1169141
● http://www.st.rim.or.jp/~nkomatsu/nec/uPD7281.html
● 写真は、http://www.st.rim.or.jp/~nkomatsu/nec/uPD7281.html より引用
日本の代表的データフローマシン● ImPP(μPD7281)
● 図は、http://www.st.rim.or.jp/~nkomatsu/nec/uPD7281.html より引用
日本の代表的データフローマシン● ImPP(μPD7281)
● 図は、http://www.shmj.or.jp/museum2010/exhibi704.htm より引用
汎用データフローマシン● 電総研(産総研) Sigma-1 (1984~1988年)● http://museum.ipsj.or.jp/guide/pdf/magazine/IPSJMGN430211.pdf
● Data Flow Machine For Data Driven Computing - Patent
5465368 (1995年)● https://www.google.com/patents/US5465368
● PDFダウンロード可能
● NEC ImPP ● http://www.shmj.or.jp/museum2010/exhibi704.htm
● http://www.st.rim.or.jp/~nkomatsu/nec/uPD7281.html
汎用データフローマシンの長所● プログラムに潜在する並列性がすべて引き出せる(可能性
が大きい)● データ依存関係で動作するので、プログラムがヘボでもOK
– 勝手に、ハードウェアが並列性を引き出す● マクロな並列と、細粒度な並列のすべてが引き出せる
– ある意味、理想的– 現在のスパコンは、マクロな並列と、ベクトル化(直列なデータ並列)
● 多数(Massive)な演算器があっても、回せる● Massively Parallel の問題点は、「そんなに並列度が引き出せな
いことだ」と言われていた– 現在のスパコンは、64万個のCPUコアなので、並列度は引き出せてるじゃんwww
● でも、マクロな並列性だけだよ
昔の汎用データフローマシンの短所● Eager(早期)に評価するので、無駄な計算をやりがち
● Eagerに評価するので、野放しにすると資源が枯渇する
昔の汎用データフローマシンの短所 1● Eagerな評価なので、無駄な計算
をやりがち
● 投機実行の塊 とも言える
● 分岐予測は不要(長所)
● ノイマン型で評価しない部分(if文で不成立の方)も、実行してしまう
● if cond then truePart else falsePart
の truePart, falsePart のすべてを実行してしまう
● プログラムに潜在する並列性がすべて引き出せるのが、
逆に欠点に…
● 現在のスパコンは、50万~312万コア、
いつも、すべてが十分に回っているわけでもない
が、誰も文句を言わない
+
<
22 33
-
12 4
gategate
TrueFalse
If( (22+33)<(12-4) ) return 123 + 456;else return 123 - 456;
+
123 456
-
123 456
両方やっちゃう(^^;
両方やっちゃう(^^;
昔の汎用データフローマシンの短所2● Eagerに評価するので、野放しにすると
中間結果(発火待ち)を作りすぎて、資源が枯渇して、計算が進まなくなってしまう● マッチング・メモリが足りなくなる
● 適宜、(プログラマに)見えない依存関係を導入して、制御は可能
データフローマシンは使える画像処理など、大量のデータが流れる用途では
性能が出る● 特定機能の演算器をデプス方向(直列)に並べるのは、ありがち● サーキュラ・パイプラインにすると柔軟性が出る
– 潜在並列性が引き出せる
● 暗号解読に、サーキュラ・パイプラインを使う、という新しい文書も出ている
The Circular Pipeline: Achieving Higher Throughput in the Search for Bent Functions [Kindle版]
http://www.amazon.co.jp/TheCircularPipelineAchievingThroughputebook/dp/B007AM56YG/ref=sr_1_1?s=digitaltext&ie=UTF8&qid=1398309378&sr=11&keywords=The+Circular+Pipeline%3A+Achieving+Higher+Throughput+in+the+Search+for+Bent+Functions
データフローマシンと関数型言語● if cond then truePart else falsePart
の truePart, falsePart のすべてを実行してしまう
● 参照透過性が欲しい = 副作用は嫌い
⇒ Pure functional (純粋関数型)いいじゃん!● ちなみに、現在の普通の機械の投機実行は、
寸止め(?)で、副作用(write back)を止める
● 並列計算は、一般に、変数に干渉しないと楽(バグが出ない)● 単一代入 = 変数に代入しない → 干渉しない
⇒ Pure functional いいじゃん!
● なので、1980年代データフローマシンは、純粋関数型大好き
教科書● データフローマシンと言語
●曽和 将容
●様々な機械のサーベイができてる。● http://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AD%E3%83%BC
%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%A8%E8%A8%80%E8%AA%9E-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A8%E3%82%A2%E8%AC%9B%E5%BA%A7-%E6%9B%BD%E5%92%8C-%E5%B0%86%E5%AE%B9/dp/4785635436/ref=sr_1_1?ie=UTF8&qid=1399793655&sr=8-1&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AD%E3%83%BC%E3%83%9E%E3%82%B7%E3%83%B3
教科書● データ・フロー・コンピューティング
● J.A.シャープ (著), 富田 真治 (翻訳)
● 富田先生は、京大萩原研の柴山先生のちょっと上の先輩でQA-2を作った人
● http://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%BB%E3%83%95%E3%83%AD%E3%83%BC%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0-Information-computing-13-J-A-%E3%82%B7%E3%83%A3%E3%83%BC%E3%83%97/dp/4781904718/ref=sr_1_1?ie=UTF8&qid=1399793942&sr=8-1&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AD%E3%83%BC+%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0
教科書● データ駆動型並列計算機
● 弓場 敏嗣 , 山口 喜教(著) この人たちは、電総研(現産総研)で、データフローマシンを作ってた人たち。
● http://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E9%A7%86%E5%8B%95%E5%9E%8B%E4%B8%A6%E5%88%97%E8%A8%88%E7%AE%97%E6%A9%9F-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%BC%93%E5%A0%B4-%E6%95%8F%E5%97%A3/dp/4274077632/ref=sr_1_3?ie=UTF8&qid=1399794075&sr=8-3&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E9%A7%86%E5%8B%95
40
日本はスパコン大国
地球シミュレータ 東工大 TSUBAME2.0
神戸ペタコン 「京」ちゃん