Transcript Konoha
Working with Konoha プログラミング言語 分散並列実行に関する研究調査 横浜国立大学大学院工学府 10GD131 五嶋 壮晃 10/08/02 論文レビュー発表会 Working with Konoha CPUクロック速度の限界 • ムーアの法則 – 「半導体チップに集積されるトランジスターの数は約 2 年ごとに倍増する」という法則 – それに伴いCPUクロック速度も向上すると考えられて いる • 近年のチップ速度の限界は3.5GHz程度にとどまっている 1 Working with Konoha マルチコアの時代 • ムーアの法則は、マルチコアの領域では達成できており、 CPUに搭載されるコア数は年々増加している – 現在24coresのCPUが登場し、2012年には48coresの CPUが登場すると言われている • これからのソフトウェア・アプリケーション開発は、マ ルチコアを活かすことでパフォーマンスを向上していく 必要がある 2 Working with Konoha 並列プログラミング • マルチコアを活かすために、大きく分けて次の2通りの プログラミング方法がある – マルチスレッドプログラミング – マルチプロセスプログラミング • マルチプロセスプログラミングは、プロセス複製のコス トが大きいため、コア数を増やしても性能向上させるこ とが難しい • マルチスレッドプログラミングは、共有メモリを用いて いるためにロック処理や非決定性を考慮しなければなら ならい 3 Working with Konoha 並列計算モデル • 並列プログラミングをプログラマが安全かつ容易に記述 できるようにモデル化したもの – 今回は並列ソフトウェア開発のために多くのユーザが 用いている、Java言語を扱ったモデルについて調査し た • アクターモデル • CoBoxモデル Actor Model CoBox Model Concurrent Computing Model 4 Working with Konoha 論文のリスト 1. Rajesh K. Karmani, Amin Shali, Gul Agha. Actor Frameworks for the JVM Platform: A Comparative Analysis: Proceedings of the 7th International Conference on Principles and Practice of Programming in Java 2. John Ayres, Susan Eisenbach. Stage: Python with Actors: Proceedings of the 2009 ICSE workshop on Multicore software engineering 3. Jan Schäfer, Arnd Poetzsch-Heffter: Writing concurrent desktop applications in an actor-based programming model: Proceedings of the 2010 ICSE workshop Multicore software engineering 5 Working with Konoha Actor Frameworks for the JVM Platform: A Comparative Analysis • 背景 – マルチコアを活かしたプログラミングをする上でアク ターモデルが注目を集めている • 目的 – JVM上でアクターモデルを実装した言語・Framework を分析し、アクターモデルの特徴や性能の違いを示す Actor Model on JVM 6 Working with Konoha アクターモデル • アクター – メソッド呼び出しの代わりにメッセージを送って動作 するオブジェクト – メッセージを管理するためのメールボックスを持つ • メッセージドリブン方式 – メールボックスを定期的に確認し、先頭にあるメッ セージが実行できるものだった場合、実行する • 非同期処理 – メッセージのやりとりは非同期に行う message execute message Actor Mailbox Programmer execute Actor Mailbox 7 Working with Konoha アクターの持つ性質 • • • • ユニークで変更不可能な名前 変更可能なlocal state メッセージ管理をするためのメールボックス メッセージの種類 – 他のアクターに影響を及ぼすもの – アクターを生成するもの Local State create Thread Methods message Mailbox 8 Working with Konoha アクターモデルのメリット • JVM上で実装された様々なアクターモデルを調査した結 果、アクターモデルがプログラマに対し提供しているメ リットは次のようなものがある – Encapsulation • Encapsulation State • Sage Messaging – Fair scheduling – Location transparency – Mobility 9 Working with Konoha Encapsulation • State Encapsulation – 他のアクターから自身が持つlocal stateに直接アクセス できないようにするために、メッセージは必ずメソッ ドを介して処理される • Safe Message Passing – メソッドの中にクリティカルセクションになるような 箇所がある場合は、アクターのコピーを行って、デー タの競合を避ける 10 Working with Konoha Fair Scheduling • メールボックスはキュー構造をとっており、メールボッ クス内にメッセージが入っている場合は、先頭から順に 実行していく • 現在実行されているメッセージがbusy状態の場合は次に 実行されるはずのメッセージが実行されない – infinite loop, blocked on an I/O, system call • メッセージに対応したスレッドを作ることで回避する message 先頭 1 2 11 Working with Konoha Location Transparency • 現在それぞれのアクターがどの場所にいるかを気にせず にプログラムが書ける – e.g.) 同一コア上、同一CPU上、ネットワークに繋がれ た別のノード上 – アクターの名前を指定することにより、どの場所にい るアクターとも通信できる – この機能は実行時の別ノードに対するmigrationや mobilityをサポートしている ユニークに決まって いるアクターの名前 actor = find_actor(actor_name) アクターのアドレス が返ってくる 12 Working with Konoha Mobility • アクターの処理を、異なるノードをまたいで行うことが できる • Weak Mobility – メールボックスが空のアクターをMigrationすること • Strong Mobility – メールボックスにメッセージが入っているアクターを Migrationすること Actor Network 13 Working with Konoha JVM上のアクターモデルの比較 • 実行速度の効率化のために、先に挙げたアクターモデル のメリットをサポートしていないモデルがある State Encapsulation Safe Message Passing Fair scheduling Location transparency Mobility 14 Working with Konoha 性能評価 • Threadringベンチマークを用いて、それぞれのモデルの 速度比較を行った – Actor Foundry・SALSA・Actor Architectureで遅延がみ られた EncapsulationとFair schedulingを共に実装してい るアクターモデルで遅延が 見られた アクターのコピーに要する コストや、thread複製の コストが影響している 15 Working with Konoha まとめ • アクターモデルは、並列プログラミングを安全かつ容易 に記述するため、以下の4つの機能を提供している – Encapsulation – Fair scheduling – Location transparency – Mobility • 全ての機能をサポートしたアクターモデルは、未サポー トのアクターモデルに比べてパフォーマンスが低下した – Encapsulationを行うためのアクターの複製や、Fair schedulingのためのthreadの複製を行っているのがボト ルネックになっている 16 Working with Konoha Stage: Python with Actors • 背景 – アプリケーションの性能を向上させるために、複数の ノードを用いた並列計算も視野に入れて考えなければ ならない • 提案 – アクターモデルを、動的型付けなスクリプティング言 語であるPythonに用いた、Stageを提案 • Pythonのオブジェクト指向プログラミングはそのま まに、メソッド呼び出しの代わりに非同期メッセー ジを用いて動作する 17 Working with Konoha Stageの概要 • 複数のアクターを含むTheatreを持つ – それぞれのノードにある全てのアクターの管理を行う – Theatreは各ノードに1つずつ存在する • Networkに繋がれた他のノードのアクターと通信する場 合には、Theatreを介して行う Location Service Network Messaging Stage Communication Layer StageStage Executing Meta Actors Hooks PythonCommunication Layer Migration Stage Execution Environment(Theatre) 18 Working with Konoha Stageの特徴 • Theatreは各ノードをつなぐインターフェースとなり、 Location transparencyやMobilityの実装をサポートして いる – どのアクターがどのノードにいるかは全てTheatreが把 握している Location Actors transparency Theatre C Theatre A Actor Script Local Theatre Stage Programmer Network Mobility Theatre B Theatre D 19 Working with Konoha Stageの特徴 • Pythonにバインドされている外部のライブラリを Theatre上で扱うために、Driver Actorsというレイヤーを 用意している ○ Actors アクターを操作 Theatre ×× GTK+ Library bind PyGTK API ○ C言語 PyGTK+ Actors Actors Theatre PyGTK+ Actor Driver Actor s GTK+ Library C言語 STAGE 20 Working with Konoha 性能評価 • Trapezoidal approximationベンチマークを用いた PythonとStage(one actor), Stage(two actors)の パフォーマンス比較 Python(original)に対し、 Stage(one actor)の場合で同 程度の性能、Stage(two actors)の場合で約2倍の性能 向上がみられた Running on an i686 Intel Core2 CPU 2.13GHz and a 2.6 Linux Kernel 21 Working with Konoha まとめ • Stageの特徴 – スクリプティング言語の文法を崩さずにアクターモデ ルを導入している – 他のノードのアクターにアクセスする際に、内部では Theatreを介して行うように実装されている • Location transparencyやMobilityの実装をサポートし ている – バインドした外部のライブラリに対してもアクターモ デルを適用できるように、Driver Actorsレイヤーを実 装している • アクターモデルを実装しているが、性能の低下は見られ ず、扱うアクターを増やせばPythonの性能を上回ってい る 22 Working with Konoha Writing Concurrent Desktop Application in an Actor-Based Programming Model • 問題 – GUIアプリケーションを開発する際、thread-safeに設 計・実装することは難しい • それぞれのコンポーネントが互いに依存し合ってい る • 提案 – アクターモデルを発展させた、CoBoxモデルを用いた GUIアプリケーションの設計・実装法を提案 • CoBoxモデルをJava言語の拡張として導入した言語、 JCoBoxを用いて開発する 23 Working with Konoha CoBoxモデル • アクターモデルで考えられていなかった、メッセージの スケジュール管理を導入 – アクターモデルでは、アクターからのメッセージを 待っている間は、次のメッセージを実行できなかった • オブジェクト指向言語に対応するため、複数のオブジェ クトをまとめてCoBox単位で管理する方法をとっている 24 Working with Konoha CoBoxの構造 • オブジェクトの種類 – standard – transfer – immutable • タスクの種類 – active – ready – suspend • リファレンスの種類 – local reference – far reference 25 Working with Konoha CoBox内のオブジェクト • standard object – immutable objectのメソッド、フィールド変数にダイレ クトにアクセスできる – far referenceを用いて別のCoBox内のオブジェクトにア クセスできる • transfer object – CoBox間でデータの受け渡しを行いたいときに使用す るオブジェクト • immutable object – 複数のコンポーネントで管理したいメソッド、フィー ルドを持つ、変更不可能なオブジェクト – すべてのCoBoxから、standard objectによるlocal referenceを用いて参照可能 26 Working with Konoha CoBox内のタスク • active task – 現在実行中のタスク • ready task – キュー構造をとっているready queueに入っている、実 行待ち状態のタスク • suspend task – suspendメソッドによって呼び出され、実行中のタス クを一時停止し、再び実行できる条件がそろうまで、 専用の領域で待機させられるタスク 27 Working with Konoha CoBoxのタスク管理 • taskの生成 – CoBox内のオブジェクトがメソッド呼び出しをした際 に作られる • taskの実行 – activeなtaskにより実際のメソッド呼び出しやフィール ドへのアクセスが行われる • taskの中断や一時停止 – ready task(処理の中断やタイムアウト時) • ready queueの最後にtaskを移す – suspend task(処理が一時停止した場合) • suspend taskを格納する領域に移され、条件がそ ろったら起動する 28 Working with Konoha CoBoxのスケジューリング • Fair schedulingでは、メッセージ毎にthreadを立てて、 busyループのあるメッセージの対処をしていた – スケールしたときに、大量のメッセージの数だけ threadもたってしまい、thread複製コストが大きい – busyループを含んだthreadが破棄されずに残ってしま う • CoBoxのスケジューリング方法では、タイムアウトや処 理の中断・停止・一時停止などに対しタスク管理が行わ れるため、Fair schedulingでの問題点を防ぐことができ る 29 Working with Konoha JCoBox • Java言語の拡張として、CoBoxモデルを取り入れた言語 – オブジェクト指向で記述できるJavaの文法を崩さずに、 CoBoxモデルを利用できる – @CoBoxや@Immutable, @Transferといった修飾子を クラスの宣言時に付けることで、CoBoxの作成や各種 オブジェクトの作成を行うことができる – メソッドの呼び出し方法は、「.」の代わりに「!」を使 う 30 Working with Konoha JCoBoxを用いたApplication例 • Concurrent Music Managerを実装 – 各コンポーネントをCoBox単位で管理し、コンポーネ ント間のやりとりをCoBoxを介して行うことで、プロ グラマがロック処理やタスク管理などを気にせず並列 プログラミングを記述することができる 31 Working with Konoha まとめ • CoBoxモデルを用いた言語、JCoBoxを用いて実際にデ スクトップアプリケーションを実装 – thread-modelで開発する場合と比較し、ロック処理や デッドロック、タスク管理などを考えなくてよい – オブジェクト指向での開発を妨げることなく、並列計 算モデルを扱うことができる 32 Working with Konoha 全体のまとめと今後 • これからの時代はマルチコアを活かしたソフトウェア開 発が求められており、並列プログラミングをサポートす るための並列計算モデルについて調査した – アクターモデル – CoBoxモデル • 今後は、更に並列計算モデルの調査をし、研究室で開発 しているプログラミング言語Konohaに並列プログラミン グをサポートするための新しい並列計算モデルを組み込 みたい 33