J'essaie de déterminer quelle est la meilleure pratique lors de la conception d'un algorithme parallèle pour le modèle de distribution de données. Quels pourraient être les avantages et les inconvénients de la distribution en bloc par rapport à la distribution cyclique des données en mémoire. Toute aide serait appréciée.Conception d'algorithmes parallèles
Répondre
La "Programmation parallèle en C avec MPI et OpenMP" de Quinn offre de nombreux exemples de différentes manières de distribuer des données en programmation parallèle. Il y a même un arbre de décision qui vous aide à déterminer quelle approche est la plus pratique, selon vos besoins.
La distribution de blocs dans la mémoire partagée convient le mieux aux algorithmes qui décomposent leur travail en blocs qui nécessitent peu (ou pas) de synchronisation pendant l'exécution de l'algorithme.
La conception d'un algorithme parallèle devrait se concentrer sur la réduction des goulets d'étranglement de synchronisation entre les processus. Un exemple serait une méthode de relaxation de Gauss-Seidel sur une grille à deux dimensions, où la grille est divisée en bandes (1 par processeur) et aucune synchronisation n'est effectuée. Chaque processeur calcule une valeur de convergence indépendante et se termine lorsque ce chiffre est atteint.
Vous devez également prendre en compte la localité de référence des données, ce qui peut avoir un effet marqué sur les algorithmes parallèles et séquentiels.
- 1. Extensions parallèles Equivalent en Java
- 2. Requêtes mysql parallèles en PHP?
- 3. Génériques et hiérarchies de classes parallèles
- 4. comment traiter des séquences "parallèles" dans Linq?
- 5. Comment dédoubler des flux d'événements parallèles
- 6. comment pouvez-vous boucler plusieurs tableaux parallèles?
- 7. Recherche de ports et d'adresses LPT (parallèles) disponibles dans Delphi
- 8. extensions parallèles: Help Me Understand LazyInit <T>
- 9. Passer des valeurs avec des extensions parallèles et VB.net
- 10. Comment publier des programmes d'installation parallèles à l'aide de ClickOnce?
- 11. Exécution de plusieurs tâches parallèles en arrière-plan avec Rails
- 12. sécurité Polymorphisme et le type dans les chaînes d'héritage parallèles
- 13. Comment générer des fichiers pdb pour des versions parallèles?
- 14. Maximiser les téléchargements parallèles pour le site Web
- 15. Conception décision
- 16. conception compilateur
- 17. Conception appropriée
- 18. OO Conception: Conception à persistance multiple pour une classe ruby
- 19. Conception d'un programme client/serveur, question de conception (.Net)
- 20. Modèles de conception architecturale
- 21. XSD conception de l'héritage
- 22. Conception d'une API XACML
- 23. Conception d'objet métier DAL
- 24. conception de blocs modulaires
- 25. Conception d'applications logicielles
- 26. Problème de conception
- 27. Conception de Windows Forms
- 28. coNcEPTIoN - événement polymorphes Handling
- 29. Conception de messages privés
- 30. conception objet/classe Question
"La distribution de blocs dans la mémoire partagée convient le mieux aux algorithmes qui se décomposent en blocs qui nécessitent peu (ou pas) de synchronisation pendant l'exécution de l'algorithme." - Cette déclaration n'est pas forcément une vraie, puisque je peux trouver une décomposition cyclique qui me donnera un ensemble de tâches indépendantes, alors que dans le bloc je ne pourrai pas le faire. –
@Artem Barger: vous avez raison. J'aurais dû mentionner la topologie sous-jacente, c'est-à-dire la grille, le tore, etc ... –
Gauss-Seidel est un algorithme presque pathologique à «faire» en parallèle. Ce que vous suggérez, c'est la ligne-Jacobi avec Gauss-Seidel dans chaque bande, un algorithme qui converge extrêmement lentement (par rapport à Gauss-Seidel qui est déjà terrible). – Jed