Informatique parallèle et distribuée

15

Quelle (s) est (sont) la (les) différence (s) entre l'informatique parallèle et distribuée? En ce qui concerne l'évolutivité et l'efficacité, il est très courant de voir des solutions traitant des calculs dans des grappes de machines, et parfois on parle de traitement parallèle ou de traitement distribué.

D'une certaine manière, le calcul semble être toujours parallèle, car il y a des choses qui tournent simultanément. Mais le calcul distribué est-il simplement lié à l'utilisation de plusieurs machines, ou existe-t-il d'autres spécificités qui distinguent ces deux types de traitement? Ne serait-il pas redondant de dire, par exemple, qu'un calcul est parallèle ET distribué ?

Rubens
la source

Réponses:

16

Simplement défini, «parallèle» signifie s'exécuter simultanément sur des ressources distinctes (CPU), tandis que «distribué» signifie s'exécuter sur des ordinateurs distincts, impliquant des problèmes liés aux réseaux.

L'informatique parallèle utilisant par exemple OpenMP n'est pas distribuée, tandis que l'informatique parallèle avec Message Passing est souvent distribuée.

Le fait d'être dans un environnement «distribué mais pas parallèle» signifierait une sous-utilisation des ressources, ce qui est rarement rencontré, mais c'est conceptuellement possible.

damienfrancois
la source
4

Les termes "calcul parallèle" et "calcul distribué" ont certainement un grand chevauchement, mais peuvent être différenciés davantage. En fait, vous l'avez déjà fait dans votre question, en vous posant plus tard la question du "traitement parallèle" et du "traitement distribué".

On pourrait considérer "informatique distribuée" comme le terme plus général qui implique "traitement distribué" ainsi que, par exemple, "stockage distribué". Le terme commun, "distribué", fait généralement référence à une sorte de message passant sur un réseau, entre des machines physiquement séparées.

Le terme "calcul parallèle" est également en cours de définition, par exemple en différenciant explicitement les termes "parallèle" et "concurrent", où - en gros - le premier fait référence au parallélisme de données et le second au parallélisme de tâches , bien qu'il sont à peine des définitions vraiment strictes et contraignantes.

On pourrait donc dire que

  • «traitement distribué» signifie généralement (mais pas nécessairement) qu'il s'agit également de «traitement parallèle»
  • le "calcul distribué" est plus général et couvre également des aspects qui ne sont pas liés au parallélisme
  • et évidemment, "calcul parallèle" / "traitement parallèle" n'implique pas qu'il soit "distribué"
Marco13
la source
3

Les réponses présentées jusqu'à présent sont très agréables, mais je m'attendais également à ce que l'accent soit mis sur une différence particulière entre le traitement parallèle et distribué: le code exécuté. Compte tenu des processus parallèles, le code exécuté est le même, quel que soit le niveau de parallélisme (instruction, données, tâche). Vous écrivez un seul code , et il sera exécuté par différents threads / processeurs, par exemple, lors du calcul des produits matriciels ou de la génération de permutations.

D'autre part, l'informatique distribuée implique l'exécution simultanée de différents algorithmes / programmes dans différents processeurs (à partir d'une ou plusieurs machines). Ces calculs sont ensuite fusionnés en un résultat intermédiaire / final en utilisant les moyens disponibles de communication / synchronisation des données (mémoire partagée, réseau). De plus, l'informatique distribuée est très intéressante pour le traitement BigData, car elle permet d'exploiter le parallélisme de disque (généralement le goulot d'étranglement pour les grandes bases de données).

Enfin, pour le niveau de parallélisme, il peut être plutôt pris comme une contrainte sur la synchronisation. Par exemple, dans GPGPU, qui est une donnée multiple à instruction unique (SIMD), le parallélisme se produit en ayant différentes entrées pour une seule instruction, chaque paire (data_i, instruction) étant exécutée par un thread différent. Telle est la retenue que, en cas de branches divergentes, il est nécessaire de rejeter beaucoup de calculs inutiles, jusqu'à ce que les threads reconvergent. Pour les threads CPU, cependant, ils divergent généralement; cependant, on peut utiliser des structures de synchronisation pour accorder l'exécution simultanée de sections spécifiques du code.

Rubens
la source