Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

130604 fpgax kibayos

2,229 views

Published on

Published in: Technology

130604 fpgax kibayos

  1. 1. 異形の論理型言語システムをFPGAで!!2013/6/4 FPGAエクストリーム・コンピューティング第2回俺はノイマンなコードを書くのを やめるぞ!ジョジョーッ!大阪大学大阪大学吉田 幹(@kibayos)BBR / PIAX Inc.
  2. 2. 今日のお題少し、Stream Computingの話IBM Streams を事例に異形の論理型言語システムの紹介pure Prolog(正確にはHorn節集合)前提“異形”とは計算モデルが従来のモノと全然違う意“異形”とは計算モデルが従来のモノと全然違う意副業で、2つ研究してますユニファイアの流れだけで計算を実現するモデルニューロンの振る舞いをベースにしたデータフローネットワークの上で計算するモデル (時間の都合で次回へ)FPGAだと、こういう言語マシンになるという青写真を示します (動かすのは次次..回以降に ^^)2
  3. 3. Stream Computing“Data Stream Processing” として知られるデータ駆動型の計算パラダイム制御フローではなく、データフロー。クエリとデータが逆の位置スケールアウト・アーキテクチャcyclicを許すDFG(dataflow graph)上の計算3“An introduction to InfoSphere Streams” in developerWorkssrcopopopsinksrcsinksrc
  4. 4. ビッグデータの領域では、RTAP(Real-TimeAnalytic Processing)として位置づけOLTP->OLAP->RTAPStream ComputingCEP(Complex Event Processing:複合イベント処理)M2M, IoT(Internet of Things)大量、多種(非定型含む)のデータ処理4“Addressing Data Volume, Velocity, and Variety with IBM InfoSphere Streams V3.0” in IBM Redbooks
  5. 5. システム事例:NEC5http://japan.zdnet.com/cio/analysis/35009803/
  6. 6. システム事例:NEC6http://japan.zdnet.com/cio/analysis/35009803/http://www.impressrd.jp/idc/story/2012/11/05/2188?page=0%2C2
  7. 7. システム事例:IBM InfoSphere Streams開発は10年前から!!2001年 アメリカ政府とパートナーシップ2003年 プロトタイピング開始2010年 一般向け製品として、v1.0リリース2011年 v2.0リリース専用言語 SPL(Streams Processing Language)言わば、データフロー構成言語言わば、データフロー構成言語operatorなど、C++またはJavaを使って拡張可能各nodeのプロセス、マシンへの割り当ては自由開発環境Streams Studio(Eclipse IDE), WebコンソールSPL project, visual programming, debugger...管理・アドミンツール解析用ツールキットとアクセラレータ7
  8. 8. IBM StreamsWord countを行うSPLの例 “An introduction to InfoSphere Streams” in developerWorks8柔軟性を備えたdeployment
  9. 9. 適用分野通信、運輸、金融、防衛・セキュリティ、e-サイエンス、環境モニタリング、SNS、ヘルスケア、スマートグリッド&エネルギー、と多岐に及ぶ150サイトへのインストール、数100アプリの開発(2010年時点)FPGAと同様、金融における低レイテンシーに向けた要望もTD証券のアルゴリズム9IBM “ストリーミング技術による市場系システム変革” よりTD証券のアルゴリズムトレーディング(2009年)低レイテンシー・ゾーンの置き換え500万件/秒のデータ処理、注文作成まで1ミリ秒未満
  10. 10. ここまでで...Stream Computingは着実に実用段階に!!SPLのような言語を使ったプログラミングが浸透すると、Lucid(1976年!!)のようなデータフロープログラミング言語が復活するかもミング言語が復活するかもそういえば、VerilogやVHDLもこのジャンルかもそして、データフローマシンがよみがえる日も近い?徐々に、FPGAがCPUに取って代わるCPUオワコン (*゚д゚*)10
  11. 11. ここまでで...Stream Computingは着実に実用段階に!!SPLのような言語を使ったプログラミングが浸透すると、Lucid(1976年!!)のようなデータフロープログラミング言語が復活するかもミング言語が復活するかもそういえば、VerilogやVHDLもこのジャンルかもそして、データフローマシンがよみがえる日も近い?徐々に、FPGAがCPUに取って代わるCPUオワコン (*゚д゚*)11
  12. 12. 論理プログラムの計算
  13. 13. 論理プログラムとは三段論法が実行のステップ“A <- B” and “B <-” implies “A <-”演繹(deduction)ステッププログラムプログラムプログラムプログラム 実行実行実行実行B <-A <- BA <-13x=Steve□<- Likes(Bob, Steve)Likes(Bob, x) <- Likes(x, Scala)<- Likes(Steve, Scala)Likes(Steve, Scala) <-Likes(Bob, Scala) <-Likes(Steve, Scala) <-Likes(John, Java) <-Likes(Bob, x) <- Likes(x, Scala)
  14. 14. 知識表現以外の例自然数を表現するプログラムNumb(s(s(s(s(s(0)))))) <- ⇒ 5は自然数であるここで、項s(t) は、項tの表す数より1大きい数(successor)を表すS式を使った例(リストの結合、分解)Numb(0) <-Numb(s(x)) <- Numb(x)cons(x, y) は、xを左、yを右の部分木とする木を構成する表現リスト表記のためのシンタックスシュガー[] = nil[a | b] = cons(a, b)[a, b | c] = cons(a, cons(b, c))[a, b] = [a, b | nil] = cons(a, cons(b, nil))14Append(nil, x, x) <-Append(cons(x, y), z, cons(x, w)) <- Append(y, z, w)
  15. 15. 関数の例加減算乗除算Add(0, x, x) <-Add(s(x), y, s(z)) <- Add(x, y, z)Multi(0, x, 0) <-Multi(s(x), y, w) <- Multi(x, y, z), Add(z, y, w)Fibonacci数列Ackermann関数15Fib(0, 0) <-Fib(s(0), s(0)) <-Fib(s(s(n)), z) <- Fib(s(n), x), Fib(n, y), Add(x, y, z)Ack(0, n, s(n)) <-Ack(s(m), 0, w) <- Ack(m, s(0), w)Ack(s(m), s(n), w) <- Ack(s(m), n, x), Ack(m, x, w)
  16. 16. appendの実行(リストの結合)<- append([1,2], [3], q)append([x|y], z, [x|w]) <- append(y,z,w)x=1, y=[2], z=[3], q=[1|w]append([], x, x) <-append([x|y], z, [x|w]) <- append(y,z,w)計算計算計算計算ユニファイア16ユニフィケーションユニフィケーションユニフィケーションユニフィケーション(unification)append([1,2], [3], q) と append([x|y], z, [x|w]) が同一の表現になるよう、変数の置換(substitution)を行う。得られた変数の置換の集合をユニファイアユニファイアユニファイアユニファイア(unifier)とよぶユニファイア
  17. 17. appendの実行(リストの結合)<- append([1,2], [3], q)append([x|y], z, [x|w]) <- append(y,z,w)x=1, y=[2], z=[3], q=[1|w]<- append([2], [3], w)append([], x, x) <-append([x|y], z, [x|w]) <- append(y,z,w)計算計算計算計算17<- append([2], [3], w)append(y,z,w) にユニファイアを適用し、append([2],[3],w) を得る
  18. 18. appendの実行(リストの結合)<- append([1,2], [3], q)append([x|y], z, [x|w]) <- append(y,z,w)x=1, y=[2], z=[3], q=[1|w]<- append([2], [3], w)append([], x, x) <-append([x|y], z, [x|w]) <- append(y,z,w)計算計算計算計算18<- append([2], [3], w)append([x’|y’], z’, [x’|w’]) <- append(y’,z’,w’)x’=2, y’=[], z’=[3], w=[2|w’]<- append([], [3], w’)append([], x”, x”) <-x”=[3], w’=[3]□空節(□)を得るまで繰り返す
  19. 19. appendの実行(リストの結合)<- append([1,2], [3], q)append([x|y], z, [x|w]) <- append(y,z,w)x=1, y=[2], z=[3], q=[1|w]<- append([2], [3], w)append([], x, x) <-append([x|y], z, [x|w]) <- append(y,z,w)計算計算計算計算19<- append([2], [3], w)append([x’|y’], z’, [x’|w’]) <- append(y’,z’,w’)x’=2, y’=[], z’=[3], w=[2|w’]<- append([], [3], w’)append([], x”, x”) <-x”=[3], w’=[3]□q=[1,2,3]解解解解 ゴール append(.., q) の変数qの置換が解となる
  20. 20. appendの実行(リストの分解)<- append([1], q, [1,2,3])append([x|y], z, [x|w]) <- append(y,z,w)計算計算計算計算リストの結合だけではなく、分解も可能関数ではなく関係を定義することによるメリット[1,2,3]を結合結果とするすべての候補(全解探索)を計算することも可能20append([x|y], z, [x|w]) <- append(y,z,w)x=1, y=[], z=q, w=[2,3]<- append([], q, [2,3])x’=[2,3], q=[2,3]append([], x’, x’) <-□q=[2,3]解解解解
  21. 21. また別の例:ギリシャの神々の系図Father(Zeus, Ares) <-Mother(Hera, Ares) <-Father(Ares, Harmonia) <-Mother(Aphrodite, Harmonia) <-Father(Cadmus, Semele) <-Mother(Harmonia, Semele) <-Father(Zeus, Dionysus) <-Mother(Semele, Dionysus) <-God(Zeus) <-God(Hera) <-Zeus == HeraAres == AphroditeCadmus == Harmonia21God(Hera) <-God(Ares) <-God(Aphrodite) <-Fairy-princess(Harmonia) <-Female(x) <- Mother(x, y)Male(x) <- Father(x, y)Parent(x, y) <- Mother(x, y)Parent(x, y) <- Father(x, y)Grandparent(x, y) <- Parent(x, z), Parent(z, y)※ “Kowalski, Logic for Problem Solving, 1979” よりZeus == SemeleCadmus == HarmoniaDionysus
  22. 22. トップダウン推論HarmoniaのGrandparentを求める(1)の節では、どちらのParentアトムを先に導出してもよい<- Grandparent(u, Harmonia)Grandparent(x, y) <- Parent(x, z), Parent(z, y)22<- Parent(u, z), Parent(z, Harmonia) …(1)<- Father(u, z), Parent(z, Harmonia)<- Mother(u, z), Parent(z, Harmonia)Parent(x, y) <- Father(x, y)Parent(x, y) <- Mother(x, y)<- Parent(u, z), Father(z, Harmonia)<- Parent(u, z), Mother(z, Harmonia)Parent(x, y) <- Father(x, y)Parent(x, y) <- Mother(x, y)
  23. 23. トップダウン推論探索空間はAND/OR木となる23
  24. 24. ボトムアップ推論公理を増やしていく処理に対応トップダウンと組み合わせて、両方向推論も中間でのmeet処理が難しい24
  25. 25. AND/OR並列“計算”はAND/OR木からなる探索空間における解の探索に相当ANDのリンクを並列に処理することをAND並列、ORのリンクを並列に処理することをOR並列というOR並列は実装容易。けれど不用意に行うと、計算が爆発する発するAND並列は互いの依存関係が強いため実現困難25
  26. 26. 異形の論理型言語システム
  27. 27. 導出原理(resolution principle)2つの節から論理的帰結として、1つの節を得るための演算1965年、R. Kowalski がユニフィケーション・アルゴリズムとともに定式化導出法導出原理に完全性保証のための手順を加味したもの完全性を持った導出法の例線形導出(linear resolution)入力導出(input resolution)単位導出(unit resolution)SLD導出(Selective Linear Definite resolution)27
  28. 28. 導出をユニファイア分離導出に拡張ユニファイア分離導出(U-導出)は導出と互換な拡張ユニファイアを別に扱える(+はcombinatorと呼ぶ演算)θ= mgu(Bλ, Pμ)θ(A <- B, C) λ(P <- Q, R)μ導出導出導出導出28θ= mgu(Bλ, Pμ)Aλθ <- Qμθ, Rμθ, Cλθφ= mgu(B, P)(A <- B, C) λ(P <- Q, R)μφ(A <- Q, R, C)(λ+μ+φ)U-導出導出導出導出
  29. 29. コンビネーション(combination)ユニファイアσ, τのコンビネーションσ+τは、次の条件を満たすθのうちの最汎(most general)な置換あるζ, ηが存在して、σζ=τη=θ代数的には交換法則、結合法則が成り立つ例:ここで、Tは矛盾置換ここで、Tは矛盾置換{a/x} + {b/x} = T{x/y} + {y/z} = {x/y, x/z}{f(z)/x} + {f(a)/x} = {f(a)/x, a/z}29
  30. 30. SLD導出の例G0: <- append([1,2], [3], q)append([x|y], z, [x|w]) <- append(y,z,w)σ1={1/x, [2]/y, [3]/z, [1|w]/q}G1: <- append([2], [3], w)計算計算計算計算プログラムプログラムプログラムプログラムF: append([], x, x) <-R: append([x|y], z, [x|w]) <- append(y,z,w)30G1: <- append([2], [3], w)append([x’|y’], z’, [x’|w’]) <- append(y’,z’,w’)σ2={2/x’, []/y’, [3]/z’, [2|w’]/w}G2: <- append([], [3], w’)append([], x”, x”)σ3={[3]/x”, [3]/w’}G3: □解解解解σ1σ2σ3|{q}={[1,2,3]/q}
  31. 31. SLD導出の例(U-導出の場合)G0: <- append([1,2], [3], q)append([x|y], z, [x|w]) <- append(y,z,w)σ1={1/x, [2]/y, [3]/z, [1|w]/q}G1: <- append(y, z, w) σ1計算計算計算計算プログラムプログラムプログラムプログラムF: append([], x, x) <-R: append([x|y], z, [x|w]) <- append(y,z,w)31G1: <- append(y, z, w) σ1append([x’|y’], z’, [x’|w’]) <- append(y’,z’,w’)θ1={[x’|y’]/y, z’/z, [x’|w’]/w}G2: <- append(y’, z’, w’) (σ1 + θ1)append([], x”, x”)θ2={[]/y’, z’/x”, w’/x”}G3: □ (σ1 + θ1 + θ2)解解解解(σ1 + θ1 + θ2) |{q}={[1,2,3]/q}
  32. 32. U-導出の特徴計算木においては、縮約(reduction)に相当する操作φ= mgu(B, P)A <-B, CP <-Q, RλμA <-Q, R, C λ + μ + φ縮約reduction32ユニファイアにおける合流性(Church-Rosser)reductionA <-B, C : εA <- C : φ A <- B : σA <- : φ + σC <- を適用B <- を適用B <- を適用C <- を適用
  33. 33. AND/ORグラフ上での縮約<-append([1,2], [3], q)append([x|y], z, [x|w]) <-append(y, z, w)G0:R: ORアークANDアーク節ノード33append([], x, x) <-F:G0RFR’RFG0G1G1RFR”RFG1G2 G2RFFG2G3⇒→ → ⇒ →→ 展開⇒ 縮約計算計算計算計算 = グラフの展開と縮約グラフの展開と縮約グラフの展開と縮約グラフの展開と縮約
  34. 34. ここで対象をユニファイアだけにするUP(Unifier Piece)節とユニファイアのテンプレート表現変数名はなくなり、接点に変化するqGUP(節ノード)(節ノード)(節ノード)(節ノード) UP((((ORアーク)アーク)アーク)アーク)G -R34qG0xFx y z wRy z w1 [2] [3] ・1G0-R・ ・R-RR-F []
  35. 35. UPグラフqqG01 [2] [3] ・1AND/ORグラフと違い、変数(接点)とtermしか現れないcombinationの失敗により、不要なORアークは除外される35xFx y z wRy z w[]・ ・
  36. 36. UPグラフの縮約qq1 [2] [3] ・1[2] [3] ・1q⇒グラフの展開・縮約過程でUPのcombinationが起こる一連のcombinationの結果、解が得られる36x y z wy z wy z wx y z wy z w・ ・[] [3] ・[1,2]qy z wx[][1,2,3]q⇒⇒
  37. 37. 導出木、AND木、UPと解の関係G0RFF: append([], x, x) <-R: append([x|y], z, [x|w]) <- append(y,z,w)G0: <- append([1,2], [3], q)G0: <- append([1,2], [3], q)Rσ1={[1|w]/q}G01 [2] [3] ・1qプログラムプログラムプログラムプログラム導出木導出木導出木導出木 AND木木木木 UPの結合の結合の結合の結合AND/ORグラフグラフグラフグラフ解解解解37G1: <- append([2], [3], w)σ2={[2|w’]/w}G2: <- append([], [3], w’)Fσ3={[3]/w’}G3: □σ1σ2σ3={[1,2,3]/q}RRRF・ ・x[]解解解解[1,2,3]q⇒全UPのcombination
  38. 38. 導出木、AND木、UPと解の関係G0RFF: append([], x, x) <-R: append([x|y], z, [x|w]) <- append(y,z,w)G0: <- append([1,2,3], [4], q)1 [2,3] [4] ・1qプログラムプログラムプログラムプログラム導出木導出木導出木導出木 AND木木木木 UPの結合の結合の結合の結合AND/ORグラフグラフグラフグラフ解解解解G0: <- append([1,2,3], [4], q)Rσ1={[1|w]/q}G038G1: <- append([1,2], [4], w)Rσ2={[2|w’]/w}G2: <- append([2], [4], w’)σ3={[3|w”]/w’}G3: <- append([], [4], w”)Fσ4={[4]/w”}G4: □σ1σ2σ3σ4={[1,2,3,4]/q}RRRRF x[]解解解解[1,2,3,4]q⇒解解解解全UPのcombination・ ・・ ・
  39. 39. 解が確定した場合の計算コストUPの構成が単純なappendの例で可能性を見てみる<- append([1,2,..,n], [n+1, ..], q) の解は、n+1個のUPから構成されるCCCCCCCCCUPs UPscombinationoperatorn+139・・・C従来の方法計算量:O(n)計算時間(遅延):O(n)CCCC2分木状に行う combination計算量:O(n)計算時間(遅延):O(log n)・・・もっとうまくやると...計算量:O(log n)計算時間(遅延):O(log log n)answeranswer
  40. 40. 解を求めるための戦略論理プログラムにおいて、“計算=探索”アプローチトップダウン、ボトムアップ、両方向ヒューリスティック (ex. SATソルバー)プログラマが指示(ex. Prologのcutオペレータ)UPモデルの場合は、UPの組み合わせパターンを生成し、UPのcombinationを行うことにより、いち早く無矛盾な組み合わせ(解)を探し出すことに相当解とならないUPの組み合わせは全体のcombinationの途中で矛盾置換となる“Generate And Test”40
  41. 41. トップダウンサーチappendの例でサーチの概要を示すUP gからスタートし、UP rを結合させながら、UP fとの結合が成功するまで順に進めるg・・・rrfCgffail Cgffail Cgffail Cgffailstep1 step2 step3 step4,5UPの構成41Cr OKCr Cffail Cr CffailCransCfトップダウンサーチを実現するトップダウンサーチを実現するトップダウンサーチを実現するトップダウンサーチを実現するDFGCfCrgans・点線矢印は同期のためのトークンが流れるリンク・Cオペレータは入力(実線矢印)の片方が変化するだけでも発火する
  42. 42. ボトムアップサーチ同様に、appendの例でサーチの概要を示すトップダウンとは逆に、UP fからスタートする計算結果を再利用できること(部分計算)がポイントCgfail CgfailrCgfailrCg failansCstep1 step2 step3 step4,5Cg failrCg failrCg42f fCOK fCansCgCrfansCボトムアップサーチを実現するボトムアップサーチを実現するボトムアップサーチを実現するボトムアップサーチを実現するDFGfCCg・・・rrfUPの構成
  43. 43. サーチ処理の並列化appendのようなケースは、プロセッサの数だけ並列化可能1つずつ generate and test するのでなく、k個単位で行うトップダウンサーチを実現するトップダウンサーチを実現するトップダウンサーチを実現するトップダウンサーチを実現するDFGCfCrトップダウンサーチを実現するトップダウンサーチを実現するトップダウンサーチを実現するトップダウンサーチを実現するDFG (k=4)Crg43rrCCrrrrrrCrrrrCfCfCCfCCr2r3r4gansr2r3r4Cfgans
  44. 44. 言語マシンのチップイメージCRUPをcombinationUPをカットスルー言語マシン(FPGA製チップ)PEをマトリックス状に配置インターコネクトは、2次元トーラスPE(Processor Element)2つのUPストリームをcombinationするUPストリームを転送(カットスルー)する44UPストリームUPのシリアライズドデータ(不定長)ヘッダに制御情報(アドレス)を持つ
  45. 45. FPGAの可能性脱ストアドプログラム方式例えば、今回の異形システムでは、従来のCPUに相当する機構を持たないプログラムカウンタ、ロード、ストア、ブランチ命令、スタック、キャッシュ、共有メモリなど従来のプログラムローディングの概念は、プロセッサのリコンフィグレーションに置き換わるプロセッサのリコンフィグレーションに置き換わるデータフローマシンを作りやすい脱フォン・ノイマン・アーキテクチャPEにおいては、バイトストリームの演算を遅延なく行うことがポイントちなみにFPGAですから、バイト単位にする必要はありません^^PE間のインターコネクトをどう作るかは大きな課題45
  46. 46. ご清聴ありがとうございました

×