フォンノイマンボトルネックは、バスを使用してプロセッサ、メモリ、長期ストレージ、および周辺機器間でデータを転送することの自然な結果です。バスがタスクを実行する速度がどれほど速くても、バスを圧倒する、つまり速度を低下させるボトルネックを形成することは常に可能です。時間の経過とともに、プロセッサの速度は向上し続けますが、メモリやその他のデバイスの改善は密度、つまりより少ないスペースにより多くを格納する機能に重点を置いています。その結果、ボトルネックは改善のたびに問題になり、プロセッサがアイドル状態になるのに多くの時間を費やすことになります。
当然のことながら、フォンノイマンボトルネックを取り巻くいくつかの問題を克服し、アプリケーション速度をわずかながら目立つように向上させることができます。最も一般的な解決策は次のとおりです。
- キャッシング:フォンノイマンアーキテクチャで十分な速度でメモリからデータを取得する際の問題が明らかになったとき、ハードウェアベンダーは、バスアクセスを必要としないローカライズされたメモリを追加することで迅速に対応しました。このメモリはプロセッサの外部に表示されますが、プロセッサパッケージの一部として表示されます。ただし、高速キャッシュは高価であるため、キャッシュサイズは小さくなる傾向があります。
- プロセッサキャッシング:残念ながら、外部キャッシュはまだ十分な速度を提供していません。利用可能な最速のRAMを使用し、バスアクセスを完全に遮断しても、プロセッサの処理能力のニーズを完全に満たすことはできません。その結果、ベンダーは内部メモリの追加を開始しました。これは外部キャッシュよりも小さいキャッシュですが、プロセッサの一部であるため、さらに高速にアクセスできます。
- プリフェッチ:キャッシュの問題は、正しいデータが含まれている場合にのみ有用であることが証明されることです。残念ながら、大量のデータを使用し、さまざまなタスクを実行するアプリケーションでは、キャッシュヒットが少ないことがわかります。プロセッサをより高速に動作させるための次のステップは、アプリケーションが次に必要とするデータを推測し、アプリケーションが必要とする前にそれをキャッシュにロードすることです。
- 特殊なRAMの使用:ほとんどの人が想像するよりも多くの種類のRAMがあるため、RAMアルファベットスープに埋もれてしまう可能性があります。各種類のRAMは、フォンノイマンボトルネック問題の少なくとも一部を解決することを目的としており、制限内で機能します。ほとんどの場合、改善はメモリからバスにデータをより速く取得するという考えを中心に展開されます。2つの主要な(そして多くのマイナーな)要因が速度に影響します。メモリ速度(メモリがデータを移動する速度)と遅延(特定のデータを見つけるのにかかる時間)です。記憶とそれに影響を与える要因についてもっと読む。
他の多くの技術分野と同様に、誇大広告が問題になる可能性があります。たとえば、マルチスレッド、つまりアプリケーションまたは他の一連の命令を、プロセッサが一度に1つずつ処理できる個別の実行ユニットに分割する行為は、フォンノイマンボトルネックを克服する手段として宣伝されることがよくありますが、実際にはそうではありません。オーバーヘッドを追加する以上のもの(問題を悪化させる)。マルチスレッドは、アプリケーションをより効率的にするという別の問題に対する答えです。アプリケーションがフォンノイマンボトルネックに遅延の問題を追加すると、システム全体の速度が低下します。マルチスレッドは、プロセッサがユーザーまたはアプリケーションを待つためにさらに多くの時間を無駄にしないことを保証しますが、代わりに常に何かをする必要があります。アプリケーションの遅延は、フォンノイマンアーキテクチャだけでなく、任意のプロセッサアーキテクチャで発生する可能性があります。たとえそうであっても、