Più CPU / core possono accedere contemporaneamente alla stessa RAM?

15

Questo è ciò che I guess potrebbe accadere:

  1. Se due core hanno tentato di accedere allo stesso indirizzo nella RAM, uno dovrebbe attendere per l'altro per accedere alla RAM. Il secondo tempo in cui ogni core tenterebbe di accedere allo stesso indirizzo, potrebbe comunque avere la RAM memorizzata nella cache, in modo da poter accedere alle rispettive cache simultaneamente .

  2. Se due core hanno tentato di accedere a diversi indirizzi nella stessa RAM, uno dovrebbe attendere per l'altro per accedere alla RAM.

In altre parole, immagino che per le attività di programmazione intensive della RAM, la multiprocessing non sarà di grande aiuto a meno che non implichi la lettura dallo stesso indirizzo nella RAM più volte per core.

Quindi, più CPU / core possono accedere simultaneamente alla stessa RAM, o è quello che sto dicendo corretto?

    
posta Lost Hobbit 15.01.2013 - 16:29
fonte

5 risposte

11

Riepilogo: è generalmente possibile per un singolo core saturare il bus di memoria se l'accesso alla memoria è tutto ciò che fa.

Se si stabilisce la larghezza di banda della memoria della propria macchina, si dovrebbe essere in grado di vedere se un processo a thread singolo può realmente ottenere questo e, in caso contrario, come la larghezza di banda effettiva si adatta con il numero di processori.

I dettagli dipenderanno dall'architettura che stai utilizzando. Supponendo qualcosa come SMP e SDRAM moderni:

  1. If two cores tried to access the same address in RAM ...

    potrebbe andare in diversi modi:

    • entrambi vogliono leggere, contemporaneamente:

      • due core sullo stesso chip probabilmente condivideranno una cache intermedia ad un certo livello (2 o 3), quindi la lettura verrà eseguita una sola volta. Su un'architettura moderna, ogni core può essere in grado di continuare a eseguire μ-op da una o più pipeline fino a quando la linea della cache non è pronta
      • due core su diversi chip non possono condividere una cache, ma devono ancora coordinare l'accesso al bus: idealmente, qualunque emulatore non emetta la lettura, si limiterà a snoop la risposta li>
    • se entrambi vogliono scrivere:

      • due core sullo stesso chip scriveranno semplicemente nella stessa cache, e solo una volta devono essere scaricati nella RAM. Infatti, poiché la memoria verrà letta e scritta sulla RAM per riga di cache, le scritture a indirizzi distinti ma sufficientemente vicini possono essere combinate in una sola scrittura in RAM

      • due core su chip diversi hanno un conflitto, e la linea cache dovrà essere riscritta in RAM dal chip1, recuperata nella cache del chip2, modificata e quindi riscritta (non importa se il write / fetch può essere unito allo snooping)

  2. If two cores tried to access different addresses ...

    Per un accesso singolo , la latenza CAS può significare che due operazioni possono essere intercalate in modo da non richiedere più (o forse solo un po 'di più) rispetto a se il bus era inattivo.

risposta data 15.01.2013 - 17:41
fonte
7

So, can multiple CPU's / cores access the same RAM simutaneously, or is what I'm saying correct?

Ci sono molte diverse architetture di macchine là fuori, ognuna con il proprio set di funzionalità. Una categoria di macchine multiprocessing è chiamata MISD , per dati singoli a più istruzioni, e tali macchine sono progettate per fornire gli stessi dati a diversi processori tutti allo stesso tempo. Una classe correlata di macchine nota come SIMD architetture (dati multipli a singola istruzione) è molto più comune e fornisce anche l'accesso allo stesso memoria allo stesso tempo, ma la memoria contiene istruzioni invece di dati. In MIMD e SIMD, "accesso" significa accesso in lettura - puoi immaginare il problema che avresti se due unità tentassero di scrivere nello stesso posto allo stesso tempo!

    
risposta data 15.01.2013 - 17:21
fonte
2

Sebbene la maggior parte delle risposte si avvicini dal lato del software e / o del modello hardware, il modo più pulito è considerare come funzionano i chip RAM fisici. (La cache si trova tra il processore e la memoria e utilizza semplicemente lo stesso bus di indirizzo e la sua operazione è completamente trasparente per il processore.) I chip RAM hanno un decodificatore di indirizzo singolo, che riceve l'indirizzo della cella di memoria, che arriva sul bus di indirizzo (e in modo simile un bus dati, dentro o fuori). Le memorie presenti sono costruite nel "metodo a singolo processore", cioè un processore è collegato attraverso un bus a un chip di memoria. In altre parole, questo è il "collo di bottiglia di von Neumann", poiché ogni singola istruzione deve fare riferimento alla memoria almeno una volta. Per questo motivo, su un filo (o fili, alias bus) può esistere solo un segnale alla volta, quindi il chip RAM può ricevere un indirizzo di cella alla volta. Finché non si è certi che i due core inseriscano lo stesso indirizzo nel bus indirizzo, l'accesso simultaneo al bus da parte di due diversi driver di bus (come i core) non è fisicamente possibile. (E, se è lo stesso, è ridondante).

Il resto è la cosiddetta accelerazione hardware. Il bus di coerenza, il cache, l'accesso SIMD, ecc. Sono solo alcune belle facciate di fronte alla RAM fisica, la tua domanda riguardava. Gli acceleratori citati potrebbero coprire la lotta per l'utilizzo esclusivo del bus indirizzo e i modelli di programmazione non hanno molto a che fare con la tua domanda. Si noti inoltre che l'accesso simultaneo sarebbe anche contro l'astrazione "spazio degli indirizzi privati".

Quindi, alle tue domande: l'accesso diretto alla RAM diretta non è possibile, né con lo stesso né con indirizzi diversi. L'uso della cache potrebbe coprire questo fatto e potrebbe consentire l'accesso apparentemente simultaneo in alcuni casi. Dipende dal livello e dalla costruzione della cache, nonché dalla località spaziale e temporale dei dati. E sì, hai ragione: l'elaborazione multi (core) senza accesso RAM avanzato non sarà di grande aiuto per le applicazioni che richiedono molta RAM.

Per una migliore comprensione: basta ricordare come funziona Direct Memory Access. Sia la CPU che il dispositivo DMA possono inserire l'indirizzo sul bus, quindi devono escludersi a vicenda dall'uso simultaneo del bus.

    
risposta data 10.04.2015 - 21:37
fonte
0

Le moderne CPU sono fisicamente legate ai loro dispositivi di memoria esterni al fine di ottenere la massima larghezza di banda per il trasferimento dei dati. Ciò è dovuto ai requisiti di integrità del segnale (lunghezza della traccia, terminazione, inclinazione dell'orologio, ecc.) Necessari per sostenere le alte velocità di trasferimento. Ad esempio, su una scheda madre multi-CPU, ogni CPU ha un set dedicato di slot DIMM. Indipendentemente da ciò che i programmatori di software potrebbero pensare, una CPU non può semplicemente accedere ai dati di memoria esterna di un'altra CPU. Il software di gestione della memoria di un sistema, a livello di kernel del sistema operativo, Hypervisor, core del piano dati o altro, gestisce il trasferimento dei dati della memoria tra le CPU.

    
risposta data 26.03.2015 - 13:13
fonte
0

Non ti importa della RAM fisica, ti interessa di più memoria virtuale e spazio dell'indirizzo di processi o thread (tutti i thread dello stesso processo condividono uno spazio di indirizzi comune) in pratica.

Naturalmente, se si sta codificando un kernel del sistema operativo multi-core, ci si preoccupa molto della RAM e della coerenza della cache.

La maggior parte dei processori multi-core ha una qualche forma di meccanismo cache coherence . I dettagli sono specifici del processore. Poiché i processori utilizzano cache della CPU , a volte si comportano come se diversi core del processore stessero accedendo contemporaneamente alla stessa posizione di memoria.

Standard recenti di linguaggi industriali come C11 o C ++ 11 ne ha alcuni (conoscenza multi-thread) modello di memoria .

    
risposta data 26.03.2015 - 13:20
fonte

Leggi altre domande sui tag