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

コンピュータ・アーキテクチャ（英: computer architecture）は、コンピュータ（特にハードウェア）における基本設計や設計思想などを意味する。アーキテクチャ（建築）には、単に「建築物」以外に、設計や様式という意味があるが、それから転じて、コンピュータ分野においても使われるようになった。「設計思想」などと意訳されることもある。技術者や研究者の用語としては（企業ごとの用語の違いにもよるが）「方式」という語が使われることもある。 1964年のSystem/360で最初に使われた用語で、その際の意味としては、入出力インタフェースを含むコンピュータシステムのハードウェア全体（周辺機器自体は含まない）の、ユーザー（プログラマ、オペレーティングシステム (OS) を設計するプログラマも含む）から見たインタフェースの定義であり、具体的には使用できるレジスタの構成、命令セット、入出力（チャネルコントロールワード）などであり、実装は含まない。このアーキテクチャが同一のコンピュータ間や、上位互換のアーキテクチャを持つコンピュータへの移行や、上位互換の周辺機器への移行などは、ソフトウェアの互換性が原則として保証される。またハードウェアの内部設計や実装は、定義されたアーキテクチャを守る限り、技術の進歩に応じて自由に更新できる。この結果、コンピュータ・ファミリー（シリーズ）が形成可能となる。現在で言えばレイヤー定義であり仮想化の一種でもある。 また、システムアーキテクチャ、エンタープライズアーキテクチャ、ソフトウェアアーキテクチャ、ARMアーキテクチャなどの用語も増えている。 コンピュータ・アーキテクチャは少なくとも次の3つに分類される。 命令セットアーキテクチャ（ISA） 機械語（またはアセンブリ言語プログラマ、ただしOSのそれも含む）から見たプロセッサの抽象化されたイメージであり、命令セット、アドレッシングモード、レジスタ、アドレスとデータの形式などが含まれる。すなわち、プロセッサをソフトウェア側から見たときのインタフェース定義である。 マイクロアーキテクチャ さらに下位でのより具体的なシステムに関する記述であり、ISAを実装するためにシステムの構成部品をどのように接続し、それらがどのように相互にやりとりするかを示す。例えば、（内蔵の1次）キャッシュの大きさは、ISAには通常何の関係もないが、その下位レベルの実装においては重要な問題である。 システム設計（システムアーキテクチャ） 他のコンピュータシステムのハードウェア全般に関するもの。以下のようなものが含まれる。 バスやクロスバースイッチなどのシステムのインターコネクト メモリコントローラやメモリ階層 ダイレクト・メモリー・アクセス などのCPUオフロード機構 マルチプロセッシングに関わる部分 複数のコンピュータによるシステム構成に関するもの（コンピュータ・クラスターやNUMAアーキテクチャなど） 前者2つはプロセッサのアーキテクチャである。システム設計は、コンピュータにおけるプロセッサ以外についても含む。もともとのSystem/360の「厳密に定義された」アーキテクチャには、だいたい、ISAが含まれマイクロアーキテクチャが含まれず、システム設計のいくらかに相当するものが含まれるが、これは当時の大型コンピュータと現在のマイクロプロセッサベースのコンピュータとの、実装技術の変化やビジネスモデルの変化などのためによる、コンピュータ（周辺機器を含む）全体のレイヤの分けかたなどの構成法の変化などによる。 プロセッサ（CPU）設計（CPU設計）における、アーキテクチャの観点からの工程を説明する。 ISAとマイクロアーキテクチャが決定されると、実際のハードウェアが設計される。この設計工程を一般に「実装」と呼ぶ。実装はアーキテクチャ定義には通常含まれず、ハードウェア設計に含まれる。 実装はさらに以下の3段階に分けられる。 論理実装/設計 - マイクロアーキテクチャで定義されたブロックを論理式あるいは論理ゲートレベルの回路で表す。 回路実装/設計 - マイクロアーキテクチャ上のブロック（あるいはそれと等価な論理式）やその論理回路をトランジスタレベルのデジタル回路で表す。 物理実装/設計 - 回路図に従い、チップ上の部品配置や基板上の部品配置、基板間の接続ルートなどを設計する。 プロセッサだけではなく、コンピュータシステム全体の設計とアーキテクチャについて述べる。 コンピュータの設計においては、制約条件と目標を考慮して、どの部分を最適化するかを決定する。コンピュータ・アーキテクチャは一般に、標準規格、コスト、メモリ容量、レイテンシ、スループットなどのトレードオフで決まる。場合によっては、機能、大きさ、重さ、信頼性、拡張性、電力消費量といった要素も考慮される。 典型的な手法としては、どのボトルネックが最も性能を悪化させるかを注意深く見極める。理想的には、コンピュータの各部の性能向上とそれにかかるコストが比例すると考えられ、コストのかかる部品が全体の性能を決定すると考えられる。 一般に、システム要件や市場の状況によって設計前に製造コストが決定される。 コンピュータの性能は、クロック周波数（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 に関するものであった。この論文ではアーキテクチャを「プログラマから見えるシステムの属性群。すなわち、概念的構造と機能的挙動であり、データフローや制御の構成、論理設計や物理的実装とは異なる」と定義した。この定義において、「プログラマ」から見たコンピュータの機能的挙動が鍵となっている。アーキテクチャに含まれる概念的構造は機能的挙動を理解するための補助的なものであり、ユースケースの範囲を拡大可能にする。 プロセッサ内部の処理方法やメモリアクセス方法（マイクロアーキテクチャ）がコンピュータ・アーキテクチャとされるようになったのは、もっと後のことである。 命令セットアーキテクチャ RISC、CISC、VLIW、EPICアーキテクチャ （実装例）x86(IA-32)、PowerPC、SPARCなど。 マイクロアーキテクチャ 演算アーキテクチャ 浮動小数点、演算装置、SIMD/MIMD、ベクトル演算ユニット(ベクトル計算機) CPU制御アーキテクチャ ワイヤードロジック、マイクロプログラム（マイクロアーキテクチャ）、実行ユニット、制御装置 CPU高速化アーキテクチャ パイプライン、スーパースケーラ、アウト・オブ・オーダー実行、分岐予測、レジスタ・ウィンドウ、レジスタ・リネーミング、投機的実行 CPUバスアーキテクチャ CPUバス（CPU内部バス、CPU外部バス《ピン》アーキテクチャ）、バス (コンピュータ)の項を参照。<スタブ> マルチプロセッサアーキテクチャ 対称型マルチプロセッサ(SMP)、NUMA(ASMP)、クロスバースイッチ <スタブ> マルチスレッドアーキテクチャ ブロック型マルチスレッディング、インターリーブ型マルチスレッディング、同時マルチスレッディング システムアーキテクチャ 制御アーキテクチャ 割り込み制御、入出力制御 バスアーキテクチャ ハーバードアーキテクチャ、プログラム内蔵方式（ノイマン型を含む） クロスバースイッチ システムバス、メモリバス、入出力バス。 バス (コンピュータ)の項を参照。<スタブ> （実装例）ISA、PCI等の拡張バスアーキテクチャ。 メモリアーキテクチャ キャッシュメモリ、仮想記憶、TLB　<スタブ> -- メモリ ネットワークアーキテクチャ <スタブ> -- コンピュータネットワーク オペレーティングシステムアーキテクチャ ページング方式アーキテクチャ。<スタブ> 分散処理アーキテクチャー