![製造プロセスとコンパイラの品質はCPUのパフォーマンスにどのように影響しますか](https://rvso.com/image/1400507/%E8%A3%BD%E9%80%A0%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%A8%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%81%AE%E5%93%81%E8%B3%AA%E3%81%AFCPU%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%BD%B1%E9%9F%BF%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B.png)
講義を読んでいたのですが、スライドの1つにCPUのパフォーマンスに影響を与える要因がリストされていましたが、それがどのように機能するのか理解できません。製造工程そしてコンパイラの品質CPUパフォーマンスに影響する
答え1
コンパイラの品質の方が簡単です...
優れたコンパイラは、コードを CPU 命令に効率的に変換する方法を知っています。
1+1 などの簡単な数式を実行するソフトウェアがあるとします。スマートにコンパイルされたアプリケーションは、CPU に数値を加算し、答えを保存するように指示し、ジョブを完了します。これは次のように表すことができます。
- メモリ0を1に設定する
- メモリ1を1に設定する
- メモリ0を1に追加
- メモリバンク 0 に保存します。簡単です!
悪いコンパイラ (私はいくつか見たことがあります!) は同じことを行いますが、同じことを行うために大量の追加命令を発行するため、パフォーマンスが低下し、アプリケーションの速度が低下します。同じ例:
- メモリを0に設定
- メモリ1を設定
- メモリ0を0に設定する
- メモリ1を0に設定する
- メモリ0を1に設定する
- メモリ1を1に設定する
- メモリ0と1から値を思い出す
- それらを足し合わせる
- 結果をメモリ0に保存する
ここで、ビデオ エディター、グラフィック アプリケーション、ゲーム、さらにはワード プロセッサなどの複雑なアプリケーションでは、起動するだけで数十万 (数千万ではないにしても) の操作を実行する必要があることを覚えておいてください。これが優れたコンパイラの影響です。
製造プロセスは、共有機能を通じて複数のアプリケーションを「接着」するという点で、この延長線上にあるものです。これらが適切に行われると、同じ最終結果を達成するために必要な計算能力が少なくなります。
答え2
コンパイラの品質 (最適化能力) によって、マシン コードがハードウェア リソースにどれだけ適切にマップされるかが決まります。コンパイラの最適化により、実行される作業量を削減したり (例: ループを展開すると分岐の数を削減できます。レジスタ割り当てによってメモリ アクセスの数を削減できます。インライン展開によって呼び出しのオーバーヘッドがなくなり、特定の呼び出し元で使用されていないコードが削除されます)、待機を回避するように作業をスケジュールしたり (例: 依存する命令が待機する必要がないようにロードを早めにスケジュールしたり)、作業をより効率的に実行する特殊な命令を利用したり (例: ベクトル化によって SIMD 命令を使用)、キャッシュの動作を活用するようにメモリ アクセスを整理したり (例: 内部ループが構造体の一部のメンバーにしかアクセスしない場合は、構造体の配列を配列の構造体に変換します) できます。
(一部のコンパイラ最適化は、すべてまたはほとんどのハードウェアに適用されますが、その他の最適化は特定のハードウェア実装に固有のものです。また、アウトオブオーダー実行のハードウェア サポートによって、スケジュールが適切に設定されていないコードの実行が改善されたとしても、適切な命令スケジュールによって、小さいながらも測定可能なメリットが得られます。)
製造プロセスは、トランジスタのエネルギー使用量、スイッチング速度、および使用面積(および他のコンポーネントの同様の特性)を決定します。明らかに、スイッチング速度が速いトランジスタはより高いパフォーマンスを実現します。トランジスタあたりの面積を縮小すると、経済的に製造可能なチップにより多くのトランジスタを使用できます(パフォーマンスの向上につながる) およびコンポーネント間の通信時間を削減できます (たとえば、キャッシュ アクセスの待ち時間は、トランジスタのスイッチング速度だけでなく、距離によっても制限されます)。エネルギーの使用によってパフォーマンスが制限されます (ある程度、供給しなければならない電力が多ければ多いほど、その電力を供給するために使用する「ピン」 [はんだボール] の数が多くなり、チップ外のメモリ、I/O、またはその他のプロセッサへの通信に使用できる可能性のある数が減ります。廃熱の抽出にも経済的な制限があります)。スイッチング エネルギーが低いということは、与えられた電力予算内で実行できる作業が増えることを意味します。アイドル (「リーク」) 電力が低いということは、より多くのトランジスタに電力を供給して作業を実行できる状態にしておくことができることを意味します (これは、状態を保持するために常に電力を供給する必要がある SRAM にとって特に重要です)。