EDIT (mars 2014) Je dois dire que depuis, j'ai davantage travaillé sur les algorithmes pour les modèles de calcul de type MapReduce, et j'ai l'impression d'être trop négatif. La technique Divide-Compress-Conquer dont je parle ci-dessous est étonnamment polyvalente et peut constituer la base d'algorithmes qui, à mon avis, sont non triviaux et intéressants.
Permettez-moi de donner une réponse qui sera bien inférieure à celle de Mike en termes d’exhaustivité, mais d’un point de vue modèle / théorie algorithmique.
Pourquoi il y a de l'excitation : MapReduce entrelace des calculs parallèles et séquentiels; chaque processeur a accès à un bloc non trivial (par exemple, ) de l'entrée et peut effectuer une opération non triviale sur celle-ci; Cela est très différent des modèles PRAM et semble être une idée intéressante qui pourrait conduire à de nouvelles techniques algorithmiques. En particulier, certains problèmes peuvent être résolus en peu de tours de calcul (de taille d'entrée constante), alors qu'aucun problème non trivial ne peut être résolu dans PRAM en un temps .o ( log n )O(nϵ)o(logn)
Pourquoi le modèle devient légèrement frustrant pour moi : la seule technique algorithmique qui semble fonctionner pour obtenir des algorithmes de tours et qui est quelque peu nouvelle est la suivanteO(1)
- Partitionner l'instance de problème (souvent au hasard)
- Effectuer des calculs sur chaque partition en parallèle et représenter le résultat du calcul de manière compacte
- Combinez toutes les solutions de sous-projet représentées de manière compacte sur un seul processeur et terminez le calcul là-bas
Exemple très simple de technique: calculez la somme de nombres. Chaque processeur a du tableau et calcule la somme de cette partie. Ensuite, toutes les sommes peuvent être combinées sur un seul processeur pour calculer la somme totale. Un exercice légèrement plus intéressant consiste à calculer toutes les sommes de préfixes de cette façon (bien entendu, dans ce cas, la sortie doit être représentée de manière distribuée). Ou calculez un arbre couvrant d'un graphe dense.O ( √n √O(n−−√)n−−√
Maintenant, je pense qu’il s’agit en fait d’une solution intéressante à la division et à la conquête, la solution étant qu’après la phase de division, vous devez compresser les solutions de sous-problèmes afin qu’un seul processeur puisse conquérir. Cependant, cela semble vraiment être la seule technique que nous ayons mise au point jusqu'à présent. Il échoue lors de problèmes avec des graphes clairsemés, comme une connectivité clairsemée par exemple. Cela contraste avec le modèle de transmission en continu, qui a débouché sur une multitude de nouvelles idées, telles que l'algorithme d'échantillonnage ingénieux de Flajolet et Martin, l'algorithme d'appariement déterministe de Misra et Gries, la puissance de techniques de dessin simples, etc.
En tant que paradigme de programmation, la réduction de la carte a eu beaucoup de succès. Mes commentaires considèrent la carte réduire comme un modèle de calcul intéressant. Les bons modèles théoriques sont un peu bizarres. S'ils suivent la réalité de trop près, ils sont difficiles à manier, mais plus important encore (pour emprunter un terme à l'apprentissage automatique), les théorèmes prouvés pour les modèles trop spécifiques ne se généralisent pas, c'est-à-dire qu'ils ne sont pas valables dans d'autres modèles. C'est pourquoi nous souhaitons faire abstraction le plus de détails possible tout en laissant suffisamment de place pour nous mettre au défi de proposer de nouveaux algorithmes. Enfin, ces nouvelles idées devraient pouvoir retrouver leur chemin dans le monde réel. La PRAM est un modèle irréaliste qui a conduit à des idées intéressantes, mais ces idées se sont révélées être rarement applicables au calcul parallèle dans le monde réel. D'autre part, le streaming est également irréaliste, mais il a inspiré des idées algorithmiques qui sont réellement utilisées dans le monde réel. Voirsketch comte-min . Les techniques d'esquisse sont en fait également utilisées dans les systèmes basés sur la réduction de carte.