Il collo di bottiglia di Von Neumann è un risultato naturale dell'utilizzo di un bus per trasferire i dati tra il processore, la memoria, l'archiviazione a lungo termine e le periferiche. Non importa quanto velocemente l'autobus svolga il suo compito, travolgerlo, ovvero formare un collo di bottiglia che riduca la velocità, è sempre possibile. Nel tempo, le velocità del processore continuano ad aumentare mentre la memoria e altri miglioramenti dei dispositivi si concentrano sulla densità, la capacità di archiviare di più in meno spazio. Di conseguenza, il collo di bottiglia diventa sempre più un problema con ogni miglioramento, facendo sì che il processore passi molto tempo inattivo.
Entro limiti ragionevoli, è possibile superare alcuni dei problemi che circondano il collo di bottiglia di Von Neumann e produrre aumenti piccoli, ma evidenti, nella velocità dell'applicazione. Ecco le soluzioni più comuni:
- Caching: quando i problemi con l'ottenimento dei dati dalla memoria abbastanza velocemente con l'architettura Von Neumann sono diventati evidenti, i fornitori di hardware hanno risposto rapidamente aggiungendo memoria localizzata che non richiedeva l'accesso al bus. Questa memoria appare esterna al processore ma come parte del pacchetto del processore. Tuttavia, la cache ad alta velocità è costosa, quindi le dimensioni della cache tendono a essere ridotte.
- Cache del processore: Sfortunatamente, le cache esterne non forniscono ancora una velocità sufficiente. Anche utilizzando la RAM più veloce disponibile e tagliando completamente l'accesso al bus non soddisfa le esigenze di capacità di elaborazione del processore. Di conseguenza, i fornitori hanno iniziato ad aggiungere memoria interna, una cache più piccola della cache esterna, ma con un accesso ancora più veloce perché fa parte del processore.
- Precaricamento: il problema con le cache è che si rivelano utili solo quando contengono i dati corretti. Sfortunatamente, gli hit della cache si rivelano bassi nelle applicazioni che utilizzano molti dati ed eseguono un'ampia varietà di attività. Il prossimo passo per far funzionare i processori più velocemente è indovinare quali dati l'applicazione richiederà e caricarli nella cache prima che l'applicazione li richieda.
- Usando la RAM speciale: puoi essere sepolto dalla zuppa alfabetica della RAM perché ci sono più tipi di RAM di quanto la maggior parte delle persone immagini. Ogni tipo di RAM pretende di risolvere almeno una parte del problema del collo di bottiglia di Von Neumann e funziona, entro i limiti. Nella maggior parte dei casi, i miglioramenti ruotano attorno all'idea di ottenere dati dalla memoria e sul bus più velocemente. Due fattori principali (e molti minori) influenzano la velocità: velocità della memoria (quanto velocemente la memoria sposta i dati) e latenza (quanto tempo impiega per individuare un particolare pezzo di dati). Leggi di più sulla memoria e sui fattori che la influenzano.
Come in molte altre aree della tecnologia, l'hype può diventare un problema. Ad esempio, il multithreading, l'atto di spezzare un'applicazione o un altro insieme di istruzioni in unità di esecuzione discrete che il processore può gestire una alla volta, è spesso pubblicizzato come un mezzo per superare il collo di bottiglia di Von Neumann, ma in realtà non lo fa qualcosa di più che aggiungere un sovraccarico (peggiorando il problema). Il multithreading è una risposta a un altro problema: rendere l'applicazione più efficiente. Quando un'applicazione aggiunge problemi di latenza al collo di bottiglia di Von Neumann, l'intero sistema rallenta. Il multithreading assicura che il processore non perda ancora altro tempo in attesa dell'utente o dell'applicazione, ma ha sempre qualcosa da fare. La latenza dell'applicazione può verificarsi con qualsiasi architettura di processore, non solo con l'architettura Von Neumann. Comunque,