2016年1月、インテル社の最新Core iシリーズ(Skylakeと呼ばれる第6世代Intel Core iプロセッサ)に不具合があることが発表されました[1]。
この不具合は、マザーボードの製造・販売企業から配布されている修正プログラムを適用することで解決できます。
この不具合は、非常に限定的な状況下でメルセンヌ素数※1を探索するプログラムを実行した時にシステムをフリーズさせてしまうそうです。
一般的な利用において,この不具合に遭遇することはほとんどありませんが、科学技術演算などの複雑な計算を行うときに影響を与える可能性があると言われています。
開発段階でテストを十二分に行ったのにも関わらず、このような不具合が出てしまうのはなぜでしょうか?
この原因の1つとして、CPUの複雑化が挙げられます。
前回お伝えしたプロセスルールの成長によって様々な機能が実現できるようになりました。
これにより、CPUは進化してきました。しかし、これと同時に、CPUの内部構造はどんどん複雑になりました。
この結果、テスト項目の見落としが発生してしまったのです。
今回からは、CPUの内部構造(高性能化技術)の進化についてお伝えしようと思います。
この進化には多くの歴史があり、とても興味深く面白い話題が沢山あります。
また、多少の専門知識も必要となるため、複数回に渡ってじっくりとお話させていただきます。
今回は、世界初のコンピュータとCPUについてです。
早速ですが、1つだけ知っておいてもらいたいことがあります。
それは、図1のようなCPU内の基本的な処理フローです。
まず、(1)処理する入力データをメモリから読み込み、その後、(2)CPUで実行する命令(加算命令や乗算命令など)をメモリから読み込みます。
そして、(3)入力データに対して命令を実行し、(4)その結果をメモリへ書き出します。
現在のCPUは高機能であるため、メモリとCPUの間にキャッシュ※2が存在しますが、便宜上、図1では省略しています。

図1.CPUの基本的な処理フロー
世界初のコンピュータをいわれるENIAC(1946年)の計算には、現在のような半導体のCPUではなく、真空管が用いられていました。
ENIACはパンチカードで入力データの読み込みと結果の書き込みを行っていました。
そして、処理するための命令は、図2のような巨大な計算機間の配線で実現します。
当時は、配線すること=プログラミングだったのです。
このプログラミングの担当は6人の女性でした。
後に、彼女らはこの貢献が認められてWomen in Technology International[2]の殿堂入りを果たしています。
中には、世界初のプログラマとして世界的に名誉ある賞を受賞された方もいます。

図2.ENIAC(https://ja.wikipedia.org/wiki/ENIAC)
では、真空管ではなく、現在のような半導体で製造された最初のCPUはどのようなものでしょう?
世界初の商用CPUは、1971年に発表されたインテル社のIntel 4004です。
このCPUの開発には嶋正利さんという日本人が関わっており、その開発に大きく貢献しました。
図3はIntel 4004とその内部の顕微鏡写真です。
プロセスルールは10μm、動作周波数は750kHzでした。

図3.Intel 4004[3]とその内部の顕微鏡写真[4]
図4はIntel 4004の概要図です。
演算ユニット(Arithmetic Logic Unit)、メモリに読み書きするデータを一時的に保持するバッファ(Data Bus Buffer)や全体を制御する機構(Timing And Control)などで構成されています。
この構成がその後のCPUのベースとなり、高性能化するために各機構の改良や新しい機構の追加が行われました。

図4.Intel 4004の概要図[5]
図5はIntel 4004の処理フローを示しています。
処理フローは図1と同じですが、図3ではメモリが2つあります(データメモリと命令メモリ)。
データメモリには入力データと計算結果、命令メモリには計算するための命令が保存されます。

図4.Intel 4004の処理フロー
入力データはユーザによって指定されるため可変なものです。
結果も入力データに応じて可変です。
一方、計算するための命令は、異なる計算をしない限りは不変なものです(図5)。
現在では1つのCPUで様々な処理を同時に実行できますが、当時はそのようなことはできず、異なる計算を行うには命令メモリを物理的に取り替える必要がありました。

図5.計算プログラムの処理
ちなみに、Intel 4004のように命令とデータが別経路で読み書きする構成をハーバード・アーキテクチャ方式と呼びます。
現在のCPUでもハーバード・アーキテクチャ方式が採用されています。
しかし、Intel 4004のように2種類のメモリではなく、2種類のキャッシュ(データキャッシュと命令キャッシュ)に置き換わっています。
今回は世界初のCPUについてお伝えしました。
次回は、Intel 4004発表後のCPUがどのように進化していったのかをお伝えしようと思います。
※1 メルセンヌ素数とは2の冪乗より1小さい自然数。
※2 キャッシュとはメモリにあるデータや命令を一時的に保持するため記憶領域。
[1] Intel Corporation, https://communities.intel.com/thread/96157?start=15&tstart=0.
[2] Women in Technology International, http://www.witi.com.
[3] Intel Corporation, http://www.intel.co.jp/content/www/jp/ja/innovation/hof.html.
[4] Intel Corporation, “MCS-4 Manual”, http:// www.intel.com/Assets/PDF/Manual/msc4.pdf.
[5] Intel Corporation, “Intel 4004 Datasheet”, http:// www.intel.com/Assets/PDF/DataSheet/4004_datasheet.pdf.