Domanda

Qualcuno può aiutarmi a lavorare su una presentazione e vorrei includere un po ': "La differenza tra programmazione multicore e concorrente", ho cercato su Google un po' ma non ho alzato molte buone descrizioni, qualsiasi aiuto apprezzato! :)

Grazie,

Eamonn

È stato utile?

Soluzione

Concorrente (che si verifica o esistente contemporaneamente) implica quel codice diverso MAGGIO eseguire nello stesso identico ciclo. Significa che le cose possono possibilmente Si verifica in parallelo se sono disponibili più processori o un processore con più core e il programma viene realizzato correttamente. Basta aggiungere thread non implica l'esecuzione simultanea.

Il motivo per cui dico MAGGIO e possibilmente È che ogni volta che i programmi separati i thread devono condividere uno stato volatile/mutabile, altri thread che necessitano di accedere a quello stato non possono continuare a eseguire e dovranno attendere il loro turno per accedere a quello stato e le cose ricominciano in serie.

In genere questo è implementato in un singolo programma in quanto più di un thread che esegue il codice contemporaneamente nello stesso ciclo esatto di un altro thread, dato che non esiste una contesa di risorse elencate sopra. Ciò richiede più processori fisici o core. Altri modelli eseguono più processi di sistema operativo pesante che possono eseguire contemporaneamente.

La programmazione concomitante è molto difficile da fare correttamente con lo stato condiviso mutabile.

Puoi scrivere un concorrente programma che funziona in serie Su un singolo processore core singolo, ma si ridimensiona per eseguire più cose allo stesso tempo in cui sono presenti più processori o core o anche più processori con più core.

Puoi anche causare programmi a thread singolo sembrano concorrente su un sistema multi-core / multi-processore se possono operare su gamme indipendenti di dati di input contemporaneamente. Esempio: un singolo programma di rendering 3D filettato può su una macchina a doppia core può eseguire 2 istanze separate Il primo rendimento di tutti i frame dispari e il secondo rendering tutti i frame pari. Finché non cercano di condividere risorse mutabili.

Multi-core significa che una singola CPU ha più core di processore che possono eseguire thread o processi contemporaneamente e in genere appare come più processori per i sistemi operativi tradizionali.

Lo fa NON Implicare che i programmi a filo singolo ottengono comportamenti di concorrenza o benefici dei core del processore aggiuntivi disponibili.

Altri suggerimenti

La programmazione concomitante è più ampia - si riferisce solo alla scrittura di software che eseguirà "contemporaneamente" - cioè: più di una cosa accadrà alla volta.

La programmazione "Multi-Core" si riferisce davvero a un sottoinsieme specifico di programmazione simultanea, in cui si prendono di mira più core CPU disponibili su una macchina specifica. Questa è la forma più comune di programmazione simultanea (in genere singolo processo in esecuzione su un singolo computer), ma ancora solo una forma di programmazione simultanea.

Puoi fare una programmazione concorrente su una macchina che ha un solo core CPU. Il sistema operativo fornisce l'illusione che più di un thread sia in esecuzione contemporaneamente, passa rapidamente avanti e indietro tra di loro.

Una macchina con più core deve semplicemente questo contesto che passa meno spesso poiché due thread possono essere eseguiti contemporaneamente su due core. È solo un po 'speciale perché i bug di threading possono rendere la tua vita molto più veloce. Le probabilità che due thread provano ad accedere a una posizione di memoria condivisa allo stesso tempo sono molto più elevate.

Ad alto livello, Multi-Core è un attributo del chip del processore nel computer. Multi core significa che ha più core di elaborazione. Esistono diversi tipi di computer multi-processore: i super computer vecchi in stile con migliaia di computer collegati tramite Ethernet, sistemi con più di processori (come 2 pentium 4s) e sistemi multi-core contemporanei in cui ogni pacchetto di processori ha più core di elaborazione 9li simili Intel i7). Il terzo tipo è spesso chiamato multi-core di chip multiprocessore (CMP).

La programmazione concomitante è un attributo del software. La programmazione concomitante riguarda il codice di scrittura che è diviso in più attività che possono eseguire contemporaneamente se sono disponibili processori. Mentre i programmi simultanei sfruttano il multi-core, la programmazione simultanea è più ampia in due dimensioni:

  1. I programmi simultanei possono essere eseguiti su un singolo core o più core.
  2. I programmi simultanei possono essere utilizzati su qualsiasi tipo di multi-processori che ho menzionato sopra.

Quindi, per riassumere:

La programmazione concomitante riguarda il software che può utilizzare più processori se disponibili. Tali processori possono essere sullo stesso chip (multiprocessore multi-core o chip) o su chip diversi (spesso noti come SMP). Puoi avere sistemi in cui è possibile mettere due chip multi-core nello stesso sistema rendendolo un CMP e un SMP allo stesso tempo. La programmazione concomitante funzionerà anche per questo.

Programmazione simultanea Saluti le operazioni che sembrano sovrapporsi e si occupano principalmente della complessità che si presenta a causa del flusso di controllo non deterministico. I costi quantitativi associati ai programmi simultanei sono in genere sia di produttività che di latenza. I programmi simultanei sono spesso vincolati, ma non sempre, ad esempio collezionisti di immondizia concomitante sono interamente in CPU. L'esempio pedagogico di un programma simultaneo è un crawler web. Questo programma avvia richieste per le pagine Web e accetta le risposte contemporaneamente man mano che i risultati dei download diventano disponibili, accumulando una serie di pagine che sono già state visitate. Il flusso di controllo è non deterministico perché le risposte non vengono necessariamente ricevute nello stesso ordine ogni volta che viene eseguito il programma. Questa caratteristica può rendere molto difficile eseguire il debug di programmi simultanei. Alcune applicazioni sono fondamentalmente simultanee, ad esempio server Web devono gestire contemporaneamente le connessioni client. Erlang, F# flussi di lavoro asincroni e Scala's Akka La biblioteca sono forse gli approcci più promettenti alla programmazione altamente simultanea.

Programmazione multicore è un caso speciale di programmazione parallela. La programmazione parallela riguarda le operazioni che sono sovrapposte all'obiettivo specifico di migliorare il throughput. Le difficoltà della programmazione simultanea sono eluse rendendo deterministico il flusso di controllo. In genere, i programmi di spawn set di compiti infantili che funzionano in parallelo e l'attività dei genitori continuano solo una volta che ogni sottovalutazione è terminata. Ciò rende i programmi paralleli molto più facili da eseguire il debug rispetto ai programmi simultanei. La parte difficile della programmazione parallela è l'ottimizzazione delle prestazioni rispetto a questioni come granularità e comunicazione. Quest'ultimo è ancora un problema nel contesto di Multicore perché vi è un costo considerevole associato al trasferimento di dati da una cache all'altra. La fitta matrice matrice di matrice è un esempio pedagogico di programmazione parallela e può essere risolto in modo efficiente usando l'algoritmo di divisione e conquista di Straasen e attaccando i sotto-problemi in parallelo. Cilk è forse l'approccio più promettente per la programmazione parallela ad alte prestazioni su multicolore ed è stato adottato in entrambe le Intel Blocchi filettati e Microsoft's Biblioteca parallela del compito (In .NET 4).

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