たとえば、なぜ2.66 GHzのデュアルコアCore i5が、デュアルコアでもある2.66 GHzのCore 2 Duoよりも高速になるのはなぜですか?
これは、より少ないクロックサイクルで情報を処理できる新しい命令によるものですか?他にどのようなアーキテクチャの変更が関係していますか?
この質問は頻繁に出され、答えは通常同じです。この投稿は、この質問に対する決定的な正統的な答えを提供することを目的としています。回答を編集して詳細を追加してください。
たとえば、なぜ2.66 GHzのデュアルコアCore i5が、デュアルコアでもある2.66 GHzのCore 2 Duoよりも高速になるのはなぜですか?
これは、より少ないクロックサイクルで情報を処理できる新しい命令によるものですか?他にどのようなアーキテクチャの変更が関係していますか?
この質問は頻繁に出され、答えは通常同じです。この投稿は、この質問に対する決定的な正統的な答えを提供することを目的としています。回答を編集して詳細を追加してください。
回答:
通常、新しい指示が原因ではありません。プロセッサが同じ命令を実行するために必要な命令サイクルが少ないからです。これには、多くの理由が考えられます。
キャッシュが大きいと、メモリを待機する無駄な時間が少なくなります。
実行ユニットが多いほど、命令の操作を開始するまでの待ち時間が短くなります。
より良い分岐予測は、実際に実行する必要のない命令を投機的に実行する無駄な時間を短縮することを意味します。
実行ユニットの改善により、命令の完了を待つ時間が短縮されます。
パイプラインが短いほど、パイプラインの充填が速くなります。
等々。
クロックレートを無期限に増やすことはできません。
一見すると、プロセッサは命令のストリームを次々と単純に実行しているように見えますが、クロックレートが高くなるとパフォーマンスが向上します。ただし、クロックレートを上げるだけでは十分ではありません。クロックレートが上がると、消費電力と発熱量が増加します。
非常に高いクロックレートでは、CPUコア電圧の大幅な増加が必要になります。TDPはV コアの 2乗とともに増加するため、最終的には、過剰な電力消費、熱出力、および冷却要件により、クロックレートのさらなる増加を防ぐことができます。2004年、ペンティアム4 プレスコットの時代にこの制限に達しました。電力効率の最近の改善は役立っていますが、クロックレートの大幅な増加はもはや実現不可能です。参照:なぜCPUメーカーは、プロセッサのクロック速度の増加を停止したのですか?
長年にわたる最先端の熱狂的なPCの株価クロック速度のグラフ。画像ソース
一見シーケンシャルな命令ストリームは、多くの場合並列化できます。
パイプライン処理は、命令を小さな断片に分割し、それらを並行して実行できます。
各命令は、一連のステップに分割できます。各ステップは、プロセッサの別々の部分で実行されます。命令のパイプライン化により、各命令が完全に終了するのを待たずに、複数の命令がこれらの手順を次々に実行できます。パイプライン処理により、より高いクロックレートが可能になります。各クロックサイクルで各命令の1ステップを完了することにより、命令全体を一度に1つずつ完了する必要がある場合よりも、サイクルごとに必要な時間が短くなります。
古典的なRISCパイプラインは命令フェッチ、命令デコード、命令実行、メモリアクセス、ライトバック:5つの段階が含まれています。最新のプロセッサは、実行をより多くのステップに分解し、より多くのステージでより深いパイプラインを生成します(各ステージが小さく完了にかかる時間が短いほど達成可能なクロックレートが増加します)。
ただし、パイプライン処理は、プログラムの正しい実行を保証するために解決しなければならない危険をもたらす可能性があります。
各命令の異なる部分が同時に実行されているため、正しい実行を妨げる競合が発生する可能性があります。これらはハザードと呼ばれます。ハザードには、データ、構造、および制御の3つのタイプがあります。
指示が同じデータを同時に、または間違った順序で読み取り、変更すると、データの危険が発生し、結果が不正確になる可能性があります。構造上の危険は、複数の命令が同時にプロセッサの特定の部分を使用する必要がある場合に発生します。条件分岐命令に遭遇すると、制御の危険が発生します。
これらの危険はさまざまな方法で解決できます。最も簡単な解決策は、パイプラインを単に停止させ、パイプライン内の1つまたは複数の命令の実行を一時的に保留して、正しい結果を確保することです。パフォーマンスが低下するため、これは可能な限り回避されます。データの危険性については、オペランド転送などの手法を使用してストールを削減します。制御ハザードは分岐予測によって処理されます。分岐予測には特別な処理が必要であり、次のセクションで説明します。
分岐予測は、パイプライン全体を混乱させる可能性のある制御の危険を解決するために使用されます。
条件分岐が発生したときに発生する制御の危険は、特に深刻です。分岐は、特定の条件が真であるか偽であるかに基づいて、命令ストリーム内の次の命令ではなく、プログラムの他の場所で実行が継続する可能性をもたらします。
実行する次の命令は分岐条件が評価されるまで決定できないため、不在の分岐後にパイプラインに命令を挿入することはできません。したがって、パイプラインは空になり(フラッシュされ)、パイプライン内のステージとほぼ同じ数のクロックサイクルを浪費する可能性があります。分岐はプログラムで非常に頻繁に発生する傾向があるため、制御の危険がプロセッサのパフォーマンスに重大な影響を与える可能性があります。
分岐予測は、分岐が行われるかどうかを推測することにより、この問題に対処します。これを行う最も簡単な方法は、単に分岐が常に行われるか、行われないと仮定することです。ただし、最新のプロセッサは、予測精度を高めるために、はるかに高度な技術を使用しています。本質的に、プロセッサは以前のブランチを追跡し、この情報をいくつかの方法のいずれかで使用して、次に実行する命令を予測します。その後、予測に基づいて正しい場所からの命令をパイプラインに供給することができます。
もちろん、予測が間違っている場合は、分岐の後にパイプラインを介して送られた命令はすべて破棄され、それによってパイプラインがフラッシュされます。その結果、パイプラインが長くなるにつれて、分岐予測の精度がますます重要になります。特定の分岐予測手法は、この回答の範囲外です。
キャッシュは、メモリアクセスを高速化するために使用されます。
最新のプロセッサは、メインメモリでアクセスできるよりもはるかに高速に命令を実行し、データを処理できます。プロセッサがRAMにアクセスする必要がある場合、データが使用可能になるまで実行が長時間停止する可能性があります。この影響を軽減するために、キャッシュと呼ばれる小さな高速メモリ領域がプロセッサに含まれています。
プロセッサダイで使用できるスペースが限られているため、キャッシュのサイズは非常に限られています。この限られた容量を最大限に活用するために、キャッシュには、最近または頻繁にアクセスされるデータのみが保存されます(一時的な局所性)。メモリアクセスは特定の領域内でクラスター化される傾向があるため(空間的局所性)、最近アクセスされたものに近いデータブロックもキャッシュに格納されます。参照:参照の局所性
また、キャッシュはサイズが異なる複数のレベルで構成され、サイズの大きいキャッシュは小さいキャッシュよりも低速になる傾向があるため、パフォーマンスを最適化します。たとえば、プロセッサのサイズが32 KBのみのレベル1(L1)キャッシュがあり、そのレベル3(L3)キャッシュのサイズは数メガバイトである場合があります。キャッシュのサイズとキャッシュの結合性は、プロセッサがフルキャッシュ上のデータの置換を管理する方法に影響し、キャッシュを介して得られるパフォーマンスの向上に大きく影響します。
アウトオブオーダー実行は、独立した命令を最初に実行できるようにすることで、危険によるストールを減らします。
命令ストリーム内のすべての命令が互いに依存しているわけではありません。例えば、もののはa + b = c
前に実行する必要がありc + d = e
、a + b = c
かつd + e = f
独立しており、同時に実行することができます。
アウトオブオーダー実行は、この事実を利用して、1つの命令がストールしている間に他の独立した命令を実行できるようにします。ロックステップで次々に実行する命令を要求する代わりに、独立した命令を任意の順序で実行できるようにスケジューリングハードウェアが追加されます。命令は命令キューにディスパッチされ、必要なデータが利用可能になるとプロセッサの適切な部分に発行されます。このようにして、前の命令からのデータを待ってスタックしている命令は、独立した後の命令を拘束しません。
スーパースカラーアーキテクチャにより、命令ストリーム内の複数の命令を同時に実行できます。
上記の手法は、命令パイプラインのパフォーマンスを向上させるだけです。これらの手法だけでは、クロックサイクルごとに複数の命令を完了することはできません。ただし、命令ストリーム内の個々の命令は、互いに依存していない場合(上記の順不同の実行セクションで説明したように)など、並行して実行できることがよくあります。
スーパースカラーアーキテクチャは、命令を一度に複数の機能ユニットに送信できるようにすることで、この命令レベルの並列性を活用しています。プロセッサは、特定のタイプの複数の機能ユニット(整数ALUなど)および/または命令が同時に送信される可能性のある異なるタイプの機能ユニット(浮動小数点ユニットや整数ユニットなど)を持つことができます。
スーパースカラープロセッサでは、命令はアウトオブオーダーデザインのようにスケジュールされますが、複数の発行ポートがあり、異なる命令を同時に発行して実行できます。拡張された命令デコード回路により、プロセッサは各クロックサイクルで一度に複数の命令を読み取り、それらの関係を決定できます。最新の高性能プロセッサは、各命令の実行内容に応じて、クロックサイクルごとに最大8つの命令をスケジュールできます。これは、プロセッサがクロックサイクルごとに複数の命令を完了する方法です。参照:AnandTechのHaswell実行エンジン
複雑な操作を短時間で実行する、より高度な手順が追加されました。
トランジスタの予算が増加すると、複雑な操作を通常よりも短い時間で実行できる、より高度な命令を実装することが可能になります。例には、複数のデータに対して同時に計算を実行するSSEやAVXなどのベクトル命令セットや、データの暗号化と復号化を加速するAES命令セットが含まれます。
これらの複雑な操作を実行するために、最新のプロセッサーはマイクロ操作(μop)を使用します。複雑な命令は、μopのシーケンスにデコードされ、専用のバッファー内に格納され、個別に実行されるようにスケジュールされます(データの依存関係によって許可される範囲で)。これにより、プロセッサにILPを活用する余地が増えます。パフォーマンスをさらに向上させるために、最近実行された命令のμopをすばやく検索できるように、最近デコードされたμopを格納するために特別なμopキャッシュを使用できます。
ただし、これらの命令を追加しても、パフォーマンスは自動的には向上しません。新しい命令は、アプリケーションがそれらを使用するように作成されている場合にのみ、パフォーマンスを向上させることができます。これらの命令の採用は、それらを使用するアプリケーションが、それらをサポートしていない古いプロセッサでは動作しないという事実により妨げられています。
パイプラインは長年にわたって長くなっており、各ステージを完了するのに必要な時間を短縮しているため、より高いクロックレートを実現しています。ただし、とりわけ、パイプラインが長いと、誤った分岐予測のペナルティが増加するため、パイプラインが長くなりすぎることはありません。非常に高いクロック速度に到達しようとして、Pentium 4プロセッサはPrescottで最大31ステージの非常に長いパイプラインを使用しました。パフォーマンスの赤字を減らすために、プロセッサは命令が失敗する場合でも命令を実行しようとし、成功するまで試行を続けます。これにより、消費電力が非常に高くなり、ハイパースレッディングから得られるパフォーマンスが低下しました。特にクロックレートのスケーリングが壁に達したため、新しいプロセッサはこれほど長くパイプラインを使用しなくなりました。Haswellは14から19ステージの間で変化するパイプラインを使用し、低電力アーキテクチャはより短いパイプラインを使用します(Intel Atom Silvermontには12から14ステージがあります)。
より高度なアーキテクチャにより分岐予測の精度が向上し、予測ミスによるパイプラインフラッシュの頻度が減り、より多くの命令を同時に実行できるようになりました。今日のプロセッサのパイプラインの長さを考慮すると、これは高いパフォーマンスを維持するために重要です。
トランジスタバジェットが増加すると、より大きく効果的なキャッシュをプロセッサに組み込むことができ、メモリアクセスによるストールが減少します。メモリアクセスは、最新のシステムで完了するために200サイクル以上を必要とする可能性があるため、メインメモリにアクセスする必要性を可能な限り減らすことが重要です。
より新しいプロセッサは、より高度なスーパースカラー実行ロジックと、より多くの命令を同時にデコードおよび実行できる「より広い」設計により、ILPをよりうまく活用できます。ハスウェルのアーキテクチャは、4つの命令をデコードし、クロックサイクル毎に8マイクロオペレーションをディスパッチすることができます。トランジスタバジェットを増やすと、整数ALUなどの機能ユニットをプロセッサコアに含めることができます。リザベーションステーション、リオーダーバッファ、レジスタファイルなど、アウトオブオーダーおよびスーパースカラーの実行で使用される主要なデータ構造は、新しい設計で拡張され、プロセッサがILPを活用するためにより広い範囲の命令を検索できるようになります。これは、今日のプロセッサのパフォーマンス向上の主な原動力です。
より新しいプロセッサにはより複雑な命令が含まれており、これらの命令を使用してパフォーマンスを向上させるアプリケーションが増えています。命令選択の改善や自動ベクトル化などのコンパイラ技術の進歩により、これらの命令をより効果的に使用できるようになりました。
上記に加えて、ノースブリッジ、メモリコントローラー、PCIeレーンなど、以前はCPUの外部にあった部品の統合が強化されたことで、I / Oとメモリレイテンシが削減されました。これにより、他のデバイスからのデータへのアクセスの遅延によって引き起こされるストールが減少し、スループットが向上します。
絶対的な決定的なリファレンスは、Intel 64およびIA-32 Architectures Software Developer Manualsです。アーキテクチャ間の変更の詳細を説明し、x86アーキテクチャを理解するための優れたリソースです。
結合したボリューム1〜3Cをダウンロードすることをお勧めします(そのページの最初のダウンロードリンク)。第1巻第2.2章には、必要な情報が記載されています。
その章に記載されているコアからネハレム/サンディブリッジのマイクロアーキテクチャまでの一般的な違いは次のとおりです。
完全なリストは、上記のリンク(Vol。1、Ch。2.2)にあります。
前に言ったことがすべて真実ですが、ある程度です。私の答えは簡単です。新しい世代のプロセッサは、主に大きくて優れた組織化されたキャッシュを持っているため、「高速」です。これは、コンピューターのパフォーマンスの主要な要因です。より定量的な考慮事項については、「Linux Magazine:HPCのパフォーマンスを促進するもの」を参照してください。
つまり、ほとんどの一般的なアプリケーション(SPECコレクションなど)の場合、制限要因はメモリです。実際に持続的な計算が実行されている場合、キャッシュにはすべてデータがロードされますが、キャッシュミスがあるたびにCPU実行パイプが停止して待機します。問題は、CPUパイプラインがどれほど洗練されていても、またはより良い命令であっても、命令レベルの並列性は依然としてかなり制限されていることです(特別に高度に最適化されたプリフェッチの場合を除く)。重要な依存関係が見つかると、すべての並列処理は5〜10 CPUクロックで終了しますが、cahelineを削除してメインメモリから新しいものをロードするには数百のCPUクロックが必要です。したがって、プロセッサは何もしないで待機します。この概念全体は、マルチコアにも当てはまります。
したがって、「より高速な」PCが必要な場合は、余裕のある最大キャッシュを備えたCPUで購入してください。
CPUがより高い実行ユニット(計算ユニット)を含めることにより、各サイクル(クロック)あたりのひどいロット命令を改善するため、そのためIPCを強化し、さらに、キャッシュ、RAM、デコード、フェッチレイテンシを削減し、改善します順不同の操作と分岐予測。その後、キャッシュを追加し、待ち時間を短縮します。より高い帯域幅のキャッシュ。新しい指示を随時追加してください。命令ごとに必要なサイクルを削減する(CPI)
クロック速度はCPUのパフォーマンスの一部であり、重要なコンポーネントですが、幸運なことに、過去10年ほどでメソッドノードが壁にぶつかりました。5.0〜5.2Ghzを超える高品質の水冷にもかかわらず、何もできません。 、ドライアイスや液体窒素に頼らずに。