

中央処理装置( CPU ) は、中央プロセッサ、メインプロセッサ、または単にプロセッサとも呼ばれ、特定のコンピュータにおける主要なプロセッサです。[ 1 ] [ 2 ]その電子回路は、算術、論理、制御、入出力(I/O) 操作などのコンピュータ プログラムの命令を実行します。[ 3 ] [ 4 ] [ 5 ]この役割は、メイン メモリや I/O 回路などの外部コンポーネント[ 6 ]や、グラフィックス処理ユニット(GPU)などの特殊なコプロセッサの役割とは対照的です。
CPU の形態、設計、実装は時間の経過とともに変化してきましたが、その基本的な動作はほとんど変わっていません。[ 7 ] CPU の主要コンポーネントには、算術演算と論理演算を実行する算術論理演算ユニット(ALU) 、ALU にオペランドを供給し、ALU 演算の結果を格納するプロセッサ レジスタ、および ALU、レジスタ、その他のコンポーネントの協調動作を指示することで、命令のフェッチ (メモリから)、デコード、実行を調整する制御ユニットが含まれます。最新の CPU は、パフォーマンスを向上させるためにキャッシュと命令レベルの並列処理に、またオペレーティングシステムと仮想化をサポートするCPU モードに、半導体領域の多くを割いています。
現代のCPUのほとんどは集積回路(IC)マイクロプロセッサ上に実装されており、1つのICチップ上に1つ以上のCPUが搭載されています。複数のCPUを搭載したマイクロプロセッサチップはマルチコアプロセッサ(MCP)と呼ばれます。[ 8 ]プロセッサコアと呼ばれる個々の物理CPUは、 CPUレベルのマルチスレッドをサポートするためにマルチスレッド化することもできます。 [ 9 ]
CPUを含むICには、メモリ、周辺インターフェース、およびコンピュータの他のコンポーネントも含まれている場合があります。[ 10 ]このような集積デバイスは、マイクロコントローラまたはシステムオンチップ(SoC)などと呼ばれます。

ENIACのような初期のコンピュータは、異なるタスクを実行するために物理的に配線を変更する必要があったため、これらのマシンは「固定プログラム コンピュータ」と呼ばれていました。[ 11 ]「中央処理装置」という用語は、1955年頃から使用されています。[ 12 ] [ 13 ]「CPU」という用語は一般的にソフトウェア(コンピュータ プログラム)を実行するためのデバイスとして定義されているため、CPU と正しく呼べる最初のデバイスは、プログラム内蔵型コンピュータの登場とともに現れました。
内蔵プログラム コンピュータのアイデアは、ジョン プレスパー エッカートとジョン ウィリアム モークリーのENIACの設計にすでに存在していましたが、より早く完成させるために当初は省略されていました。[ 14 ] 1945 年 6 月 30 日、ENIAC が作られる前に、数学者のジョン フォン ノイマンは「EDVAC に関するレポートの最初の草稿」と題する論文を配布しました。これは、最終的に 1949 年 8 月に完成する内蔵プログラム コンピュータの概要でした。[ 15 ] EDVAC は、さまざまなタイプの一定数の命令 (または操作) を実行するように設計されていました。重要なことに、EDVAC 用に書かれたプログラムは、コンピュータの物理的な配線によって指定されるのではなく、高速コンピュータ メモリに格納されることになっていました。 [ 16 ]これにより、新しいタスクを実行するためにコンピュータを再構成するのにかなりの時間と労力が必要だった ENIAC の深刻な制限が克服されました。[ 17 ]フォン・ノイマンの設計では、EDVAC が実行するプログラムはメモリの内容を変更するだけで変更できた。EDVAC は最初のプログラム内蔵コンピュータではなかった。小規模な実験的なプログラム内蔵コンピュータであるManchester Babyは 1948 年 6 月 21 日に最初のプログラムを実行し[ 18 ]、Manchester Mark 1は 1949 年 6 月 16 日~17 日の夜に最初のプログラムを実行した。[ 19 ]
初期の CPU は、より大規模で、時には独自のコンピュータの一部として使用されるカスタム設計でした。[ 20 ]しかし、特定のアプリケーション向けにカスタム CPU を設計するこの方法は、大量生産される多目的プロセッサの開発にほぼ取って代わられました。この標準化は、個別トランジスタのメインフレームやミニコンピュータの時代に始まり、集積回路(IC)の普及とともに急速に加速しました。IC により、ますます複雑な CPU をナノメートルオーダーの公差で設計および製造することが可能になりました。[ 21 ] CPU の小型化と標準化の両方により、デジタルデバイスは、専用コンピュータの限られた用途をはるかに超えて、現代生活に広く普及しました。現代のマイクロプロセッサは、自動車[ 22 ]から携帯電話[ 23 ]まで、そして時にはおもちゃ[ 24 ] [ 25 ]にさえ、さまざまな電子機器に搭載されています。
フォン・ノイマンはEDVACの設計によりプログラム内蔵方式のコンピュータの設計者として最もよく知られており、その設計はフォン・ノイマン・アーキテクチャとして知られるようになったが、彼以前にもコンラート・ツーゼなど、同様のアイデアを提案し実装した人物がいた。[ 26 ] EDVACより前に完成したハーバード・マークIのいわゆるハーバード・アーキテクチャ[27][28]も、電子メモリではなくパンチ紙テープを使用したプログラム内蔵方式を採用していた。[ 29 ]両者の主な違いは、ハーバード・アーキテクチャではCPU命令とデータの格納と処理が分離されているのに対し、フォン・ノイマン・アーキテクチャでは両方に同じメモリ空間が使用される点である。[ 30 ]現代のCPUのほとんどは主にフォン・ノイマン設計だが、特に組み込みアプリケーションではハーバード・アーキテクチャを採用したCPUも見られる。例えば、Atmel AVRマイクロコントローラはハーバード・アーキテクチャのプロセッサである。[ 31 ]
トランジスタが発明される以前は、リレーや真空管(熱電子管)がスイッチング素子として一般的に使用されていました。[ 32 ] [ 33 ]実用的なコンピュータには、数千個または数万個のスイッチング素子が必要です。システムの全体的な速度は、スイッチの速度に依存します。EDVACのような真空管コンピュータは、平均して 8 時間で故障する傾向がありましたが、より低速ではあるものの初期のHarvard Mark Iのようなリレーコンピュータは、故障が非常にまれでした。[ 13 ]結局、真空管ベースの CPU が主流になったのは、一般的に信頼性の問題よりも速度面で大きな利点があったためです。これらの初期の同期 CPU のほとんどは、現代のマイクロエレクトロニクス設計と比較して低いクロックレートで動作していました。この時期には、100 kHzから4 MHz の範囲のクロック信号周波数が非常に一般的でしたが、これは主に、それらを構成するスイッチング素子の速度によって制限されていました。[ 34 ]

CPUの設計の複雑さは、さまざまな技術によって小型で信頼性の高い電子機器の製造が容易になったことで増大した。このような最初の改善はトランジスタの登場によってもたらされた。1950年代と1960年代のトランジスタ式CPUは、真空管やリレーのようなかさばり、信頼性が低く、壊れやすいスイッチング素子から構築する必要がなくなった。[ 35 ]この改善により、個別部品を含む1枚または複数枚のプリント基板上に、より複雑で信頼性の高いCPUが構築されるようになった。
1964年、IBMはIBM System/360コンピュータアーキテクチャを発表しました。これは、同じプログラムを異なる速度とパフォーマンスで実行できる一連のコンピュータで使用されました。[ 36 ]これは、ほとんどの電子コンピュータが同じメーカー製であっても互いに互換性がなかった時代において重要なことでした。この改善を促進するために、IBMはマイクロプログラム(しばしば「マイクロコード」と呼ばれる)の概念を使用しました。これは、現代のCPUでも広く使用されています。[ 37 ] System/360アーキテクチャは非常に人気があり、数十年にわたってメインフレームコンピュータ市場を支配し、IBM zSeriesのような同様の現代のコンピュータに受け継がれる遺産を残しました。[ 38 ] [ 39 ] 1965年、Digital Equipment Corporation (DEC)は、科学および研究市場を対象としたもう1つの影響力のあるコンピュータ、 PDP-8を発表しました。[ 40 ]
トランジスタベースのコンピュータは、それ以前のものに比べていくつかの明確な利点がありました。トランジスタは信頼性の向上と消費電力の低減を容易にするだけでなく、真空管やリレーに比べてスイッチング時間が短いため、CPUをはるかに高速で動作させることも可能にしました。[ 41 ]この頃には、スイッチング素子はほぼすべてトランジスタであり、信頼性の向上と速度の劇的な向上により、この時期には数十メガヘルツのCPUクロックレートが容易に達成されました。[ 42 ]さらに、ディスクリートトランジスタおよびIC CPUが広く使用される一方で、単一命令複数データ(SIMD)ベクトルプロセッサなどの新しい高性能設計が登場し始めました。[ 43 ]これらの初期の実験的な設計は、後にCray Incや富士通株式会社が製造したような特殊なスーパーコンピュータの時代を生み出しました。[ 43 ]

この時期に、多数のトランジスタをコンパクトな空間に相互接続して製造する方法が開発されました。集積回路(IC)により、多数のトランジスタを単一の半導体ベースのダイ、つまり「チップ」上に製造することが可能になりました。当初は、NORゲートなどの非常に基本的な非特殊デジタル回路のみがICに小型化されました。[ 44 ]これらの「ビルディングブロック」ICに基づくCPUは、一般に「小規模集積回路」(SSI)デバイスと呼ばれます。アポロ誘導コンピュータで使用されたようなSSI ICは、通常、数十個までのトランジスタを含んでいました。SSI ICでCPU全体を構築するには、数千個の個別のチップが必要でしたが、それでも以前のディスクリートトランジスタ設計よりもはるかに少ないスペースと電力で済みました。[ 45 ]
IBMのSystem/370はSystem/360の後継機で、ソリッドロジックテクノロジーのディスクリートトランジスタモジュールではなくSSI ICを使用していた。[ 46 ] [ 47 ] DECのPDP-8 /IとKI10 PDP-10も、PDP-8とKA PDP-10で使用されていた個々のトランジスタからSSI ICに切り替わり、[ 48 ]非常に人気のあるPDP-11シリーズは当初SSI ICで構築されたが、LSIコンポーネントが実用的になると最終的にLSIコンポーネントで実装された。
リー・ボイセルは、1967年の「マニフェスト」を含む影響力のある記事を発表し、比較的少数の大規模集積回路(LSI)から32ビットのメインフレームコンピュータに相当するものを構築する方法を説明した。[ 49 ] [ 50 ] 100個以上のゲートを持つチップであるLSIチップを構築する唯一の方法は、金属酸化物半導体(MOS)半導体製造プロセス(PMOSロジック、NMOSロジック、またはCMOSロジックのいずれか)を使用して構築することであった。しかし、一部の企業は、1970年代までバイポーラ接合トランジスタがMOSチップよりも高速であったため、バイポーラトランジスタ・トランジスタロジック(TTL)チップからプロセッサを構築し続けた(データポイントなどの少数の企業は、1980年代初頭までTTLチップからプロセッサを構築し続けた)。[ 50 ] 1960年代には、MOS ICは低速で、当初は低消費電力を必要とするアプリケーションでのみ有用であると考えられていた。[ 51 ] [ 52 ] 1968年にフェアチャイルド・セミコンダクターのフェデリコ・ファギンがシリコンゲートMOS技術を開発した後、MOS ICは1970年代後半にバイポーラTTLに取って代わり、標準的なチップ技術となった。[ 53 ]
マイクロエレクトロニクス技術が進歩するにつれて、ICに搭載されるトランジスタの数が増加し、完全なCPUに必要な個々のICの数が減少するようになりました。MSIおよびLSI ICではトランジスタ数が数百、そして数千に増加しました。1968年までに、完全なCPUを構築するために必要なICの数は、8種類の異なる24個のICにまで減少し、各ICには約1000個のMOSFETが含まれていました。[ 54 ] SSIおよびMSIの前身とは対照的に、PDP-11の最初のLSI実装には、わずか4つのLSI集積回路で構成されたCPUが含まれていました。[ 55 ]

マイクロプロセッサが初めて登場して以来、他のすべての中央処理装置の実装方法をほぼ完全に凌駕してきました。1971年に製造された最初の商用マイクロプロセッサは、Intel 4004でした。Intel 4004 は、算術論理演算ユニット、制御ユニット、レジスタユニットをチップ上に統合した最初の消費者向け CPU の 1 つです。 [ 56 ] 1974 年に製造された最初の広く使用されたマイクロプロセッサは、Intel 8080でした。当時のメインフレームおよびミニコンピュータのメーカーは、古いコンピュータ アーキテクチャをアップグレードするために独自の IC 開発プログラムを開始し、最終的に、古いハードウェアおよびソフトウェアとの下位互換性を持つ命令セット互換のマイクロプロセッサを製造しました。ユビキタスなパーソナル コンピュータの登場と最終的な成功と相まって、CPUという用語は現在、ほぼ独占的にマイクロプロセッサに適用されます。 [ a ]複数の CPU (コアと表記) を単一の処理チップに組み合わせることができます。[ 57 ]
以前の世代の CPU は、個別の部品と多数の小型集積回路(IC) を 1 枚以上の回路基板上に実装していました。[ 58 ]一方、マイクロプロセッサは、ごく少数の IC (通常は 1 つ) 上に製造された CPU です。[ 59 ]単一のダイ上に実装された結果、CPU 全体のサイズが小さくなり、ゲート寄生容量の減少などの物理的要因によりスイッチング時間が短縮されます。[ 60 ] [ 61 ]これにより、同期マイクロプロセッサは数十メガヘルツから数ギガヘルツのクロックレートを実現できるようになりました。さらに、IC 上に非常に小さなトランジスタを構築できるようになったことで、単一の CPU 内のトランジスタの複雑さと数が何倍にも増加しました。この広く観察されている傾向はムーアの法則で説明されており、2016 年までは CPU (およびその他の IC) の複雑さの増加をかなり正確に予測できることが証明されていました。 [ 62 ] [ 63 ]
1950 年以降、CPU の複雑さ、サイズ、構造、一般的な形式は大きく変化しましたが、[ 64 ]基本的な設計と機能はほとんど変わっていません。今日、ほとんどすべての一般的な CPU は、フォン ノイマン型プログラム内蔵マシンとして非常に正確に説明できます。[ 65 ] [ b ]ムーアの法則がもはや成り立たなくなったため、集積回路トランジスタ技術の限界について懸念が生じています。電子ゲートの極度の小型化により、エレクトロマイグレーションやサブスレッショルドリークなどの現象の影響がはるかに大きくなっています。[ 67 ] [ 68 ]これらの新しい懸念は、量子コンピュータなどの新しい計算方法を研究したり、並列処理や古典的なフォン ノイマン モデルの有用性を拡張する他の方法の使用を拡大したりする研究者を駆り立てる多くの要因の 1 つです。
ほとんどのCPUは、その物理的な形態に関わらず、プログラムと呼ばれる一連の命令を実行することを基本的な動作としています。実行される命令は、何らかのコンピュータメモリに格納されています。ほぼすべてのCPUは、命令のフェッチ、デコード、実行という一連の動作ステップを実行します。これらのステップはまとめて命令サイクルと呼ばれます。
命令の実行後、プログラムカウンタの値がインクリメントされるため、通常は次の命令サイクルで次の命令がフェッチされ、プロセス全体が繰り返されます。ジャンプ命令が実行された場合、プログラムカウンタはジャンプ先の命令のアドレスを含むように変更され、プログラムの実行は通常どおり続行されます。より複雑なCPUでは、複数の命令を同時にフェッチ、デコード、実行できます。このセクションでは、多くの電子機器(マイクロコントローラと呼ばれることが多い)で使用される単純なCPUでよく見られる、一般的に「古典的なRISCパイプライン」と呼ばれるものについて説明します。このセクションでは、CPUキャッシュの重要な役割、したがってパイプラインのアクセス段階についてはほとんど触れていません。
一部の命令は、結果データを直接生成するのではなく、プログラムカウンタを操作します。このような命令は一般に「ジャンプ」と呼ばれ、ループ、条件付きプログラム実行(条件付きジャンプの使用による)、関数の存在などのプログラムの動作を容易にします。[ c ]一部のプロセッサでは、他の命令が「フラグ」レジスタのビットの状態を変更します。これらのフラグは、さまざまな操作の結果を示すことが多いため、プログラムの動作に影響を与えるために使用できます。たとえば、このようなプロセッサでは、「比較」命令が 2 つの値を評価し、フラグ レジスタのビットを設定またはクリアして、どちらが大きいか、または等しいかを示します。これらのフラグの 1 つは、後続のジャンプ命令によってプログラムの流れを決定するために使用できます。
フェッチとは、プログラム メモリから命令(数値または数値のシーケンスで表される) を取得することです。プログラム メモリ内の命令の位置 (アドレス) は、プログラム カウンタ(PC、 Intel x86 マイクロ プロセッサでは「命令ポインタ」と呼ばれる) によって決定され、フェッチされる次の命令のアドレスを識別する数値を格納します。命令がフェッチされると、PC は命令の長さだけインクリメントされ、シーケンス内の次の命令のアドレスが格納されます。[ d ]多くの場合、フェッチされる命令は比較的低速なメモリから取得する必要があり、命令が返されるのを待っている間、CPU が停止します。この問題は、現代のプロセッサではキャッシュとパイプライン アーキテクチャ (下記参照) によって大部分が解決されています。
CPUがメモリからフェッチする命令によって、CPUが何を実行するかが決まります。命令デコーダと呼ばれるバイナリデコーダ回路によって実行されるデコードステップでは、命令はCPUの他の部分を制御する信号に変換されます。
命令の解釈方法は、CPU の命令セットアーキテクチャ (ISA) によって定義されます。[ e ]多くの場合、命令内のビット群 (つまり「フィールド」) はオペコードと呼ばれ、どの操作を実行するかを示します。残りのフィールドは通常、オペランドなど、操作に必要な補足情報を提供します。これらのオペランドは、定数値 (即値と呼ばれる) として指定することも、アドレッシングモードによって決定されるプロセッサレジスタまたはメモリ アドレスである値の位置として指定することもできます。
CPU設計によっては、命令デコーダはハードワイヤードで変更不可能なバイナリデコーダ回路として実装されている。一方、マイクロプログラムを用いて命令をCPU構成信号のセットに変換し、それを複数のクロックパルスにわたって順次適用する方式もある。マイクロプログラムを格納するメモリが書き換え可能な場合もあり、その場合はCPUの命令デコード方法を変更できる。
フェッチとデコードのステップの後、実行ステップが実行されます。CPUアーキテクチャによっては、これは単一のアクション、または一連のアクションで構成される場合があります。各アクションでは、制御信号によってCPUのさまざまな部分が電気的に有効または無効になり、目的の操作の全部または一部を実行できるようになります。その後、アクションは通常クロックパルスに応答して完了します。多くの場合、結果は後続の命令が迅速にアクセスできるように、CPU内部レジスタに書き込まれます。その他の場合、結果は、より低速ではあるものの、安価で容量の大きいメインメモリに書き込まれることがあります。
例えば、加算を実行する命令を実行する場合、オペランド(加算する数値)を含むレジスタと、加算を実行する算術論理演算ユニット(ALU)の各部分がアクティブになります。クロックパルスが発生すると、オペランドはソースレジスタからALUに流れ込み、合計が出力に現れます。後続のクロックパルスでは、他のコンポーネントが有効化(または無効化)され、出力(演算の合計)がストレージ(レジスタやメモリなど)に移動します。結果として得られた合計が大きすぎる場合(つまり、ALUの出力ワードサイズよりも大きい場合)、算術オーバーフローフラグが設定され、次の演算に影響を与えます。

CPUの回路には、命令セットと呼ばれる一連の基本操作が組み込まれています。このような操作には、例えば、2つの数値の加算や減算、2つの数値の比較、プログラムの別の部分へのジャンプなどが含まれます。各命令は、機械語オペコードと呼ばれる固有のビットの組み合わせで表されます。命令を処理する際、CPUは(バイナリデコーダを介して)オペコードを制御信号にデコードし、それによってCPUの動作を制御します。完全な機械語命令は、オペコードと、多くの場合、操作の引数を指定する追加のビット(例えば、加算操作の場合は合計する数値)で構成されます。複雑さのレベルを上げると、機械語プログラムは、CPUが実行する機械語命令の集合となります。
各命令の実際の数学演算は、CPU プロセッサ内の算術論理演算ユニット(ALU) と呼ばれる組み合わせ論理回路によって実行されます。一般に、CPU はメモリから命令をフェッチし、ALU を使用して演算を実行し、その結果をメモリに格納することによって命令を実行します。整数演算と論理演算の命令の他に、メモリからデータをロードしてメモリに戻す命令、分岐演算、CPU の浮動小数点演算ユニット( FPU) によって実行される浮動小数点数の数学演算など、さまざまな機械語命令が存在します。[ 69 ]
制御装置(CU)はCPUの構成要素であり、プロセッサの動作を制御する役割を担います。コンピュータのメモリ、演算論理装置、入出力装置に対し、プロセッサに送信された命令にどのように応答すべきかを指示します。
タイミング信号と制御信号を提供することで、他のユニットの動作を制御します。ほとんどのコンピュータのリソースは CU によって管理されます。CPU と他のデバイス間のデータの流れを制御します。ジョン・フォン・ノイマンは、フォン・ノイマン・アーキテクチャの一部として制御ユニットを含めました。現代のコンピュータ設計では、制御ユニットは通常 CPU の内部部分であり、その全体的な役割と動作は導入以来変わっていません。[ 70 ]

算術論理演算ユニット(ALU)は、プロセッサ内部にあるデジタル回路で、整数演算とビット単位の論理演算を実行します。ALUへの入力は、演算対象となるデータワード(オペランド)、前回の演算からのステータス情報、および制御ユニットから送られる演算指示コードです。実行される命令に応じて、オペランドはCPU内部レジスタ、外部メモリ、またはALU自体が生成する定数から取得されます。
すべての入力信号が安定し、ALU回路を通過すると、実行された演算の結果がALUの出力に現れます。この結果は、レジスタまたはメモリに格納されるデータワードと、通常はこの目的のために確保されたCPU内部の専用レジスタに格納されるステータス情報から構成されます。
現代のCPUは、性能向上のために通常複数のALU(演算論理ユニット)を搭載している。
アドレス生成ユニット(AGU)は、アドレス計算ユニット(ACU)とも呼ばれ、[ 71 ] CPU内部の実行ユニットであり、 CPUがメインメモリにアクセスするために使用するアドレスを計算します。アドレス計算をCPUの他の部分と並列に動作する独立した回路で処理することで、さまざまなマシン命令の実行に必要なCPUサイクル数を削減でき、パフォーマンスが向上します。
CPUは様々な演算を実行する際に、メモリからデータを取得するために必要なメモリアドレスを計算する必要があります。例えば、配列要素のメモリ上の位置は、CPUが実際のメモリ位置からデータを取得する前に計算しなければなりません。これらのアドレス生成計算には、加算、減算、剰余演算、ビットシフトなどの様々な整数演算が含まれます。多くの場合、メモリアドレスの計算には複数の汎用マシン命令が必要となり、それらの命令は必ずしも高速にデコードおよび実行されるとは限りません。CPU設計にAGUを組み込み、AGUを使用する専用命令を導入することで、様々なアドレス生成計算をCPUの他の部分からオフロードし、多くの場合、単一のCPUサイクルで高速に実行できるようになります。
AGUの機能は、特定のCPUとそのアーキテクチャに依存します。そのため、AGUによってはより多くのアドレス計算演算を実装・公開するものもあれば、複数のオペランドを同時に処理できる高度な特殊命令を含むものもあります。一部のCPUアーキテクチャでは複数のAGUが搭載されているため、複数のアドレス計算演算を同時に実行でき、高度なCPU設計のスーパースカラ特性により、さらなるパフォーマンス向上を実現しています。例えば、IntelはSandy BridgeおよびHaswellマイクロアーキテクチャに複数のAGUを組み込んでおり、複数のメモリアクセス命令を並列実行することでCPUメモリサブシステムの帯域幅を拡大しています。
多くのマイクロプロセッサ(スマートフォン、デスクトップ、ラップトップ、サーバーコンピュータなど)には、論理アドレスを物理RAMアドレスに変換し、メモリ保護とページング機能を提供するメモリ管理ユニット(MMU)があり、仮想メモリに役立ちます。MMUは通常プロセッサに統合されていますが、場合によっては別の集積回路(IC)に搭載されています。[ 72 ]よりシンプルなプロセッサ、特にマイクロコントローラには、通常MMUは含まれていません。
CPUキャッシュは、コンピュータの中央処理装置 (CPU) がメイン メモリからデータにアクセスする際の平均コスト (時間またはエネルギー) を削減するために使用するメモリです。[ 73 ]キャッシュは、プロセッサ コアに近い、より小さく高速なメモリで、頻繁に使用されるメインメモリ位置からデータのコピーを格納します。ほとんどの CPU には、通常、複数のキャッシュ レベル (L1、L2、L3、L4 など) の階層として構成された、異なる独立したキャッシュがあります。各キャッシュ レベルは通常、前のレベルよりも低速ですが、容量が大きく、L1 が最も高速で、CPU に最も近いレベルです。L1 レベルには、通常、命令キャッシュとデータ キャッシュが別々にあります。
最新の(高速な)CPUのほとんどは(ごく一部の特殊な例外を除いて[ f ])、複数のレベルのCPUキャッシュを備えています。キャッシュを使用した最初のCPUは、キャッシュレベルが1つしかありませんでした。後のレベル1キャッシュとは異なり、L1d(データ用)とL1i(命令用)に分割されていませんでした。キャッシュを備えた現在のCPUのほぼすべては、分割されたL1キャッシュを備えています。また、L2キャッシュも備えており、より大規模なプロセッサではL3キャッシュも備えています。L2キャッシュは通常分割されておらず、既に分割されているL1キャッシュの共通リポジトリとして機能します。マルチコアプロセッサの各コアには専用のL2キャッシュがあり、通常はコア間で共有されません。L3キャッシュおよび上位レベルのキャッシュは、コア間で共有され、分割されません。L4キャッシュは現在では一般的ではなく、一般的には別のダイまたはチップ上の静的ランダムアクセスメモリ(SRAM)ではなく、動的ランダムアクセスメモリ(DRAM)上にあります。歴史的に見てもL1キャッシュはそうでしたが、より大型のチップが登場したことで、L1キャッシュを含むほぼすべてのキャッシュレベル(最下層を除く)の統合が可能になりました。キャッシュレベルが増えるごとに容量も大きくなり、最適化の方法も異なってきます。
上記で述べた最も重要なキャッシュの「キャッシュサイズ」には含まれない、他の種類のキャッシュも存在します。例えば、ほとんどのCPUに搭載されているメモリ管理ユニット(MMU)の一部である変換ルックアサイドバッファ(TLB)などです。
キャッシュのサイズは一般的に2のべき乗、つまり2、8、16などのKiBまたはMiB(より大きな非L1サイズの場合)ですが、IBM z13には96 KiBのL1命令キャッシュがあります。[ 74 ]
ほとんどのCPUは同期回路であり、クロック信号を用いて逐次的な処理のペースを制御します。クロック信号は、外部発振回路によって生成され、周期的な方形波の形で毎秒一定数のパルスを生成します。クロックパルスの周波数はCPUが命令を実行する速度を決定し、したがって、クロックが速いほど、CPUは毎秒より多くの命令を実行します。
CPUの適切な動作を確保するため、クロック周期はCPU内を全ての信号が伝搬するのに必要な最大時間よりも長く設定されています。クロック周期を最悪の伝搬遅延よりも十分に長い値に設定することで、立ち上がりクロック信号と立ち下がりクロック信号の「エッジ」を利用して、CPU全体とそのデータ転送方法を設計することが可能になります。これにより、設計面と部品点数面の両方でCPUを大幅に簡素化できるという利点があります。しかし、CPUの一部ははるかに高速であるにもかかわらず、CPU全体が最も低速な要素の処理を待たなければならないという欠点もあります。この制限は、CPUの並列性を高める様々な方法によって大部分が補われています(下記参照)。
しかし、アーキテクチャの改善だけでは、グローバル同期型CPUの欠点をすべて解決することはできません。例えば、クロック信号は他の電気信号の遅延の影響を受けます。CPUが複雑化するにつれてクロック周波数が高くなると、ユニット全体でクロック信号の位相(同期)を維持することが難しくなります。そのため、多くの最新のCPUでは、単一の信号がCPUの誤動作を引き起こすほど大幅に遅延するのを避けるために、複数の同一のクロック信号を供給する必要があります。クロック周波数が劇的に上昇するにつれて、もう1つの大きな問題は、CPUが放散する熱量です。常に変化するクロックによって、多くのコンポーネントが、その時点で使用されているかどうかに関係なくスイッチングします。一般的に、スイッチングしているコンポーネントは、静止状態にある要素よりも多くのエネルギーを消費します。したがって、クロック周波数が上昇すると、エネルギー消費量も増加し、CPU冷却ソリューションの形でより多くの放熱が必要になります。
不要なコンポーネントの切り替えに対処する方法の1つにクロックゲーティングと呼ばれるものがあり、これは不要なコンポーネントへのクロック信号をオフにする(実質的に無効にする)というものです。しかし、これは実装が難しいとみなされることが多く、そのため、非常に低消費電力の設計以外では一般的に使用されていません。クロックゲーティングを多用している注目すべきCPU設計の1つは、Xbox 360で使用されているIBM PowerPCベースのXenonです。これにより、Xbox 360の消費電力が削減されます。[ 75 ]
グローバルクロック信号の問題に対処するもう1つの方法は、クロック信号を完全に削除することです。グローバルクロック信号を削除すると、設計プロセスは多くの点でかなり複雑になりますが、非同期(またはクロックレス)設計は、同様の同期設計と比較して、消費電力と放熱において顕著な利点があります。あまり一般的ではありませんが、グローバルクロック信号を使用せずに非同期CPU全体が構築されています。その2つの注目すべき例は、ARM準拠のAMULETとMIPS R3000互換のMiniMIPSです。[ 76 ]
クロック信号を完全に排除するのではなく、一部のCPU設計では、非同期ALUをスーパースカラパイプラインと組み合わせて使用することで、演算性能を向上させるなど、デバイスの特定部分を非同期化することを可能にしています。完全に非同期な設計が同期型と同等またはそれ以上の性能を発揮できるかどうかは必ずしも明確ではありませんが、少なくとも単純な数学演算においては優れていることは明らかです。この点と、優れた消費電力および放熱特性が相まって、組み込みコンピュータに非常に適しています。[ 77 ]
多くの最新のCPUには、CPU回路へのオンデマンド電圧供給を調整するダイ統合型電源管理モジュールが搭載されており、性能と消費電力のバランスを維持できるようになっている。
すべてのCPUは、数値を特定の方法で表現します。たとえば、初期のデジタルコンピュータの中には、数値を馴染みのある10進数(基数10)で表現するものもあれば、 25進数符号化10進数(基数2~5)や3進数(基数3)といった、より特殊な表現方法を採用するものもありました。現代のCPUはほぼすべて、数値を2進数で表現し、各桁は「高」または「低」電圧といった2値物理量で表されます。[ g ]
数値表現に関連して、CPU が表現できる整数のサイズと精度があります。バイナリ CPU の場合、これは CPU が 1 つの操作で処理できるビット数 (バイナリエンコードされた整数の有効桁数) で測定され、これは一般的にワード サイズ、ビット幅、データ パス幅、整数精度、または整数サイズと呼ばれます。CPU の整数サイズは、CPU が直接操作できる整数値の範囲を決定します。[ h ]たとえば、8 ビットCPU は、8 ビットで表現される整数を直接操作できます。8 ビットは 256 (2 8 )個の離散的な整数値の範囲を持ちます。
整数範囲は、CPUが直接アドレス指定できるメモリ位置の数にも影響します(アドレスとは、特定のメモリ位置を表す整数値です)。たとえば、バイナリCPUがメモリアドレスを表すのに32ビットを使用する場合、2³²個のメモリ位置を直接アドレス指定できます。この制限を回避するため、またその他のさまざまな理由から、一部のCPUは、追加のメモリをアドレス指定できるようにするメカニズム(メモリ管理やバンク切り替えなど)を使用します。
ワードサイズが大きいCPUは回路が多く必要となるため、物理的に大きくなり、コストも高くなり、消費電力も増加します(そのため発熱量も増加します)。結果として、16、32、64 、さらには128ビットといったはるかに大きなワードサイズのCPUが利用可能であるにもかかわらず、現代のアプリケーションでは一般的に4ビットまたは8ビットの小型マイクロコントローラが使用されています。しかし、より高いパフォーマンスが求められる場合、ワードサイズが大きいことによるメリット(より広いデータ範囲とアドレス空間)がデメリットを上回る場合があります。CPUは、サイズとコストを削減するために、内部データパスをワードサイズよりも短くすることができます。例えば、IBM System/360の命令セットアーキテクチャは32ビット命令セットでしたが、System/360モデル30とモデル40は算術論理ユニットに8ビットのデータパスを持っていたため、32ビット加算にはオペランドの8ビットごとに1サイクル、合計4サイクルが必要でした。また、Motorola 68000シリーズの命令セットは32ビット命令セットでしたが、Motorola 68000とMotorola 68010は算術論理ユニットに16ビットのデータパスを持っていたため、32ビット加算には2サイクルが必要でした。
ビット長が低い場合と高い場合の両方の利点を得るために、多くの命令セットでは整数データと浮動小数点データで異なるビット幅が採用されており、その命令セットを実装する CPU はデバイスの異なる部分で異なるビット幅を持つことができます。たとえば、IBM System/360命令セットは主に 32 ビットでしたが、浮動小数点数の精度と範囲を向上させるために64 ビット浮動小数点値をサポートしていました。 [ 37 ] System/360 モデル 65 は、10 進数と固定小数点バイナリ演算用に 8 ビット加算器、浮動小数点演算用に 60 ビット加算器を備えていました。[ 78 ]後期の多くの CPU 設計では、特にプロセッサが汎用用途向けで、整数と浮動小数点機能の適切なバランスが求められる場合に、同様の混合ビット幅が使用されています。

前のセクションで説明したCPUの基本動作は、CPUが取り得る最も単純な形態を示しています。このタイプのCPUは通常サブスカラーと呼ばれ、一度に1つまたは2つのデータに対して1つの命令を実行します。つまり、クロックサイクルあたり1命令未満(IPC < 1)の処理速度です。
このプロセスは、サブスカラCPUに固有の非効率性をもたらします。一度に実行される命令は1つだけなので、CPU全体は次の命令に進む前に、その命令が完了するまで待機する必要があります。その結果、サブスカラCPUは、実行に1クロックサイクル以上かかる命令で「ハングアップ」してしまいます。2つ目の実行ユニットを追加しても(後述)、パフォーマンスはあまり改善されません。ハングアップするパスウェイが1つではなく2つになり、未使用のトランジスタの数が増えるだけです。CPUの実行リソースが一度に1つの命令しか処理できないこの設計では、スカラ性能(1クロックサイクルあたり1命令、IPC = 1)しか達成できません。しかし、実際のパフォーマンスはほぼ常にサブスカラ(1クロックサイクルあたり1命令未満、IPC < 1)です。
スカラー性能とより優れた性能を実現しようとする試みは、CPUの動作を線形性よりも並列性を高める様々な設計手法を生み出してきた。CPUにおける並列性について言及する場合、これらの設計手法を分類するために一般的に2つの用語が用いられる。
各手法は、実装方法だけでなく、アプリケーションにおけるCPUのパフォーマンス向上にもたらす相対的な有効性においても異なっている。[ i ]

並列処理能力を高める最もシンプルな方法の一つは、前の命令の実行が完了する前に、命令のフェッチとデコードの最初のステップを開始することです。これは命令パイプライン処理と呼ばれる技術で、現代の汎用CPUのほぼすべてで採用されています。パイプライン処理では、実行経路を複数の段階に分割することで、複数の命令を同時に実行できます。この分割は、各段階で命令がより完成度を高め、最終的に実行パイプラインから出て廃棄される組み立てラインに例えることができます。
しかし、パイプライン処理では、前の処理の結果が次の処理を完了するために必要となる状況が発生する可能性があります。これはデータ依存性の競合と呼ばれる状態です。そのため、パイプライン処理プロセッサはこのような状況をチェックし、必要に応じてパイプラインの一部を遅延させる必要があります。パイプライン処理プロセッサは、パイプラインストール(命令がステージ内で1クロックサイクル以上を費やすこと)によってのみ制限されますが、ほぼスカラー処理に近い性能を発揮できます。

命令パイプラインの改善により、CPU コンポーネントのアイドル時間がさらに短縮されました。スーパースカラと呼ばれる設計には、長い命令パイプラインと、ロード ストア ユニット、算術論理ユニット、浮動小数点ユニット、アドレス生成ユニットなどの複数の同一の実行ユニットが含まれます。[ 79 ]スーパースカラ パイプラインでは、命令が読み込まれてディスパッチャに渡され、ディスパッチャは命令を並列 (同時) に実行できるかどうかを判断します。実行できる場合は、実行ユニットにディスパッチされ、同時実行されます。一般に、スーパースカラ CPU が 1 サイクルで完了する命令の数は、実行ユニットに同時にディスパッチできる命令の数に依存します。
スーパースカラCPUアーキテクチャの設計における難しさの大部分は、効果的なディスパッチャの作成にあります。ディスパッチャは、命令を並列実行できるかどうかを迅速に判断し、実行ユニットをできるだけ多く稼働させるように命令をディスパッチする必要があります。そのためには、命令パイプラインをできるだけ頻繁に満たし、大量のCPUキャッシュが必要となります。また、分岐予測、投機的実行、レジスタリネーミング、アウトオブオーダー実行、トランザクションメモリといったハザード回避技術が、高いパフォーマンスレベルを維持するために不可欠となります。条件付き命令がどの分岐(またはパス)に進むかを予測することで、CPUは条件付き命令が完了するまでパイプライン全体が待機する回数を最小限に抑えることができます。投機的実行は、条件付き操作の完了後に不要となる可能性のあるコード部分を実行することで、パフォーマンスをわずかに向上させることがよくあります。アウトオブオーダー実行は、データ依存性による遅延を減らすために、命令の実行順序をある程度変更します。また、単一の命令ストリームと複数のデータストリームの場合、つまり同じタイプの大量のデータを処理する必要がある場合、最新のプロセッサはパイプラインの一部を無効にすることができます。これにより、単一の命令が何度も実行される際に、CPUはフェッチとデコードのフェーズをスキップし、特定の状況、特にビデオ作成ソフトウェアや写真処理などの非常に単調なプログラムエンジンにおいて、パフォーマンスを大幅に向上させることができます。
CPUの一部がスーパースカラである場合、スーパースカラでない部分はスケジューリングの遅延によりパフォーマンスが低下します。Intel P5 Pentiumには、クロックサイクルごとに1つの命令を受け入れることができるスーパースカラALUが2つ搭載されていましたが、FPUはそれができませんでした。そのため、P5は整数スーパースカラでしたが、浮動小数点スーパースカラではありませんでした。IntelのP5アーキテクチャの後継であるP6では、浮動小数点機能にスーパースカラ機能が追加されました。
シンプルなパイプライン処理とスーパースカラ設計により、CPUはクロックサイクルあたり1命令を超える速度で命令を実行できるため、命令レベル並列性(ILP)が向上します。現代のCPU設計のほとんどは、少なくともある程度はスーパースカラであり、過去10年間に設計された汎用CPUのほぼすべてがスーパースカラです。近年、高ILPコンピュータの設計における重点の一部は、CPUのハードウェアからソフトウェアインターフェース、つまり命令セットアーキテクチャ(ISA)に移っています。超長命令語(VLIW)戦略により、ソフトウェアによって直接的にILPが暗黙的に示されるため、CPUがILPを向上させるための作業が減り、設計の複雑さが軽減されます。
パフォーマンスを向上させるもう 1 つの戦略は、複数のスレッドまたはプロセスを並列に実行することです。この研究分野は並列コンピューティングとして知られています。[ 80 ]フリンの分類では、この戦略はマルチインストゥルメントストリーム、マルチデータストリーム(MIMD)として知られています。 [ 81 ]
この目的で使用される技術の 1 つはマルチプロセッシング(MP) です。[ 82 ]この技術の初期のタイプは対称型マルチプロセッシング(SMP) として知られており、少数の CPU がメモリ システムの一貫性のあるビューを共有します。この方式では、各 CPU はメモリの最新のビューを常に維持するための追加のハードウェアを備えています。メモリの古いビューを回避することで、CPU は同じプログラムで協力でき、プログラムはある CPU から別の CPU に移行できます。協力する CPU の数を少数以上に増やすために、 1990 年代には非均一メモリ アクセス(NUMA) やディレクトリ ベースの一貫性プロトコルなどの方式が導入されました。SMP システムは少数の CPU に限定されますが、NUMA システムは数千のプロセッサで構築されています。当初、マルチプロセッシングは、複数の個別の CPU と、プロセッサ間の相互接続を実装するためのボードを使用して構築されました。プロセッサとその相互接続がすべて単一のチップ上に実装されている場合、その技術はチップレベルマルチプロセッシング(CMP)と呼ばれ、その単一チップはマルチコアプロセッサと呼ばれます。
後に、単一プログラム内でよりきめ細かい並列処理が存在することが認識されました。単一のプログラムには、個別にまたは並列に実行できる複数のスレッド(または関数)が含まれる場合があります。この技術の初期の例のいくつかでは、直接メモリアクセスなどの入出力処理を計算スレッドとは別のスレッドとして実装していました。この技術に対するより一般的なアプローチは、複数の計算スレッドを並列に実行するようにシステムが設計された1970年代に導入されました。この技術はマルチスレッド(MT)として知られています。このアプローチは、マルチプロセッシング(MP)の場合のようにCPU全体を複製するのではなく、MTをサポートするためにCPU内のごく一部のコンポーネントのみを複製するだけで済むため、マルチプロセッシングよりもコスト効率が高いと考えられています。MTでは、実行ユニットとキャッシュを含むメモリシステムが複数のスレッド間で共有されます。MTの欠点は、マルチスレッドのハードウェアサポートがMPよりもソフトウェアから見えやすいため、オペレーティングシステムなどのスーパーバイザソフトウェアがMTをサポートするために大きな変更を経る必要があることです。実装されたマルチスレッド方式の一つに、テンポラルマルチスレッドと呼ばれるものがあります。これは、外部メモリからデータが返ってくるのを待って停止するまで、1つのスレッドが実行される方式です。この方式では、CPUは実行準備が整った別のスレッドに素早くコンテキストスイッチします。この切り替えは、UltraSPARC T1のように、多くの場合1つのCPUクロックサイクルで行われます。もう一つのマルチスレッド方式は、同時マルチスレッドです。これは、複数のスレッドからの命令が1つのCPUクロックサイクル内で並列に実行される方式です。
1970年代から2000年代初頭にかけての数十年間、高性能汎用CPUの設計においては、パイプライン処理、キャッシュ、スーパースカラ実行、アウトオブオーダー実行などの技術を用いて高いILPを実現することに重点が置かれていました。この傾向は、Intel Pentium 4のような大規模で電力消費の大きいCPUの誕生へと繋がりました。しかし、2000年代初頭には、CPUの動作周波数とメインメモリの動作周波数の乖離が拡大し、さらに高度なILP技術によってCPUの消費電力が増大したため、CPU設計者はILP技術による性能向上を阻まれるようになりました。
CPU設計者はその後、トランザクション処理などの商用コンピューティング市場からアイデアを取り入れた。そこでは、単一のスレッドやプロセスのパフォーマンスよりも、複数のプログラムの総合的なパフォーマンス、つまりスループットコンピューティングの方が重要視されていた。
この重点の転換は、デュアルコア以上のプロセッサ設計の普及、特にIntelのより新しい設計が、スーパースカラではないP6アーキテクチャに似ていることから明らかです。x86-64 OpteronおよびAthlon 64 X2、SPARC UltraSPARC T1、IBM POWER4およびPOWER5、Xbox 360のトリプルコアPowerPC設計や PlayStation 3の7コアCellマイクロプロセッサなど、いくつかのプロセッサファミリーの後期設計では、チップレベルのマルチプロセッシングが採用されています。
プロセッサ(そして実際にはコンピューティング全般)のあまり一般的ではないが、ますます重要になっているパラダイムは、データ並列処理を扱います。先に述べたプロセッサはすべて、何らかのタイプのスカラーデバイスと呼ばれています。[ j ]その名前が示すように、ベクトルプロセッサは、1 つの命令のコンテキストで複数のデータ片を処理します。これは、命令ごとに 1 つのデータ片を処理するスカラープロセッサとは対照的です。Flynnの分類法を使用すると、これらの 2 つのデータ処理方式は、それぞれ、単一命令ストリーム、複数データストリーム ( SIMD ) および単一命令ストリーム、単一データストリーム ( SISD )と一般的に呼ばれます。データのベクトルを処理するプロセッサを作成する大きな利点は、大量のデータに対して同じ操作 (たとえば、合計またはドット積) を実行する必要があるタスクを最適化することです。これらのタイプのタスクの古典的な例としては、マルチメディアアプリケーション (画像、ビデオ、音声) や、多くの種類の科学およびエンジニアリング タスクなどがあります。スカラープロセッサは、データセット内の各命令と値をフェッチ、デコード、実行するという一連のプロセスを完了する必要があるのに対し、ベクトルプロセッサは、比較的大きなデータセットに対して単一の命令で単一の演算を実行できます。これは、アプリケーションが、大きなデータセットに対して1つの演算を適用する多くのステップを必要とする場合にのみ可能です。
Cray-1のような初期のベクトルプロセッサのほとんどは、科学研究や暗号化アプリケーションにほぼ限定されていました。しかし、マルチメディアがデジタルメディアへと大きく移行するにつれて、汎用プロセッサにおける何らかの形の SIMD の必要性が高まってきました。汎用プロセッサに浮動小数点演算ユニットが搭載されるようになって間もなく、1990 年代半ばには汎用プロセッサ向けの SIMD 実行ユニットの仕様と実装も登場し始めました。HP のMultimedia Acceleration eXtensions (MAX) や Intel のMMXなど、これらの初期の SIMD 仕様の中には整数のみを扱うものもありました。SIMD の恩恵を受けるアプリケーションの多くは主に浮動小数点数を扱うため、これは一部のソフトウェア開発者にとって大きな障害となりました。開発者は徐々にこれらの初期の設計を改良し、現在では一般的な SIMD 仕様へと作り変えました。これらの仕様は通常、1 つの命令セットアーキテクチャ(ISA)に関連付けられています。注目すべき現代の例としては、IntelのStreaming SIMD Extensions(SSE)やPowerPC関連のAltiVec(VMXとも呼ばれる)などが挙げられる。[ k ]
多くの最新のアーキテクチャ(組み込みアーキテクチャを含む)には、実行中のソフトウェアのメトリクスの低レベル(命令レベル)収集、ベンチマーク、デバッグ、または分析を可能にするハードウェアパフォーマンスカウンタ(HPC)が含まれていることがよくあります。 [ 83 ] [ 84 ] HPCは、リターン指向プログラミング(ROP)やSIGRUTリターン指向プログラミング(SROP)のエクスプロイトなど、ソフトウェアの異常または疑わしいアクティビティを検出および分析するためにも使用できます。[ 85 ]これは通常、ソフトウェアセキュリティチームが悪意のあるバイナリプログラムを評価および発見するために行います。[ 86 ]
IBM、Intel、AMD、Armなどの多くの主要ベンダーは、CPUのレジスタからデータを収集してメトリクスを取得するために使用できるソフトウェアインターフェイス(通常はC/C++で記述)を提供しています。[ 87 ]perfオペレーティングシステムベンダーも、カーネルやアプリケーションを実行しているCPUイベントを記録、ベンチマーク、またはトレースするためのソフトウェア(Linuxなど)を提供しています。
ハードウェアカウンタは、CPU のコア要素 (機能ユニット、キャッシュ、メインメモリなど) に関連する包括的なパフォーマンス メトリックを収集するための低オーバーヘッドの方法を提供します。これは、ソフトウェア プロファイラに比べて大きな利点です。[ 88 ]さらに、一般的にプログラムの基となるソース コードを変更する必要がなくなります。[ 89 ]ハードウェア設計はアーキテクチャによって異なるため、ハードウェアカウンタの具体的なタイプと解釈も変わります。
最新のCPUのほとんどは、オペレーティングシステムや仮想化をサポートするための特権モードを備えている。
クラウドコンピューティングは仮想化を利用して、個別のユーザー向けに仮想中央処理装置[ 90 ](vCPU )を提供することができます[ 91 ] 。vCPUは仮想プライベートサーバー(VPS) と混同しないでください。
ホストは、仮想システムが動作する物理マシンの仮想的な同等物です。[ 92 ]複数の物理マシンが連携して動作し、全体として管理されている場合、グループ化されたコンピューティングおよびメモリ リソースはクラスタを形成します。一部のシステムでは、クラスタへの動的な追加と削除が可能です。ホストおよびクラスタ レベルで利用可能なリソースは、きめ細かい粒度でリソース プールに分割できます。
プロセッサの性能や速度は、他の多くの要因の中でも、クロック周波数(一般的にヘルツの倍数で表される)とクロックあたりの命令数(IPC)に依存し、これらがCPUが実行できる1秒あたりの命令数(IPS)の要因となります。[ 93 ] [ 94 ] 報告されているIPS値の多くは、分岐の少ない人工的な命令シーケンスでの「ピーク」実行速度を表していますが、実際のワークロードは、実行に時間がかかるものもある命令とアプリケーションの組み合わせで構成されています。メモリ階層の性能もプロセッサの性能に大きく影響しますが、IPSの計算ではほとんど考慮されていない問題です。これらの問題のため、一般的に使用されるアプリケーションでの実際の有効性能を測定するために、 SPECintなどのさまざまな標準化されたテスト(この目的のために「ベンチマーク」と呼ばれることが多い)が開発されました。
コンピュータの処理性能は、マルチコアプロセッサを使用することで向上します。これは基本的に、2 つ以上の個別のプロセッサ (この意味ではコアと呼ばれます) を 1 つの集積回路に接続することです。 [ 95 ]理想的には、デュアルコアプロセッサはシングルコアプロセッサのほぼ 2 倍のパワーを持ちます。実際には、ソフトウェア アルゴリズムと実装が不完全なため、パフォーマンスの向上ははるかに小さく、約 50% 程度です。[ 96 ]プロセッサのコア数を増やす (つまり、デュアルコア、クアッドコアなど) と、処理できるワークロードが増加します。これは、プロセッサが多数の非同期イベント、割り込みなどを処理できるようになったことを意味します。これらのイベントや割り込みは、CPU が過負荷になると負担になります。これらのコアは、処理工場の異なるフロアと考えることができ、各フロアは異なるタスクを処理します。単一のコアでは情報を処理するのに十分でない場合、これらのコアは隣接するコアと同じタスクを処理することがあります。マルチコア CPU は、追加の処理能力を提供することで、コンピュータが複数のタスクを同時に実行する能力を高めます。しかし、速度の向上は追加されるコアの数に直接比例するわけではありません。これは、コアが特定のチャネルを介して相互作用する必要があり、このコア間通信が利用可能な処理速度の一部を消費するためです。[ 97 ]
同時マルチスレッドやアンコアなど、利用率向上を目指して実際のCPUリソースを共有する現代のCPU特有の機能により、パフォーマンスレベルとハードウェア使用状況の監視は徐々に複雑な作業になってきました。[ 98 ]これに対応するため、一部のCPUは、CPUのさまざまな部分の実際の使用状況を監視し、ソフトウェアからアクセスできるさまざまなカウンタを提供する追加のハードウェアロジックを実装しています。その一例が、Intelのパフォーマンスカウンタモニタ技術です。[ 9 ]
オーバークロックとは、CPU(およびその他のコンポーネント)のクロック速度を定格速度以上に上げるプロセスです。コンポーネントのクロック速度を上げると、1秒あたりの処理回数が増えます。[ 99 ]オーバークロックはCPUの温度を上昇させ、過熱を引き起こす可能性があるため、ほとんどのユーザーはオーバークロックを行わず、クロック速度を変更しません。メーカーは、クロック比、最大消費電力、またはその両方を制限するなどして、コンポーネントのオーバークロックの度合いを制限する場合があります。
一部のプロセッサの設計は複雑化し、完全なテストが困難になっており、これが大手クラウドプロバイダーで問題を引き起こしている。[ 100 ]
{{cite journal}}: CS1メンテナンス: DOIは2026年7月現在非アクティブです(リンク)[...] クラウドコンピューティングでは、複数のソフトウェアコンポーネントが同じブレード上の仮想環境で実行され、仮想マシン(VM)ごとに1つのコンポーネントが実行されます。各VMには、ブレードのCPUの一部である仮想中央処理装置[...]が割り当てられます。
仮想中央処理装置 (vCPU)[:] 物理 CPU を細分化します。インスタンスはこれらの分割を使用できます。
{{cite web}}: CS1 maint: url-status (リンク)