Domanda

Ci sono dei paradigma che vi darà una mentalità diversa o di avere un approccio diverso alla scrittura di applicazioni multi filo? Forse qualcosa che si sente molto diverso come la programmazione procedurale per la programmazione delle funzioni.

È stato utile?

Soluzione

La concorrenza ha molti modelli differenti per i diversi problemi. La pagina di Wikipedia per elenca alcuni modelli e c'è anche una pagina per che ha qualche buon punto di partenza per i diversi tipi di modi per affrontare la concorrenza.

L'approccio si prende dipende molto sul problema a portata di mano. Diversi modelli risolvere i vari problemi diversi che possono sorgere in applicazioni simultanee, e alcuni si basano su altri.

In classe mi è stato insegnato che la concorrenza utilizza mutua esclusione e sincronizzazione insieme per risolvere i problemi di concorrenza. Alcune soluzioni richiedono solo uno, ma con entrambi si dovrebbe essere in grado di risolvere qualsiasi problema di concorrenza.

Per un concetto molto diverso si poteva guardare immutabilità e la concorrenza. Se tutti i dati sono immutabili quindi gli approcci convenzionali alla concorrenza non sono nemmeno necessari. Questo articolo esplora questo argomento.

Altri suggerimenti

Non capisco davvero la questione, ma se si inizia a fare un po 'di codifica utilizzando CUDA give qualche modo diverso di pensare applicazioni multi-threading.

Si differenzia dalla tecnica multi-threading generali, come semafori, monitor, ecc perché avete migliaia di thread contemporaneamente. Quindi il problema del parallelismo in CUDA risiede più nel partizionamento dei dati e mescolando i blocchi di dati in seguito.

Solo un piccolo esempio di un ripensamento completo di un problema di serie comune è il Scansione algoritmo. E 'semplice come:

  • Dato un insieme {a, b, c, d, e}

Voglio la seguente serie:

{a, a + b, a + b + c, a + b + c + d, a + b + c + d + e}

Se il simbolo '+' in questo caso è qualsiasi operatore Commutattive (non solo in più, si può fare la moltiplicazione anche).

Come fare questo in parallelo? Si tratta di un completo ripensamento del problema, che è descritto in questo carta .

Molte altre implementazioni di diversi algoritmi in CUDA possono essere trovati nel NVIDIA sito web

Bene, un cambiamento di paradigma molto conservativa da concorrenza filo-centric (condividere tutto) verso processo-centric concorrenza (separazione dello spazio degli indirizzi). In questo modo si può evitare la condivisione dei dati non intenzionale ed è più facile per imporre una politica di comunicazione tra i diversi sotto-sistemi.

Questa idea è vecchia ed è stato propagato (tra gli altri) da parte della comunità di micro-kernel del sistema operativo per costruire i sistemi operativi più affidabili. È interessante notare che il Singularity OS prototipo da Microsoft Research dimostra che spazi di indirizzi tradizionali sono nemmeno necessaria quando si lavora con questo modello.

La relativamente nuova idea mi piace di più è transazionale memoria : evitare problemi di concorrenza facendo in modo gli aggiornamenti sono sempre atomica.

Dai looksee a OpenMP per una variazione interessante.

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