当たり前の話なのですが、意外と盲点なので。。
16bitは、10進数では 6.5E+4
32bitは、10進数では 4.3E+9
64bitは、10進数では 1.8E+19
です。
1年は、3.15E+7 秒なので、32bitのカウンタ(2進32bitのそろばんと考えてください) だと1秒に1度更新して、132年持ちます。
まあでかい数ではありますが、unixは1900年を起点として32bitの秒数でタイムスタンプを打っているので、http://ja.wikipedia.org/wiki/Network_Time_Protocol#2036.E5.B9.B4.E5.95.8F.E9.A1.8C
にあるように、2036年に桁あふれして2036年問題がおきます。
(うるう年とかがあり簡単な計算とは若干ずれていますが。)
ところが、64bitにすると記憶容量を倍にしただけなのに、1ナノ(10億分の1、ナノはG分の1) 秒に1回更新してもカウンタは585年持ちます。光の速度は秒速30万km=0.3M km=0.3Gmなので、1ナノ秒は、光すら0.3m=30cmしか進めない、とんでもない短い時間です。たかが記憶容量が倍になっただけなのに、1秒の更新を1ナノ秒にしても、132年が585年に伸びるのです。これが、2の指数で効いている状態数の効果です。素子数をNとすると、これをO(2^N)と書きます。
ただし、同じ玉を詰め込む量として考えると、2倍の記憶容量は2倍入るだけにしかなりません。入れるひとつひとつの玉の大きさ(状態数) を大きくしたとき、別な言い方をすれば、入れる玉の質を向上させたときに意味が変わってくるのです。
一方、プロセッサの計算速度は、2002年頃に発熱問題のため動作周波数に上限が来ましたそれまでは10年に100倍の速度で高速化してきました。下に示します。
それ以降はこの問題があるため、動作周波数は少しずつしか上がりません。命令レベル並列(スーパスカラーなど) という方法ももはや限界。すると、並列処理という、沢山のプロセッサを並べて、いっせのせでやる加速しかできません。となると、せいぜい素子数に比例してしか性能は向上しません。並列にやる無駄があるので、素子数分の加速を得ることすら難しいのです。これをO(N)と書きます。
つまり、速度は高々素子数に比例でしか増えられないのに、状態数は指数で爆発的に増えていくのです。
スマホのフラッシュメモリに持っている全部のCDが入って、さらに映画まで入るのも、ディジカメに1万枚近い写真が入るのも、容量が増えたのを活用して、状態数の多い高品位なデータが収まるようになったおかげだと思います。
速度に注目がいきがちですが、半導体技術の進歩の恩恵を受けているのは、爆発的な状態数の増加なのです。
記憶量の増大を活用した、爆発的な状態数の増大を活用して、計算量を手抜く方法が、これからの主流になると思います。
記憶量の2倍と、速度の2倍は、美味く使えば意味が変わってくるのです。
ハードウェアとソフトウェアの違い)
ハードウェアは、並列に動くのに、様々な検証環境が用意されています。これは、ハードウェアの状態数が高々数10万フリップフロップだからだと思います。ゲート数は数千万もありますが、状態を保持するフリップフロップはそんなには、沢山ないと思います。また、複雑な状態変化は、ステートマシンとか、メモリを利用して、ソフトウェアと同じように逐次記述にして書くか、パイプライン記述にしてこれも逐次的な考え方に変換しています。
そもそも並列に大規模なものを並列に記述するのは、考え方(論理思考)が逐次的な、人間には難しいのだと思います。ただし、絵の認識とかは、人間も並列にできているので、訓練次第ではできるのかもしれません。
1980年台の第5世代コンピュータプロジェクトでは、Prologという言語を用い制約指向で並列性を活用して、知識処理を書こうとしたのですが、Cutとか結局逐次的なものを導入してしまったように思います。ま、これに懲りないで、いろいろトライしてほしいのですが。
知性とは)
私は知識処理の専門家ではありません。が、どうして、動物には知性がなくて、人間だけきわめて高度な知性があるのでしょうか。これも、上記の状態量の爆発によるのではないのでしょうか。つまり脳の神経の量が2倍になると、うまくつかえば指数的に能力が増やせるのではと思うのです。
良く100倍速いコンピュータができれば知性が。。といいますが、だったら100倍長い時間待てば、知性が感じられるはずです。人間が1秒で答えられるなら、100秒待てば今のコンピュータでもできるはずです。どうして出来ないのでしょうか。
私は、先の状態数が関係していると思います。100倍の記憶量をもつコンピュータは、2の100乗の状態数を持ち得ます。2の100乗とは、log(2^100)=100log2=30.10 すなわち、10の30乗、1の下に0が30個もつく状態数になります。つまり100倍とは行かないまでも、容量が増えることは、かなりの質的な変化を伴うし、これは、とても今のコンピュータでは実現できないことになります。
状態数が増えるとそれなりの計算速度も必要になります。脳は神経細胞が並列に処理するので、計算速度もそれなりに増えるのですが、O(N)のオーダですので、状態数に比べるとわずかなものになってしまいます。状態数に見合った計算性能を実現するのが課題だと思います。
爆発的な状態数の増加を利用した計算の手抜き、すなわち計算アルゴリズムの改善に期待しています。非常に大きな数が使えるので、手抜きをして、計算時間を減らすなどでしょう。例えば、非常に大きな数が入るカウンタ(そろばん)があるので、比較処理を手抜きをするとか、数値の表現を工夫するとか、いろいろ工夫のしがいは、あると思います。
将棋のボナンザというプログラムが興味深いです)
http://ja.wikipedia.org/wiki/Bonanza
膨大な棋譜を学習し、独自のボナンザ囲い ( http://ja.wikipedia.org/wiki/%E7%9F%A2%E5%80%89%E5%9B%B2%E3%81%84 ) というものを編み出しています。一つ前のwikiには、以下のようにあります。
理由は不明だが「ボナンザ囲い」と呼ばれる、他に例を見ない「片矢倉」の変形版を多用する。渡辺竜王によれば、一見すると素人臭い筋悪な形のようでいて、実際に攻略するとなると厄介であるという。プログラムするのではなく、学習アルゴリズムを工夫して、コンピュータの高速性を生かして学習させる。評価関数のパラメータの自動生成は、これは保木の本業である化学反応の制御理論を応用したものであるとのこと。
後注) 実際、これを改良した、ボンクラーズが、去る2012年1月14日の第一回電王戦(日本将棋連盟、 ドワンゴ、中央公論新社主催)で、コンピュータ将棋 ボンクラーズが、元名人で日本将棋連盟会長の米長邦雄永世棋聖に平手で対戦した。7時間におよぶ激戦の上、コンピュータが勝った。
2012年2月11日土曜日: コンピュータが知性を持つのは近いか..
に解説したので、是非ご覧頂きたい。
知性がそこまで来ている予感がしませんか。。