È possibile e più veloce eseguire un'applicazione su un core CPU inutilizzato?

-2

È possibile spostare un'applicazione (o un'attività) su un altro core per farlo funzionare più velocemente e ottenere tutta la potenza di elaborazione di quel core?

Il modo in cui capisco è che in un sistema operativo le applicazioni condividono la CPU principale e ricevono una "fetta di tempo" condivisa. Quindi se dieci applicazioni sono in esecuzione nel corso di un secondo ciascuna applicazione otterrebbe un totale di cento millisecondi. Se un computer ha più core, un'applicazione si avvierà più velocemente se la spostassi o tutti i processi in un core non utilizzato?

Ad esempio, supponiamo di creare un'applicazione desktop denominata MyNumberCruncher ©. In questo hai un compito in un ciclo for che dovrebbe teoricamente richiedere un secondo per completare. Di fatto, lo fai quando non sono in esecuzione altre applicazioni. Se hai dieci applicazioni aperte che fanno tutto da sole, l'operazione dovrebbe impiegare dieci secondi per essere completata, correggere? Se sposti quel processo nel suo core che non ha processi in esecuzione su di esso, allora dovrebbe essere necessario un secondo per completare il corretto?

Modifica
Questa domanda sta chiedendo come funziona la CPU multicore e se è possibile o una buona idea spostare un'applicazione in un secondo core e, in tal caso, perché i sistemi operativi non lo fanno ancora (o forse lo sono)?

    
posta 1.21 gigawatts 14.08.2016 - 08:32
fonte

3 risposte

3

or maybe they are

Onestamente, ovviamente sono . Non farlo sarebbe uno spreco completo di una macchina multi-core. Occam's Razor si applica qui: la spiegazione più semplice è corretta.

    
risposta data 14.08.2016 - 09:09
fonte
1

Una CPU single-core è come avere solo te stesso per fare tutto il lavoro che deve essere fatto. Se hai quattro lavori ad alta intensità di elaborazione che impiegano un minuto ciascuno a fare, impiegheranno quattro minuti in totale per finire. Potresti lavorare ciascuno fino a quando non è finito e passare a quello successivo o, se devono esserci progressi costanti su ciascuno, potresti fare un po 'del primo, un po' del secondo, ecc., Fino a quando non sono tutti fatti . Il problema con quest'ultimo metodo è che si verificano dei passaggi di overhead tra di loro, ma questa è un'altra discussione.

Aggiungere un secondo nucleo è come assumere qualcuno per aiutarti. Dove stavi finendo i quattro lavori in soli quattro minuti, il lavoro viene diviso in modo da ottenere due dei lavori e il tuo assistente ottiene gli altri due. Ognuno di voi termina i due lavori che ti vengono assegnati in due minuti e, poiché hai lavorato in parallelo, è tutto il tempo che ti serve. Aggiungi altri due assistenti per un totale di quattro e il lavoro viene svolto in un minuto.

C'è una limitazione, ed è importante: molti lavori sono a thread singolo, il che significa che devono essere eseguiti in ordine dall'inizio alla fine. Se stiamo costruendo una casa, non posso dirti di andare a dipingere la cucina mentre verso le fondamenta; la cucina non c'è ancora. Una volta raggiunto il limite dei lavori che possono essere eseguiti in parallelo, l'aggiunta di lavoratori (core) non aiuta: con quattro lavori lineari, avere una dozzina di persone su cui lavorare lascerà otto di loro matematicamente inattivi, anche se tutti condividono il lavorare allo stesso modo.

Il multi-threading immette l'immagine quando c'è un lavoro da fare che può essere suddiviso in parti che possono essere eseguite in parallelo. Ad esempio, se ho bisogno che i muri della mia casa siano dipinti, non fa differenza quale ordine accada finché viene eseguito. Posso assumere solo te per dipingerli o un pittore per ogni muro se ho bisogno che il lavoro sia svolto rapidamente.

I sistemi operativi sono nel business della gestione delle risorse secondo un insieme di regole. Una regola molto comune è che le risorse di elaborazione (core) devono essere utilizzate il più possibile, in modo che i programmi vengano eseguiti rapidamente. Un programma che vuole funzionare è perfetto per un core che non ha nulla da fare e il sistema operativo li accoppierà senza che tu debba preoccuparti di ciò. Il tuo programma a thread singolo può essere eseguito su un solo core o ogni core del sistema al momento del completamento e non sarai in grado di dire la differenza a meno che tu non stia tenendo d'occhio quel genere di cose.

    
risposta data 14.08.2016 - 14:21
fonte
1

If you move that process to it's own core that has no processes running on it then it should take one second to complete correct?

Vale la pena notare che questo è in effetti corretto.

Ora, la maggior parte dei sistemi operativi è abbastanza intelligente da spostare i fili tra i core (anche le applicazioni a thread singolo - purché non vengano mai eseguite su più thread contemporaneamente) per massimizzare le prestazioni. Tuttavia, in molti sistemi operativi è possibile istruire programmi da utilizzare o non utilizzare determinati core / s. Se si dovesse dire a tutti i programmi di non utilizzare un certo core, con l'eccezione di NumberCruncher, quel programma potrebbe essere eseguito in modo molto più veloce senza condividere le risorse.

Vale la pena ricordare che questa non è una pratica raccomandata nella maggior parte dei sistemi operativi (ad esempio Windows). Mentre un programma può essere eseguito più rapidamente, la mancanza di risorse per altri programmi rallenta l'esecuzione di tutte le altre. Inoltre, i moderni SO sono abbastanza intelligenti e fanno trucchi interessanti, ad esempio le CPU moderne a volte hanno un 'Turboboost' (o una funzione simile) che aumenta la velocità di clock mentre il temp / wattage della CPU rimane a determinate soglie. Caricando pesantemente un core, mentre gli altri core rimangono inattivi, potresti raggiungere questi limiti prima che se avessi bilanciato il carico spostando l'esecuzione intorno.

    
risposta data 14.08.2016 - 14:49
fonte

Leggi altre domande sui tag