Dataflow140711-a@Kernel/VM北陸1

40
非ノイマン・アーキテクチャ データ駆動計算機 Data Flow Machine とは 2014/JUL/12 たけおか @takeoka AXE, Inc. / たけおかラボ(株)

Transcript of Dataflow140711-a@Kernel/VM北陸1

Page 1: Dataflow140711-a@Kernel/VM北陸1

非ノイマン・アーキテクチャデータ駆動計算機Data Flow Machine

とは

2014/JUL/12たけおか@takeoka

AXE, Inc. / たけおかラボ(株)

Page 2: Dataflow140711-a@Kernel/VM北陸1

たけおかって誰?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

Page 3: Dataflow140711-a@Kernel/VM北陸1

ノイマン・アーキテクチャ● 普通の計算機● 構成要素

● PC(プログラム・カウンタ)● メモリ/レジスタ● ALU

● PCが指す命令を● デコード● オペランド・データ・フェッチ(読み出し)● 演算● 結果書き込み

Page 4: Dataflow140711-a@Kernel/VM北陸1

ノイマン・ボトルネック● 演算器は、たくさん載せられる

● レジスタもたくさんある

● 命令を取ってこれない

● 演算器の個数に対して、● 命令語が来ない

↓● 演算器が使い倒せない

● (主に)命令フェッチのネックを

「ノイマン・ボトルネック」

という

● 本当は、命令フェッチだけが、ボトルネックではないだが…● データフローマシンが,ノイマン・ボトルネックを解決

● 命令フェッチがネックなら、

命令なんか読まなければいいじゃない! (本気

ここがボトルネック

メモリ

命令 & データ

Page 5: Dataflow140711-a@Kernel/VM北陸1

非ノイマン・アーキテクチャ● アニメのネタじゃないよ

● PC(プログラム・カウンタ)が *無い*● 明示的なメモリ/レジスタ が *無い* (ピュアなものは)

● i-structure(配列みたいなもの)とかは、あるが

● ALU

● データによって駆動● オペランド・データが揃ったら● 演算する

Page 6: Dataflow140711-a@Kernel/VM北陸1

非ノイマン・アーキテクチャの代表● データフローマシン

● 「データ駆動計算機」と呼ぶべき、と言われているが、

昔のことすぎて、「データフローマシン」の方がとおりが良い

● スーパースカラ計算機● みんなの x86 の中身もスーパースカラ● スーパースカラは、データ依存関係で駆動されている

– データフローマシンとまったく同じ

Page 7: Dataflow140711-a@Kernel/VM北陸1

並列計算計算の並列

Page 8: Dataflow140711-a@Kernel/VM北陸1

並列計算の粒度● 並行プロセス, スレッド/ 粗粒度 並列

● 大きい単位で並列に計算● スレッド/プロセスの中はシーケンシャル● 今時のフツーの並列計算機。マルチコア、クラスタ計算機

● 命令レベル並列/ 細粒度 並列● VLIW,SIMD, SuperScalar● 複数の演算を同時(並列)に実行● VLIWは、様々な命令を組み合わせて、同時(並列)に実行可能● SIMDは、同一演算を並列に実行

– データ・パラレル● SuperScalarは、同時実行する演算が、CPU内部で、動的にスケジュールされる

● データフローマシンは、命令レベル並列に近い

Page 9: Dataflow140711-a@Kernel/VM北陸1

データ並列とか● SIMDは、データ・パラレル

● 命令は一つ。演算は同時に多数

● GPGPU● 高速パイプライン

– パイプライン方向の並列処理● 各ステージが同時に動作

– パイプラインを埋めるには、

規則正しい、データの並びが必須● ばらばらなデータでは、パイプは埋まらない

● マルチ・パイプ– 高速パイプラインを複数もつ– 192個~2048個~

● データフローマシンは、マルチ・パイプだが、

バラバラのデータでも、パイプを埋めることができる

レジスタ

ファイル

ベクトル

レジスタ

Page 10: Dataflow140711-a@Kernel/VM北陸1

今のアーキテクチャ

Page 11: Dataflow140711-a@Kernel/VM北陸1

普通のアーキテクチャ MIPS

http://web.sfc.keio.ac.jp/~rdv/keio/sfc/teaching/architecture/computer-architecture-2013/lec07-cache.html より引用

Page 12: Dataflow140711-a@Kernel/VM北陸1

● レジスタ・ファイル(Registers)を複数持つ

● 各スレッドは、 各レジスタ・ファイルに保持

● メモリ・アクセスが長時間になる:キャッシュ外れ の時、

レジスタ・ファイルを切り替え、待機していた別スレッドを動かす

IR RegisterFile

今のアーキテクチャHyper thread って、なんだっけ?

ここが遅いとき別スレッドを

動かすとALUが生きる

Page 13: Dataflow140711-a@Kernel/VM北陸1

今のアーキテクチャ Hyper thread● この発想は、1980年代 中~後期のデータフローマシン

研究の中で出てきた(と言って、過言ではないだろう)

Page 14: Dataflow140711-a@Kernel/VM北陸1

今のアーキテクチャ Super Scalar● 複数の処理ユニットを、効率的に回す

● ALUが複数個ある● それを、間断なく回す

● 命令は十分読み込めていなければならない● 命令キャッシュとのバンド幅が十分● CPU内部でμOPにバラすとか

● データ/演算レベルで、動的なスケジューリング● データ依存関係&実行ユニットの空き で駆動(スケジュール)● 通常の機械では、

分岐が入るまでの、プログラム・セグメント中で、Out of Order (OoO)処理

● Reorder Buffer, Reservation Station, Score BoardなどでOoOを実現

Page 15: Dataflow140711-a@Kernel/VM北陸1

今のアーキテクチャ 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をやる

Page 16: Dataflow140711-a@Kernel/VM北陸1

データフローマシンデータ駆動マシン

Page 17: Dataflow140711-a@Kernel/VM北陸1

非ノイマン・アーキテクチャ● プログラムは、フローグラフ

● 単一代入● 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;

Page 18: Dataflow140711-a@Kernel/VM北陸1

FPGAでありがちなデータフロー・アーキテクチャ・マシン

● フローグラフをそのまま、

ハードウェアにマッピング● 応用ごとに論理(パイプライン)を生成しなければならない

● パイプラインがちゃんと流れれば高速● 繰り返しの表現方法が、各機械

の個性●

+

<

22 33

-

12 4

gategate

-10001000

TrueFalse

latch

+

latch latch

-

latch

latch

<

latch

Const1000

gate

latch latch

gate

Const-1000

Page 19: Dataflow140711-a@Kernel/VM北陸1

日本はデータフローマシン大国日本の代表的データフローマシン● Sigma-1 (1987年)

電総研(現 産総研)

● EM-4

電総研(現 産総研)

● DFM

電電公社(現 NTT) 通研

● NEDIPS/ImPP(μPD7281)

NEC

Page 20: Dataflow140711-a@Kernel/VM北陸1

環状(サーキュラ)パイプライン● パイプラインの色々

Pease FFT algorithm(もともとのアルゴリズム)

Linear Pipeline implementation

Circular Pipeline implementation

http://asim.csail.mit.edu/redmine/projects/mit6s078/wiki/Lab_FFT より引用

Page 21: Dataflow140711-a@Kernel/VM北陸1

汎用データフローマシン● 基本はサーキュラ(環状)・パイプライン

マッチングメモリ

(オペランドの待ち合わせを

行う)

命令ユニット(データが

処理されるべき演算を出す)

行き先ユニット(新しい

アーク情報を付ける)

演算 要素ユニット

インターコネクト(スイッチネットワーク/バスなど であることが通常)

演算 要素ユニット

サーキュラ・パイプラインを持つ、典型的な汎用データフローマシンのブロック図

実行ユニット

Page 22: Dataflow140711-a@Kernel/VM北陸1

汎用データフローマシン● 基本はサーキュラ(環状)・パイプライン

● データに、アークを示すタグが付いている● アークを見ると

– 対になるデータ (通常、計算機命令は2オペランド)

– 適用される命令(演算/関数)

が判る

● マッチングメモリで、オペランドが揃うのを待つ

● オペランドが揃うと、「発火可能」

● 発火可能になると、発火可能キューに入る

● 演算ユニットが空くと、発火可能キューからデータは取り出され

● 対応する演算を行う● 命令は、データ(中のアーク情報)を見ると分かる

● 演算結果に、新しい行き先(新しいアーク)を付加● 元のアークから、新しい行き先が判る

● できたデータを、マッチングメモリに返す

Page 23: Dataflow140711-a@Kernel/VM北陸1

汎用データフローマシン● データは、パケットに収められている● パケットには

● 対になるデータの情報● 適用される演算/関数● 結果の行き先(新しいタグ情報)● インスタンスを表す情報

– リニア・パイプラインではデータの順序が保存されるので不要– サーキュラ・パイプラインは演算途中のデータが順不同に混在するの

で、インスタンスを判別する必要あり– 通常、「カラー」などと呼ばれる整数を使用する

● ハードウェアでカラーを扱う(比較的少ない資源)ので、カラーは回収が必要

Page 24: Dataflow140711-a@Kernel/VM北陸1

日本の代表的データフローマシン● 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

Page 25: Dataflow140711-a@Kernel/VM北陸1

日本の代表的データフローマシン● 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/● 坂井先生,児玉先生ほか

Page 26: Dataflow140711-a@Kernel/VM北陸1

日本の代表的データフローマシン● DFM

● 電電公社(NTT)武蔵野通研 雨宮真人さんたちが作った● http://jglobal.jst.go.jp/public/20090422/200902077371351099● プログラミング言語は、pure functional● Lisp系(?)言語を動かそうとしていた● データフローマシンで記号処理を目指す

Page 27: Dataflow140711-a@Kernel/VM北陸1

日本の代表的データフローマシン● 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 より引用

Page 28: Dataflow140711-a@Kernel/VM北陸1

日本の代表的データフローマシン● ImPP(μPD7281)

● 図は、http://www.st.rim.or.jp/~nkomatsu/nec/uPD7281.html より引用

Page 29: Dataflow140711-a@Kernel/VM北陸1

日本の代表的データフローマシン● ImPP(μPD7281)

● 図は、http://www.shmj.or.jp/museum2010/exhibi704.htm より引用

Page 30: Dataflow140711-a@Kernel/VM北陸1

汎用データフローマシン● 電総研(産総研) Sigma-1 (1984~1988年)● http://museum.ipsj.or.jp/guide/pdf/magazine/IPSJ­MGN430211.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

Page 31: Dataflow140711-a@Kernel/VM北陸1

汎用データフローマシンの長所● プログラムに潜在する並列性がすべて引き出せる(可能性

が大きい)● データ依存関係で動作するので、プログラムがヘボでもOK

– 勝手に、ハードウェアが並列性を引き出す● マクロな並列と、細粒度な並列のすべてが引き出せる

– ある意味、理想的– 現在のスパコンは、マクロな並列と、ベクトル化(直列なデータ並列)

● 多数(Massive)な演算器があっても、回せる● Massively Parallel の問題点は、「そんなに並列度が引き出せな

いことだ」と言われていた– 現在のスパコンは、64万個のCPUコアなので、並列度は引き出せてるじゃんwww

● でも、マクロな並列性だけだよ

Page 32: Dataflow140711-a@Kernel/VM北陸1

昔の汎用データフローマシンの短所● Eager(早期)に評価するので、無駄な計算をやりがち

● Eagerに評価するので、野放しにすると資源が枯渇する

Page 33: Dataflow140711-a@Kernel/VM北陸1

昔の汎用データフローマシンの短所 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

両方やっちゃう(^^;

両方やっちゃう(^^;

Page 34: Dataflow140711-a@Kernel/VM北陸1

昔の汎用データフローマシンの短所2● Eagerに評価するので、野放しにすると

中間結果(発火待ち)を作りすぎて、資源が枯渇して、計算が進まなくなってしまう● マッチング・メモリが足りなくなる

● 適宜、(プログラマに)見えない依存関係を導入して、制御は可能

Page 35: Dataflow140711-a@Kernel/VM北陸1

データフローマシンは使える画像処理など、大量のデータが流れる用途では

性能が出る● 特定機能の演算器をデプス方向(直列)に並べるのは、ありがち● サーキュラ・パイプラインにすると柔軟性が出る

– 潜在並列性が引き出せる

● 暗号解読に、サーキュラ・パイプラインを使う、という新しい文書も出ている

The Circular Pipeline: Achieving Higher Throughput in the Search for Bent Functions [Kindle版]

http://www.amazon.co.jp/The­Circular­Pipeline­Achieving­Throughput­ebook/dp/B007AM56YG/ref=sr_1_1?s=digital­text&ie=UTF8&qid=1398309378&sr=1­1&keywords=The+Circular+Pipeline%3A+Achieving+Higher+Throughput+in+the+Search+for+Bent+Functions

Page 36: Dataflow140711-a@Kernel/VM北陸1

データフローマシンと関数型言語● if cond then truePart else falsePart

の truePart, falsePart のすべてを実行してしまう

● 参照透過性が欲しい = 副作用は嫌い

⇒ Pure functional (純粋関数型)いいじゃん!● ちなみに、現在の普通の機械の投機実行は、

寸止め(?)で、副作用(write back)を止める

● 並列計算は、一般に、変数に干渉しないと楽(バグが出ない)● 単一代入 = 変数に代入しない → 干渉しない

⇒ Pure functional いいじゃん!

● なので、1980年代データフローマシンは、純粋関数型大好き

Page 37: Dataflow140711-a@Kernel/VM北陸1

教科書● データフローマシンと言語

●曽和 将容

●様々な機械のサーベイができてる。● 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

Page 38: Dataflow140711-a@Kernel/VM北陸1

教科書● データ・フロー・コンピューティング

● 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

Page 39: Dataflow140711-a@Kernel/VM北陸1

教科書● データ駆動型並列計算機

● 弓場 敏嗣 , 山口 喜教(著) この人たちは、電総研(現産総研)で、データフローマシンを作ってた人たち。

● 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

Page 40: Dataflow140711-a@Kernel/VM北陸1

40

日本はスパコン大国

地球シミュレータ 東工大 TSUBAME2.0

神戸ペタコン 「京」ちゃん