In un'applicazione multithread, sarebbe un multi-core o multiprocessore disposizione essere meglio?

StackOverflow https://stackoverflow.com/questions/2767795

Domanda

Ho letto molto su questo argomento già sia qui (ad esempio, stackoverflow.com/questions/1713554/threads-processes-vs-multithreading-multi-core-multiprocessor-how-they-are o multi-CPU, multi-core e iper-filo ) e altrove (ad esempio, ixbtlabs .com / articoli 2 / cpu / rmmt-L2-cache.html o software.intel.com/en-us/articles/multi-core-introduction/), ma ancora non sono sicuro di un paio di cose che sembrano molto semplice. Così ho pensato che avevo appena chiesto.

(1) è un processore multi-core, in cui ogni core ha cache dedicata efficacemente la stessa di un sistema multiprocessore (ottenuta naturalmente per velocità del processore, dimensione della cache, e così via)?

(2) Diciamo che ho delle immagini da analizzare (cioè computer vision), e ho queste immagini caricate nella RAM. La mia app spawn un thread per ogni immagine che deve essere analizzata. Sarà questa applicazione su un funzionamento cache condivisa multi-core più lento di una cache dedicata processore multi-core, e sarebbe quest'ultimo corsa alla stessa velocità su una macchina equivalente unipolare multiprocessore?

Grazie per l'aiuto!

È stato utile?

Soluzione

La dimensione della cache è importante. Per motivi di questo sto supponendo processori x86 e solo utilizzando la cache L2, che è condiviso su processori dual core.

Se si confrontano 2 core singole con 1 processore dual core e processori single core entrambi hanno la stessa quantità di cache di dati (esecuzione alla stessa velocità), allora si ha più cache, in modo più porzioni delle immagini possono rientrano in cache, ed è molto probabile che se il trattamento dei dati di immagine dovuto caricare e / o negozio a questi dati più volte che questo sarebbe andato più rapidamente alle velocità di clock stesso.

Se si confrontano 2 processori single core con 1 processore dual core cui cache di dati è il doppio di cache di dati di ogni singolo microprocessore, quindi circa la metà della cache di dati saranno utilizzati per il lavoro di ciascun processore. E 'probabile che uscire in aggiunta ai dati di immagine che ogni thread indipendente deve usare che ci saranno alcuni dati condivisi. Se questi dati condivisi vengono memorizzati nei dati cache condivisa allora può essere più facilmente condivisa tra i due nuclei che sul nucleo 2xsingle impostato. Nella configurazione nucleo 2xsingle per ciascun blocco di dati condivisi una delle cache memorizzerà e ci sarebbe un po 'di overhead quando l'altro processore necessaria per utilizzare tali dati.

macchine dual core anche rendere più facile per fili di migrare da un core all'altro sullo stesso modulo processore, poiché la cache del nuovo processore del filo non ha bisogno di essere riempito mentre l'altro ha dati che non ha bisogno più occupare spazio.

mi piacerebbe suggerire che tutto ciò si finisce con quella di sperimentare limitando il numero di thread da 3 a 10 per core in qualsiasi momento per uso generale. I fili saranno tutti competizione con l'altro per quello spazio cache, così troppi farà in modo che tutti i dati da 1 filo viene spinto a monte di questo filo è riprogrammata. Inoltre, se ogni ciclo thread può più di un paio di file di immagine si guadagna un po 'di spazio, incoraggiando lo stack di ogni thread di rimanere nella cache perché si ha un minor numero di pile. È anche ridurre la quantità di memoria che il sistema operativo deve utilizzare per tenere il passo con i thread.

Sei la vittoria più grande è quando si può sovrapporre la lavorazione con accesso lento, come il disco, rete, o l'interazione umana, in modo appena sufficiente per mantenere le discussioni le CPU di elaborazione occupato è quello che ti serve.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top