1プロセッサのCPUのコンピュータの基本的なアーキテクチャを表すブロックダイアグラム。黒い線はデータフローを表し、赤い線は制御フローを表す。矢印はフローの向きを示している。
コンピュータ・アーキテクチャ (英 : computer architecture )は、基本的には、コンピュータ (特にハードウェア )の論理的な構成(法)のことである。構成要素[ 注釈 1] として何があるか、各構成要素がどのような機能・役割を与えられ、相互にどのような連絡をして、全体として機能しているか、に関する記述やとり決めのことである。[ 1] 他の語と組み合わせる場合は通常「方式 」と訳す。
概説
アーキテクチャ は、建築 関連用語で「設計 」や「様式」という意味であったのが転じて、コンピュータ分野で使われるようになった。「設計思想」などと意訳されることもある[ 2] [ 3] [ 4] 。技術者や研究者の用語としては(企業ごとの用語の違いにもよるが)「方式」という語が使われることもある。
1964年のSystem/360 で最初に使われた用語で、その際の意味としては、入出力インタフェース を含むコンピュータシステムのハードウェア全体(周辺機器 は含まない)の、ユーザー(プログラマ 、オペレーティングシステム (OS) を設計するプログラマも含む)から見た構成要素とそのインタフェース の定義であり、具体的には使用できるレジスタ の構成、命令セット 、入出力 (チャネルコントロールワード)などである。各構成要素の実装(つまり各構成要素が具体的にどのような電子部品の組み合わせや集積回路で実現されるか)に関する記述・とりきめは含まない。つまりここでアーキテクチャはソフトウェア 側から見たコンピュータの構成要素とその動作の外形的な定義であるので、アーキテクチャが同一・一定であれば、ソフトウェアの互換性 が原則として保証されることになり、同一のソフトウェアを使い続けつつ上位互換 のアーキテクチャを持つコンピュータへ移行することや、上位互換の周辺機器へ変更することも可能となる。また定義されたアーキテクチャを守り各構成要素の外形的な動作を記述どおりに実現しさえすれば、その内部設計や実装は技術の進歩などに応じて自由に変更・更新できる、ということになった。この結果、コンピュータ・ファミリー(シリーズ)が形成可能となった。
また、エンタープライズアーキテクチャ 、ソフトウェアアーキテクチャ などの用語も増えている。
分類
この分野で評価の高いヘネシーとパターソンの2003年の書では、コンピュータ・アーキテクチャは少なくとも次の3つに分類される、とされた[ 5] 。
命令セットアーキテクチャ (Instruction Set Architecture, ISA)
機械語 またはアセンブリ言語 のプログラマ(OS のプログラマも含む)から見た、CPU (プロセッサ )の抽象化 されたモデル(イメージ)である[ 6] 。ソフトウェア側から見たCPUのインタフェース定義であり、ソフトウェアがCPUに何をさせることができるか、またそれがどのようになされるか、を明らかにするものである[ 6] 。命令セット 、アドレッシングモード 、レジスタ 、アドレスとデータ の形式などが含まれる。
マイクロアーキテクチャ
ISAより下層の、より具体的なシステムに関する記述であり、ISAを実装するためにシステムの構成部品をどのように接続し、それらがどのように相互にやりとりするかを示す[ 7] 。CPUの回路 的な構造[ 8] 、とも言える。マイクロアーキテクチャにはパイプライン の長さやレイアウト、(CPU内の)キャッシュ の数や容量、CPI (1命令あたりのクロックサイクル数) などが含まれる[ 9] 。マイクロアーキテクチャは通常ISAとは何の関係も無く、それより下層に存在し、プログラマからは "見えない存在" だが、CPUの処理速度と密接な関係がある。
システムアーキテクチャ (「システム設計」とも)
上述したもの以外の、コンピュータシステムのハードウェア全般に関するもの。以下のようなものが含まれる。
バス やクロスバースイッチ などのシステムのインターコネクト
メモリコントローラ やメモリ階層
ダイレクト・メモリー・アクセス (DMA)などのCPUオフロード機構
マルチプロセッシング に関わる部分
複数のコンピュータによるシステム構成に関するもの(コンピュータ・クラスター やNUMA アーキテクチャなど)
前者2つはプロセッサ のアーキテクチャである。3番目のシステムアーキテクチャは、プロセッサ以外の要素も含めコンピュータ全体のアーキテクチャである。
なお、もともとのSystem/360の「厳密に定義された」アーキテクチャには、ISAが含まれマイクロアーキテクチャが含まれず、3番目のシステムアーキテクチャのいくつかに相当するものが含まれるという相違点があるが、これは、System/360のようにまだ集積回路すら使わず単体のトランジスタやダイオードや抵抗を基板上で組み合わせて[ 注釈 2] 実装していた当時の大型コンピュータ と現在のマイクロプロセッサ ベースのコンピュータとでは、実装技術が大きく異なり、またビジネスモデル が変化し(周辺機器を含む)コンピュータシステム全体のレイヤの分けかたも変化したことによる。
CPUのアーキテクチャ
CPU のアーキテクチャについて説明する。
フォン・ノイマン型アーキテクチャとハーバード・アーキテクチャ
フォン・ノイマン型アーキテクチャ
フォン・ノイマン型アーキテクチャは(ハーバード・アーキテクチャと対比される場合)、メモリ内の命令とデータは区別しない方式のことで、ひとつのメモリの中に命令とデータが置かれるアーキテクチャ。命令をデータとして扱うこともでき、データを命令として扱うこともできる。動作中に命令を書き換えることもできる。
最初、1944年 にジョン・モークリー とジョン・プレスパー・エッカート がEDVAC のためにつくったアーキテクチャであり、後からチームに合流したフォン・ノイマン がそれを自分の名で報告書にまとめたのでフォン・ノイマンの名で呼ばれている。
なおフォン・ノイマン型アーキテクチャだと、CPUのクロック周波数が高くなり命令フェッチや命令実行が速くなると、CPUとメモリ間のデータの移動の頻度が高くなり、命令とデータで「アクセス競合」が起き、メモリから命令やデータが到着するのを待つ状態が増え、動作が遅くなってしまう「フォン・ノイマン・ボトルネック 」と呼ばれる現象が発生する。
ハーバード・アーキテクチャ
ハーバード・アーキテクチャ
ハーバード・アーキテクチャ (Harvard Architecture)は、命令メモリとデータメモリを分離し別々に置くアーキテクチャ。メモリでの命令とデータのアクセス競合は発生せず、フォン・ノイマン・ボトルネックが解消する。ただしデータを命令として実行することはできず、動作中に命令を書き換えることもできない。1944年にIBM がハーバード大学に納入したHarvard Mark I で最初に採用されたアーキテクチャである。
修正ハーバード・アーキテクチャ(en:Modified Harvard Architecture )
ハーバード・アーキテクチャを一部修正したアーキテクチャで、基本的には命令とデータを別に置いていてボトルネックが解消しており、なおかつ命令用メモリからデータ用メモリへの移動や、データ用メモリから命令用メモリへの移動も可能な方式。ハーバード・アーキテクチャを一部、修正・改良したので「修正ハーバード・アーキテクチャ」という。マイクロコントローラ で主流のアーキテクチャで、基本的には命令用のフラッシュメモリとデータ用のRAMを区別しているが、命令用フラッシュメモリからデータ用のRAMにロードできたり、RAMに置いた命令を取り出しフラッシュメモリに移動し実行することもできる。現在、マイクロコントローラ以外の多くのコンピュータもこの方式を採用している。
アキュムレータ方式と汎用レジスタ方式
CPUのレジスタと演算装置 (ALU)の関係性に関するアーキテクチャとしては、典型的なものとしては、アキュムレータ方式 と汎用レジスタ方式 がある。1970年代や1980年代のCPUや現在のマイクロコントローラ の一部はアキュムレータ方式を採用しているが、これは少数派であり、現在のパーソナルコンピュータ やスマートフォン などのCPUは基本的に汎用レジスタ方式であり、こちらが現在の主流派である。
アキュムレータ方式
アキュムレータ
演算装置で演算した結果を、必ず「アキュムレータ (accumulator、集積装置)」と呼ばれる特別な位置づけのレジスタに送り込む方式。そしてアキュムレータの値は、次の演算でオペランド (被演算子 )として使われる。
1970年代や80年代など、CPUに入れられるトランジスタの数がまだかなり限られていた時代に、CPUを簡素な構造にしてトランジスタ数を減らすために考案された方式。
CPU内部では数を次々と足して総和を求める作業は頻繁に行われているが、アキュムレータ方式だと、オペランドの片方だけを次々と指定しては演算器で加算してゆくだけで総和を求めることができる。たとえばIntel 8080 の「Aレジスタ」はアキュムレータである[ 10] 。
現在では、1970年代や80年代のようにCPUに収容できるトランジスタ数が限られることは無いが、現在でもマイクロコントローラ の一部ではあえてアキュムレータ方式を採用してさらに(上の節で説明した、命令用メモリとデータ用メモリを別に置く)ハーバード・アーキテクチャと組み合わせることで、簡素でコストを抑えていながら高性能のマイクロコントローラを提供しているメーカーもある[ 11] 。
汎用レジスタ方式
(上で説明したアキュムレータという特別な扱いのレジスタは置かず)複数のレジスタの中から2つのレジスタを指定して、その2つの値をオペランドとして演算が可能な方式。汎用レジスタ方式だと、オペランドの組み合わせの自由度が高く、高速演算が可能になる。また、マイクロコントローラのプログラミングの際にはCコンパイラのIDE(統合開発環境)との親和性も高く、たとえばプログラムのローカル変数をマイクロコントローラの複数のレジスタに割り当てることができる。(アキュムレータ方式では割り当てられずRAMなどのメモリに割り当てなければならないのに比べて有利。)[ 11] 現在の技術ではCPUにトランジスタを大量に詰め込むことも容易なので、通常はこの汎用レジスタ方式を採用する。
[ 注釈 3]
コンピュータ全体のアーキテクチャ
プロセッサ だけではなく、コンピュータ システム全体の設計とアーキテクチャについて述べる。
コンピュータの設計をする際は、まず用途や制約条件を考慮し、要素の優先順位を決定する。コンピュータ・アーキテクチャは一般に、標準 規格、機能 、メモリ容量、レイテンシ 、スループット 、消費電力 、生産コスト や生産性などを考慮して決められるが、また信頼性 、拡張性 、大きさ、重さといった要素も考慮される。それらの要素のいくつかは互いにトレードオフ の関係にあり、何かを優先すると何かが犠牲になる。少数の要素を最高の状態にすることを重要視して他の要素を大きく犠牲にすることもいとわない設計法と、多くの要素をほどほどの状態に保つ設計法がある。古典的な手法としては、データの処理能力を上げることを最優先し、何がボトルネック となり最もデータ処理能力を悪化させているかを見極め、そのボトルネックを解消するというものがあった。近年のモバイルコンピュータでは、消費電力を抑えることを優先し、何が電力を消費し電力効率を下げているのか見極め、それを取り除く工夫を重ねる。
現実のコンピュータの設計には、純粋に技術的な観点だけでなく、当該開発プロジェクトのマネージャー の個人的意向や志向も影響し、またコンピュータの開発というのは企業でビジネス(商業活動)の一部として行われているので、コンピュータ市場 にすでに存在している他社のコンピュータとの競合関係や棲み分けやポジショニング といった、経営者 が判断するマーケティング 戦略的なことも、影響を及ぼず。
コスト
一般に、設計前に、システム要件やコンピュータ市場の状況(他社の競合製品の存在状況やその価格など)を考慮して、販売される台数(ロット )も予想しそれも織り込みつつ、製造コスト の目標値が設定される。
処理能力
コンピュータの処理能力(性能)を高める手法や、その測定法や指標 はいくつもある。
パーソナルコンピュータ でよく使われた手法はクロック周波数 を上げることで、現在でもコンピュータ商品の仕様 書(スペック シート)に「○○GHz」(かつては「○○MHz」)などと表示されているものであり、CPUのクロック が一秒間に何サイクルであるかを示したものである。しかしクロック周波数で単純に処理能力の高さを測れるかというと、必ずしもそうではない。最近のCPUはスーパースケーラ 方式で1クロックサイクルで複数の命令を実行することでデータ処理能力を改善しているので、それも考慮する必要がある。また2006年1月にインテルがIntel Core シリーズの最初のものをリリースして以降は、マルチコア 化つまりひとつのプロセッサに《CPUコア》を複数持たせて処理能力を高めている製品は主流であり、コア数も指標となる。喩えるなら、クロック周波数を道路の最高速度(法定速度 )のようなものだとすると、コア数は道路の車線 の数に相当し、最高速度が同じでも車線数が2倍、4倍、6倍になると、単位時間あたりに通る自動車の数も2倍、4倍、6倍に増えるのと同じようなもので、クロック周波数が同じでもコア数が多ければデータ処理能力は高い。(なおクロック周波数のほうは、1990年代は右肩上がりの状態であったが、2020年代にはすでに頭打ちになっている。)
他にCPUのキャッシュメモリ の容量、実行ユニットの個数を増やす方法もあり、他にもバス の速度、プログラムとして実行しようとする命令の種類と順序なども処理能力に影響し、メインメモリ の容量も影響する。
特に高速に大量の計算をすることを目的としたスーパーコンピュータ では「ノード」と呼ばれる同一ユニットを非常に多数並べるアーキテクチャ(並列アーキテクチャ)を採用している[ 12] (近年のスパコンでは、数千個から数万個ほどもノードを並べる)。スーパーコンピュータの処理能力の高さは、FLOPS (フロップス)という指標で表示する方法があり、そのほかにも処理能力の高さはランキングという手法で比較することが世界的に一般的である[ 13] 。
制御用のコンピュータでは、「速さ」を考える際に、レイテンシ とスループット が重要である。レイテンシとは、ある処理が開始してから完了するまでの時間である。スループットは単位時間当たりに処理できる仕事の量である。割り込みレイテンシとは、ハードウェアのイベント(例えば、ディスクドライブの読み書きの完了)通知(割り込み )に対して、システムが応答するのにかかる時間である。性能は設計上の様々な選択によって影響される。例えば、キャッシュメモリ を追加するとレイテンシは悪化するが、スループットは向上する。制御用のコンピュータでは、割り込みレイテンシの短縮が求められる。そのようなコンピュータはリアルタイム 環境で運用され、所定の時間以内に処理が行われないと問題が発生する。例えばコンピュータ制御のアンチロックブレーキは、ブレーキが踏まれたら即座に制動をかけ始めなければならない。
コンピュータの性能の測定法や指標は他にもある。システムは用途によってボトルネックとなる部分が異なり、CPUバウンド(例えば数値計算など)、I/Oバウンド(Webサーバなど)、メモリバウンド(ビデオ編集など)に分けられる。サーバや携帯機器では電力消費量も重要な指標である(次の節で説明)。
ベンチマーク は、一連の評価プログラムを実行し、それにかかる時間を計ることで、上述の多くの観点を考慮した性能を測定するものである。しかし、ベンチマークにも不完全性や恣意性がつきまとう。ベンチマークが異なれば、性能値が異なって示される。例えば、あるアプリケーションは高速に実行できても、別のアプリケーションでは遅いかもしれない。(おまけに、システム設計段階で、特定のベンチマークの結果向上のためにハードウェアやソフトウェアにそのベンチマークだけを高速化できる機能を(こっそりと)加えるメーカーがある。だがこの機能はそのベンチマークと類似のアプリケーションでは役に立たないことが多いので、ベンチマークの数値を鵜呑みにするわけにはいかなくなる。)
消費電力
電力効率が良く、低消費電力(消費電力 が小さいこと)は、特にコンピュータが持ち運ばれるようになってからはコンピュータ設計する上で重要度が増してきた。またプロセッサの単位面積当たりのトランジスタ数が増えるに従い、電力効率が重要な観点となってきた。以前は、電力消費量を抑えると、性能が低下したりコストが増大してしまうことが起きた。ARMアーキテクチャ は、処理性能を十分に保ったまま低消費電力を実現し、スマートフォン やタブレット などモバイルコンピューティング用途(モバイル機器 )では標準的な存在となった。また、組み込みシステム 用プロセッサでは、(組み込み対象となる機器にもよるが)消費する電力が小さいことが至上命題だが、性能はほどほどでよい、というものも多いので、消費電力の低減を最優先してあえて処理性能を抑える設計を行う場合もある。
歴史
用語史
コンピュータ関連での「アーキテクチャ」という用語の使用は、1959年、IBM の研究所に所属していたライル・R・ジョンソン[ 注釈 4] とフレデリック・ブルックス まで遡る。ジョンソンはStretchことIBM 7030 について、研究報告を書いた。彼は、コンピュータについて詳細を省いてある水準の記述をしたものを、それまで使われていた「マシン構成」[ 注釈 5] ではなく「システムアーキテクチャ」[ 注釈 6] と称した。その後、Stretchの設計者の1人である ブルックスが、ある本[ 14] で、「コンピュータ・アーキテクチャは他のアーキテクチャと同様、構造の利用者のニーズを決定する技法であり、それらニーズに合った経済的にも技術的にも可能な限り最適な設計を行うことである」と書いている。ブルックスは System/360 の開発でも大きな役割を果たし、そこで「アーキテクチャ」という用語は「ユーザーが知る必要のある詳細」という定義になっていった。その後、コンピュータ業界で「アーキテクチャ」という用語が様々に使われるようになった。
論文で初めて「アーキテクチャ」という用語が使われたのは、1964年の IBM System/360 に関するものであった[ 15] 。この論文ではアーキテクチャを「プログラマから見えるシステムの属性群。すなわち、概念的構造と機能的挙動であり、データフローや制御の構成、論理設計や物理的実装とは異なる」と定義した。この定義において、「プログラマ」から見たコンピュータの機能的挙動が鍵となっている。アーキテクチャに含まれる概念的構造は機能的挙動を理解するための補助的なものであり、ユースケース の範囲を拡大可能にする。
プロセッサ内部の処理方法やメモリアクセス方法(マイクロアーキテクチャ)がコンピュータ・アーキテクチャとされるようになったのは、もっと後のことである。
各部分要素のアーキテクチャ
注釈
^ 英語では通常、コンポーネント componentと言う。
^ 《単体》は英語でディスクリート (discrete)と言い、トランジスタやダイオードや抵抗など単体の半導体部品を、集積回路と区別して、ディスクリート部品 と言い、単体部品を基板で組み合わせて作る回路をディスクリート回路 と言う。
^ 補足情報。アーキテクチャの話ではなく、話がかなりそれてしまうが、プロセッサやCPUのアーキテクチャが決定した後の、設計工程について。
CPU設計 では、ISAとマイクロアーキテクチャが決定されると、実際のハードウェア が設計される。この設計工程を一般に「実装」と呼ぶ。実装はアーキテクチャ定義には通常含まれず、ハードウェア設計に含まれる。
実装はさらに以下の3段階に分けられる。
論理実装/設計 - マイクロアーキテクチャで定義されたブロックを論理式あるいは論理ゲートレベルの回路 で表す。
回路実装/設計 - マイクロアーキテクチャ上のブロック(あるいはそれと等価な論理式)やその論理回路をトランジスタ レベルのデジタル回路 で表す。
物理実装/設計 - 回路図に従い、チップ上の部品配置や基板上の部品配置、基板間の接続ルートなどを設計する。
^ 英 : Lyle R. Johnson
^ 英 : machine organization
^ 英 : system architecture
出典
参考文献
学習用の参考図書や文献
関連項目
外部リンク