コンピューターの構成(アーキテクチャ)について
今回のテーマは「コンピューターの構成(アーキテクチャ)について」です。IT製品で最もポピュラーなのは「コンピューター」でしょう。現在、世界で20億台以上使われているスマートフォンも、コンピューターの一種であると言えます。そこで今回はこの「コンピューター」の中身についての理解を深めることとし、その構成(「アーキテクチャ」とも呼ばれています。)を中心に、その歴史や内容、問題点などについてご説明したいと思います。
「ディジタル化」を行う理論の原型はクロード・シャノンによって作られ、その「情報」を扱う「コンピューター」の原型はフォン・ノイマンによって作られました。フォン・ノイマンはハンガリー出身の数学者ですが、30歳代にアメリカ合衆国へ渡り、以降アメリカで研究活動を行いました。そして、このノイマンが考案したコンピューターの基本的な構成(これを「ノイマン型アーキテクチャ」と呼びます)を使ったコンピューターを「ノイマン型コンピューター」と呼び、現代のコンピューターアーキテクチャの主流となっています。
「ノイマン型コンピューター」が現れる前にも、いろいろな「コンピューター」が開発されていました。本ブログ「その7「広義の情報技術」と「狭義の情報技術」でご紹介した「機械式計算機」もその一つです。当初の「機械式計算機」では、歯車やリレーなどの機械的動作を用いて演算を行っていましたが、1930年代に入るとその動作を「三極真空管」で行う「電子計算機」が開発されました。そして、世界初の「汎用電子計算機」はペンシルバニア大学で開発され、1946年に完成した「ENIAC」であるとされています【図1】。「ENIAC」の主な開発目的は、弾道計算用の数表作成という軍事目的でした。この「コンピューター」は重量が30t、床面積200㎡、使用した真空管の本数は18,000本にもおよび、消費電力は140kwでした。
図1:世界初の汎用電子計算機「ENIAC」
デンマーク工科大学 ホームページより
(http://www.imm.dtu.dk/~stassen/Edu/49260/Historie/Microprocessor.html)
ちなみに、現在日本で一番高速に計算を行えるスーパーコンピューター「京」は、最大重量が1台あたり1.5tにもなる計算機筐体(ラック)が864台もあり、総重量は、最大約1,300tにもなります【図2】。計算機の置かれる床面積は、50m×60m=3,000㎡、消費電力は最大12.7MWと膨大です。日本の一世帯あたりでの電力消費量で換算すると、なんと約3万7千軒分の電力消費量に相当します。
図2:スーパーコンピューター「京」
独立行政法人 理化学研究所 計算科学研究センター ホームページより
(https://www.r-ccs.riken.jp/jp/k/)
スーパーコンピューター「京」の方がサイズは一回り大きいですが、当時としては「ENIAC」はまさにスーパーコンピューターでした。しかし、その方式は、10進演算を採用し、演算手順を変更するためには(現在のプログラミングに相当する)、スイッチの設定や、ケーブルのつなぎ変えを多くの人が手動で行わなければならなりませんでした【図1】。つまり、この時点の「コンピューター」は、「プログラム」と「ハードウェア」が混然一体となっており、「プログラム」を変更しようと思うならば、「ハードウェア」を変更しなければならなかったのです。「ENIAC」の出現により、その演算速度は速くなりましたが、演算手順の変更に手間がかかりすぎることが問題となりました。ノイマンはこの「ENIAC」プロジェクトのコンサルタントをしており、この問題について早くから知ることとなり、その解決策を検討したのです。そして、その結果は「EDVAC」という新しい「コンピューター」の開発プロジェクトの検討の中で、新たな「アーキテクチャ」として提案されました。その解決方法は、演算手順(「プログラム」)をデータとともに記憶装置(メモリ)に記憶させ、データと同じように演算手順(「プログラム」)も自由に変更ができるようにすることでした。この方式は、「ストアドプログラム(stored
program)方式」と呼ばれ、「プログラム」つまり「ソフトウェア」と「ハードウェア」を分離させるものでした。「ストアドプログラム方式」を採用した世界初の「コンピューター」は、1949年にイギリスのケンブリッジ大学で開発された「EDSAC」とされています。1952年には、IBM(International
Business Machines Corporation)が企業として初の商用計算機「IBM701」を発表しました。そして、その後「コンピューター」は、ほとんどがこの「ストアドプログラム方式」を採用するようになったのです。
次に、「ノイマン型コンピューター」の構成についてご説明します。「ノイマン型コンピューター」は、5つの構成要素(コンポーネント)で構成されています。その5つとは、「演算装置」、「制御装置」、「記憶装置」、「入力装置」、「出力装置」です【図3】。
図3:ノイマン型コンピューターの構成要素
これらは「情報」や「コンピューターサイエンス」を学ぶ時には、すべての学生が「コンピューター」の基本構成として教わる基本的なものです。この図には出ていませんが、よく知られたコンピューター用語に中央処理装置(CPU:Central
Processing Unit)があります。このCPUは一般的には、「ノイマン型コンピューター」の5つの構成要素のうちの「演算装置」と「制御装置」を合わせたものです。「演算装置」は四則演算や論理演算などのさまざまな演算を行います。「制御装置」は実行内容を指示します。「記憶装置」のこの場所のデータとツが鵜場所のデータを加算せよなどの「命令」を読み込んで「演算装置」に実行させたり、「記憶装置」に記憶されたデータを読み込んだりして「コンピューター」の動作やデータの流れを制御します。演算手順(「プログラム」)は「命令」を組み合わせて作られています。「記憶装置」は、演算を行うためのデータや「命令」を記憶させておくものですが、「記憶装置」にDRAM(Dynamic
Random Access Memory)などの揮発性のメモリ(電源をオフにすると、記憶内容が消えてしまうメモリ)を使うようになってからは、揮発性のメモリを使った主記憶装置(メインメモリ)と不揮発性を持った補助記憶装置(ハードディスクドライブ(HDD)など)に分けるようになりました。「入力装置」はデータを「記憶装置」へ入力するものであり、「出力装置」はデータを「記憶装置」から出力するものです。これらの5つの構成要素は、それぞれデータや「命令」をやり取りできるように信号線で結ばれています。
CPUは一般的には、「演算装置」と「制御装置」を合わせたものであるという説明をしましたが、最近では、Soc(System-on-a-Chip)と呼ばれ、5つの構成要素である「演算装置」、「制御装置」、「記憶装置」、「入力装置」、「出力装置」の機能のほとんどを一つにまとめて載せたチップがパーソナル・コンピューターやスマートフォン使われるようになりました。これによって、これらの構成要素のデバイスを別々に基板に載せる必要がなくなり、部品数を少なくすることが可能となりました。その結果、現在のスマートフォンのように、小さく、軽い製品が作れるようになったのです。
次に、「ノイマン型アーキテクチャ」の大きな特徴である、「ハードウェア」と「ソフトウェア」についてご説明します。
ノイマンが提案した「ストアドプログラム方式」がもたらした最も大きな功績は、「コンピューター」の「ソフトウェア(プログラム)」と「ハードウェア」を分離したことだと思われます。分離したことで、同じ一つの「ハードウェア」でも、それぞれ違う「ソフトウェア(プログラム)」を入れれば、処理手順が変わり、全く別のことを行えるようになりました。昔の「機械式計算機」が、一度購入したらあらかじめ決められた演算しかできなかったのに対し、一度購入した「コンピューター」の「ハードウェア」は、それに新たな「ソフトウェア」を入れ直すことにより、別の用途に使うことができるようになったのです。
さらに、コンピューターの演算対象となるデータも、クロード・シャノンらの功績により、すべての「アナログ情報」を扱えるようになりました。この二つのことにより、当初「計算機」として考案された「コンピューター」は、1台の「ハードウェア」で、その用途を「科学計算」だけではなく、時には音楽を聴くための「音楽プレーヤー」に、時には映像を楽しむ「動画プレーヤー」に変身できるようになったのです。このようにして、計算を専用に行う当初の「コンピューター」は、あらゆる情報をマルチに楽しめる「情報メディア機器(IT機器)」へと変わっていったのです。現代において「スマートフォン」を「コンピューター」と呼ぶ人はいないでしょう。しかし、その中身は、間違いなく「ノイマン型コンピューター」なのです。
そして、「ハードウェア」と「ソフトウェア」の分離は、それぞれに独立の研究・開発対象となり、ビジネスにおいても分離されるようになりました。商用汎用コンピューター(ホストコンピューター)で先頭を走ってきたIBMも、1969年に「ハードウェア」と「ソフトウェア」を分離(アンバンドリング)を発表しました。こうして「ソフトウェア(プログラム)」の位置づけは、当初の「ハードウェア」の付属品の位置づけから独自の価値を持つ、独立した技術・商品へと高まっていきました。このことは、「ソフトウェア」の開発を促進・加速することになり、ビジネスの重心も次第に「ハードウェア」から「ソフトウェア」へと移っていきました。IBMも近年ではハードウェアの売り上げ比率を下げ続けています。一方、「ソフトウェア」の進化はとどまる所を知らず、「人間の脳」の一部を代替する(人工知能と呼ばれるソフトウエァ)ようにまでなってきたのです。現在、米国株式市場のトップ5の常連であり、ITのビッグ5とも呼ばれるアップル、アルファベット(グーグル)、マイクロソフト、アマゾン・ドット・コム、フェイスブックの5社のうち、「ハードウェア」ビジネスの比率が高いのは、iPhoneを販売するアップルのみです。
現在、広く使われるようになった「ノイマン型コンピューター」ですが、実は欠点や問題点もあります。その一つとされるのが、「フォンノイマンボトルネック(Von
Neumann bottleneck)」と呼ばれる「バスのボトルネック」です。
「ノイマン型コンピューター」の動作を整理してみると【図3】、「命令」を組み合わせて作られてた演算手順(「プログラム」)をデータとともに「記憶装置(メモリ)」に記憶させ、その「命令」を「記憶装置(メモリ)」から読み出し、その命令内容によっては、演算対象の「データ」を「記憶装置(メモリ)」から読み出し、「演算装置」で四則演算や論理演算などのさまざまな演算を行い、その結果を「記憶装置(メモリ)」に記憶させる、という流れを「命令」の順番にしたがい、逐次処理していきます。この動作の中で、一つの「命令」を実行するためには、「命令」の読み出しと「データ」の読み出し、そしてその結果の「記憶装置(メモリ)」への書き込みと、ほとんどの「命令」で3回のメモリアクセスを必要とします。「命令」の内容によっては、「データ」の読み出しなどがさらに増え、3回以上となる「命令」もあります。このように、「ノイマン型コンピューター」では、「演算装置」と「記憶装置(メモリ)」間のデータ転送が頻繁に行われることになり、しかも、この転送は逐次的であり転送路の幅は狭く、ここ(「バス」)がボトルネックとなってしまうのです。
もちろん、このボトルネックを解消するためのいろいろな対策がされてきました。ひとつは「バス」の性能を高速にすることです。「バス」は信号線ですから、信号線の本数を増やして、並列(パラレル)に送信すれば性能は上がります。また、信号そのものの転送スピードを上げたり、「データ」を受ける側である「記憶装置(メモリ)」の読み出しや書き込み性能を上げるキャッシュメモリなどの対策もされました。当然、演算処理をするCPUの性能も上げてきました。また、CPUの数を増やす(マルチコア)などの対策も取られるようになりました。しかし、こうした素子(デバイス)側の性能向上は、いつか限界が来ると予測されています。
したがって、「ノイマン型コンピューター」の素子による性能向上の限界を越えた超高速性能を実現するためには、ノイマン型の逐次処理ではなく、別の方式(並列処理)に頼らざるを得ません。ひとつの解決方法と言われる「データフローマシン」は、データの流れに従って処理が行われ、必要なデータが揃ったところで命令が実行されるというアーキテクチャに基づいており、並列性を発揮できるアーキテクチャとして期待されています。このように「ノイマン型コンピューター」とは異なるアーキテクチャをもったコンピューターを「非ノイマン型コンピューター」と呼んでいます。「非ノイマン型コンピューター」は「データフローマシン」以外にも多く研究されており、新たな技術革新を生むブレイクスルーとして期待されています。最近では、「量子コンピューター」と呼ばれる、これまでと全く異なる量子力学的な現象を用いて実現するコンピューターなどが注目されています。
そうは言っても、現時点では地球上で生活する人類の総人口の何倍にもなる、何百億個という膨大な数の「ノイマン型アーキテクチャ」に従った「情報機器」が毎年生産され、世界中に拡散しています。今のところ、この流れを止める新たなコンピューターアーキテクチャはまだ生まれていないのです。ITテクノロジーは、日進月歩で発展・変化を続けています。しかし、この「ノイマン型アーキテクチャ」は、誕生した1950年ごろからずっと変わらず使われ続けています。