
コンピュータ科学およびコンピュータ工学において、コンピュータアーキテクチャとは、コンピュータシステムの概念設計および動作構造であり、プログラムを効率的に実行するためにコンポーネント部分がどのように構成され、相互作用するかを定義するものです。[ 1 ]これは多くの場合、正確な実装の詳細を無視した一般的な説明です。[ 2 ]命令セットアーキテクチャ、CPUマイクロアーキテクチャ、メモリ、および入出力システムを網羅しています。
コンピュータアーキテクチャでは、性能、コスト、消費電力、信頼性、セキュリティの間のトレードオフも考慮される。
最初に文書化されたコンピュータアーキテクチャは、チャールズ・バベッジとエイダ・ラブレスの書簡の中で、解析機関について記述されたものでした。1936年にコンピュータZ1を構築していたコンラート・ツーゼは、将来のプロジェクトに関する2つの特許出願の中で、機械語命令をデータと同じ記憶領域に格納できる、つまりプログラム内蔵方式の概念について説明しました。[ 3 ] [ 4 ]他の2つの初期の重要な例は次のとおりです。
コンピュータ文献における「アーキテクチャ」という用語は、1959年にIBMの主要研究センターのマシン組織部門に所属していたライル・R・ジョンソンとフレデリック・P・ブルックス・ジュニアの研究に遡ることができます。ジョンソンは、ロスアラモス国立研究所(当時はロスアラモス科学研究所として知られていた)向けにIBMが開発したスーパーコンピュータ「 Stretch」に関する独自の研究論文を書く機会を得ました。豪華に装飾されたこのコンピュータについて議論する際の詳細レベルを説明するために、彼はフォーマット、命令タイプ、ハードウェアパラメータ、および速度向上に関する説明が「システムアーキテクチャ」のレベルにあると述べ、この用語は「マシン組織」よりも有用であるように思われたとしました。[ 7 ]
その後、Stretchの設計者であるブルックスは、 「コンピュータシステムの計画:プロジェクトStretch」という本の第2章で、「コンピュータアーキテクチャは、他の建築と同様に、構造のユーザーのニーズを決定し、経済的および技術的な制約の中でそれらのニーズを可能な限り効果的に満たすように設計する技術である」と述べている。[ 8 ]
ブルックスはその後、 IBM System/360シリーズのコンピュータの開発に携わり、そこで「アーキテクチャ」は「ユーザーが知っておくべきこと」を定義する名詞となった。[ 9 ] System/360 シリーズの後継として、現在のIBM Zシリーズを含む、いくつかの互換性のあるコンピュータシリーズが登場した。その後、コンピュータユーザーは、この用語をもっと曖昧な意味で使うようになった。[ 10 ]
初期のコンピュータアーキテクチャは紙上で設計され、その後直接最終的なハードウェア形態に構築されました。[ 11 ] その後、コンピュータアーキテクチャのプロトタイプは、 6800やPA-RISCのプロトタイプのように、トランジスタ・トランジスタロジック(TTL)コンピュータの形で物理的に構築され、最終的なハードウェア形態に決定する前にテストと調整が行われました。1990年代以降、新しいコンピュータアーキテクチャは通常、コンピュータアーキテクチャシミュレータ内の他のコンピュータアーキテクチャ内、またはソフトマイクロプロセッサとしてのFPGA内、あるいはその両方で「構築」され、テストされ、調整されてから、最終的なハードウェア形態に決定されます。[ 12 ]
コンピュータアーキテクチャの分野には、主に3つのサブカテゴリがあります。[ 13 ]
コンピュータアーキテクチャには他にも様々な技術が存在する。インテルなどの大企業では以下の技術が使用されており、2002年の推定ではコンピュータアーキテクチャ全体の1%を占めていた[ 13 ] 。
コンピュータアーキテクチャは、コンピュータシステムの性能、効率、コスト、信頼性のバランスを取ることに関係しています。命令セットアーキテクチャの事例は、これらの相反する要素のバランスを説明するために使用できます。より複雑な命令セットは、単一の命令でより高レベルの抽象化( x86 の Loop 命令など)をエンコードできるため、プログラマがよりスペース効率の良いプログラムを作成できるようにします。 [ 15 ]しかし、より長く複雑な命令は、プロセッサがデコードするのに時間がかかり、効果的に実装するにはより多くのコストがかかる可能性があります。大規模な命令セットによる複雑さの増加は、命令が予期しない方法で相互作用する場合に、信頼性が低下する余地も大きくなります。
実装には、集積回路設計、パッケージング、電力、冷却が含まれます。設計の最適化には、コンパイラやオペレーティングシステムから論理設計やパッケージングに至るまでのトピックに関する知識が必要です。[ 16 ]
命令セットアーキテクチャ(ISA) は、コンピュータのソフトウェアとハードウェア間のインターフェースであり、プログラマから見たマシンのビューとも言えます。コンピュータは、 Java、C++ 、または現在使用されているほとんどのプログラミング言語のような高水準プログラミング言語を理解しません。プロセッサは、通常はバイナリ数として何らかの数値形式でエンコードされた命令のみを理解します。コンパイラなどのソフトウェアツールは、これらの高水準言語をプロセッサが理解できる命令に変換します。[ 17 ] [ 18 ]
命令に加えて、ISAはプログラムが利用できるコンピュータ内の項目(データ型、レジスタ、アドレッシングモード、メモリなど)を定義します。命令は、レジスタインデックス(または名前)とメモリアドレッシングモードを使用して、これらの利用可能な項目を特定します。[ 19 ] [ 20 ]
コンピュータの ISA は通常、命令のエンコード方法を説明する小さな取扱説明書に記載されています。また、命令の短い (漠然とした) 覚えやすい名前が定義されている場合もあります。これらの名前は、アセンブラと呼ばれるソフトウェア開発ツールで認識できます。アセンブラは、ISA の人間が読める形式をコンピュータが読める形式に変換するコンピュータ プログラムです。逆アセンブラも広く利用されており、通常はデバッガやバイナリ コンピュータ プログラムの不具合を特定して修正するためのソフトウェア プログラムに含まれています。 [ 21 ]
ISAは品質と完全性において様々です。優れたISAは、プログラマの利便性(コードの理解しやすさ)、コードのサイズ(特定のアクションを実行するために必要なコードの量)、命令を解釈するためのコンピュータのコスト(複雑性が高いほど、命令のデコードと実行に必要なハードウェアが増える)、およびコンピュータの速度(デコード用ハードウェアが複雑になると、デコード時間が長くなる)の間でバランスが取れています。メモリ構成は、命令がメモリとどのように相互作用するか、またメモリが自身とどのように相互作用するかを定義します。
設計エミュレーションの段階では、エミュレータは提案された命令セットで記述されたプログラムを実行できます。最新のエミュレータは、サイズ、コスト、速度を測定することで、特定のISAがその目標を達成しているかどうかを判断できます。
コンピュータの構成は、性能重視の製品の最適化に役立ちます。例えば、ソフトウェアエンジニアはプロセッサの処理能力を把握する必要があります。彼らは、最低価格で最高のパフォーマンスを得るためにソフトウェアを最適化する必要があるかもしれません。そのためには、コンピュータの構成をかなり詳細に分析する必要があるでしょう。例えば、SDカードの場合、設計者は可能な限り高速に多くのデータを処理できるようにカードを配置する必要があるかもしれません。
コンピュータの構成は、特定のプロジェクトに適したプロセッサの選定計画にも役立ちます。マルチメディアプロジェクトでは非常に高速なデータアクセスが必要になる場合があり、仮想マシンでは高速な割り込み処理が必要になる場合があります。また、特定のタスクには追加のコンポーネントが必要になることもあります。例えば、仮想マシンを実行できるコンピュータには、異なる仮想コンピュータのメモリを分離するために仮想メモリハードウェアが必要です。コンピュータの構成と機能は、消費電力とプロセッサのコストにも影響します。
命令セットとマイクロアーキテクチャが設計されたら、実用的なマシンを開発する必要があります。この設計プロセスは実装と呼ばれます。実装は通常、アーキテクチャ設計ではなく、ハードウェア設計エンジニアリングとみなされます。実装はさらにいくつかのステップに細分化できます。
コンピュータシステムの具体的な形態は、制約条件と目標によって決まります。コンピュータアーキテクチャは通常、規格、電力効率と性能、コスト、メモリ容量、レイテンシ(レイテンシとは、あるノードからソースに情報が伝達されるのにかかる時間)、スループットの間でトレードオフを行います。場合によっては、機能、サイズ、重量、信頼性、拡張性といった他の要素も考慮されることがあります。
最も一般的な方式は、詳細な電力分析を行い、十分な性能を維持しながら消費電力を低く抑える方法を見つけ出すというものです。
現代のコンピュータの性能は、多くの場合、 1サイクルあたりの命令数(IPC)で表されます。これは、あらゆるクロック周波数におけるアーキテクチャの効率を測定する指標であり、IPCが高いほど、単位時間あたりに実行できる処理量が多くなります。古いコンピュータのIPCは0.1程度でしたが、現代のプロセッサは容易に1近くに達します。スーパースカラプロセッサは、1クロックサイクルあたり複数の命令を実行することで、3~5IPCを達成できます。
機械語命令の数を数えるのは誤解を招く恐れがある。なぜなら、命令はISAによって処理できる作業量が異なるからである。標準的な測定における「命令」とは、ISAの機械語命令の数ではなく、通常はVAXコンピュータアーキテクチャの速度に基づいた測定単位である。
かつては、多くの人がコンピュータの速度をクロック周波数(通常はMHzまたはGHz)で測っていました。これはCPUのメインクロックの1秒あたりのサイクル数を指します。しかし、この指標はやや誤解を招く可能性があります。クロック周波数が高いマシンが必ずしも優れた性能を発揮するとは限らないからです。そのため、メーカーは性能の指標としてクロック周波数を用いることをやめました。
速度に影響を与えるその他の要因としては、機能ユニットの構成、バス速度、利用可能なメモリ、プログラム内の命令の種類と順序などが挙げられる。
速度には大きく分けて2種類あります。レイテンシとスループットです。レイテンシとは、処理の開始から完了までの時間です。スループットとは、単位時間あたりに処理される作業量です。割り込みレイテンシとは、電子イベント(例えば、ディスクドライブがデータの転送を完了したときなど)に対するシステムの最大応答時間の保証値です。
パフォーマンスは非常に幅広い設計上の選択肢によって影響を受けます。例えば、プロセッサをパイプライン化すると、通常はレイテンシが悪化しますが、スループットは向上します。機械を制御するコンピュータは、通常、低い割り込みレイテンシを必要とします。これらのコンピュータはリアルタイム環境で動作し、指定された時間内に操作が完了しないと故障します。例えば、コンピュータ制御のアンチロックブレーキは、ブレーキペダルが感知されてから予測可能で限られた時間内にブレーキをかけ始めなければ、ブレーキの故障が発生します。
ベンチマークテストは、一連のテストプログラムの実行時間を計測することで、これらの要素すべてを考慮に入れます。ベンチマークテストは性能を示す指標となりますが、コンピュータを選ぶ際の判断基準にすべきではありません。多くの場合、測定対象となったマシンは様々な指標で性能が分かれます。例えば、あるシステムは科学計算アプリケーションを高速に処理できる一方で、別のシステムはビデオゲームをよりスムーズにレンダリングできるといった具合です。さらに、設計者はハードウェアやソフトウェアを通して、特定のベンチマークテストを高速に実行できるような特別な機能を製品に組み込むことがありますが、こうした機能は一般的なタスクには同様のメリットをもたらしません。
電力効率は、現代のコンピュータにおいて重要な指標の一つです。電力効率を高めるには、処理速度の低下やコストの増加といった代償が伴うことがよくあります。従来、コンピュータアーキテクチャにおける消費電力の指標としては、MIPS/W(1秒あたりの命令実行数/ワット)が一般的でしたが、現代の設計では、ワットあたりの性能ベンチマークや命令あたりのエネルギー消費量といった、より高度な指標が用いられています。
現代の集積回路は、プロセススケーリングによってトランジスタあたりのエネルギー効率が向上したにもかかわらず、総消費電力が増加しています。 [ 22 ]この増加は、ダイあたりのトランジスタ数の急速な増加に起因しており、電力供給ネットワークがますます複雑化しています。[ 23 ]さらに、フィーチャサイズ(トランジスタサイズなど)が縮小するにつれて電力密度(単位面積あたりのワット数)が上昇し、熱管理がより困難になっています。[ 24 ]動作温度の上昇は、相互接続抵抗を増加させ、電力消費と発熱の間に正のフィードバックループを作り出すことで、これらの熱的課題をさらに複雑化させます。
トランジスタのスケーリングが鈍化し、電力制約が制限要因となるにつれて、電力効率は、1つのチップにますます多くのトランジスタを詰め込むことと同じくらい、あるいはそれ以上に重要になり始めています。最近のプロセッサ設計では、可能な限り多くのトランジスタを1つのチップに詰め込むよりも電力効率に重点を置いているため、この重点が示されています。[ 25 ]組み込みコンピュータの世界では、電力効率は、スループットとレイテンシに加えて、長い間重要な目標でした。
クロック周波数の増加は、過去数年間、電力削減の改善に比べて緩やかに進んでいます。これは、ムーアの法則の終焉と、モバイル技術におけるバッテリー寿命の延長と小型化への需要によって推進されています。クロック周波数の向上から消費電力と小型化への焦点の変化は、インテルがHaswellマイクロアーキテクチャのリリースで報告した最大50%の大幅な消費電力削減によって示されます。インテルは、消費電力のベンチマークを30~40ワットから10~20ワットに引き下げました。[ 26 ]これを3GHzから4GHzへの処理速度の増加(2002年から2006年)と比較すると、研究開発の焦点がクロック周波数から、消費電力の削減と占有スペースの縮小へと移行していることがわかります。[ 27 ]
アーキテクチャとは、コンピュータの内部構造を抽象的に記述するものであり、コンピュータの機能とプログラミングモデルを定義するものです。異なる技術を用いて異なる方法で構築された2台のコンピュータでも、同じアーキテクチャを持つ場合があります。
{{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク)