Domanda

Se prevedi di scrivere un'applicazione parallela molto intensiva dal punto di vista computazionale, quali linee guida utilizzeresti per progettare i tuoi oggetti (classi o strutture, o qualsiasi altra cosa) per massimizzare il tuo potenziale di ottenere il massimo dal parallelismo.

Sto pensando a un'applicazione che dice interpreta / compila un grafico simile ad un albero di oggetti che richiedono la creazione di elementi, passandoli a un altro oggetto per l'elaborazione, e così via, con una struttura ad albero.

Cosa bisogna considerare dal primo processo di progettazione?

È stato utile?

Soluzione

Se stai creando materiale e poi lo passi per essere elaborato, quasi sicuramente puoi progettare la tua applicazione per utilizzare messaggio che passa e isolamento degli oggetti.

Il primo passo sarà identificare le responsabilità, cioè identificare chi gestirà cosa. Chiunque è arrotondato da una casella.

Il secondo passo sarà definire il flusso di informazioni tra le tue caselle, cioè se A produce X ... chi lo consuma?

Dopo questi due passaggi avrai un grafico semplice con foglie che rappresentano i lavoratori e frecce che rappresentano i messaggi. Ogni freccia rappresenta un ordine di dipendenza (ovvero, se una freccia va da A a B, quindi A deve essere eseguito prima di B).

Con questo sarai in grado di vedere facilmente quali azioni possono essere rese parallele e quali azioni sono effettivamente sequenziali in un modo grafico facile da vedere, facile da mostrare.

Quindi implementa una Pipe per ti consente di passare messaggi tra lavoratori in modo che ogni lavoratore abbia una pipeline di lavoro.

Nota finale: una volta terminato il progetto originale, è relativamente facile riformattarlo per migliorarlo. Ad esempio, i nodi che fanno lo stesso lavoro possono condividere i TUBI di lavoro, in modo che l'analizzatore di sintassi 8 utilizzi dal token "lessico" pipe o cambiarlo in modo che i lavoratori possano "rubare" lavoro da altri tubi di lavoratori, ecc.

Altri suggerimenti

Se riesci a cavartela usando molte strutture di dati immutabili, ciò ti farà risparmiare un sacco di tempo, digitazione e mal di testa.

Lo schema sopra descritto da Jorge Córdoba è solo un approccio. Vale sicuramente la pena leggere quanto segue:

http://www.amazon.com/Patterns-Parallel-Programming-Software / dp / 0321228111

Dipende molto dalle dipendenze tra i tuoi dati e dal modo migliore per scomporre il tuo problema. Ad esempio, modelli come Master-Worker e dati multipli a programma singolo (SPMD) tendono ad essere approcci molto semplici se il problema si presta ad affondare e ad avvicinarsi.

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