学位論文要旨



No 213537
著者(漢字) 田浦,健次朗
著者(英字) Taura,Kenjiro
著者(カナ) タウラ,ケンジロウ
標題(和) 分散記憶並列計算機のための効率的で再利用可能な細粒度マルチスレッディング及びゴミ集め
標題(洋) Efficient and Reusable Implementantion of Fine-Grain Multithreading and Garbage Collection on Distributed-Memory Parallel Computers
報告番号 213537
報告番号 乙13537
学位授与日 1997.09.22
学位種別 論文博士
学位種類 博士(理学)
学位記番号 第13537号
研究科
専攻
論文審査委員 主査: 東京大学 教授 平木,敬
 東京大学 教授 小柳,義夫
 東京大学 教授 萩谷,昌己
 東京大学 教授 近山,隆
 東京大学 電子技術総合研究所主任研究官/新情報処理開発機構室長 佐藤,三久
内容要旨

 本論文では,並列計算機用の高級言語の実行方式に関する研究成果について,特に,マルチスレッディングと,ゴミ集め方式(以下,GC)に焦点を当てて,述べる.これらの研究は,分散記憶型並列計算機AP1000+上に,並列オブジェクト指向言語ABCL/fを実装するという文脈の中で行われた.開発された方式は大規模な分散記憶型並列計算機上で最も意味のある方式であるが,もちろんそれ以外の大規模並列計算一般にも適用できる結果である.以下で二つの焦点について述べる.

マルチスレッディング

 マルチスレッデイングとは,ひとつのプロセッサ中で多数のスレッド(実行流)を管理する機能であり,これによって並列計算機上で,プログラマはプロセッサ台数よりも多くのスレッドを持てるようになる.マルチスレッディングの実行方式は,従来から非常に多くの文脈で研究されており,我々の実行方式そのものは,本質的には,遅延タスク生成(Lazy Task Creation,以下LTC)という,並列Lispを対象にして研究された方式と同一のものである.

 マルチスレッディングの分野における本論文の貢献は二つある.まずLTCは,比較的小さな,ほとんど副作用のない応用問題で評価されており,また,共有記憶計算機上でしか実装されていない.これに対し我々は,より大規模で複雑なオブジェクト指向の応用問題を記述し,その性能を分散記憶計算機上で測定した.マルチスレッディングの性能を測定する設定としては,LTCが評価された「副作用のほとんどないプログラム,およびハードウェアによる共有ヒープを持つ計算機」という設定と,我々の「副作用があるプログラム,および分散記憶計算機」という設定では大きく異なっている.LTCの設定の元では明らかにスレッド切り替えの頻度は十分小さくなり,結果としてそのコストが問題になることはあまりない.一方我々の設定では,プログラムはロック獲得失敗時および,遠隔データアクセス時にしばしばブロックするため,その性能は実験によって確かめる必要があった.次に,これまでのマルチスレッディングのための実行時方式は,実際には,その方式専用のコード生成器(コンパイラ)との密な連携を前提にしており,これに対して我々の方式は,既存のCコンパイラをコード生成器としてそのまま用いることができるという点があげられる.これまでの方式は原理的には他の言語に通用する部分を多く持つにもかかわらず,実際には他の言語の実装者と直ちに共有できる技術ではないし,また,Cコンパイラの優れた逐次性能を利用できるものでもなかった.そして,LTCのような方式を,現在の逐次の呼び出し慣例や,それを前提にした逐次言語のコンパイラや支援ツールをそのまま再利用可能な形で効率的に実装できるかどうかは,明らかとは言えなかった.我々の方式は,Cのスタックフレーム上にある情報を最大限に活用し,SparcおよびAlphaという二つの異なったプラットフォーム上で,Cコンパイラを変更することなく実装されている.

 この方式は以下のように動作する.まず,スレッド生成は,単にCの関数呼び出しをすることによって行う.そして,そのスレッドがブロックした時は,その関数のスタックフレームをヒープにコピーした上で,その関数の親(呼び出した関数)に制御を移す.そのスレッドが計算を再開できる状態になったら,保存してあったフレームをスタックに書き戻して,その関数の途中から実行を再開する.一般に,スタックフレームは,ブロックした時とは違うアドレスに書き戻されるため,現在のところ,スタックフレームには,構造体および配列は割り当てられないものと仮定している.ここでCのスタックフレームについて,それをコピーしたり,正しいレジスタの状態で親に復帰するために,いくつかの問題が生ずる.

 特に,これまでの多くのマルチスレッディングの実装では,単純のためにスレッド生成時には呼び出し側がすべての必要なレジスタを待避する,つまりcallee-saveレジスタは存在しないものとしていた.これによって,スレッドのブロック時には,単に次のスレッドのフレームポインタおよびスタックだけを設定すれば正しい処理が継続できる.一方,Cの関数呼びだしをスレッド生成とみなす我々の方式では,それは仮定できない.従ってあるスレッドがブロックした時に,そのスレッドが使用中のcallee-saveレジスタは,親が期待する値に復帰させねばならない.しかしCの関数がどのcallee-saveレジスタを使用しているかを実行時に簡単に判定する方法はなく,あったとしてもオーバーヘッドが大きいものになる.

 この問題に関して,以下のような,簡潔で効率の良い解決法を考案した.我々の知る限りすべてのCコンパイラは,ある関数が使用するcallee-saveレジスタの保存・復帰を関数の入口と出口で全て一度に行う.従って,ある関数のどこからでも,その出口にある,callee-saveレジスタを復帰するコード(終了処理コード)に直接ジャンプすれば,その関数が呼び出された直後のレジスタの状態を正しく再現できる.そこでブロックを実現する関数は,まず自分の戻り番地を,それを呼び出した関数の終了処理コードの番地に書き換える.同様のことを実際にブロックしたスレッドにたどり着くまで行い,最終的にその親,つまりスレッドを呼び出した関数に復帰する.さらなる詳細および一般化を本文で述べている.

ゴミ集め(GC)

 マルチスレッディング同様,GCもこれまで非常に様々な文脈で研究されてきた.分散記憶環境での研究に限っても非常に多くのアルゴリズムが提案されている.我々の方式は,数々の分散環境における複雑な問題(信頼できない通信路や,故障しているプロセスなど)を扱った他の多くのアルゴリズムと比べると,方式自体は最も単純な部類に属する.我々のこの分野に対する貢献は,性能を向上するためのいくつかの単純な技法と,実際的な応用問題を用いた実験による定量的な性能評価である.

 我々のGCの方式はmark & sweep方式と呼ばれるもので,大域GC時には全プロセッサが協力しながら,ルートからたどれるオブジェクトに印をつけていく.この時,遠隔オブジェクトへのポインタは,そのオブジェクトが存在するプロセッサにメッセージを送ることでたどっていく.

 単純な実装で問題になるのは,この,遠隔ポインタをたどるためのメッセージ送受信オーバーヘッドである.最も単純な実装は,遠隔ポインタを一つ見つけるたびにひとつメッセージを送信するというものであるが,これでは実用的な速度は得られない.なるべくたくさんの遠隔ポインタを一つのメッセージでたどることが重要で,そのために我々は以下のようにした.各プロセッサはプロセッサ内のポインタだけでたどれるものだけを最大限たどり,これ以上何もたどれなくなった時に初めて,これまでプロセッサ内でたどっている最中に見つけた遠隔ポインタ全てに対してメッセージを送る.この時,複数の遠隔ポインタを一つのメッセージとして送ることができる.またこれと同様に,メッセージを受け取った方も,一つメッセージを受け取るたびにそこからプロセッサ内でたどれるものを見つけに行くのではなく,複数のメッセージをためて一括して処理を行うようにする.以上のような簡単な工夫を行うことで,メッセージ送受信のコストは大幅に削減され,mark&sweep方式は実用的な速度を示すようになる.

 応用問題を用いて実験を行った結果,我々の並列GCのオーバーヘッドが,同じプログラムを1プロセッサで実行した時と大きく違わないことが,最大256台のプロセッサを用いた実験によって確かめられた.また,r=2のときにGCがアプリケーションの実行時間に占める割合は,高々15%程度であった.ここでアプリケーションの実行時間には,アイドル時間は含まれていない.

 また,この実験により,局所的なGCは多くの場合,すべてのプロセッサで一斉に行わなければならないという結果が得られている.これは,各プロセッサが独立にGCを行うと,各プロセッサが,不揃いなタイミングで,他のプロセッサからのメッセージに反応しない時間帯を作り出すためである.そのようなGCのスケジューリングの元では,頻繁に同期通信を行う応用問題の性能は極端に悪くなる.一方,同期通信をあまり行わなず,1プロセッサ内部にたくさんの並列性を持つ応用問題ではこのようなことは起こらないし,実際独立にGCを行う方が(我々の実験ではわずかであったが)性能がよくなることもある.そこでさらに,局所GCを一斉に行うかどうかを実行時に適応的に決める方式を開発した,我々のこれまでの実験結果ではこの適応的な局所GCの選択方式は,明らかにどちらかが一方に比べて優れている時は,きちんとその優れている方を選択していることを確認した.

並列オブジェクト指向言語ABCL/fとその実装

 マルチスレッディングと,GCという二つの機構の上にプログラミング言語ABCL/fを設計・構築し,さらにその応用問題によって性能を評価した.ABCL/fはC++への変換という形で実装されており,そこでは上に述べたマルチスレッデイングの機能を活用して,ABCL/fの動的に並列性を作り出す機能の効率と,逐次計算部分の速度との両立を達成している.

審査要旨

 本論文は7つの章からなる。第1章は序論であり、本論文の研究に向うにあたって動機となった背景について論じている。並列計算機上で高性能計算を行なうための抽象化として、(1)動的に多数生成でき、自動的に実行される並列性および、(2)動的に多数生成でき、不要になったら自動的に回収されるデータ構造の提供、が重要であり、それらを並列計算機上で効率良く実装することの難しさを述べている。そして本論文ではそれらの機能を、既存の逐次言語における言語実装技術(逐次言語の処理系など)を利用しながら,効率的に実装すること,およびそれらの機能の上に並列オブジェクト指向のプログラミング言語を実装することに主題をおいている.この主題の設定は、学位論文の主題として十分、かつ妥当であると認められる。

 第2章は、上記(1)で述べられている,「動的に生成可能な並列性」について,これを既存の逐次言語(C言語)の最適化コンパイラを修正することなく再利用しながら,かつ効率良く実装する方法について述べている.実験により,この方式は,逐次計算部分の効率を犠牲にしないこと,および,実際の並列計算機上で,文脈切替を十分な速度で実行することが示されている.

 第3章は,上記(2)で述べられている,「動的に生成可能かつ,不要な領域が自動的に回収されるデータ構造」について,大規模な並列計算機上で,大域的なゴミ集め(Garbage Collection)を効率良く実装することで,これを実現する方式を示している.このゴミ集め方式は,印づけおよび回収(mark-and-sweep)方式と呼ばれる方式の一種であり,メッセージ交換による通信を用いて,実際に並列計算機上で実装されている.実験結果により,この方式は256台規模の並列計算機上で効率良く(特に,これまでに技術が確立している,逐次計算機上のゴミ集め方式と同等かそれ以上の効率で)動作することが示されている.

 これ以降は,前章までで示された要素技術を組み合わせて並列オブジェクト指向言語ABCL/fを設計・実装し,それを評価することについて述べている.まず,第4章は、ABCL/fの設計について述べている.並列オブジェクトという,動的に生成かつ不要になったら自動的に回収される,並列・分散にアクセス可能なデータ構造を提供すること,およびfutureという,動的に並列性を抽出できる構文を提供することが述べられている.

 第5章は、ABCL/fを実装する方式について述べている.各ABCL/fの構文を第2,3章で示された方式を利用しながら,C++言語に変換する方式が示されている.

 第6章は、ABCL/fを用いて記述された応用プログラムを通して,ABCL/f処理系の全体的な性能評価を行なっている.特に,並列プログラムを1台のCPUで実行した時の性能が,C++言語で記述された逐次のプログラムと同等の性能を示すこと,および並列計算機(256CPU)まで,良い性能向上を示すことが示されている.各場合について,その性能が分析され,単純な改良によりさらなる改善が可能な場合については,それらについて言及している.

 第7章は、論文全体の内容をまとめ、今後の研究課題について論じている。特に、本論文の方式が、全体として(逐次部分を含めて)高性能を示す,並列言語の処理系を,要領良く実装するための有効な方式であることが主張されている.

 本学位論文は、汎用かつ高性能な並列言語の処理系を構築する際に,必ず問題となる,二つの要素(並列度の管理および記憶領域管理)について,それぞれについて有効な方式を示し,それらを用いれば,実用的な並列言語の処理系が,要領良く構築可能であることを,数多くの実験結果とともに示している.二つの方式は,実装の(人力的な意味での)費用,これまでの逐次言語用ソフトウェアの再利用性など,実際にシステムを構築する際に当たって無視されがちな面にも十分な考慮を払って設計されており,その結果,実際に稼働するシステムを用いて数多くの実験が行なわれている.以上のように、本論文は並列言語実装の研究において、他に類をみない優れた研究であり、極めて有意義な成果を得ている。この点で、本論文は高く評価され、審査委員全員で、博士(理学)の学位を授与するにふさわしいと判断した。

 なお本論文の内容の一部は、共著論文として印刷公表済みであるが、論文提出者が主体となって研究および開発を行なったもので、論文提出者の寄与は十分であると判断する。

UTokyo Repositoryリンク http://hdl.handle.net/2261/50691