並列探索ライブラリの提案 美添 樹 (Kazuki Yoshizoe) 基盤 (S) 離散構造処理系プロジェクトセミナー 2017 年 2 21

Size: px
Start display at page:

Download "並列探索ライブラリの提案 美添 樹 (Kazuki Yoshizoe) 基盤 (S) 離散構造処理系プロジェクトセミナー 2017 年 2 21"

Transcription

1 並列探索ライブラリの提案 美添 樹 (Kazuki Yoshizoe) 基盤 (S) 離散構造処理系プロジェクトセミナー 2017 年 2 21

2 2 紹介 過去にはコンピュータ囲碁の研究に取り組む 今は主に並列探索アルゴリズムの研究に取り組む 過去の研究 探索いろいろ (AND-OR 探索 MCTS など ) 並列計算 ( キャッシュ同期プロトコルによる投機実 ) 情報セキュリティ ( 静脈認証の脆弱性評価 ) デジタル無線通信 (Adaptive Array Antenna 等 ) 1 1 付けで理研 AIP 本橋に 探索と並列計算ユニット のリーダーに着任 研究以外に計算機の選定なども担当

3 並列探索の概要 ルールで 成されるグラフ 組合せ最適化 SAT NCSP 数値制約充 問題 ゲームパズル 頻出パターンマイニング 探索の ( 我々の ) ターゲット 探索 探索グラフはかなり Unbalanced なので単純な並列化は困難 1, 同期オーバーヘッド正確に計算時間をそろえる ( 困難 ) は 同期アルゴリズムに変形する 各種オーバーヘッドを低く保つ並列化 法が必要 トレードオフ 3, 通信オーバーヘッド送信や受信にかかる時間 2, 探索オーバーヘッド閾値などの情報の伝達が遅れ 枝刈りが遅れるオーバーヘッド

4 並列化 法の種別と既存の成果 深さ優先探索 (DFS) stack を使う様に変形し work stealing を う ハッシュ表を使う探索例 IDA*, モンテカルロ 探索 Distributed Hash Table を いる Priority Queue を使う探索例 Dijkstra, A* 探索 Hash distributed queue を使う ( 今のところ SAT ソルバは対象外 ) SAT ソルバやや特殊 数値制約充 問題 900 コアで約 750 倍 [Ishii, Yoshizoe, Suzumura. 2014] 統計的パターンマイニング 1,200 コア 1,175 倍 [Yoshizoe, Terada, Tsuda. 2017?] work stealing に少し 夫を追加 ハッシュ関数を いて節点を分散 都合の良い ハッシュ関数と通信の集中を回避する 夫が必要 並列モンテカルロ 探索 4,800コアで約 3,200 倍 [Yoshizoe, Kishimoto, Kaneko, Yoshimoto, Ishikawa 2011] Portfolio 式が主流

5 5 並列探索ライブラリの 標 並列探索の難しさの回避 ハードウェアに適したアルゴリズムの作成 デバッグ きな 標 シングルコアの探索を実装できる なら並列版も実装できるように 分散メモリ環境で動作させる できるだけ 般的なツールを いる c++ と MPI ライブラリ まだ未完成 今後数年の研究 標 まず 番簡単な深さ優先探索 (DFS) について説明

6 並列 DFS 応 例 遺伝データから統計的に有意な変異の組合せを発 する (P-Value が さい組合せを全列挙 ) アルツハイマー / 本 概要 元は lattice な探索空間 reverse search で に変換 P-value の枝刈りを いて 閾値付き深さ優先探索に 低遅延閾値伝播 +work stealing ( 細かいテクニックはいくつかあり ) 1,200 コアを いて 最 1,175 倍 速化 ( 東 TSUBAME CPU のみ ) [ 美添, 寺, 津 ] arxiv: [cs.dc] Genome Wide Association Studies 変異 (SNP) が 各 が被験者 GTCTAAAACATGATT 0 GTCTGAATCATGATT 1 GTCTGAAACATGATT 0 GTCTGAATCATCATT 1 頻出パターンマイニングの並列化でもある cf. ビールおむつ問題 pos. neg. 数万 数 万の組合せナイーブにやると 2 数 万通り Time (s) time (s) speedup Nu. Process 41.1 Speedup

7 NCSP 数値制約充 問題に適 不等式制約で記述される 実数領域を求める問題 p0 Initial domain B&P nb boxes... p B&P B&P p0 p2 p1... p3 4 (精度保証付き) 数値計算 領域分割 ( 探索) P コアを いて 最 約500倍 速化 特徴 x2 P2 応 例: ロボットの可動範囲 x1 不平衡な探索 の分散 不規則かつ 頻度な負荷分散 短時間 (数秒以下) の求解でも 速化 閾値無し DFS

8 8 深さ優先探索 Depth First Search Back tracking DFS DFS() { Recur(r) Recur(node n) { foreach (child c of n) { // do something for c Recur(c) f の節点を全て辿る単純な動作 d g a e h k r b i l j c m n o 再帰呼び出しで 然と back tracking を実装可能 経路上の節点だけ覚えれば良いメモリ消費 O(d)

9 9 閾値付き Depth First Search DFS with threshold DFS() { Recur(r) Recur(node n) { foreach (child c of n) { // do something for c if (c is within threshold) Recur(c) UpdateThreshold() f d g a e h r b i k l j c m n o 閾値を動的に更新して枝刈り実 例が多い 探索の本体は 字の部分 節点の作り によって頻出パターンマイニングにも統計的パターンマイニングにも数値制約充 問題にもなる

10 並列 DFS の準備 再帰呼び出しをスタック + ループに変換 10 DFS() { Recur(r) Recur(node n) { foreach (child c of n) { // do something for c if (c is within threshold) Recur(c) UpdateThreshold() 利点 :O(d) メモリ 点 : 並列化が困難 r StackDFS() { push(r) Loop() Loop() { while(stack not empty) { pop n from stack foreach (child c of n) { // do something for c if (c is within threshold) push(c) UpdateThreshold() d a e b i j c n o 点 :O(d b) メモリ利点 : 並列化可能 f g h k l m 深さ d, 分岐数 b の とすると

11 DFS() { Recur(r) Recur(node n) { foreach (child c of n) { // do something for c if (c is within threshold) Recur(c) UpdateThreshold() 再帰呼び出しをスタック + ループに変換 11 StackDFS() { push(r) Loop() Loop() { while(stack not empty) { foreach in pop n from stack reverse order foreach (child c of n) { // do something for c if (c is within threshold) push(c) UpdateThreshold() d a e r b i r j r c n o c b a c b a c b e d c b e d c b e g f 逆順にスタックに積むとほぼ同じ探索順序 c b e g f c b e g c b e c b h c b h f g h k l m 注意 : キュー (FIFO) にするとメモリ消費が激増する

12 あとは Work Stealing をすれば並列化完了 12 request request give reject Work stealing スタックが空になったプロセスがジョブを持つプロセスを探し request する (receiver initiated) ユーザから以下を隠蔽 request 対象の選択 法実際にはネットワークの能 に応じた 法が必要通信の集中を避ける 正しい終了検知全てのスタックが空になった保証があって 初めて終了する Distributed Termination Detection (DTD) は意外と難しい

13 13 並列 DFS ライブラリ Back tracking DFS この変換はユーザにやってもらう Stack DFS DFS() { Recur(r) Recur(node n) { foreach (child c of n) { // do something for c if (c is within threshold) Recur(c) UpdateThreshold() StackDFS() { push(r) Loop() Loop() { while(stack not empty) { pop n from stack foreach (child c of n) { // do something for c if (c is within threshold) push(c) UpdateThreshold()

14 14 並列 DFS with stack ParallelDFS() { if (proc_id == 0) stack.push(r) Loop() Loop() { while(not AllStackIsEmpty()) { if (stack.count() > 0) { stack.process() Probe() send one steal REQUEST Probe() Probe() { while (message received) { switch (message:type) { case REQUEST: if (stack not enough) send REJECT else stack.split() and send GIVE case REJECT: Send one steal REQUEST case GIVE:received_stack stack.merge() if (proc_id == 0) Start DTD ( 後で説明 ) 以下の関数を持つ stack があれば良い process が探索の本体 process / split / merge / count

15 15 抽象クラスを継承して実装 class DFSStack { public: virtual void Process() = 0; virtual DFSStack * Split() = 0; virtual void Merge(int *, int) = 0; virtual int Count() = 0; 前の stack を作れば ( 閾値無しの ) 深さ優先探索が動く 参考 : 並列 語 X10 を いた類似の実装が存在 [Zhang,Tardieu, Grove, Herta, Kamada, Saraswat, Takeuchi 2014] class MyStack : public DFSStack { public: virtual void Process() { 探索の本体通常は節点を pop し 節点を push する virtual MyStack * Split() { stack を半分に分割し 配列に置いてポインタを返す virtual void Merge(MyStack *) { 送られてきた stack をマージ virtual int Count() { 要素の数を返す

16 16 まず 指すもの 以下の 順で並列化可能なライブラリ ユーザが Process / Split / Merge 等を持つ stack クラスを実装 実際に stack かどうかはどうでも良い split した結果が連続メモリ領域にある必要あり そうでないと send しにくい 逐次 stack DFS で stack のデバッグ stack の情報だけを元に探索する ( 逐次では無意味だが )split と merge も使う 逐次で動くならそのまま並列でも動くように ここが難しいかもしれない

17 17 さらに閾値伝播を追加 Spanning Tree 上で通信 終了検知と同時にやる ユーザの実装が必要な物 reduce 関数 / bcast 関数がある threshold クラス 実体は何でも良い 何らかの reduce 関数 探索は stack と threshold のみで動作する必要 ParallelDFS() { if (proc_id == 0) push(r) Loop() Loop() { while(not AllStackIsEmpty()) { if (stack.count() > 0) { stack.process() Probe() send one steal REQUEST Probe()

18 分散アルゴリズムでは意外な事が難しい 終了検知 Distributed Termination Detection 18 スタックが全て空なら終了で良いのでは? スタックが空でも通信の途中かもしれない send と recv の総数を数えて 致していれば良いのでは? 数えるタイミングによっては send と recv を1 個ずつ (N 個ずつ ) 逃すかも さらに数えている途中に recv したら数え直すようにする これで正しく検知可能 ring を 2 周する : Dijkstra Scholten アルゴリズム ( 有名 ) ring 1 周で良い改良 : 4 counter algorithm など Spanning tree 上で集計 : [Mattern 1990] 決定版 速 ( 何故か知られていない ) これと同時に閾値伝播を う

19 19 メッセージ種類追加で実現 ParallelDFS() { if (proc_id == 0) push(r) Loop() Loop() { while(not AllStackIsEmpty()) { if (stack.count() > 0) { stack.process() Probe() send one steal REQUEST Probe() ユーザ定義による任意のメッセージを追加しても良いが Probe() { while (message received) { switch (message:type) { case REQUEST: if (stack not enough) send REJECT else split and send GIVE case REJECT: Send one steal REQUEST case GIVE: merge to local queue case BROADCAST: UpdateThreshold() send BROADCAST to neighbor or send REDUCE to parent case REDUCE: if (at root) send BROADCAST else send REDUCE if needed if (proc_id == 0) Start DTD

20 20 ユーザから隠蔽したい物 MPI ライブラリの難しさ MPIメジャーなライブラリだがワナは 々 特に数値計算以外の使い をすると難しい 通信パターンの問題 通信パターンに気を遣わないと何が起きるか 終了検知 分散メモリ環境での正しい終了検知

21 MPI Library (Message Passing Interface) 番メジャーな並列プログラムツール MPI 規格にそった実装が多数存在 各プロセスは rank (0,,N-1) を持つ Process 0 main() { int buffer1[100], buffer2[100]; if (rank==0) { MPI_Send(buffer1, 100, MPI_INT,1,...); MPI_Recv(buffer2, 100, MPI_INT,1,...); else { // rank==1 MPI_Recv(buffer2, 100, MPI_INT,0,...); MPI_Send(buffer1, 100, MPI_INT,0,...); MPI はプロセス ( ランク ) 単位で動作 rank 0 MPI_Send MPI_Recv rank 1 Process 1 main() { int buffer1[100], buffer2[100]; if (rank==0) { MPI_Send(buffer1, 100, MPI_INT,1,...); MPI_Recv(buffer2, 100, MPI_INT,1,...); else { // rank==1 MPI_Recv(buffer2, 100, MPI_INT,0,...); MPI_Send(buffer1, 100, MPI_INT,0,...); 21 冗 なメモリコピーを許容すれば共有メモリ環境でも普通に動作する ( 単に通信をメモリコピーに置き換える )

22 22 MPI 初 者の良くやるミス このコードはデッドロック Process 0 main() { int buffer1[100], buffer2[100]; if (rank==0) { MPI_Send(buffer1, 100, MPI_INT,1,...); MPI_Recv(buffer2, 100, MPI_INT,1,...); else { // rank==1 MPI_Send(buffer1, 100, MPI_INT,0,...); MPI_Recv(buffer2, 100, MPI_INT,0,...); Process 1 main() { int buffer1[100], buffer2[100]; if (rank==0) { MPI_Send(buffer1, 100, MPI_INT,1,...); MPI_Recv(buffer2, 100, MPI_INT,1,...); else { // rank==1 MPI_Send(buffer1, 100, MPI_INT,0,...); MPI_Recv(buffer2, 100, MPI_INT,0,...); MPI_Send は MPI_Recv されるまで待つ MPI_Send, MPI_Recv はブロッキング通信なのでこの書き をするとそこでデッドロックする 実は Send / Recv は何種類かあって適切な物を選ぶ必要 Send, Isend, Bsend, IBsend

23 23 探索での定 とワナ Loop() { while(not AllStackIsEmpty()) { // do work stealing Probe() Probe() { while (MPI_Iprobe()) { MPI_Recv( ) switch (message_tag) { // ここでメッセージに応じた処理 探索ではメッセージのタイミング サイズ 送り先の全てが不定 こういう 儀の悪いアプリは MPI はあまり想定していない以下を使うのが 応の定 MPI_Iprobe: メッセージが届いていたら true を返す 次の MPI_Recv はブロックしない MPI_Bsend: バッファを いた Send 1 回バッファにコピーしてから送信 MPI の動作は何らかの MPI 関数が呼ばれないと進まない ( 実際は実装依存だが いくつか試したが実際 まる ) 良くあるミス無駄なポーリングを避けようとして途中で まる

24 24 刺さる プロ 語? 何かが何かに刺さって不具合が起きる良く原因が分からない場合に いる 例 したら刺さって 40 秒固まったぞ 類義語 秘孔を突く 普通のプログラム動かないのはほぼ 100% 分のせい 規模並列 分のせいと えない不具合は 常茶飯事 並列プログラムは気をつけないと良く刺さる うっかり何かを 刺さない うっかり 秘孔を突かない

25 25 良くある 刺さり 前のプロセスがうまく終了せず 後続のプロセスが影響を受けて死ぬ 分かりやすいケースプロセスの未終了 ゾンビ化 原因が良く分からないケースも多い ( プロにも良く分からないことも ) 全く動かない ( これは良い死に ) 死に いろいろ 最初から遅い ( これもまだ良い ) 通信がときどき数秒 10 秒程度 まる しばらくすると遅くなる ( こういうのが困る ) しかも数時間待ったら勝 に治る ( ことも )

26 簡単なツバメの刺し 26 1, ランダムな相 と通信 ( 数秒以上 ) 2, 特定の 1 ノードから残り全てへ通信 3, もう 1 回 特定の 1 ノードから残り全てへ通信

27 簡単なツバメの刺し 27 1, ランダムな相 と通信 ( 数秒以上 ) 2, 特定の 1 ノードから残り全てへ通信 3, もう 1 回 特定の 1 ノードから残り全てへ通信

28 簡単なツバメの刺し 28 1, ランダムな相 と通信 ( 数秒以上 ) 2, 特定の 1 ノードから残り全てへ通信 ここで まる数秒 10 秒 3, もう 1 回 特定の 1 ノードから残り全てへ通信 これには数ミリ秒 ざっぱな回避策としては 通信の集中を避けること send/recv ペアに枝を張って作るグラフが 最 次数が低く 直径が さく hot-spot がない betweenness centrality が い場所がない

29 通信が まる現象 現象としては MPI_Iprobe が数秒ブロックする ( 通常は 2 3 マイクロ秒で終了する ) さらに同時に malloc がブロックすることも HPC 分野の専 家もあまり知らないそもそも MPI_Iprobe を 分で呼ぶ が少ない普通は MPI_Recv などの内部で使われている 29 推測される原因と背景 Infiniband の RDMA (Remote Direct Memory Access) に伴う何らかの thrashing と推測される RDMA のために Infiniband カードは独 のメモリ変換テーブルを持つ 実体はホストメモリ上にあるまた malloc も独 の物に置き換える 詳細はドライバを読む? 専 家に協 を依頼中

30 分散ハッシュを利 する 法もライブラリ化したい 今後の課題 30 ハッシュ関数で分散 ハッシュ関数は問題依存 性能のためにはここに介 したい DFS ほど 由がない DFS では work stealing の対象は 由 Hash distributed A* などではそうは かない 理想的には 適切なハッシュ関数の 動 成 動的な変更 しかしこれはかなりチャレンジング アイデア 刺さない ために余分な通信を うなど 2-hop, 3-hop しても良いことにするなど

31 より 規模に ある程度は成功 DFS 1,175 倍 (1,200 コア ) MCTS 3,200 倍 (4,800 コア ) ただし まだ 規模 ネットワークが速い (full bisection) 普通の CPU (Xeon) 実際のトポロジを無視し 通信パターンのグラフだけ 夫すれば 分な規模 HPC の専 家の知 が求められる より 規模な探索問題を解く物性科学や 命科学の組合せ最適化例 熱伝導率最 化 / RNA 構造発 数値制約充 問題による精度保証求解 より 規模な環境を 指す 3D torus, TOFU ( 京 ) 等 Many-core アーキテクチャ ハードウェア ミドルウェアに負担をかけないアルゴリズム たとえば 実際のトポロジに即した通信パターンを 動的に 成 アルゴリズムに都合が良く実現可能なトポロジの提案 ( ランダムエッジを少数追加など ) 耐故障性のある探索

32 32 おまけ : 並列探索ハッカソン 並列統計的パターンマイニングを github で公開中 MP-LAMP これを元に並列 DFS をやるための解説会 & ハッカソン的なことをやりたいと思っています 以下の様な 歓迎 頻出パターンマイニング界の 探索の 私のメリット 意 収集 参加者の に提供できるメリット 並列探索の理解?

人工知能入門

人工知能入門 藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体

More information

alg2015-6r3.ppt

alg2015-6r3.ppt 1 アルゴリズムとデータ 構造 第 6 回探索のためのデータ構造 (1) 補稿 : 木の巡回 ( なぞり ) 2 木の巡回 ( 第 5 回探索 (1) のスライド ) 木の巡回 * (traverse) とは 木のすべての節点を組織だった方法で訪問すること 深さ優先探索 (depth-first search) による木の巡回 *) 木の なぞり ともいう 2 3 1 3 4 1 4 5 7 10

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

Microsoft PowerPoint - mp11-06.pptx

Microsoft PowerPoint - mp11-06.pptx 数理計画法第 6 回 塩浦昭義情報科学研究科准教授 [email protected] http://www.dais.is.tohoku.ac.jp/~shioura/teaching 第 5 章組合せ計画 5.2 分枝限定法 組合せ計画問題 組合せ計画問題とは : 有限個の もの の組合せの中から, 目的関数を最小または最大にする組合せを見つける問題 例 1: 整数計画問題全般

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション AICS 公開ソフトウェア講習会 15 回 表題通信ライブラリと I/O ライブラリ 場所 AICS R104-2 時間 2016/03/23 ( 水 ) 13:30-17:00 13:30-13:40 全体説明 13:40-14:10 PRDMA 14:10-14:40 MPICH 14:40-15:10 PVAS 15:10-15:30 休憩 15:30-16:00 Carp 16:00-16:30

More information

グラフの探索 JAVA での実装

グラフの探索 JAVA での実装 グラフの探索 JAVA での実装 二つの探索手法 深さ優先探索 :DFS (Depth-First Search) 幅優先探索 :BFS (Breadth-First Search) 共通部分 元のグラフを指定して 極大木を得る 探索アルゴリズムの利用の観点から 利用する側からみると 取り替えられる部品 どちらの方法が良いかはグラフに依存 操作性が同じでなければ 共通のクラスの派生で作ると便利 共通化を考える

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション モンテカルロ木探索 並列化 囲碁 マリオ AI 美添一樹 ETATO 研究員 湊離散構造処理系プロジェクト 2013 年度秋のワークショップ 2013 年 11 月 26 日 並列モンテカルロ木探索の意義 コンピュータ囲碁で人間を超える 情報科学の有効性を示す 大規模並列探索ライブラリ 近い将来 全てのアルゴリズムは大規模並列化が必要 並列探索は実装が 非常に 大変なのでライブラリとして提供できると良い

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

2007年度 計算機システム演習 第3回

2007年度 計算機システム演習 第3回 2014 年度 実践的並列コンピューティング 第 10 回 MPI による分散メモリ並列プログラミング (3) 遠藤敏夫 [email protected] 1 MPI プログラムの性能を考える 前回までは MPI プログラムの挙動の正しさを議論 今回は速度性能に注目 MPIプログラムの実行時間 = プロセス内計算時間 + プロセス間通信時間 計算量 ( プロセス内 ) ボトルネック有無メモリアクセス量

More information

C#の基本2 ~プログラムの制御構造~

C#の基本2 ~プログラムの制御構造~ C# の基本 2 ~ プログラムの制御構造 ~ 今回学ぶ事 プログラムの制御構造としての単岐選択処理 (If 文 ) 前判定繰り返し処理(for 文 ) について説明を行う また 整数型 (int 型 ) 等の組み込み型や配列型についても解説を行う 今回作るプログラム 入れた文字の平均 分散 標準偏差を表示するプログラム このプログラムでは calc ボタンを押すと計算を行う (value は整数に限る

More information

Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - algo ppt [互換モード] ( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる

More information

Microsoft PowerPoint - 06graph3.ppt [互換モード]

Microsoft PowerPoint - 06graph3.ppt [互換モード] I118 グラフとオートマトン理論 Graphs and Automata 担当 : 上原隆平 (Ryuhei UEHARA) [email protected] http://www.jaist.ac.jp/~uehara/ 1/20 6.14 グラフにおける探索木 (Search Tree in a Graph) グラフG=(V,E) における探索アルゴリズム : 1. Q:={v { 0 }

More information

ビッグデータ分析を高速化する 分散処理技術を開発 日本電気株式会社

ビッグデータ分析を高速化する 分散処理技術を開発 日本電気株式会社 ビッグデータ分析を高速化する 分散処理技術を開発 日本電気株式会社 概要 NEC は ビッグデータの分析を高速化する分散処理技術を開発しました 本技術により レコメンド 価格予測 需要予測などに必要な機械学習処理を従来の 10 倍以上高速に行い 分析結果の迅速な活用に貢献します ビッグデータの分散処理で一般的なオープンソース Hadoop を利用 これにより レコメンド 価格予測 需要予測などの分析において

More information

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計 データセンターの効率的な 資源活用のためのデータ収集 照会システムの設計 株式会社ネットワーク応用通信研究所前田修吾 2014 年 11 月 20 日 本日のテーマ データセンターの効率的な資源活用のためのデータ収集 照会システムの設計 時系列データを効率的に扱うための設計 1 システムの目的 データセンター内の機器のセンサーなどからデータを取集し その情報を元に機器の制御を行うことで 電力消費量を抑制する

More information

PowerPoint Template

PowerPoint Template プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: [email protected], Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている

More information

POSIXスレッド

POSIXスレッド POSIX スレッド (3) システムプログラミング 2011 年 11 月 7 日 建部修見 同期の戦略 単一大域ロック スレッドセーフ関数 構造的コードロッキング 構造的データロッキング ロックとモジュラリティ デッドロック 単一大域ロック (single global lock) 単一のアプリケーションワイドの mutex スレッドが実行するときに獲得, ブロックする前にリリース どのタイミングでも一つのスレッドが共有データをアクセスする

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

並列計算導入.pptx

並列計算導入.pptx 並列計算の基礎 MPI を用いた並列計算 並列計算の環境 並列計算 複数の計算ユニット(PU, ore, Pなど を使用して 一つの問題 計算 を行わせる 近年 並列計算を手軽に使用できる環境が急速に整いつつある >通常のP PU(entral Processing Unit)上に計算装置であるoreが 複数含まれている Intel ore i7 シリーズ: 4つの計算装置(ore) 通常のプログラム

More information

Microsoft PowerPoint - 演習1:並列化と評価.pptx

Microsoft PowerPoint - 演習1:並列化と評価.pptx 講義 2& 演習 1 プログラム並列化と性能評価 神戸大学大学院システム情報学研究科横川三津夫 [email protected] 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 1 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 2 2 次元温度分布の計算

More information

04-process_thread_2.ppt

04-process_thread_2.ppt オペレーティングシステム ~ 保護とシステムコール ~ 山田浩史 hiroshiy @ cc.tuat.ac.jp 2015/05/08 復習 : OS の目的 ( 今回の話題 ) 裸のコンピュータを抽象化 (abstraction) し より使いやすく安全なコンピュータとして見せること OS はハードウェアを制御し アプリケーションの効率的な動作や容易な開発を支援する OS がないと 1 つしかプログラムが動作しない

More information

MPI MPI MPI.NET C# MPI Version2

MPI MPI MPI.NET C# MPI Version2 MPI.NET C# 2 2009 2 27 MPI MPI MPI.NET C# MPI Version2 MPI (Message Passing Interface) MPI MPI Version 1 1994 1 1 1 1 ID MPI MPI_Send MPI_Recv if(rank == 0){ // 0 MPI_Send(); } else if(rank == 1){ // 1

More information

[4] ACP (Advanced Communication Primitives) [1] ACP ACP [2] ACP Tofu UDP [3] HPC InfiniBand InfiniBand ACP 2 ACP, 3 InfiniBand ACP 4 5 ACP 2. ACP ACP

[4] ACP (Advanced Communication Primitives) [1] ACP ACP [2] ACP Tofu UDP [3] HPC InfiniBand InfiniBand ACP 2 ACP, 3 InfiniBand ACP 4 5 ACP 2. ACP ACP InfiniBand ACP 1,5,a) 1,5,b) 2,5 1,5 4,5 3,5 2,5 ACE (Advanced Communication for Exa) ACP (Advanced Communication Primitives) HPC InfiniBand ACP InfiniBand ACP ACP InfiniBand Open MPI 20% InfiniBand Implementation

More information

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D> 並列アルゴリズム 2005 年後期火曜 2 限青柳睦 [email protected] http//server-500.cc.kyushu-u.ac.jp/ 11 月 29( 火 ) 7. 集団通信 (Collective Communication) 8. 領域分割 (Domain Decomposition) 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類

More information

Microsoft PowerPoint - 講義:片方向通信.pptx

Microsoft PowerPoint - 講義:片方向通信.pptx MPI( 片方向通信 ) 09 年 3 月 5 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 09/3/5 KOBE HPC Spring School 09 分散メモリ型並列計算機 複数のプロセッサがネットワークで接続されており, れぞれのプロセッサ (PE) が, メモリを持っている. 各 PE が自分のメモリ領域のみアクセス可能 特徴数千から数万 PE 規模の並列システムが可能

More information

PowerPoint Presentation

PowerPoint Presentation 幅優先探索アルゴリズム 復習 Javaでの実装 深さ優先探索 復習 Javaでの実装 1 探索アルゴリズムの一覧 問題を解決するための探索 幅優先探索 深さ優先探索 深さ制限探索 均一コスト探索 反復深化法 欲張り探索 山登り法 最良優先探索 2 Breadth-first search ( 幅優先探索 ) 探索アルゴリズムはノードやリンクからなる階層的なツリー構造で構成された状態空間を探索するアルゴリズムです

More information

離散数学

離散数学 離散数学 最小全域木と最大流問題 落合秀也 今日の内容 最小全域木 プリムのアルゴリズム 最大流問題 フォード ファルカーソンのアルゴリズム 今日の内容 最小全域木 プリムのアルゴリズム 最大流問題 フォード ファルカーソンのアルゴリズム 最小全域木を考える Minimum Spanning Tree Problem ラベル付 ( 重み付 ) グラフ G(V, E) が与えられたとき ラベルの和が最小となる全域木を作りたい

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

TFTP serverの実装

TFTP serverの実装 TFTP サーバーの実装 デジタルビジョンソリューション 佐藤史明 1 1 プレゼンのテーマ組み込みソフトのファイル転送を容易に 2 3 4 5 基礎知識 TFTP とは 実践 1 実際に作ってみよう 実践 2 組み込みソフトでの実装案 最後におさらい 2 プレゼンのテーマ 組み込みソフトのファイル転送を容易に テーマ選択の理由 現在従事しているプロジェクトで お客様からファームウェアなどのファイル転送を独自方式からTFTPに変更したいと要望があった

More information

自然言語は曖昧性だらけ! I saw a girl with a telescope 構文解析 ( パージング ) は構造的な曖昧性を解消 2

自然言語は曖昧性だらけ! I saw a girl with a telescope 構文解析 ( パージング ) は構造的な曖昧性を解消 2 自然言語処理プログラミング勉強会 12 係り受け解析 Graham Neubig 奈良先端科学技術大学院大学 (NAIST) 1 自然言語は曖昧性だらけ! I saw a girl with a telescope 構文解析 ( パージング ) は構造的な曖昧性を解消 2 構文解析の種類 係り受け解析 : 単語と単語のつながりを重視 I saw a girl with a telescope 句構造解析

More information

CSPの紹介

CSPの紹介 CSP モデルの優位性 産業技術総合研究所情報技術研究部門磯部祥尚 0:40 第 9 回 CSP 研究会 (2012 年 3 月 17 日 ) 1 講演内容 1. CSPモデルの特徴 CSPモデルとは? 同期型メッセージパッシング通信 イベント駆動 通信相手 ( チャネル ) の自動選択 3. CSPモデルの検証 CSPモデルの記述例 検証ツール 振舞いの等しさ 2. CSPモデルの実装 ライブラリ

More information

MMUなしプロセッサ用Linuxの共有ライブラリ機構

MMUなしプロセッサ用Linuxの共有ライブラリ機構 MMU なしプロセッサ用 Linux の共有ライブラリ機構 大谷浩司 高岡正 近藤政雄 臼田尚志株式会社アックス はじめに μclinux には 仮想メモリ機構がないので共有ライブラリ機構が使えない でもメモリ消費抑制 ストレージ消費抑制 保守性の向上のためには 欲しい 幾つかの実装があるが CPU ライセンス 機能の制限のためにそのまま利用できない RidgeRun 社 (Cadenux 社 )

More information

120802_MPI.ppt

120802_MPI.ppt CPU CPU CPU CPU CPU SMP Symmetric MultiProcessing CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CP OpenMP MPI MPI CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU MPI MPI+OpenMP CPU CPU CPU CPU CPU CPU CPU CP

More information

Microsoft PowerPoint - ad11-09.pptx

Microsoft PowerPoint - ad11-09.pptx 無向グラフと有向グラフ 無向グラフ G=(V, E) 頂点集合 V 頂点の対を表す枝の集合 E e=(u,v) 頂点 u, v は枝 e の端点 f c 0 a 1 e b d 有向グラフ G=(V, E) 頂点集合 V 頂点の順序対を表す枝の集合 E e=(u,v) 頂点 uは枝 eの始点頂点 vは枝 eの終点 f c 0 a 1 e b d グラフのデータ構造 グラフ G=(V, E) を表現するデータ構造

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

Insert your Title here

Insert your Title here マルチコア マルチスレッド環境での静的解析ツールの応用 米 GrammaTech 社 CodeSonar によるスレッド間のデータ競合の検出 2013 GrammaTech, Inc. All rights reserved Agenda 並列実行に起因する不具合の摘出 なぜ 並列実行されるプログラミングは難しいのか データの競合 デッドロック どのようにして静的解析ツールで並列実行の問題を見つけるのか?

More information

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 SQL トレーニング データベース アーキテクチャ コースを受講された方 もしくは同等の知識をお持ちの

More information

- i - org.t_engine.tenet.core.coreerrormessageexception org.t_engine.tenet.core Class CoreErrorMessageException java.lang.object +-java.lang.throwable +-java.lang.exception +-org.t_engine.tenet.core.coreexception

More information

TopSE並行システム はじめに

TopSE並行システム はじめに はじめに 平成 23 年 9 月 1 日 トップエスイープロジェクト 磯部祥尚 ( 産業技術総合研究所 ) 2 本講座の背景と目標 背景 : マルチコア CPU やクラウドコンピューティング等 並列 / 分散処理環境が身近なものになっている 複数のプロセス ( プログラム ) を同時に実行可能 通信等により複数のプロセスが協調可能 並行システムの構築 並行システム 通信 Proc2 プロセス ( プログラム

More information

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014 ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014 コンカレントな処理の実行 システム内部の複数の処理を 平行に実行する CPU GPU メモリ転送 カーネル実行 複数のカーネル間 ストリーム GPU 上の処理キュー カーネル実行 メモリ転送の並列性 実行順序 DEFAULT STREAM Stream : GPU

More information

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android) Discover Support Library Masahiko Adachi @adamrokcer / +Masahiko.Adachi 28 th Sep, 2013 About me! 足立昌彦 ( @adamrocker / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert

More information

Microsoft PowerPoint _MPI-03.pptx

Microsoft PowerPoint _MPI-03.pptx 計算科学演習 Ⅰ ( 第 11 回 ) MPI を いた並列計算 (III) 神戸大学大学院システム情報学研究科横川三津夫 [email protected] 2014/07/03 計算科学演習 Ⅰ:MPI を用いた並列計算 (III) 1 2014/07/03 計算科学演習 Ⅰ:MPI を用いた並列計算 (III) 2 今週の講義の概要 1. 前回課題の解説 2. 部分配列とローカルインデックス

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン () 仮想マシン 復習 仮想マシンの概要 hsm 仮想マシン プログラム言語の処理系 ( コンパイラ ) 原始プログラム (Source program) コンパイラ (Compiler) 目的プログラム (Object code) 原始言語 (Source language) 解析 合成 目的言語 (Object Language) コンパイルする / 翻訳する (to compile

More information