Der Engpass von Von Neumann ist ein natürliches Ergebnis der Verwendung eines Busses zum Übertragen von Daten zwischen Prozessor, Speicher, Langzeitspeicher und Peripheriegeräten. Egal wie schnell der Bus seine Aufgabe verrichtet, ihn zu überfordern, also einen Engpass zu bilden, der die Geschwindigkeit reduziert, ist immer möglich. Im Laufe der Zeit nehmen die Prozessorgeschwindigkeiten weiter zu, während sich die Speicher- und andere Geräteverbesserungen auf die Dichte konzentrieren – die Fähigkeit, mehr auf weniger Platz zu speichern. Folglich wird der Engpass mit jeder Verbesserung zu einem größeren Problem, was dazu führt, dass der Prozessor viel Zeit im Leerlauf verbringt.
Innerhalb eines vernünftigen Rahmens können Sie einige der Probleme, die den Von-Neumann-Engpass umgeben, überwinden und eine kleine, aber spürbare Steigerung der Anwendungsgeschwindigkeit bewirken. Hier sind die gängigsten Lösungen:
- Caching: Als Probleme beim schnellen Abrufen von Daten aus dem Speicher mit der Von-Neumann-Architektur offensichtlich wurden, reagierten die Hardwarehersteller schnell mit dem Hinzufügen von lokalisiertem Speicher, der keinen Buszugriff erforderte. Dieser Speicher erscheint außerhalb des Prozessors, aber als Teil des Prozessorpakets. Hochgeschwindigkeits-Cache ist jedoch teuer, sodass die Cache-Größen in der Regel klein sind.
- Prozessor-Caching: Leider bieten externe Caches immer noch nicht genug Geschwindigkeit. Selbst die Verwendung des schnellsten verfügbaren Arbeitsspeichers und der vollständige Verzicht auf den Buszugriff erfüllen nicht die Anforderungen des Prozessors an die Verarbeitungskapazität. Folglich begannen die Anbieter, internen Speicher hinzuzufügen – einen Cache, der kleiner als der externe Cache ist, aber mit noch schnellerem Zugriff, da er Teil des Prozessors ist.
- Prefetching: Das Problem mit Caches ist, dass sie sich nur dann als nützlich erweisen, wenn sie die richtigen Daten enthalten. Leider erweisen sich Cache-Treffer in Anwendungen als gering, die viele Daten verbrauchen und eine Vielzahl von Aufgaben ausführen. Der nächste Schritt, um Prozessoren schneller arbeiten zu lassen, besteht darin, zu erraten, welche Daten die Anwendung als nächstes benötigt, und sie in den Cache zu laden, bevor die Anwendung sie benötigt.
- Verwenden von Spezial-RAM: Sie können von RAM-Alphabetsuppe begraben werden, weil es mehr Arten von RAM gibt, als sich die meisten Leute vorstellen. Jede Art von RAM behauptet, zumindest einen Teil des Engpassproblems von Von Neumann zu lösen, und sie funktionieren – in Grenzen. In den meisten Fällen drehen sich die Verbesserungen um die Idee, Daten schneller aus dem Speicher auf den Bus zu bringen. Zwei wichtige (und viele kleinere) Faktoren beeinflussen die Geschwindigkeit: Speichergeschwindigkeit (wie schnell der Speicher Daten verschiebt) und Latenz (wie lange es dauert, ein bestimmtes Datenelement zu finden). Lesen Sie mehr über das Gedächtnis und die Faktoren, die es beeinflussen.
Wie in vielen anderen Technologiebereichen kann Hype zum Problem werden. Multithreading zum Beispiel, das Aufteilen einer Anwendung oder eines anderen Befehlssatzes in einzelne Ausführungseinheiten, die der Prozessor einzeln verarbeiten kann, wird oft als Mittel zur Überwindung des Von-Neumann-Engpasses angepriesen, tut es aber nicht wirklich alles andere als zusätzlichen Overhead (was das Problem verschlimmert). Multithreading ist eine Antwort auf ein weiteres Problem: die Anwendung effizienter zu machen. Wenn eine Anwendung dem Von Neumann-Engpass Latenzprobleme hinzufügt, wird das gesamte System verlangsamt. Multithreading sorgt dafür, dass der Prozessor nicht noch mehr Zeit mit Warten auf den Benutzer oder die Anwendung verschwendet, sondern ständig etwas zu tun hat. Anwendungslatenz kann bei jeder Prozessorarchitektur auftreten, nicht nur bei der Von-Neumann-Architektur. Auch so,