コンピュータ・アーキテクチャ

コンピュータ・アーキテクチャ（英: computer architecture）は、コンピュータ（特にハードウェア）における基本設計や設計思想などを意味する。アーキテクチャ（建築）には、単に「建築物」以外に、設計や様式という意味があるが、それから転じて、コンピュータ分野においても使われるようになった。「設計思想」などと意訳されることもある。技術者や研究者の用語としては（企業ごとの用語の違いにもよるが）「方式」という語が使われることもある。
1964年のSystem/360で最初に使われた用語で、その際の意味としては、入出力インタフェースを含むコンピュータシステムのハードウェア全体（周辺機器自体は含まない）の、ユーザー（プログラマ、OSを設計するプログラマも含む）から見たインタフェースの定義であり、具体的には使用できるレジスタの構成、命令セット、入出力（チャネルコントロールワード）などであり、実装は含まない。このアーキテクチャが同一のコンピュータ間や、上位互換のアーキテクチャを持つコンピュータへの移行や、上位互換の周辺機器への移行などは、ソフトウェアの互換性が原則として保証される。またハードウェアの内部設計や実装は、定義されたアーキテクチャを守る限り、技術の進歩に応じて自由に更新できる。この結果、コンピュータ・ファミリー（シリーズ）が形成可能となる。現在で言えばレイヤー定義であり仮想化の一種でもある。
また、システムアーキテクチャ、エンタープライズアーキテクチャ、ソフトウェアアーキテクチャ、ARMアーキテクチャなどの用語も増えている。

コンピュータ設計上の観点

プロセッサだけではなく、コンピュータシステム全体の設計とアーキテクチャについて述べる。
コンピュータの設計においては、制約条件と目標を考慮して、どの部分を最適化するかを決定する。コンピュータ・アーキテクチャは一般に、標準規格、コスト、メモリ容量、レイテンシ、スループットなどのトレードオフで決まる。場合によっては、機能、大きさ、重さ、信頼性、拡張性、電力消費量といった要素も考慮される。
典型的な手法としては、どのボトルネックが最も性能を悪化させるかを注意深く見極める。理想的には、コンピュータの各部の性能向上とそれにかかるコストが比例すると考えられ、コストのかかる部品が全体の性能を決定すると考えられる。

コスト

一般に、システム要件や市場の状況によって設計前に製造コストが決定される。

性能

コンピュータの性能は、クロック周波数（MHz や GHz）でよく表される。これはCPUのクロックが一秒間に何サイクルであるかを示したものである。しかし、クロック周波数の高いマシンが必ずしも性能が高いとは言えない。近年ではクロックの高速化は頭打ちになりつつあり、製造業者は別の指標で性能を示すようになりつつある。プロセッサが搭載するキャッシュ容量で性能を示すという手法もある。クロック周波数が自動車の最高速度だとすれば、キャッシュ容量は車線の数に対応する。自動車がどんなに速くても、渋滞になれば速く走ることはできない。CPUが高速動作でき、キャッシュが多ければ、プロセッサは実際に高速に動作できる。
最近のCPUはスーパースケーラ方式で1クロックサイクルで複数の命令を実行できる。これにより、プログラム実行性能は大幅に改善された。他にも性能に影響する要素として、実行ユニットとしてどういうものを何個持つか、バスの速度、利用可能なメモリ容量、プログラムとして実行しようとする命令の種類と順序などがある。
速度を考える際に、レイテンシとスループットが重要である。レイテンシとは、ある処理が開始してから完了するまでの時間である。スループットは単位時間当たりに処理できる仕事の量である。割り込みレイテンシとは、ハードウェアのイベント（例えば、ディスクドライブの読み書きの完了）通知（割り込み）に対して、システムが応答するのにかかる時間である。性能は設計上の様々な選択によって影響される。例えば、キャッシュメモリを追加するとレイテンシは悪化するが、スループットは向上する。制御用のコンピュータでは、割り込みレイテンシの短縮が求められる。そのようなコンピュータはリアルタイム環境で運用され、所定の時間以内に処理が行われないと問題が発生する。例えばコンピュータ制御のアンチロックブレーキは、ブレーキが踏まれたら即座に制動をかけ始めなければならない。
コンピュータの性能は他の測定法によっても測定でき、用途によって様々な測定法がある。システムは用途によってボトルネックとなる部分が異なり、CPUバウンド（例えば数値計算など）、I/Oバウンド（Webサーバなど）、メモリバウンド（ビデオ編集など）に分けられる。サーバや携帯機器では電力消費量も重要な観点である。
ベンチマークは、一連の評価プログラムを実行し、それにかかる時間を計ることで、上述のあらゆる観点を考慮した性能を測定するものである。しかし、ベンチマークが役に立たない場合もある。ベンチマークが異なれば、示される性能も異なる。例えば、あるアプリケーションは高速に実行できても、別のアプリケーションでは遅いかもしれない。さらに、システム設計段階で、特定のベンチマークの結果向上のためにハードウェアやソフトウェアにそのベンチマークだけを高速化できる機能を加えることもある。この機能はそのベンチマークと類似のアプリケーションでは役に立たないことが多い。

電力消費

電力消費は、最近のコンピュータ設計では重要性を増してきている。電力消費を抑えると、性能が低下したり、コストが増大したりすることが多い。チップの単位面積当たりのトランジスタ数が増大するにしたがって、電力効率が重要な観点となってきた。Intel Core 2 などの最近のプロセッサでは、電力効率の向上が重要な設計上の観点とされた。また、組み込み用プロセッサでは電力効率が性能と共に最重要観点となっている。

歴史的観点

コンピュータ関連での「アーキテクチャ」という用語の使用は、1959年、IBMの研究所に所属していたライル・R・ジョンソンとフレデリック・ブルックスまで遡る。ジョンソンはStretchことIBM 7030について、研究報告を書いた。彼は、コンピュータについて詳細を省いてある水準の記述をしたものを、それまで使われていた「マシン構成」ではなく「システムアーキテクチャ」と称した。その後、Stretchの設計者の1人である ブルックスが、ある本で、「コンピュータ・アーキテクチャは他のアーキテクチャと同様、構造の利用者のニーズを決定する技法であり、それらニーズに合った経済的にも技術的にも可能な限り最適な設計を行うことである」と書いている。ブルックスは System/360 の開発でも大きな役割を果たし、そこで「アーキテクチャ」という用語は「ユーザーが知る必要のある詳細」という定義になっていった。その後、コンピュータ業界で「アーキテクチャ」という用語が様々に使われるようになった。
論文で初めて「アーキテクチャ」という用語が使われたのは、1964年の IBM System/360 に関するものであった。この論文ではアーキテクチャを「プログラマから見えるシステムの属性群。すなわち、概念的構造と機能的挙動であり、データフローや制御の構成、論理設計や物理的実装とは異なる」と定義した。この定義において、「プログラマ」から見たコンピュータの機能的挙動が鍵となっている。アーキテクチャに含まれる概念的構造は機能的挙動を理解するための補助的なものであり、ユースケースの範囲を拡大可能にする。
プロセッサ内部の処理方法やメモリアクセス方法（マイクロアーキテクチャ）がコンピュータ・アーキテクチャとされるようになったのは、もっと後のことである。