メモリを集中的に使用するアプリケーションまたは大量のメモリを必要とするアプリケーションは、次の制限を受けます。
- プロセッサ外の RAM の速度
- プロセッサ内のキャッシュの速度
- メモリ バスを共有するエンティティの数
- 仮想メモリ
残念ながら、これらの制限はプログラムのパフォーマンスの主要な要因ではありません。より大きな効果は次のとおりです。 CPU の量、I/O 操作、およびプログラムで実行されるその他のタスク。これらの項目を変更すると、メモリ帯域幅に影響する項目を変更するよりも、プログラムに大きな影響を与えます。
1. プロセッサ外の RAM の速度
プロセッサはシェルの外に出て、RAM から命令とデータを取得する必要があります。RAM は、セルにアクセスしてビットをプロセッサに戻す速度が異なります。通常、これは Hz 単位でマークされます。メモリが高速であるほど、プロセスが命令とデータのロードに費やす時間が短縮され、プログラムの実行が高速になります。
注:プロセッサの能力を超えてメモリの速度を上げても、パフォーマンスは向上しません。ボトルネックを RAM からプロセッサに変更します。#3も参照してください。
2. プロセッサ内のキャッシュの速度
キャッシュ メモリは、プロセッサのシェル内にあります。これは、利用可能な最も高速なタイプのメモリの 1 つです。プロセッサは、RAM を検索する前にこのメモリを検索します。他のコアもこのメモリにアクセスしていない限り、このメモリの速度と量を改善すると、プロセッサのパフォーマンスが向上します。複数のコアがメモリにアクセスする場合、競合の解決が必要であり、アプリケーションのパフォーマンスが低下する可能性があります。
注:別のプロセッサを入手する以外に、キャッシュ メモリのサイズを高速化または変更するためにできることはありません。キャッシュは、人間やロボットの手で簡単に変更できるものではありません。
3. メモリ バスを共有するエンティティの数
メモリ バスは、エンティティが RAM に到達するために使用する高速道路のようなものです。高速道路と同様に、レーン数が多いほどスループットが速くなります (例: 16 ビット幅と 32 ビット幅)。多くのバスには速度制限もあり、速度制限が高いほどアクセスが速くなります。おそらく最も注目すべき概念は、バスに接続されているエンティティの数です。高速道路と同様に、より多くのユーザーがトラフィックを遅くします。ほとんどのメモリ バスでは、一度に 1 つのエンティティしか使用できません。他のエンティティは待機する必要があります。メモリ バスを使用する必要があるエンティティの数を減らすと、プログラムが高速化されます。
メモリ バスを共有するいくつかの一般的なエンティティ: CPU、DMA コントローラ、ビデオ プロセッサ、サウンド プロセッサ、およびネットワークまたは I/O プロセッサ。
4. 仮想メモリ。
最近のコンピュータの多くは、仮想メモリを採用しています。プログラムが RAM で使用可能なメモリよりも多くのメモリを必要とする場合、オペレーティング システムはメモリのセクションをハード ドライブ上の領域とスワップします。これにより、メモリの動作速度が低下するよりもパフォーマンス時間が長くなります。メモリ集約型プログラムは、必要なすべてのメモリを使用するよりも、割り当てられたメモリのみを使用する方が効率的です。これらの仮想メモリ スワップを減らすと、プログラムが高速化されます。
要約すると、アプリケーションを実行できる最大速度があります。メモリ (内部キャッシュと外部 RAM の両方) が上限の要因となっています。アプリケーションがこの制限に達するのを妨げる大きな要因があります。これらの要因の一部は、I/O 操作、およびその他の同時タスクです。プログラムの設計と実装も速度低下の一因となる可能性があります。メモリ アクセス速度の上限を変更するよりも、I/O 操作、同時実行タスクを排除し、ソフトウェアを再設計することで、より多くのパフォーマンスを得ることができます。これらの制限を変更すると、プログラムのパフォーマンスが向上しますが、他の手法ほど劇的ではありません。