2013-05-06 13 views
7

In una macchina multi-CPU, le diverse CPU competono per la stessa larghezza di banda di memoria o accedono in modo indipendente alla DRAM?Più CPU stanno competendo per la stessa larghezza di banda di memoria?

In altre parole, se un programma è limitato dalla larghezza di banda della memoria su, ad esempio, un sistema 8-core 1-CPU, passare a una macchina 4-8-core 4-CPU ha la possibilità di accelerarlo (supponendo le CPU e le DRAM sono paragonabili)?

risposta

1

Più CPU stanno competendo per la stessa larghezza di banda di memoria?

Non necessariamente. Non-Uniform Memory Access e multi-channel memory architecture possono comportare una larghezza di banda di memoria totale superiore a quella che sarebbe stato possibile ottenere con una singola CPU.

+0

Se stai tentando di rispondere alla tua domanda, stai fornendo una risposta a una domanda completamente diversa e non una che hai chiesto su questo thread. Hai semplicemente chiesto 1) I processori multipli competono per la stessa memoria e 2) Un programma trarrebbe vantaggio aggiungendo più processori. A cui ti ho dato due risposte perfettamente valide. Al contrario, hai affermato che le due fonti fornite offrono maggiore larghezza di banda di memoria a una singola CPU. Ancora una volta questa non è una risposta alla tua domanda ma una completamente nuova. Si prega di fornire una modifica se si desidera modificare la domanda –

2

Sì, tutte le CPU competono per la stessa larghezza di banda. C'è solo una connessione hardware dal chip della CPU alla RAM, quindi tutti gli accessi devono attraversarla.

I diversi livelli di cache della CPU possono essere condivisi o meno per alleviare questo problema. Solo i caching mancano di andare nella RAM stessa. Vedi http://en.wikipedia.org/wiki/CPU_cache#Multi-core_chips

+0

* solo una connessione hardware dal chip della CPU alla RAM * - La mia domanda è più su più CPU piuttosto che più core sulla stessa CPU. Non mi è chiaro se la tua risposta si applica a loro. – MaxB

+0

@MaxB, hai ragione che non ho capito completamente la domanda. Chip di CPU multipli possono avere accesso indipendente a diversi banchi di memoria, ma non ho familiarità con queste configurazioni per dire qualcosa di più. –

+0

La domanda riguarda più CPU, non più core. –

3

La risposta alla tua domanda principale è: Dependance. Da cosa dipende? Dipende dal campo in cui si trova il tuo set up e tecnicamente parlando ce ne sono due.

Nel primo campo, che è noto come Shared-Memory Multicore, la risposta alla tua domanda sarebbe "Sì". Con questo modello, se lo si desidera, più processori con più core condividono la memoria tramite un bus comune (che è dove si otterrebbe il collo di bottiglia) e, a parte questo, non c'è nulla che colleghi le CPU insieme. Questa è la categoria/campo/modello in cui cade il tipico computer di tipo consumer.

Nel secondo campo, noto come Multicore a memoria distribuita, la risposta alla tua domanda è "No". Questo scenario di installazione hardware indica che ogni processore ha una propria memoria privata, ma esiste un bus che collega direttamente i processori. Il protocollo per rendere possibile questo scenario è Message Passing Interface. Ciò significa anche che il gruppo di CPU non deve necessariamente trovarsi nella stessa casella o nella stessa stanza della RAM a cui accede. Probabilmente non troverai questo tipo di installazione in una casa. Pensa a strutture di ricerca, laboratori, università, aziende di medie dimensioni ecc.

Per rispondere alla tua seconda domanda. La risposta è anche dipende. E dipende dal fatto che è necessario sapere se il programma è stato scritto per utilizzare il parallelismo con le possibilità di esecuzione parallele del sistema. Anche se il tuo computer di livello consumer con uno o due processori condivide un singolo bus di memoria, se il programma è stato scritto pensando al parallelismo, noterai un aumento delle prestazioni. In caso contrario, le istruzioni seriali provenienti da un programma verranno eseguite in serie su un solo core.

Se si è interessati all'elaborazione multi-core e alla modalità di accesso alla memoria tramite un programma, una buona "risorsa gateway" per espandere il cranio è Flynn's Taxonomy. Solo Google-it ti porterà nella tana del coniglio, se sei interessato.

Modifica: per dare credito in caso di credito, consiglio vivamente la programmazione parallela professionale in C# di Gaston C. Hillar. Questo delizioso libro è stato il più rivelatore sul tema del parallelismo per me nella mia breve carriera. Aiuta a chiarire l'acqua fangosa sulle distinzioni tra la programmazione parallela e la programmazione multi-core e i tipi di elaborazione multi-core che ho appena menzionato, completi di diagrammi!

+0

* la risposta alla tua domanda sarebbe "Sì" * Credo che questo non sia corretto, in generale, a seconda dell'hardware. Con NUMA, diverse CPU possono avere canali di accesso DRAM separati. – MaxB

+0

* a parte questo, non c'è niente che colleghi le CPU insieme * Questo è anche sbagliato (vedi la risposta di Csaba). – MaxB

0

Se si utilizza un hardware relativamente nuovo e la limitazione della memoria del software deriva parzialmente dalla comunicazione da CPU a CPU, allora si ha una buona possibilità di scalare ragionevolmente. Le architetture SMP x86 più vecchie utilizzavano un bus front-side (FSB) e ogni CPU poteva condividere i dati con l'altro solo utilizzando quel singolo bus front-side. Con i processori Opteron-line i core della CPU erano anche collegati ad altri core della CPU individualmente tramite linee dedicate Hyper-Transport. Ciò ha causato una scalabilità molto migliore dei server Opteron rispetto al server Intel in quel momento. Ma da quando, molti anni fa, Intel aveva ingaggiato quegli ingegneri che hanno sviluppato Hyper-Transport per AMD (e per la cronologia questi ingegneri hanno sfruttato le loro esperienze acquisite dal bus Alpha EV6) ha sviluppato anche un'architettura di collegamenti SMP CPU CPU chiamata QPI per Intel. Quindi i prodotti server Intel di oggi sono anche più scalabili rispetto ai vecchi PC FSB. Se ti trovi su un server non x86, probabilmente hai anche un'architettura scalabile in questo modo. In tal caso, se si dispone di un software di questo tipo che richiede l'interazione tra i core, ciò può accelerarne notevolmente l'aumento.

Problemi correlati