2010-02-03 23 views
2

Maintenant, j'ai un solveur en C++ pour résoudre les problèmes d'optimisation et je suis censé paralléliser mon solveur avec différents paramètres pour voir si cela peut aider à améliorer les performances du solveur. Maintenant, je ne suis pas sûr d'utiliser TBB ou MPI. D'après un livre TBB que j'ai lu, je pense que TBB est plus approprié pour le bouclage ou le code à grain fin. Comme je n'ai pas beaucoup d'expérience avec TBB, je pense qu'il est difficile de diviser mon code en petites parties afin de réaliser la parallélisation. De plus, à partir de la littérature, je trouve que de nombreux auteurs ont utilisé MPI pour mettre en parallèle plusieurs solveurs et le faire coopérer. Je suppose que MPI correspond peut-être mieux à mon besoin. Comme je n'ai pas beaucoup de connaissances sur TBB ou MPI. Tout le monde peut me dire si mon sentiment est juste? Est-ce que MPI me va mieux? Si oui, quel matériel est bon pour commencer à apprendre MPI. Je n'ai aucune expérience avec MPI et j'utilise le système Windows et C++. Merci beaucoup.Bloc de construction de threads par rapport à MPI, lequel convient le mieux à mt?

Répondre

3

L'élément de base que vous devez avoir en tête est de choisir entre la mémoire partagée et la mémoire distribuée. La mémoire partagée est lorsque vous avez plus d'un processus (normalement plus d'un thread dans un processus) qui peut accéder à une mémoire commune. Cela peut être assez précis et il est normalement plus simple d'adapter un programme monothread à plusieurs threads. Vous devrez concevoir le programme de telle sorte que les threads travaillent la plupart du temps dans des parties séparées de la mémoire (exploiter le parallélisme des données) et que la partie partagée soit protégée contre les accès simultanés à l'aide de verrous. La mémoire distribuée signifie que vous avez différents processus qui peuvent être exécutés dans un ou plusieurs ordinateurs distribués mais que ces processus ont ensemble un but commun et partagent des données par le passage de message (communication de données). Il n'y a pas d'espace mémoire commun et toutes les données dont un processus a besoin d'un autre processus nécessiteront une communication. Il s'agit d'une approche plus générale mais, en raison des exigences de communication, elle nécessite des céréales secondaires. TBB est un support de bibliothèque pour le parallélisme à mémoire partagée à base de thread tandis que MPI est une bibliothèque pour le parallélisme à mémoire distribuée (il possède des primitives simples pour la communication et des scripts pour plusieurs processus dans l'exécution de différents nœuds).

Le plus important pour vous est d'identifier les parallélismes dans votre solveur, puis de choisir la meilleure solution. Avez-vous un parallélisme de données (différents thread/processus peuvent travailler en parallèle dans différents blocs de données sans avoir besoin de communiquer ou de partager des parties de ces données)? Le parallélisme des tâches (différents threads/processus pourraient effectuer une transformation différente de vos données ou une étape différente dans le traitement des données dans un pipeline ou un graphique)?