étant donné que la complexité de la carte et réduire les tâches sont Je sais que c'est un non-sens lorsque votre problème est assez grand, ne vous souciez pas des inefficacités, mais pour de petits problèmes pouvant courir dans une petite machine ou quelques machines, devrais-je passer à travers la douleur de concevoir des algorithmes parallèles lorsque j'ai une carte / réduisez la mise en œuvre déjà à portée de main? P> O (carte) = f (n) code> et
o (réduisez) = g (n) code> a-t-il été pris Le temps d'annuler la manière dont la carte / réduire les opérations intrinsèques (tri, mélange, envoi de données, etc.) augmente la complexité de calcul? Quelle est la surcharge de la carte / réduisez l'orchestration? P>
3 Réponses :
Pour de petits problèmes "pouvant courir dans une petite machine ou quelques machines", oui, vous devriez les réécrire si la performance est essentielle. Comme les autres l'ont souligné, les frais de communication sont élevés.
Je pense que personne n'a fait d'analyse de complexité sur les opérations M / R, car il s'agit d'une mise en œuvre si fortement, de la machine et de l'algorithme. Vous devriez avoir tellement de variables juste pour, disons, trier: p> est-ce que cela a un sens? Cela devient vraiment désordonné vraiment rapide. M / R est également un cadre de programmation, pas un algorithme en soi et l'analyse de la complexité est généralement réservée aux algorithmes. P> La chose la plus proche de ce que vous recherchez peut être
Je sais que c'est un non-sens lorsque votre problème est assez grand, ne vous souciez pas des inefficacités, mais pour de petits problèmes pouvant courir dans une petite machine ou quelques machines, devrais-je passer à travers la douleur de concevoir des algorithmes parallèles lorsque j'ai une carte / réduisez la mise en œuvre déjà à portée de main? P> blockQuote>
C'est un problème difficile à analyser. D'une part, si le problème est trop petit, l'analyse de la complexité classique est susceptible de donner la mauvaise réponse en raison des termes de l'ordre inférieur dominant pour le petit
n p>. P>
D'autre part, une analyse de la complexité dans laquelle l'une des variables est le nombre de nœuds de calcul échouera également si le nombre de nœuds de calcul est trop petit ... une fois de plus à cause des frais généraux de la carte / réduisant la contribution de l'infrastructure à termes d'ordre inférieur. p>
Alors que pouvez-vous faire à ce sujet? Eh bien, une approche serait de faire une analyse plus détaillée qui ne s'appuie pas sur la complexité. Déterminez la fonction de coût, y compris les termes de l'ordre inférieur et les constantes, pour votre mise en œuvre particulière des algorithmes et la carte de la carte / réduction em>. Ensuite, remplacez des valeurs pour les variables de taille des problèmes, le nombre de nœuds, etc. compliqué, bien que vous puissiez pouvoir obtenir avec des estimations pour certaines parties de la fonction de coût. P>
La deuxième approche consiste à "le sucer et à voir". p>
Réduire la carte pour l'apprentissage de la machine sur Multicore mérite un look, comparant Comment la complexité de diverses algorithmes d'apprentissage de la machine bien connues change lorsqu'elle est passée à une forme "amicale". p>
Cheers. P>
S'il vous plaît commenter quand vous avez basculé les choses - en particulier la descendance des superbes trucs sans commentaire, c'est un peu étrange
Le lien semble être mort
C'est l'inverse. Les calculs de complexité comme O () entrent en vigueur plus quand un problème est grand. Aux petites tailles de données, d'autres facteurs tels que la transmission des frais de communication dominent souvent le temps pris par une fonction.
En fait, c'est l'autre était autour. La bande passante du réseau est presque toujours la ressource la plus contrainte d'un cluster. Dans presque tous les emplois, le calcul réel est très peu du temps d'exécution par rapport à IO.