La programmation parallèle est-elle == programmation multithread ?
Réponses
Trop de publicités?Non nécessairement . Vous pouvez répartir les tâches entre plusieurs processus et même plusieurs machines - je ne classerais pas cela comme de la programmation "multithread" car chaque processus peut n'utiliser qu'un seul thread, mais c'est certainement de la programmation parallèle. Certes, on pourrait alors arguer qu'avec de multiples processus, il y a de multiples threads dans le système dans son ensemble...
En définitive, les définitions de ce type ne sont utiles que dans un contexte. Dans votre cas particulier, quelle différence cela va-t-il faire ? Ou est-ce juste par intérêt ?
Non. La programmation multithread signifie que vous avez un seul processus, et que ce processus génère un ensemble de threads. Tous les threads sont exécutés en même temps, mais ils se trouvent tous dans le même espace de processus : ils peuvent accéder à la même mémoire, ont les mêmes descripteurs de fichiers ouverts, etc.
La programmation parallèle est un peu plus "générale" comme définition. Dans MPI, vous effectuez une programmation parallèle en exécutant le même processus plusieurs fois, à la différence que chaque processus reçoit un "identifiant" différent, donc si vous voulez, vous pouvez différencier chaque processus, mais ce n'est pas nécessaire. De plus, ces processus sont indépendants les uns des autres, et ils doivent communiquer via des pipes, ou des sockets réseau/unix. Les bibliothèques MPI fournissent des fonctions spécifiques pour déplacer les données vers et depuis les nœuds, dans un style synchrone ou asynchrone.
En revanche, OpenMP réalise la parallélisation via le multithreading et la mémoire partagée. Vous spécifiez des directives spéciales au compilateur, et il effectue automatiquement l'exécution parallèle pour vous.
L'avantage d'OpenMP est qu'il est très transparent. Vous avez une boucle à paralléliser ? Il suffit d'ajouter quelques directives pour que le compilateur la découpe en morceaux et assigne chaque morceau de la boucle à un processeur différent. Malheureusement, vous avez besoin d'une architecture à mémoire partagée pour cela. Les clusters ayant une architecture basée sur les nœuds ne sont pas en mesure d'utiliser OpenMP au niveau du cluster. MPI vous permet de travailler sur une architecture basée sur les nœuds, mais vous devez payer le prix d'une utilisation plus complexe et non transparente.