コンピュータの元となるICとかLSIのトランジスタの集積密度は、18〜24ヶ月で倍になるというムーアの法則というものがある。トランジスタの数の話なので、普通に考えるとメモリ容量が倍になる速度なのだが、これをコンピュータ処理能力の倍増期間と読み替えてもよいらしい。まあ実際には、集積率と共にクロック数も効いてくるだろうから単純ではなさそうだ。
元々のムーアの法則は、集積回路のみの話だったのだが、カーツワイルがそれ以前のトランジスタや真空管、リレー式のコンピュータまで巻き込んで、技術的な進歩は指数関数的な成長をするという、ムーアの法則の一般化を行っている。ある技術の限界が近くなるとパラダイムシフトが起きて、その限界を超える別の技術が登場して指数関数的な成長は持続するそうだ。
まあ、この論に対しては、データの扱いが恣意的だとか色々と言われているようであるが、中々面白い論である。
個人の体験を考えても、機器の情報処理能力の指数関数的増加というのは理解出来る。昔、シャープのポケコンでBASICを組んでいた時は、(今では考えられない遅さだが)そばにラジオがあると、サブルーチンのループ回数がラジオのノイズで分かったりした。ライフゲームを作って100世代までやるのに3日位かかった記憶のまま10年ぶりにやってみたらsubmitした途端に終わっていて、「あれ?どこか間違えたかなぁ」とエラーで落ちたと勘違いした事もある。そういえば、初期のパソコン通信は300bpsだったので、受信しながら書かれている文章が充分読めたものである。人間の成長は倍々にはならないが、技術は倍々になるので、そのうちついていけない!ということになりそうだか、開発ツールの方も指数関数的に便利になるので何とかなるようだ。
と、ここまで考えて、ちょっとした疑問が生じた。上記したシャープのポケコンを弄っていた頃、覆面算の計算をさせようとプログラムを組んだことがある。数日経ってもウンともスンとも言わないので、途中で止めて、どのヘンを計算しているのだろうと、メモリの変数を見たところ、0.1%も済んでいなかったことが判明した。もしもこの調子で計算を進めていたら完了まで10年位かかることが分かり、さずがに計算をあきらめたのだが、恐らく5年後に最新のコンピュータを買って同じ計算をしたとすれば、計算は5年以内で済んだと思われる。
ということは、5年間何もしないで技術の進歩を待ってから計算を始めた方が結論は早く出ることになるわけだ。いや、もしかすると9年待って計算をすれば、10分で終わるかもしれない。いやいや、8年待って1ヶ月で計算が済むのならば、9年待つより早く計算が終わるではないか。
じゃあ、一体、いつ計算を開始すれば、最も早く計算が完了するのか?ということが気になってきた。今回の考察は、この計算開始の最適な時期を考えるのが目的である。
ところで、話は外れるが、ICがLSI(ラージスケールのIC)になり、VLSI(ベリー・ラージスケール)までは知っているが、既にそれから数十年が経っている。集積率は数千倍になっている筈だが、ULSI(ウルトラLSI)とかSLSI(スーパーLSI)とかは聞いた事が無い(正確に言うと単語としては存在するのだが、ニュース等で実際に使用されたのを聞いた事が無いというべきか…)。VLSIの段階で表現するのをあきらめたのだろうか?
計算そのものの発想は単純だ。
ある時を起点とし、その時に利用出来るコンピュータの能力で、処理しなければならない難問を解く時間がA[年]かかるとしよう。ムーアの法則により、k[年]経つとコンピュータの処理能力が2倍になると考えてみる。すなわち、k年後に計算を開始した場合、起点から考えてk+A/2[年]で計算が完了するわけである。この発想を一般化すればいい。
要するに、
ということである。
ここで、T[年]が起点からの時間であり、この時間を最小にする時間tを考えれば良い。すなわち、Tをtで微分した式、
を考え、dT/dt=0の条件を与えてやる。すると、
が出てくる。
後は適当にAやkに数値を入れて見ればいいのだが、(式3)が正の値でなければ意味が無い。逆に言うと、(式3)が0以下ならば、「つべこべ言わんと、さっさと計算を始めんかい!」ということになる。
この条件とは、
ということになる。k=2[年]という事にすれば、2.89年以下の計算時間のものは、今すぐ計算を開始すべしということだ。
では、k=2[年]を固定して、A[年]を色々と変えた場合に、いつ計算を開始すればよいのかをグラフにすると…
となる。例えば10年かかる計算は、3.6年後に出るであろうコンピュータに計算させるべしということが分かる。それまでは、茶でもすすって待っていようか…。
実際には、茶をすする時間など無く、如何に今あるコンピュータで以て計算させるかを追求することになる。並列化の効率を最大限に高めたり、新しいアルゴリズムを考えたり、計算時間が特にかかる部分は何らかの簡略化(パラメタリゼーション)を行ったり…。
ところが、これら高速化のための技というのは、得てして汚いコードになるので、後でソースを読む人が大変になる。
でもって、後でソースを読む人というのは、当然ながら前のコンピュータの性能を遥かに超えるコンピュータで仕事をしていたりするので、高速化など考えずともスイスイと動く環境になっていたりして「何でこんな汚いコードを書くのか理解出来ん。ワハハ」と笑ったりして…。先人プログラマの心、今時のプログラマ知らずという、ちょっぴり悲しい状況も…。
技術の指数関数的な成長がコンピュータに限ったことでないならば、このような待ってた方が結果として早かったという状況はあり得る話である。
例えば話は全然変わるが、NASAの惑星探査機ボイジャーは1977年に打ち上げられており、現在は太陽圏の端付近(160億km彼方)に到達している。そして、ボイジャーには異星人へのメッセージが込められたレコードが載っているのだが、他の恒星の近傍を最初に通過するまでの間に4万年!もかかる。
恐らく、このボイジャーのメッセージを拾うのは、未来の人類であろう。要するに、4万年も時間があれば(人類が滅亡していない限り)ボイジャーより先に、他の恒星系へ人類は進出している筈である。
こう考えると、他の恒星系へ最初に到達する地球の宇宙船はいつ出発するものか?ということが気になってくる。早く出れば良いというものではないことは、ここまでの話で既に分かっている筈だ。
人類初の恒星間宇宙旅行に旅立った人が、苦難の末目的地に着いてみたら、後発のより性能のいい宇宙船に出迎えられるという可能性は非常に高い。
…と、大風呂敷を広げてみたが、個人的に知りたいのは今手元にあるVHSとLD資産のデジタル化をいつ開始すれば、最も早く終わるかとかだったりするんですけどねぇ。