Question

Je comprends les différences entre un programme multithread et un programme reposant sur une communication inter-machine. Mon problème est que j'ai un bon programme multithread écrit en 'C' qui fonctionne et fonctionne très bien sur une machine à 8 cœurs. Il est maintenant possible de porter ce programme sur un cluster pour avoir accès à plus de cœurs. Vaut-il la peine de déchirer le matériel pthread et de mettre à niveau le MPI (que je n’ai jamais utilisé) ou est-il préférable de recoder le tout (ou presque) à partir de zéro? Supposons que nous sommes "coincés" avec C donc un changement de langue en gros n'est pas une option.

Était-ce utile?

La solution

En fonction de la manière dont votre logiciel est écrit, il peut être avantageux ou non d’utiliser MPI par rapport à la conservation de votre implémentation pthread.

Malheureusement (ou heureusement), la transmission de messages est une bête très différente de la lecture en boucle - l’hypothèse de base est tout à fait différente. J'aime Cette citation de Joshua Phillips de l’équipe Maestro :" La différence entre la transmission de messages et la communication à état partagé est équivalente à la différence entre envoyer un e-mail à une collègue pour lui demander de terminer une tâche et ouvrir son organisateur d’écrire la tâche directement dans sa liste de tâches. Plus que d'être grossier, ce dernier risque de la confondre - elle pourrait l'effacer, ne pas le remarquer, ou le hiérarchiser par inadvertance. "

Malheureusement, la façon dont vous partagez les données est très différente. Il n’ya pas d’accès direct aux données dans les autres threads (puisqu’il peut se trouver sur d’autres machines). La migration de pthreads vers MPI peut donc s'avérer une tâche très ardue. Par contre, si le code est écrit de manière à ce que chaque fil de discussion soit isolé, cela peut être une tâche facile et certainement utile.

Pour déterminer son utilité, vous devez comprendre le code et connaître les objectifs que vous espérez obtenir en basculant. Cela peut valoir la peine d’être une expérience d’apprentissage (vous en apprenez beaucoup sur la synchronisation et les threads en travaillant dans MPI), mais cela n’est peut-être pas pratique si les gains sont mineurs.

Autres conseils

Re. votre commentaire à Reed - cela ressemble à une conversion facile et peu onéreuse en MPI. Faites simplement attention: toutes les API MPI ne prennent pas en charge la création dynamique de processus, c’est-à-dire que vous démarrez votre programme avec N processus (spécifiés au démarrage) et que vous êtes bloqué avec N processus pendant toute la durée de vie du programme.

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