2012年5月6日日曜日

リアルタイム・コンピューティングとカント主義

ミラクル・リナックスに入社してちょうど3ヶ月が経った。試用期間が終わり、正式(?)に採用となった。散々遅刻したのにクビにならなかったので、ほっとしている。これからはフレックスタイムが使えるので、大いに寝坊できるとうものだ。

4月末に、「実績レビュー」なるものがあった。社長以下各セクションのトップを集め、プレゼンを行い、この3ヶ月の仕事を見てもらって、継続して雇うかどうかを判断してもらおうというわけだ。これが、1時間も時間がとってあった。長い。

困ってしまった。私のプレゼンのスタイルは、「瞬発力で勝負」というものであって、せいぜい15分がいいところ。そもそも、1時間もしゃべる話題がない。うっかり口を滑らせて、「Linuxでリアルタイム・コンピューティングをやりたい」と言ってしまったところ、思いの外盛り上がった。

コンピューティングの世界で、「リアルタイム・コンピューティング」ほど誤解されている概念は無い。単に「レスポンスタイムが短い」という意味でリアルタイム・コンピューティングと言う人もいるし、「計算機内部の時間の流れと外部の時間の流れが同期している」という意味で言う人もいる。

私が思うに、「処理のデッドラインが設定されている」というのが、リアルタイム・コンピューティングの定義だ。デッドラインとは、その間に処理が終わって欲しいという時間である。デッドラインを過ぎる(デッドラインミス)と、計算結果の意味が失われる。リアルタイム・コンピューティング技術とは、いかにしてデッドラインを守るかという技術だ。

デッドラインミスが起きたときに何が起きるかはシステムによる。例えば、画像の乱れなど、一時的なパフォーマンスの低下として無視できる場合もある。飛行機の墜落や100億円の人工衛星が失われるなど、「大惨事」が起きるかも知れない。現実には、ほとんどのリアルタイム・システムは前者のグループに属する。ほとんどの場合、デッドラインミスは、単に無視できるか、上位のプロトコルでリカバリーできる。

一般的に、コンピューティングの世界では、パフォーマンスとは「速さ」だ。一方、リアルタイム・コンピューティングの世界では、パフォーマンスとは、あくまでも「デッドラインの尊守」である。計算が速いこととデッドラインの尊守は矛盾する概念ではない。しかし、イコールではない。

一般的なコンピューティングの世界にいる人には、この点をなかなか理解してもらえない。「リアルタイムだろうが何だろうが、速ければ文句ないだろう?」というわけだ。確かに文句はないのだが、それだけでは何か大事なものを見落としているような気がするのだ。

そこで、ひとつうまい説明を思いついた。すなわち、一般的なコンピューティングは、ベンサムの「功利主義」の世界である。一方、リアルタイム・コンピューティングは、「カント主義」の世界である。

功利主義やカント主義というのは、政治哲学の概念である。どうしてこんな比喩を思いついたかというと最近サンデル教授の本を読んだからなのだが、この喩えは、一般的なコンピューティングとリアルタイム・コンピューティングの違いをよく現していると思う。

時代的にはベンサムのほうが古い。ベンサムの功利主義は、最大多数の最大幸福とも呼ばれる。幸福最大原理である。ベンサムは、よりよい社会のためには、「効用」を最大化せよと説いた。効用とは、社会のすべての快楽を合計し、それから社会のすべての苦痛を引き算することで得られる。

ベンサムの視点でコンピューティングの世界を見てみよう。効用の定義は単純だ。効用とは「速さ」だ。すべての処理時間を合計し、それが最も短くなるようにすればよい。

コンピューティングにおける功利主義的技術の例として、キャッシュメモリがある。キャッシュメモリを使用すれば、全体の処理時間を短縮できる。しかし、個々のメモリアクセスに注目するならば、キャッシュミスが発生した場合、そのメモリアクセスの処理時間はわずかに延びる。すなわち、まずキャッシュを見にいき、そこに目的とするデータが無いならば、キャッシュを無効にし、さらにメインメモリを見にいく。この一連の処理の後、レジスタにデータがロードされる。しかし、全体としては、効用(速さ)は最大化(最小化)される。

さて、功利主義への批判は2つある。第1に、少数の意見が無視されることだ。第2に、そもそも論として、快楽や苦痛など人それぞれなのだから、それを「効用」なるある種のスカラー量に押しこむことができるのかということだ。

カントは、「人は皆尊敬されなければならない」とした。少数の意見を無視したり、人によってバラバラの価値観をひとつの尺度に押しこむことは、人々を尊敬しないことだとした。

カントの考えは難しい。尊敬とは何か? 尊敬を「デッドラインの尊守」と考えるならば、カント主義はリアルタイム・コンピューティングと似ているような気がする。少数の処理であれ、デッドラインは尊守されなければならない。プロセッサのパワーに対してタイトなデッドラインを設定する処理もあれば、余裕のあるデッドラインを設定する処理もある。いずれにせよ、デッドラインは尊守せねばならない。

再びキャッシュメモリについて考える。リアルタイム・コンピューティングにおいては、キャッシュミスによってキャッシュメモリの恩恵を受けられない処理があることは、それ自体では問題としない。問題は、キャッシュミスの予測が非常に難しいため、キャッシュミスを考慮した設計ができないことだ。予期せぬキャッシュミスは、予期せぬデッドラインミスを招くかも知れない。カントの目には、キャッシュメモリは非常にリスキーだ。

ベンサムもカントも理論家だ。しかし、多くの政治家は実務家である。現実の社会では、功利主義もカント主義も、どちらが優れているとは一概には言えない。実務家である政治家は、これらをうまく組み合わせ、最適のところでバランスするのである。

我々プログラマも実務家である。リアルタイム・コンピューティングをやっているからといって、例えばキャッシュメモリを排除してしまうのは惜しい。タイトなデッドラインに処理を押しこむのはそれ自体一苦労だし、上にも述べたように、たまのデッドラインミスであれば許容されることが多いという現実もある。

リアルタイム・コンピューティングの実務家としては、功利主義的技術とカント主義的技術をうまく組み合わせ、システムの仕様を睨みながら、最適のところでバランスするのである。