French translation thanks to cédric
Résoudre une tâche spécifique avec un ordinateur, comme c’est habituellement comprit, est un processus séquentiel où nous disposons d’une liste de commandes et de données que l’ordinateur exécute les unes après les autres. La figure suivante montre un exemple très simplifié.

Les ordinateurs peuvent travailler en multitâche, ce qui signifie qu’ils peuvent traiter (exécuter) plusieurs tâches non liées au même moment. Ce traitement multitâche peut être « fictif » , avec un seul processeur, les tâches doivent être exécutées alternativement. En apparence, les tâches ont été résolu en même temps, mais le temps requis est la somme du temps nécessaire pour toutes les tâches. Ceci est illustré dans la figure suivante.

Depuis quelques années, des multiprocesseurs avec plusieurs noyaux, tels que l’Intel Dual Core ou la famille des Core Ix, où non seulement une, mais deux, quatre ou même huit cœurs partagent la mémoire et sont capables de travailler en parallèle. Aujourd’hui, ils sont très communs dans nos ordinateurs. Dans un système avec deux processeurs ou plus, nous pouvons effectuer sur une vraie multitâche, parce que nous pouvons exécuter simultanément plus d’une commande, comme indiqué dans la figure suivante.

Apparaît alors l’idée d’utiliser cette capacité afin de résoudre les problèmes de manière plus rapide, en utilisant le calcul parallèle. Grâce à cela , nous ne voulons pas exécuter plusieurs tâches indépendantes (comme dans l’exemple précédent), mais nous cherchons à résoudre un problème spécifique aussi vite que possible. Cela se fait au moyen de la parallélisation. Avec cela, au lieu d’exécuter un programme de manière séquentielle, nous allons exécuter plusieurs parties en même temps, produisant le résultat final une fois que chaque partie aura été traitée (montré dans la figure suivante).

Notons que tous les problèmes ne peuvent pas être résolus avec la parallélisation mais cela dépend de leur nature (surtout si le résultat final dépend de résultats partiels non liés entre eux). En outre, si un problème exige un temps T afin d’être résolu avec un seul processeur, cela ne signifie pas qu’il faudra T / 2 avec deux processeurs, T / 3 avec trois et ainsi de suite. Dans la vraie vie, lors de l’exécution d’un programme en parallèle certaines parties sont terminées avant les autres, et l’effort de synchroniser et de communiquer les résultats partiels a un coût en terme de temps. Pour cette raison, il y a un moment où, peu importe le nombre de processeurs dont vous disposez, le temps requis ne peux plus être amélioré.
Même avec ces inconvénients, les ordinateurs avec plusieurs processeurs sont la solution préférée face à des tâches qui nécessitent de grandes quantités de calculs. Ceci est du au fait qu’un seul processeur ne peut pas augmenter sa vitesse et sa mémoire indéfiniment, alors que rien ne nous empêche d’en associer (en théorie) autant que nous le voulons pour les faire fonctionner simultanément créant ainsi un supercalculateur. Un bon exemple est le supercalculateur Mare Nostrum à Barcelone, l’un des ordinateurs les plus puissants au monde, composé de 10.240 processeurs.
En généralisant ce concept, nous définissons ce que l’on appelle le calcul distribué, où le supercalculateur est un ordinateur virtuel, ce qui signifie qu’il n’existe pas physiquement en tant qu’entité, avec a la place de chacun de ses processeurs (ou nœuds) un ordinateur indépendant, qui sont tous reliés à l’aide d’un réseau. De cette façon, chaque nœud reçoit une tâche ou un problème, qu’il résout, et puis retourne le résultat. A la fin, la somme des résultats forme la solution complète au problème d’origine.