L'écriture de pseudo-code pour la programmation parallèle
Comment pouvez-vous écrire le pseudo-code pour la programmation parallèle? En particulier, comment pouvez-vous différencier locales et des variables partagées? Comment représenter les opérations comme les nuages de points, à rassembler, à réduire, la diffusion et le point-à-point communications? S'il y a des normes à ce sujet?
- Cette question n'est toujours pas une bonne réponse!
Vous devez vous connecter pour publier un commentaire.
Pseudo-code est à peu près juste en anglais. Ainsi, vous pouvez utiliser tout ce qui est clair et sans ambiguïté. Ce n'est pas un langage de programmation, de sorte que vous n'avez pas besoin de représenter les opérations comme les "nuages de points" .. vous pouvez juste dire "scatter".
Il n'existe pas de normes pour les pseudo-code, mais bon, le pseudo-code est simple et facile à comprendre.
J'ai trouvé au moins un pseudolanguage pour la programmation parallèle: Péril L. Il est formel, mais un peu niveau trop bas à mon goût.
Essayer "l'écriture de l'diagrammes", ici: http://www.websequencediagrams.com/
Vous allez vous retrouver avec le meilleur des deux mondes, assez simple en anglais consolidés (les"pseudo-code") et de nettoyer les diagrammes. J'ai été en mesure d'expliquer assez complexe de la programmation parallèle de mes managers et de leurs pairs à l'aide de ces diagrammes. Dernier mais non le moins, on peut vérifier dans le schéma de la "source" dans le système de contrôle de source.
La réponse courte à votre question, c'est qu'il n'est pas conventionnel façon d'écrire le pseudo-code pour la programmation parallèle.
Cela est dû au fait qu'il existe une variété de façons de faire de la programmation parallèle, en termes de différentes architectures parallèles (par exemple, SMPs, Gpu, de clusters et d'autres systèmes exotiques) et en parallèle des approches de programmation. Je me réfère à la programmation des approches " parce que, en général, la plupart des bibliothèques ou des annotations plutôt que des langues (voir MPI, OpenMP, TBB, etc.). Donc, même si vous pouvez choisir l'architecture et de la langue, vous aurez de la difficulté à définir la sémantique d'une bibliothèque ou d'un système d'annotations.
Heureusement, plus rigoureusement définis par des approches de programmation ont été développés. Cependant, ils sont généralement basés sur la mémoire partagée ou de passage de messages. Trouver un bon notation/pseudocode dépend à quel degré vous avez besoin de la sémantique définie et quels types de programmation parallèle des problèmes que vous essayez d'exprimer.
Voici deux suggestions:
La POUSSETTE modèle est très simple et doit être utilisé comme une base pour la mémoire partagée de la programmation des notations. CSP lui-même peut-être trop mathématique pour un pseudo-code et l'occam notation peut être trop verbeux. C'était la vue de Brinch Hansen (une grande dans la programmation simultanée) qui a conçu son propre de la langue, SuperPascal, pour être utilisé comme une notation pour l'explication des algorithmes parallèles dans les publications.
À ma connaissance, pas d'autres langues pour le calcul parallèle ont été développés, qui peut être défini de manière rigoureuse et/ou adapté pour être utilisé comme un haut-niveau de la notation.
Ce essai de Matthew Adams est probablement la meilleure introduction que j'ai vu à la marche à travers le multithreading processus à l'aide d'une forme de pseudo-code.
Avez-vous envisagé de prendre un Comportement d'approche de Développement orientée? J'ai récemment mis ensemble assez complexe multi process/multicœur morceau de code à l'aide d'une approche BDD et l'a trouvé très utile. La meilleure partie de l'approche de l'été je pouvais à la fois de décrire tout dans un anglais simple et de se concentrer sur le problème plutôt que sur les détails de mise en œuvre. Mes premières itérations ont été à thread unique pour s'assurer que le code a passé tous les tests et résolu le problème. Je l'amélioration des performances du système en tirant parti de multitraitement dans des lieux sélectionnés, tout en veillant à ne pas rompre les tests single-threaded système adopté. Le Refactoring est beaucoup plus facile parce que le code est déjà beaucoup plus simple que si j'avais conçu les choses autour de l'optimisation de la conception des détails prématurément et je peux me concentrer sur le suivi des délais de traitement de la re-factorisation des systèmes depuis que j'ai été d'obtenir exactement les mêmes résultats que les précédentes itérations.
Prendre un coup d'oeil au livre Développement Piloté par les tests pour le C Embarqué pour quelques idées. J'ai utilisé ce livre lors de mon développement et ont fait partie intégrante de ma bibliothèque.