コンピュータ速度のほとんどすべての進歩は、次のいずれかの分野からもたらされています。
より小さなトランジスタ
トランジスタを小さくすると、次の2つのことが起こります。
- それらは物理的に互いに近いため、電気信号が発信元から宛先に移動するのにかかる時間は短くなります。そのため、電気信号は50年前より速く移動することはありませんが、現在ではより短い距離を移動することがよくあります。
- より多くのトランジスタをチップ上に含めることができます。つまり、同時により多くの「作業」を行うことができます。トランジスタを追加するほど、有用な作業を見つけるのが難しくなりますが、多くの巧妙なトリックが使用されます(以下を参照)。
命令ごとの「有用な作業」の増加
たとえば、一部のプロセッサには整数を乗算または除算する命令がありません。代わりに、このタスクは遅いソフトウェアルーチンで実行する必要があります。乗算および除算命令を追加すると、処理速度が大幅に向上します。浮動小数点命令を追加すると、浮動小数点数を必要とするソフトウェアを高速化できます。
命令ごとにより多くの「有用な作業」を行う重要な方法は、単語サイズを増やすことです。32ビットの数値で演算を実行できるCPUは、多くの場合、16ビットまたは8ビットのCPUと同じタスクを実行するために必要な命令がはるかに少なくなります。
一部のプロセッサは、いくつかのことを一度に行う命令、特に複数のデータ項目に対して同じ操作を行う命令(SIMD)をサポートしています。
サイクルごとのその他の命令
「クロックサイクル」は、プロセッサが現在の状態から次の状態に移行する方法です。ある意味では、プロセッサが一度に実行できる作業の最小単位です。ただし、特定の命令にかかるクロックサイクル数は、プロセッサの設計によって異なります。
パイプラインプロセッサの出現により、個別の命令が「オーバーラップ」することが可能になりました。つまり、前の命令が終了する前に開始されます。ただし、特定の命令は次の命令を無効にする可能性があり、次の命令が部分的に実行されるまでわからないため、事態は複雑になります。(パイプラインプロセッサには、すべてが正常に機能することを確認するロジックが含まれていますが、パフォーマンス特性はより複雑です。)
スーパースカラープロセッサはこれを次のレベルに引き上げ、文字通り2つの命令を同時に実行し、順不同の実行によりさらに1ステップ実行し、順不同で命令を実行できます。これらの機能は、命令ストリームの分析を必要とし、どの命令が互いに衝突しないかを調べます。
そのようなトリックは他にもありますが(例:分岐予測、投機的実行)、より重要なのは全体像です:
- すべての命令が完了するまでに一定数のクロックサイクルが必要です(必ずしも一定ではありません)
- しかし、複数の指示を一度に進行できます
- したがって、測定可能な「サイクルあたりの命令数」があります。これは、ハイエンドプロセッサでは1を超えています。
- しかし、それはワークロードに非常に強く依存します
1秒あたりのサイクル数を増やす
言い換えれば、より高いクロック速度。クロック速度を上げると、発生する熱が増加するだけでなく、回路の安定化にかかる時間制限が小さくなるため、より厳格なチップ設計が必要になります。実用的な限界に達した2000年代まで、私たちはこれから多くのマイレージを得ました。
適切なタイミングで適切な場所にあるデータ
CPU内のコンポーネントは、トランジスタの縮小によりますます近づいていますが、CPUとRAMは5〜10 cm離れています。命令がRAMから何かを必要とする場合、その命令は完了するのに5または6サイクルかかりません。約200かかります。これはフォンノイマンのボトルネックの問題です。
これに対する主な武器はキャッシュです。最近アクセスしたデータは再びアクセスされる可能性が高いため、CPUチップ内の特別なメモリ(キャッシュと呼ばれる)に保持され、アクセスがはるかに高速になります。
ただし、他の手法(パイプライン処理や分岐予測など)は、データの到着を待っている間にプロセッサーが有用な作業を行えるようにし、どのデータがすぐに必要になるかを予測するのに役立ちます。
複数および/または特殊なプロセッサ
複数のプロセッサよりも単一のプロセッサ用のソフトウェアを書く方がはるかに簡単です。ただし、パフォーマンス/コスト/電力消費のメリットにより価値がある場合もあります。
また、特定のプロセッサは特定のタスクに特に適しています。たとえば、GPUは、2Dおよび3Dのグラフィックとエフェクトのレンダリングに必要な計算用に特別に設計されています。
マルチコアプロセッサは、本質的に単一チップ上の複数のプロセッサです。