Question

Si vous envisagez d'écrire une application parallèle très gourmande en calculs, quelles instructions utiliseriez-vous pour concevoir vos objets (classes, structures ou autres) afin d'optimiser votre potentiel pour tirer le meilleur parti du parallélisme?

Je pense à une application qui dit interprète / compile un graphique en forme d'arborescence d'objets nécessitant la création d'éléments, qu'il passe à un autre objet à traiter, etc., avec une structure arborescente.

Que faut-il prendre en compte dès le début du processus de conception?

Était-ce utile?

La solution

Si vous créez des éléments, puis que vous les transmettez pour qu'ils soient traités, vous pouvez certainement concevoir votre application de manière à ce qu'elle utilise message en cours et isolement d'objet.

La première étape sera d'identifier les responsabilités, c'est-à-dire qui va gérer quoi. Chaque personne est arrondie par une boîte.

La deuxième étape consistera à définir le flux d’information entre vos boîtes, c’est-à-dire si A produit X ... qui la consomme?

Après ces deux étapes, vous aurez un graphique simple avec des feuilles représentant des ouvriers et des flèches représentant des messages. Chaque flèche représente un ordre de dépendance (c'est-à-dire, passe de A à B, puis A doit être exécuté avant B).

Grâce à cela, vous pourrez facilement voir quelles actions peuvent être faites en parallèle et quelles actions sont en fait séquentielles dans un moyen graphique facile à voir, facile à montrer.

Il suffit ensuite de mettre en place une structure Pipe pour vous permettent de faire passer des messages entre les travailleurs afin que chaque travailleur dispose d'un flux de travail en cours.

Pour finir, une fois que la conception originale est terminée, il est relativement facile de la reformuler pour l’améliorer. Par exemple, les nœuds qui effectuent le même travail peuvent partager un travail PIPES, de sorte que l'analyseur 8 de syntaxe consomme à partir du "jeton lexique". canaliser ou changer pour que les ouvriers puissent "voler" travailler à partir de tuyaux d’ouvriers, etc.

Autres conseils

Si vous pouvez vous en tirer en utilisant de nombreuses structures de données immuables, vous gagnerez beaucoup de temps en saisie et en cas de maux de tête.

Le modèle décrit par Jorge Córdoba ci-dessus n’est qu’une approche. Ce qui suit vaut vraiment la peine d'être lu:

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

Cela dépend beaucoup des dépendances entre vos données quant à la meilleure façon de décomposer votre problème. Par exemple, les modèles tels que maître / travailleur et données multiples à programme unique (SPMD) ont tendance à être des approches très simples si votre problème se prête bien à la résolution de problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top