memoria applicazioni o applicazioni che richiedono molta memoria intensivi sono limitate da:
- velocità di RAM di fuori del processore
- Velocità di memoria cache all'interno del processore
- Numero di soggetti che condividono la memoria bus
- memoria virtuale
Purtroppo, thes Le limitazioni non sono i principali attori nelle prestazioni di un programma. Gli effetti più grandi sono: quantità di CPU, operazioni di I/O e altre attività in esecuzione con il programma. La modifica di questi elementi avrà un impatto maggiore sul programma rispetto alla modifica degli elementi che influiscono sulla larghezza di banda della memoria.
1. Velocità di RAM di fuori del processore
Il processore deve andare al di fuori delle sue istruzioni e dati guscio e afferrare dalla RAM. La RAM ha diverse velocità a cui può accedere alle celle e restituire i bit al processore. Generalmente, questo è segnato in unità di Hz. Più veloce è il tempo di memoria, minore è il tempo impiegato dal processo per caricare istruzioni e dati di caricamento e più veloce è l'esecuzione del programma.
Nota: L'aumento della velocità della memoria oltre le capacità del processore non aumenta le prestazioni. Cambia il collo di bottiglia dalla RAM al processore. Vedi anche # 3.
2. Velocità della cache all'interno del processore La memoria cache risiede all'interno della shell del processore. Questo è uno dei tipi più veloci di memoria disponibile. I processori cercheranno questa memoria prima di cercare la RAM. Migliorare la velocità e la quantità di questa memoria migliorerà le prestazioni del processore, a meno che altri core stiano accedendo a questa memoria. Per i core multipli che accedono alla memoria, è necessaria una risoluzione dei conflitti, che potrebbe rallentare le prestazioni delle applicazioni.
Nota: Non c'è nulla che tu possa fare per accelerare o modificare la dimensione della memoria cache tranne ottenere un altro processore. La cache non è qualcosa che può essere facilmente modificato da mani umane o robotiche.
3. Numero di soggetti che condividono il bus di memoria bus
La memoria è come una strada che le entità utilizzano per raggiungere la RAM. Come con un'autostrada, più corsie significano maggiore velocità (ad esempio larghezza di 16 bit rispetto a 32 bit). Molti bus hanno anche un limite di velocità, sempre più alto è il limite, più veloce è l'accesso. Probabilmente il concetto più importante è il numero di entità collegate al bus. Come per le autostrade, più utenti rallentano il traffico. Nella maggior parte dei bus di memoria, solo un'entità può usarlo alla volta; le altre entità devono aspettare. Riducendo il numero di entità che hanno bisogno di usare il bus di memoria accelera il tuo programma.
Alcune entità comuni condividono il bus di memoria: CPU, controller DMA, processori video, processori audio e processori di rete o I/O.
4. Memoria virtuale. Molti computer moderni utilizzano la memoria virtuale . Se il programma richiede più memoria di quella disponibile nella RAM, il sistema operativo scambierà sezioni di memoria con aree sul disco rigido. Ciò richiede più tempo di esecuzione rispetto alla riduzione della velocità operativa della memoria. Un programma ad alta intensità di memoria è più efficiente usando solo la memoria ad esso allocata rispetto a tutta la memoria di cui potrebbe aver bisogno. Ridurre questi swap di memoria virtuale velocizzerà un programma.
In breve, esiste una velocità massima a cui l'applicazione può essere eseguita. La memoria, sia la cache interna che la RAM esterna, contribuiscono al limite superiore. Ci sono fattori più grandi che impediscono alle applicazioni di raggiungere questo limite. Alcuni di questi fattori sono operazioni di I/O e altre attività simultanee. Anche la progettazione e l'implementazione di un programma possono contribuire alla lentezza. È possibile ottenere maggiori prestazioni eliminando le operazioni di I/O, le attività concorrenti e la riprogettazione del software piuttosto che modificando il limite superiore della velocità di accesso alla memoria. Cambiare questi limiti aumenterà le prestazioni del tuo programma, ma non così drastico come le altre tecniche.
Sfortunatamente, non è possibile evitare di entrare in complicati problemi con la cache se si desidera una risposta alla propria domanda – erikkallen
Hm, supponiamo di inizializzare l'intera memoria con 1.0s. Quindi moltiplico ogni elemento con un numero costante. E ripeti quel processo .. – hanno
L'accesso a tutta la memoria ti farà limitare la larghezza di banda della memoria, a meno che l'intervallo tra gli elementi a cui si accede sia molto lungo. Che, da come sembra, non lo sarà. –