Répondre

32

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

Sauf si le multithreading se produit sur un seul cœur, auquel cas il est uniquement concurrent.

+2

AFAIK, sur un processeur monocœur, le filetage n'est pas parallèle. C'est concurrent, mais pas parallèle. –

+0

@Ionut: http: //thesaurus.reference.com/browse/concurrent <- Si vous regardez sous l'en-tête 'Synonymes' du premier résultat. –

+5

La différence que je fais entre concurrent et parallèle est que le parallélisme est vraiment simultané, alors que le concurrent semble juste comme s'il était simultané. Le changement entre les threads est si rapide qu'il semble être parallèle, mais ce n'est pas le cas. Il y a peut-être d'autres termes qui désignent cela, mais c'est ce que je comprends. –

28

Non nécessairement. Vous pouvez répartir les tâches entre plusieurs processus et même plusieurs machines - je ne classerais pas cela comme une programmation «multi-thread» car chaque processus ne peut utiliser qu'un seul thread, mais c'est certainement une programmation parallèle. Certes, vous pourriez alors argumenter qu'avec de multiples processus, il y a plusieurs threads dans le système dans son ensemble ...

Finalement, 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?

+1

Doit-on considérer aussi SIMD être programmation parallèle? Nous effectuons les mêmes opérations sur plusieurs données en parallèle, mais je ne sais pas si cela est considéré comme une micro-parallélisation à inclure dans une définition de programmation parallèle. –

+0

Je dirais que SIMD était plus de conception matérielle parallèle, mais je suppose qu'à un certain niveau, vous devez considérer le côté de la programmation d'avoir un matériel parallèle dédié, par exemple. Qu'en est-il de la programmation pour un GPU? –

26

La programmation multithread n ° signifie que vous avez un seul processus, et que ce processus génère un tas de threads. Tous les threads s'exécutent en même temps, mais ils sont tous sous le même espace de traitement: ils peuvent accéder à la même mémoire, avoir les mêmes descripteurs de fichiers ouverts, etc.

La programmation parallèle est un peu plus "générale" en tant que 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 le souhaitez, vous pouvez différencier chaque processus, mais ce n'est pas obligatoire. De plus, ces processus sont indépendants les uns des autres et ils doivent communiquer via des canaux ou des sockets réseau/unix. Les bibliothèques MPI fournissent des fonctions spécifiques pour déplacer les données entre les nœuds, de manière 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 exécute automagically l'exécution parallèle pour vous.

L'avantage d'OpenMP est qu'il est très transparent. Avoir une boucle pour paralléliser? ajoutez juste quelques directives et le compilateur le divise en morceaux, et assignez 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 un noeud ne peuvent pas utiliser OpenMP au niveau du cluster. MPI vous permet de travailler sur une architecture basée sur un nœud, mais vous devez payer le prix d'une utilisation plus complexe et non transparente.

+0

ow, donc c'est moyen 1 travail est traité par n processus pas 1 travail est traité par n thread –

+0

Je pense me rappeler que le travail _is_ se fait sur la parallélisation OpenMP-style pour les architectures multi-processus ... Je ne me souviens pas si cela fait partie d'OpenMP lui-même, ou autre chose? –

+1

@Eko: pas exactement. MPI démarre n instances du même programme, chacune avec un numéro d'identification différent dans une variable spéciale (recherchez MPI_Comm_Rank). Que faire de ces instances est à vous. –

Questions connexes