44 votes

La programmation parallèle est-elle == programmation multithread ?

La programmation parallèle est-elle == programmation multithread ?

30voto

Lucas Lindström Points 857

La programmation multithread est parallèle, mais la programmation parallèle n'est pas nécessairement multithread.

Sauf si le multithreading a lieu sur un seul cœur, auquel cas il n'est que concurrent.

28voto

Jon Skeet Points 692016

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 ?

26voto

Stefano Borini Points 36904

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X