脳型コンピュータ
(アーキテクチャ編)


脳の中にもオペレーティングシステム(OS)は存在しているはずですが、それはノイマン型のコンピュータのOSとは大分違った構成になっています。世界初の電子計算機と言われるENIACは1946年に発明され、数学者のジョン・フォン・ノイマンらによって記録装置にデータと命令の両方を記録し、演算器がそれらを読み出して処理した後、再びデータ領域に書き込むというプログラム内蔵方式(ノイマン型)が確立されました。その後真空管トランジスタから電気スイッチによるリレー式、磁気メモリ、半導体メモリや中央演算装置(CPU)の大規模集積化が進み、今日のコンピュータは電力性能比で2兆倍以上の性能向上を果たしましたが、それでもなお、このプログラム内蔵方式だけはENIACの時代から変わる事なく受け継がれています。現在主流のノイマン型の計算機ではCPUとメモリの間でデータや命令をやり取りし、メモリの中にはOSやアプリケーションがインストールされています。つまり計算を行う部分とデータやプログラムを記録しているユニットは別々で互いにバス配線を介して通信しています。そのため当然CPUやメモリの読み書きの速度が上がるとCPUメモリ間の通信が全体の処理速度の律速(ボトルネック)になってしまいます。

こうしたCPUメモリ間の通信速度の問題を回避し、処理性能を上げるアプローチとして専用ハードウェアによるアルゴリズムの高速化があります。CPUは汎用計算機なのでプログラミング言語がサポートする範囲ではどんなアルゴリズムでも実装する事が出来ますが、命令やデータをいちいちメモリから読み込む必要があるため、メモリへのアクセス頻度に比例して処理時間がどんどん延びていきます。これに対して特定の処理やアルゴリズムに特化したハードウェア(Application Specific Integreted Circuit:ASICと呼ばれます)では、プログラムが行う事を電子回路で組んだロジックによって処理していくのでデータの読み出しが少なくて済み、回路の内部的にもCPUのように何度も演算を繰り返す事なく、回路モジュールに値を入れるだけで結果が出るような単純な構成にする事が出来ます。例えて言うならば、人間の手が料理や大工仕事、スポーツ等の様々なタスクをこなせる汎用的なCPUであるとするならば、銀行にあるお札を数える機械は専用ASICという事が出来ます。人間でも訓練すればかなり速くお札の枚数を数える事が出来ますが、紙幣カウンタの速度には到底かないません。しかし紙幣カウンタを使ってお寿司を握る事は出来ません。CPUとASICにも同じような関係性があります。汎用性と処理速度は二律背反である事が多いです。専用ASICの例としてはインターネットに繋ぐ時に必要なイーサネットボードの上に載っている通信プロトコルをハンドリングするチップや、テレビの中に入っている画像処理エンジン、携帯電話の中に入っている音声信号を高速フーリエ変換する専用チップ等がそれに当たります。

CPUが究極にまで汎用性を高めた方向にあり、ASICが特定のタスクに特化した方向性を向いているとすれば、その中間的な立ち位置にあるのがField Programmable Gate Array(FPGA)です。ASICは半導体プロセスによってシリコンウェハ上に電子回路を作製するため一度製造してしまうと作り直しがききません。一方のFPGAはASICとメモリデバイスの合いの子のようなもので、メモリにデータを記憶するように回路パターンを記憶させる事が出来ます。実際には最も単純な論理ブロックが碁盤目のように沢山並んだ構造をしており、個々の論理ブロックの繋ぎ方を変える事でほぼ無限ともいえるパターンの電子回路をFPGA内部に形成させる事が出来ます。データを保存するように回路パターンを書いたり消したり出来るので、同じチップの上でASICのような専用ハードウェアを何種類も作り直す事が出来ます。

勘が鋭い人はここで気付いたかも知れませんが、似たようなモジュールを繋ぎ合せてある機能を実現する、あるいはモジュールの繋ぎ方によって特定の機能が発現するようになる、この特徴はニューロンとシナプスの関係性そのものです。脳型コンピュータの節でも述べましたが、SSDの容量は脳のシナプスの数を既に超えています。またFPGAの論理セルの数は16nm世代のチップで大脳皮質の面積相当では10億個程度に達しています(2015年2月)。ですので論理セルの大きさが現在の3分の1程度まで小さくなれば、人間の脳と同じ程度の大きさに同じ数のニューロンとシナプスを詰め込めることになります。IBMではAND回路のみでニューロンの動作を行う簡素化した論理セルを検証しており、この方法が上手く行けば現在のFPGAやSSDの構成で人間の脳に匹敵する十分なニューロン数とシナプス数が稼げる事になります。

実際の脳はニューロンを繋ぎ合わせた神経回路が情報処理を行っており、計算素子を繋ぐ事でプログラムを実装している事からワイヤードロジックと呼ばれます。FPGAやASICもワイヤードロジックに分類されます。一方のプログラム内蔵方式ではハードウェアモジュールが実現しているような処理機能をCPUの演算装置を使って力任せに計算で解いていくので、CPU内部で何億回と繰り返されるループ処理的にも、その度に発生するCPUメモリ間の通信でも時間と電力をロスしてしまいます。ですのでヒトのコネクトームを計算機に移植する際には、メモリのデータ領域にシナプスの結合情報が保存されるのではなく、FPGA内部で作る回路のようなワイヤードロジックとして実装される事になると予想されます。その方が計算コストがはるかに低くて済むからです。

通常のPCやサーバーマシン、スマートフォンでもそうですが、世の中のあらゆるコンピュータはプログラム内蔵方式なので、電源を投入すると起動時のみに実行されるブートプログラムがCPUから呼び出され、このブートプログラムがWindowsやLinux, MacOS, AndroidといったOSをメモリ領域からCPUに転送してCPUがOSが起動する事になります。OSは予めメモリの特定の領域に保存されていて、マシンが起動する度ににブートプログラムから呼び出されるという仕組みになっています。

一方で人間の脳は電源が落ちるという事はありません。ご存知の通り一度電源が落ちてしまうと脳死になって二度と復帰出来なくなるからです。脳が寝ている間も起きている間も、ニューロンは常に神経パルスを出せる状態に保たれています。回路が何の仕事をしていなくても電源は入っている状態です。そして睡眠時には睡眠時のプログラムが走り、覚醒時には覚醒時のプログラムが走っているので、常に何らかの神経回路が活性化されプログラムが走っている状態です。これらのプログラムはニューロンによるワイヤードロジックで構成されています。これが脳のOSと言えるようなものです。通常のPCではCPUとメモリが分かれているので、OSをコンパイルすると最終的にはCPUに対する命令(機械語)に変換されます。しかしもし脳機能をOSのようにコンパイルするとそれは最終的には回路の配線図であるコネクトームに落とし込まれます。そこにプログラム内蔵型とハードウェア駆動型の計算機アーキテクチャの根本的な違いがあります。