> 転職:DODAトップへ

IT・Web・クリエイティブ業界の転職・求人情報なら
DODAエンジニアIT

DODAエンジニアIT
株式会社インテリジェンス
  • サイトマップ
  • ヘルプ
  • IT転職ホーム
  • 求人検索
  • 転職のプロに相談
  • 転職成功ガイド
  • モノづくりエンジニアの転職はこちら
転職・求人DODAエンジニア IT/トップ > 転職情報・成功ガイド > 三年予測 > 計算機科学者、未踏統括PM 竹内郁雄 氏
掲載日:2014.2.10
このエントリーをはてなブックマークに追加

三年予測ートップリーダーと考えるエンジニアの未来ー


低レベルプログラミングで世界トップクラスの結果を出す

リアルタイム処理とGCを両立させる

竹内の業績の一つ「実時間ごみ集め(実時間GC、ガーベジ・コレクション)」は今なお世界で開発競争が進められている技術だ。
最初のGC(ガーベジ・コレクション)はLisp処理系のために開発された技術だった。1959年のことだったという。のちにオブジェクト指向言語Smalltalk処理系もGCを取り入れた。1990年代以降に登場した多くのプログラミング言語、例えばJava、Ruby、PythonなどはGCを備えている。これらのプログラミング言語が普及したことで、GCは現代的なソフトウェアの実行環境には欠かせない技術となった。
GCは、プログラムが実行されていくうちに発生する「もう使用しなくなったメモリ」を自動的に再利用可能にする技術だ。C/C++などGCがないプログラミング言語の場合、メモリの再利用のためのコードをプログラマが明示的に記述する必要がある。Java、Ruby、PythonなどGCを備えたプログラミング言語では、メモリ管理は処理系が自動的に行ってくれる。
このためGCはプログラマの負担を大幅に減らし、プログラムの生産性を高める効果がある。竹内は、書籍『ガベージコレクションのアルゴリズムと実装』(中村成洋/相川光 著、竹内郁雄 監修、達人出版会から電子書籍版を入手可能)の「監修者まえがき」に「GCを備えた言語での生産性は、GCを備えていない同等の言語に比べて30%は増加します」と記している。
ただしGCには弱点がある。GCの動作で処理中のプログラムが中断してしまう。このことは、特に「リアルタイム処理(実時間処理)」と呼ばれる分野で大きな問題となる。リアルタイム処理ではプログラムの処理速度が単に速いだけでなく、突発的なセンサ値変化や、10ミリ秒ごとの周期クロックといった外部事象への対応を確実に所定の時間内に終えることが必須なのだが、GCはこの性質と相反するのだ。
竹内らが開発した「実時間GC」では、GCによる、本来のプログラム処理の中断を「クロック33MHzのプロセッサで最悪130マイクロ秒以内」と非常に短くすることにより、外部事象への反応処理を実用的な速度にすることを保証した。

Googleも欲しがった「実時間GC」

この実時間GCは、他に実現例が乏しく、しかも竹内らの成果は性能が突出していた。竹内に米国Googleのエンジニアが会いにきたほどだ。Androidの仮想マシンに組み込むGCを改良するためだ。
「何年か前のことだ。山中湖の別荘まで、わざわざ会いに来た」
そう竹内は話す。「論文のあちこちにビッシリと書き込みがある。こんなに読み込んでいる人がいるんだ、とびっくりした」
「こっちは、富士山の眺めが素晴らしいとか、手料理を振る舞いながら『このチェリーのラム酒漬けは自分でこしらえた、おいしいよ』といった話をして“煙に巻いた”」
竹内らが開発した実時間GCは、Lisp専用機SILENTのマイクロプログラミングにより実現していた。マイクロプログラミングとは、コンピュータハードウェアの内部動作を記述する仕組みで、通常は機械語の命令セットを実現するために使われる。このレベルでは、CPU内部の論理回路を自由な組み合わせで並列動作させることが可能なので、CPU資源をいわば「なめ尽くせる」のである。
つまり、竹内らは機械語よりも低レベルのプログラミングでGCを記述したのだ。さらに、SILENTにはGCのための機能、竹内に言わせれば「GCのための怪しい『鼻薬(はなぐすり)』的なアーキテクチャ上の工夫」が仕込まれていた。
Lisp専用機SILENTの半導体プロセッサ。同僚の吉田雅治が高速化のためにフリップフロップレベルの手配線で組み上げたことから「水墨画のような」パターンを示している。通常のマイクロプロセッサはライブラリを使うことから、都市計画のような規則的なパターンを示すので、これは異例のこと。
SILENTの外観。大きさを示すためにVHSのテープが置かれていて、時代を感じさせる。
一方、Androidの動作環境となるスマートフォンはARMアーキテクチャに基づく市販の汎用プロセッサを使っている。この上で、竹内が開発した実時間GCを再現することは難しい、と言って、手料理で煙に巻きながら説得したのだ。
しかし、実は竹内も、市販の汎用プロセッサの上で実時間GCを作ろうとしたことがある。2010年3月、東京大学大学院を退職した時期に、「これで暇ができる」という思いから「自分が設計したマシンではなく、Intelプロセッサの上で実時間GCを作ってやろう」と思い立ったのだ。Intelといえども、100倍もクロックが速ければ何とかなるはずだ。まず、最新のCoreプロセッサを搭載したPCを入手し、Intelのアーキテクチャマニュアルをダウンロードしてみた。ところがマニュアルが4300ページもあった。最新の64ビットアーキテクチャの部分だけでも調べたかったのだが、それも古い世代のプロセッサから引き継いだ歴史的経緯を反映していて厄介だった。
「その頃、新設のエジプト日本科学技術大学で講義をする仕事が降ってきたので、それを名目に中止してしまった」と竹内は冗談交じりに話す。もし歴史の歯車が少しだけずれていたら、私たちは、竹内がIntelアーキテクチャの上で作り上げた、実時間GCを組み込んだLisp処理系を使うことができていたかもしれない。

GCをハードがサポートしないのは「けしからん」

GCは長い歴史がある技術だ。それにも関わらず、「GCにはまだ改善の余地が残っている」と竹内は言う。
竹内は、GCと仮想記憶という二つの技術を比較して次のように話す。
「普通のバーチャルメモリ(仮想記憶)は、実メモリが大きくなくても、二次記憶(ディスク)を使って仮想的にアドレス空間いっぱいのメモリがあるかのごとく見せる。つまり空間方向にメモリを拡大している『空間的な仮想記憶』だ。GCは使い捨てメモリを永久に与え続けてくれるから、いわば『時間的な仮想記憶』だ」。
仮想記憶はいまどき、どのハードウェアによってもサポートされている。一方、Lisp専用機のような例外を除けばGCにはハードウェアサポートはなく、主にプログラミング言語処理系というソフトウェアにより実現されている。
だから、竹内はこう嘆くのだ。
「普通のバーチャルメモリはハードウェアサポートがあるのに、『時間的な仮想記憶』であるGCをハード屋が誰もサポートしてくれないのはけしからん。たいしたハードじゃない。『鼻薬』のように、ちょっと入れればいいだけなのに」
竹内が語る言葉は、もはや成熟した分野と考えられがちなコンピュータアーキテクチャの分野にも、まだ改善の余地が残されていることを示唆している。
『天才プログラマ』を育てるには
このエントリーをはてなブックマークに追加
DODA転職支援サービス 専任のキャリアコンサルタントが、キャリアアドバイスから求人紹介、退職フォローまでを一貫してサポートします。ご利用になりたい方は、こちらからご登録をお願いします。はじめて退職する方のために3分でわかる転職支援サービスのメリットを紹介 転職支援サービスに申し込む(無料) 3分でわかる転職支援サービスのメリット

ご登録後、すぐにご紹介できる求人がない場合は、インテリジェンス DODAカスタマーセンターよりその旨をご連絡の上、求人発生時まで求人紹介・カウンセリングをお待ちいただいております。あらかじめご了承ください。