並列プログラミングへのアプローチ

上田 和紀

1.はじめに

コンピュータの分野で,昔から注目を集め,にもかかわらずなかなか実 用かのすすまないものに並列処理というのがある.

ある問題をコンピュータで処理しようとするときに,複数台のコンピュ ータに協力してあたらせることで効率をあげようというのは,きわめて 自然な発想である.現に我々が組織の中で仕事を進めるときはいつも, 与えられた人員がフルに活用されるように努めるものである(余談だが, コンピュータやプログラミングの分野で新しいことに取り組むとき,人 間あるいは人間社会におけるアナロジーを考えてみるとよいアイデアが 得られることが多い).たしかに逐次処理のコンピュータやマイクロプ ロセッサも年々性能がよくなってきてはいるが,その性能向上には熱力 学的・量子力学的限界があって,もはや素子技術の変革を考慮に入れて も青天井とは言えないのだそうである.一方,コンピュータの能力に対 する我々の要求は増大する一方だから,逐次型コンピュータの性能向上 が頭打ちになる前から,並列処理の技術を培っておく必要がある.

このような問題意識は最近,コンピュータのハードウェア・ソフトウェ アにたずさわる者の間に急速に高まってきており,また実験・評価用の 商用マルチプロセッサ・システムも売れはじめた.これとともに,「並 列処理はまだまだ実用にならない」とか,「私は今の逐次型コンピュー タの100倍速いのがほしいのであって,並列コンピュータはほしくない」 とかいった類の発言も影をひそめてきた.もっとも,かりにそのような 声があったとしても,我々研究・開発にたずさわる者としては,気にせ ずに並列処理を実用化してしまえばよいのである.そうすれば彼らも黙 らざるを得ないのだから.

2.何がむずかしいのか

では,これほど「自然」で,「動機づけ」も十分な並列処理が,なぜ掛 け声ばかりでなかなか身近なものになってこないのだろうか?

私のようなソフトウェアの研究者から見ると,最大の理由は,与えられ た問題を,並列コンピュータの上で効率よく走るようにプログラムする 技術がきわめて未熟な点にあるように思える.並列処理の実現は,並列 コンピュータを作ることと同じではない.それにユーザがついて,並列 プログラムがたくさん書かれ,ソフトウェアやプログラミング技法が蓄 積してゆくことが重要なのである.過去の多くの並列コンピュータ・プ ロジェクトが,ハードウェア的には何らかの成果を残しながらも,ソフ トウェア的な蓄積ができなかったために挫折している.プログラミング が難しすぎて,ユーザに使いこなせなかったのである.

並列プログラムはむずかしいと言われるが,その理由には次のふたつが あるのではないかと思う.ひとつは,我々が,並列性を含む事象を把握 したり,定式化したりすることに不慣れなことである.もうひとつは, そのような作業において思考と記述の道具となる言語(ここではプログ ラミング言語)が未熟なことである.前者の方は,もしかすると人間の 思考の本質にかかわる問題かもしれず,そうだとすれば改善が不可能で はないとしても,そうすぐにできるものではない.まず後者の問題,つ まりプログラミング言語の方の改善を試み,並列プログラミングの経験 の蓄積をはかることによって前者の問題にせまってゆくのがよさそうで ある.私がここ3年半ほどの間かかわってきた仕事は,第5世代コンピ ュータ・プロジェクトの中で,これからの並列処理技術の核となるべき 並列プログラミング言語を設計する作業であった.

3.第5世代コンピュータ・プロジェクト

第5世代コンピュータ・プロジェクトとは,財団法人新世代コンピュー タ技術開発機構(ICOT)が中心となって,1990年代以降の新しいコンピ ュータのハードウェア技術,ソフトウェア技術,そして全体を貫く方法 論の開発を目指している国家プロジェクトである.1982年に研究所がス タートしてから4年半あまりがたち,まもなく10年プロジェクトの折返 し点をむかえようとしている.このプロジェクトは,日本が最初に提唱 したもので,その発表時には世界的な注目を集めた.その後各国とも, 同様のテーマに対する取組みを強めており,ICOT は各国の組織と協力 関係を保っている.

     ┏━━━━━━━━━━━━━━━━━┓
     ┃     知識情報処理      ┃
     ┗━━━━━━━━┳━━━━━━━━┛
              ┃
     ┏━━━━━━━━┻━━━━━━━━┓
     ┃    論理プログラミング    ┃
     ┗━━━━━━━━┳━━━━━━━━┛
              ┃
     ┏━━━━━━━━┻━━━━━━━━┓
     ┃並列コンピュータ・アーキテクチャ ┃
     ┗━━━━━━━━┯━━━━━━━━┛
              │
     ┌────────┴────────┐
     │     VLSI技術      │
     └─────────────────┘

      図1 第5世代コンピュータのイメージ
図1が,このプロジェクトのごく簡単な枠組である.下に書かれたもの が,上に書かれたものを支えるという関係になっている.図が示すよう に,このプロジェクトは“知識情報処理”を志向しており,その実用化 によってコンピュータの使い心地を改善し,また応用範囲を拡大するこ とを目指している.知識情報処理とは,人間の知的活動を,いままでよ りいっそううまく助けるような,高度な情報処理技術全般を指すものと 思っていただいてよい.少なくともここでは,狭い意味での人工知能や, 知識工学を指すものではない.人工知能や知識工学ももちろん重要だが, それらはここでいう知識情報処理の要素技術と位置づけるべきものであ る.

このような高度な情報処理技術を,並列コンピュータ・アーキテクチャ が支える.これは未来志向のプロジェクトしてごく自然な設定である. 本プロジェクトの特徴的な点は,この両者をつなぐプログラミング技術 の枠組として,論理プログラミング(logic programming)を採用した 点である.論理プログラミングとは,簡単にいうとプログラムを論理式 の形で書くことであり,ここ10年ちょっとの間に急速に発展してきた技 術である.Prolog(プロログ)という名のプログラミング言語を耳にさ れた方もおありかと思うが,これは programming in logic の略で,今 や広汎に使われている論理プログラミング言語の名前である.

私が ICOT に関係するようになったのは,論理プログラミングをプロジ ェクトの中核とすることが決まって ICOT がスタートした後だったが, 論理プログラミングにこだわることには,当初国内外からの批判も少な くなかったと聞く.たしかに論理プログラミングは新しい技術であり, 知識情報処理をサポートして,それをうまく並列コンピュータにマップ するという困難な責務をこなせるという保証があったわけではない.だ が,プログラミングやプログラミング言語を専門とする研究者としては, この論理プログラミングを発展させ,可能性をきわめる場を与えられた わけであり,むしろ最終イメージが見えていないからこそ興味とやりが いを感じた.

4.Prolog から並列論理プログラミング言語へ

図1にはいかにも漠然と,論理プログラミングと書いてあるが,この部 分を一歩一歩具体化してゆくのが,私の属するグループの仕事であった. その仕事を始めた1983年当時,すでに Prolog は実用化の域にさしかか っており,すでにビジネスの目も向けられはじめていた.ICOT でも, Prolog をベースに設計された核言語 KL0 を機械語とする逐次型推論マ シンの設計がたけなわであった.だが,Prolog や KL0 は逐次コンピュ ータのための言語であり,逐次型推論マシンは第5世代コンピュータの 研究開発を促進するためのツールと位置づけられている.我々のグルー プは,この逐次型推論マシンの開発を横目で見ながら,その開発のあと に本命となるべき並列推論マシンのための核言語 KL1 の土台固めをし なければならなかった.KL0 の設計のときは,Prolog という,踏んで もくずれる心配のない,安定した土台があったわけだが,KL1 の場合は, そのような安定した土台,つまり並列論理プログラミング言語の設定か ら始める必要があった.

幸いにして,この候補あるいはたたき台となる言語を提案している海外 の研究者がいたので,ICOT では1982年と1983年に彼らを招聘研究員と して数週間ずつ招き,密度の濃い共同研究を行なった.イスラエル・ワ イツマン研究所の新進気鋭(文字通り大変な意気込みで研究してくれた) の Ehud Shapiro と,ロンドン大の Keith Clark,Steve Gregory の各 氏である.Shapiro は Concurrent Prolog,Clark と Gregory は PARLOG(parallel programming in logic)という並列論理プログラミ ング言語を提案していた.

私は,以前からプログラミング言語を専門としてはいたが,論理プログ ラミングに関する経験は1年足らずであったから,より経験豊富な彼ら から教えられるものはきわめて多かった.だがあとからふり返ってみる と,共同研究の内容そのものもさることながら,外国人研究者の研究の すすめ方,あるいは発表や議論のしかたをじかに見ることができたこと が,個人的には非常に有益だったと思う.並列論理プログラミング言語 の設計という,たよるべき前例の乏しいテーマに取り組むとき,出され るアイデアの妥当性を評価しようとしても,まず評価基準からして明ら かでない.このようなとき,アイデアを正当化するための議論の組立て, あるいは説得の技術が,討論における重要なファクターとなった.

プログラミング言語というものは社会的な側面を強くもっており,人々 にどれだけ受け入れられ,使われ,文化が育つかということでその社会 的価値が定まる.既存のものから容易に機能が推察できるような言語な らば,言語仕様を提案しておくだけでも,あとはユーザの力で広まって ゆくかもしれない.だが,まったく新しい言語ないしはまったく新しい 機能を提案し,社会に受け入れられるようにするためには,その設計を 正当化する明快な議論を設計者の側が提供しなければならない.さらに 困ったことに,およそコンピュータ・システムを形づくる諸要素の中で, 人間とコンピュータの接点にあたる部分−−つまりソフトウェア的には プログラミング言語やオペレーティング・システム,ハードウェア的に は入出力端末−−に関して,ほとんどの人はもっとも保守的である(だ から,FORTRAN,COBOL,我々がふだん使っているキーボードの QWERTY 配列などが,現在の技術水準からみると明らかに古いのに,しぶとく生 き永らえているのである).したがって,説得力のある議論は,設計段 階ばかりでなく,普及段階でも有用な道具となりうるのであって,上述 の海外研究者との共同研究から学んだものは,その後の私の活動に,直 接間接に計り知れない影響を及ぼした.

さて我々は,1983年から1984年のおわりまで,Shapiro の Concurrent Prolog という言語をたたき台として,プログラミング技法や処理系作 成技法の研究を,共同で,あるいは ICOT 独自で行なってきた. Concurrent Prolog をたたき台としたのは,この言語にはよくわからな い所も多いが,よい所もたしかにあるし,とにかく単純なのでたたき台 には最適である,と判断したためであった.そうは言っても,この判断 は多分に直観的なものであったので,ICOT 外部からのみならず,内部 からの批判にもさらされることとなった.

特に,Concurrent Prolog は,論理プログラミングの特徴とされていて, Prolog の目玉ともなっていた「探索」機能(たとえばパズルを解くプ ログラムを書いたときに,すべての可能性を自動的に調べつくしてくれ る機能)を失っていたことが,不評の大きな原因となっていた.さらに, 言語を使う側からばかりでなく,並列コンピュータ・アーキテクチャを 設計する側の人々からも,効率のよい処理系が作れる見通しが乏しいと いう批判があがっていた.これらの批判に対して研究成果の形で答えて ゆくのが,我々の責務となった.

どんな分野でもそうだと思うが,同じ問題に1年半も共同で取り組んで いると,いろいろなことがわかってくるものである.記述能力に対する 批判にはプログラミング技法を示すことで,効率のよい処理系が作れな いという批判には,とりあえず逐次コンピュータの上で簡単だが効率の よい処理系を作ってみせることで,答えることができた.そして大局的 には,我々の方向がそれほど無謀なものではなかったという心証が形成 されていった.

だが,言語仕様の細かい点に関する検討は,大局的判断を先行させるた めに後回しにされてきた.そして,より本格的な処理系を考える中で, いくつもの釈然としない点が浮かびあがってきた.そこで,Concurrent Prolog の言語仕様を徹底的に再検討することとした.ようやく,たた き台をたたく段階にきたわけである.

この作業をつうじて,並列プログラミング言語としてはすばらしく単純 に見えた(当時の)Concurrent Prolog にも,掘り下げて解析するとい ろいろ厄介な点があることがわかってきた.何かうまい解決策はないか と考えるうち,1984年末になって,私が Concurrent Prolog よりもさ らに単純な言語が作れることをふと見出し,グループに提案した.幸い グループ内の評判はおおむね良く,これを今後のたたき台とすることに なった.

言語の名前は,1ヶ月ほどのちに,Guarded Horn Clauses(略称 GHC) にきめた.プログラムを,ガードという機構をもった Horn 節(Horn clauses)の集まりとして書くことからつけたものである.

GHC は,実用的な見地からは Concurrent Prolog と大きく変わるとこ ろはない.つまり,GHC でも Concurrnet Prolog でも,同じ問題をプ ログラムすれば,たいがいは同じようなプログラムになる.ではどこが 新しいかというと,その“同じようなプログラム”で共通に用いている 本質的機能(具体的には,並列に走るプロセスの間の同期をとる機能) を,より単純な規則によって与えたところが新しいのである.この単純 化が,“よくわからなかった”並列論理プログラミング言語をよりよく 理解するきっかけとして,また関連する研究を促進するきっかけとして, 歓迎されたわけである.

5.GHC

GHC のことは,時間の都合がつき次第論文にまとめ,以前お世話になっ た招聘研究者の方々にもお送りした.大変興味を抱いてくれ,また肯定 的な評価と多くのコメントをいただいた.国内・海外の他の研究者から もコメントをいただいた.

このような交流のおかげで,言語の本質的部分は変わらなくても,言語 を説明する方法は漸次改良されてきたし,言語設計を正当化する議論も 補強されてきた.

GHC の開発と,それに先だって行なった諸考察は,先輩格の Concurrent Prolog と PARLOG が改良される引き金のひとつともなった. このような形で,招聘研究者の方々に少しは恩返しをすることができた. GHC は前述のように,主として Concurrent Prolog の検討から生まれ た言語であるが,できあがった言語は,本質的にはむしろ(当時の) PARLOG に近かった.この PARLOG が GHC の影響でそれに近づいてきた ので,今では両者の差はきわめて小さくなっている.今後も,これらの 言語を核とした研究が,たがいに影響を及ぼしながら発展してゆくこと が期待される.

実は GHC を考案したあとで,日本の別の研究者が類似の提案をしてい ることを知った.ひとつは佐藤雅彦氏(現東北大)と桜井貴文氏(現都 立大)による言語 Qute である.言語の構成は GHC とはかなり異なる ものの,GHC の単純さに貢献しているメカニズムと本質的に同じものが, すでに Qute の中にとりいれられていた.もうひとつは枚田正宏氏(筑 波大)による言語 Oc で,これは GHCと独立に,GHC をさらに単純化し た言語を開発したものであった.別々の研究者が独立に,同じメカニズ ムを思いついたという事実は,そのメカニズムの自然さを示唆している という点で歓迎すべきものである.GHC の新規性,独自性は,このメカ ニズム自体よりも,むしろそれを支える数多くの考察や,他言語との詳 細な比較など,言語が社会的に受け入れられるようにするために払った 努力の方にあるのではないかと思う.

GHC に関する仕事は幸いにして,特に海外の研究者からよく引用される ところとなった.その理由を考えてみると,次のふたつが思いあたる.

(1) GHC が,既存の言語の単純化の提案として出てきたこと.ほとんど のプログラミング言語の提案が,機能の拡張をめざすものであるのに対 し,GHC は切り捨ての発想でのぞんだわけである.これは,並列論理プ ログラミングというものの本質を明らかにするのに大変有効であった. また単純化は,他研究者の検討の俎上にのりやすくするという効果も生 んだ.

(2) 海外の研究者との交流を心がけたこと.最近では日本からもようや くアクセスできるようになったが,欧米では電子メールを使った研究者 どうしのコミュニケーションがきわめて盛んである.自分の仕事が,こ の電子メールという情報網にのって半ば知らぬ間に紹介されていったこ とは,普及に大変役立った(逆にいうと,日本人研究者の成果のうちの 多くのものが,貧弱な流通ルートのために,当然与えられるべき国際的 評価や知名度を得ていないのではないかと思う).

知名度を得たということは,それだけ多くの批判の眼にさらされたとい うことでもある.そのフィードバックによって,体質強化をさらにすす めることも可能になった.

だが,このような体質強化は,GHC を何が何でも守りぬくために行なっ ているものではない.もとより GHC はひとつの到達点にすぎず,その 並列コンピュータ・アーキテクチャとの親和性や,知識情報処理との親 和性は,これから明らかにしてゆかなければならない課題である.GHC による並列プログラミングは,既存の並列言語による並列プログラミン グに比べればいくつかの改善点があるが,実際にちょっとしたプログラ ムを書いてみると,まだまだ使いやすいとはいえない.メカニズム指向 の研究から生まれた言語であるために,実用面の改善が後回しになって いるからである.

結局,第5世代コンピュータ・プロジェクトにおける GHC の研究の目 的は,並列コンピュータ・アーキテクチャを考える人,並列プログラミ ングを考える人,次の並列言語を考える人などが同時に乗っても崩れ落 ちないようなひとつの踏み台を与えることであると言えよう.この踏み 台に乗ることによって何か新しい展望がひらけたとすれば,設計者とし て大変喜ばしいことである.

GHC を踏み台にして展望がひらけた具体例として,GHC が先輩の Concurrent Prolog と同様放棄した探索機能の研究に関する新たな展開 がある.従来,このタイプの並列論理プログラミング言語を拡張して探 索機能を導入するという形の提案はいくつかあったのだが,並列処理の 研究が一応軌道に乗るまでは,並列プログラミング言語のような基本的 なものを複雑化するのはできるだけ避けたかった.ところが,探索機能 をもった言語(例えば Prolog)ともたない GHC を別のレベルの言語と して位置づけると,上(Prolog)から下(GHC)への翻訳が容易にでき, しかも GHC の実行メカニズムだけを使って効率よく探索が行なえるこ とが,新たな研究で明らかになったのである.これも,複雑化を避けよ うとする努力から概念整理が進んだ一つの例と見ることができる.

6.おわりに

並列プログラミングをより身近なものにするために過去3年半ほど行な ってきた研究を振り返ってみた.ここでは自分自身の研究を中心に述べ たが,もちろんそれらは純粋に個人的なものではなく,古川康一氏(現 ICOT 次長),竹内彰一氏(現三菱電機)ほか核言語設計に関係した多 くの方々との共同研究に負うところが大きい.ここに感謝したい.

GHC はまだ満2歳をむかえたばかりである.ここまでよく持ちこたえた と思うが,まだまだプログラミング言語としては幼児の段階である.よ りすぐれた言語にとってかわられるまでの間,その発展を見守ってゆき たい.

           (〔財〕新世代コンピュータ技術開発機構 研究員)

<参考文献>
淵一博監修,古川康一・溝口文雄共編:“並列論理型言語 GHC とその 応用”,知識情報処理シリーズ第6巻,共立出版(1987).

元岡 達,喜連川 優著:“第五世代コンピュータ”,岩波書店(1984).


「通信工業」昭和62年3月号,pp.10〜16 所収.
著者、および本文中でふれた方々の所属は当時のもの.