Quel modèle de calcul est "le meilleur"?

41

En 1937, Turing décrit une machine de Turing. Depuis lors, de nombreux modèles de calcul ont été décrits dans le but de trouver un modèle ressemblant à un vrai ordinateur, mais suffisamment simple pour concevoir et analyser des algorithmes.

En conséquence, nous avons une douzaine d'algorithmes pour, par exemple, le problème SORT pour différents modèles de calcul. Malheureusement, nous ne pouvons même pas être sûrs qu'une implémentation d'un algorithme avec le temps d'exécution O (n) dans un mot RAM avec des opérations de vecteur de bits autorisées fonctionnera plus rapidement qu'une implémentation d'un algorithme avec le temps d'exécution O (n⋅logn) dans un mot RAM (je parle bien sûr de "bonnes" implémentations).

Je veux donc savoir lequel des modèles existants est "le meilleur" pour concevoir des algorithmes et je recherche une étude à jour et détaillée sur les modèles de calcul, qui donne le pour et le contre des modèles et de leur proximité avec la réalité.

Tatiana Starikovskaya
la source
1
Posé en croix sur MathOverflow ( mathoverflow.net/questions/44558/… ), bien qu’il soit redirigé ici.
Dave Clarke
@Tatiana, bonne question, qu'entendez-vous par "le meilleur"? Voulez-vous dire un modèle avec un temps d'exécution théorique qui est proche du "vrai" temps d'exécution?
Mohammad Al-Turkistany,
8
Si vous cherchez à modéliser avec précision les "vraies" heures d'exécution, il semble qu'il soit important de modéliser avec précision les caches. En particulier, l’informatique moderne comporte de nombreuses couches de mise en cache (CPU, RAM, disque, etc.), certaines couches étant d’ordre de grandeur plus lent que d’autres; Il n'est pas hors de question que le "temps réel" d'exécution d'un algorithme soit déterminé par le nombre d'erreurs dans le cache. De façon anecdotique, j'ai entendu dire que l'une des raisons pour lesquelles les méthodes de barrière en programmation linéaire fonctionnent si bien malgré leurs faibles garanties théoriques est qu'elles sont souvent assez efficaces en cache.
Mhum
4
Autant que je sache, comme le dit mhum, les écarts les plus importants entre les durées d'exécution prévues dans le mot modèle RAM et les durées d'exécution réelles proviennent généralement de l'extraction de données ... les mauvaises variables sont dans la mémoire cache et le temps d'extraction ralentit énormément à cause de cela. Un certain nombre de tentatives ont été tentées pour modéliser cela avec un modèle théorique de mémoire hiérarchique, et je ne crois pas qu'aucune de ces tentatives ait été très fructueuse, car les modèles finissent par être trop compliqués pour pouvoir être utilisés facilement.
Peter Shor
2
Si vous avez un algorithme qui, selon vous, pourrait être utile dans la pratique et que vous voulez le voir réellement utilisé, la meilleure chose à faire pour vous en assurer est de l'implémenter ou de faire appel à quelqu'un d'autre (même si ce n'est pas un bon mise en œuvre suffisante pour être incorporé dans un logiciel pratique). Pour une étude de cas, regardez l'historique de l'algorithme de compression de données LZW. En fait, il est probablement inutile d’essayer d’imaginer l’impact de la mise en cache sur l’algorithme, à moins que ce soit celui qui intéresse les utilisateurs; sinon, personne ne fera attention à vos résultats.
Peter Shor

Réponses:

30

J'ai toujours considéré le modèle Word RAM standard comme "le meilleur" à votre sens. Tous ceux qui ont appris à programmer dans un langage comme C (ou des équivalents approximatifs comme Java, etc.) ont précisément ce modèle en tête lorsqu'ils pensent à un ordinateur.

Bien sûr, vous avez parfois besoin de généralisations en fonction des régimes dans lesquels vous travaillez. Le modèle de mémoire externe est un modèle important à garder à l’esprit. Cela s'applique non seulement lorsque vous travaillez avec des disques, mais également pour comprendre (vous obliger à vous soucier de) le cache. Bien sûr, le traiter trop sérieusement peut également conduire à des résultats absurdes, car le modèle de mémoire externe pure ne compte pas le calcul. Une autre généralisation du mot RAM concerne le parallélisme, mais là nous sommes tous un peu confus pour le moment :)

O(n)O(nlgn)nn

Une dernière remarque sur les algorithmes et la "réalité": gardez toujours à l'esprit ce que vous essayez d'accomplir. Lorsque nous travaillons dans des algorithmes, nous essayons de résoudre les problèmes les plus difficiles (par exemple SAT sur 50 variables ou trier un milliard de nombres). Si vous essayez de trier 200 nombres ou de résoudre SAT sur 20 variables, vous n'avez pas besoin d'algorithme sophistiqué. C'est pourquoi la plupart des algorithmes sont en réalité triviaux. Cela ne dit rien de mal à propos de la recherche algorithmique - nous nous trouvons justement intéressés par ce 1/1000 inhabituel des vrais problèmes difficiles à résoudre ...

Mihai
la source
Merci pour votre réponse. Je veux comprendre quelles généralisations valent la peine d’être ajoutées au mot RAM. Pouvons-nous décrire un modèle qui inclura toutes ces astuces telles que les opérations de vecteur de bits, le parallélisme, les caches, tout en restant simple?
Tatiana Starikovskaya
10

Il n'existe pas de modèle informatique totalement satisfaisant pour analyser les algorithmes avec tristesse, même dans ce que l'on pourrait considérer comme un paramètre traditionnel. Cela suppose que toutes les données sont facilement accessibles et que l’espace de travail est effectivement illimité.

La machine de Turing à bandes multiples est théoriquement bien spécifiée et de nombreux algorithmes ont été conçus et analysés dans ce modèle au fil des ans. Cependant, pour certains, il n’existe pas suffisamment de liens avec le fonctionnement des ordinateurs réels pour devenir un bon modèle à utiliser au XXIe siècle. D'autre part, le modèle mot-RAM est devenu populaire et semble capturer avec plus de précision le fonctionnement des ordinateurs modernes (opérations sur des mots et non des bits, accès à temps constant aux emplacements de mémoire). Cependant, il y a des aspects qui ne sont pas idéaux. Par exemple, il n’existe pas de modèle de mot RAM unique. Il faut d’abord préciser quelles opérations sur les mots doivent être autorisées en temps constant. Il existe de nombreuses options pour cela sans aucune réponse acceptée. Seconde, la taille de mot w est normalement configurée pour augmenter avec la taille d'entrée (c'est-à-dire au moins aussi vite que log (n)) pour permettre à tout élément en mémoire d'être adressé à l'aide d'un nombre constant de mots. Cela signifie qu'il faut imaginer une classe infinie de machines sur lesquelles votre algorithme est exécuté ou, pire encore, que la machine change au fur et à mesure que vous lui fournissez plus de données. C'est une pensée déconcertante pour le plus pur parmi mes étudiants au moins. Enfin, vous obtenez des résultats de complexité quelque peu surprenants avec le modèle mot-RAM qui peut ne pas correspondre à ceux que l’on apprend en tant qu’étudiant. Par exemple, la multiplication de deux nombres à n bits correspond à O (n) temps dans ce modèle et la simple lecture d'une chaîne de n bits est une opération temporelle sous-linéaire tout à coup. Cela signifie qu'il faut imaginer une classe infinie de machines sur lesquelles votre algorithme est exécuté ou, pire encore, que la machine change au fur et à mesure que vous lui fournissez plus de données. C'est une pensée déconcertante pour le plus pur parmi mes étudiants au moins. Enfin, vous obtenez des résultats de complexité quelque peu surprenants avec le modèle mot-RAM qui peut ne pas correspondre à ceux que l’on apprend en tant qu’étudiant. Par exemple, la multiplication de deux nombres à n bits correspond à O (n) temps dans ce modèle et la simple lecture d'une chaîne de n bits est une opération temporelle sous-linéaire tout à coup. Cela signifie qu'il faut imaginer une classe infinie de machines sur lesquelles votre algorithme est exécuté ou, pire encore, que la machine change au fur et à mesure que vous lui fournissez plus de données. C'est une pensée déconcertante pour le plus pur parmi mes étudiants au moins. Enfin, vous obtenez des résultats de complexité quelque peu surprenants avec le modèle mot-RAM qui peut ne pas correspondre à ceux que l’on apprend en tant qu’étudiant. Par exemple, la multiplication de deux nombres à n bits correspond à O (n) temps dans ce modèle et la simple lecture d'une chaîne de n bits est une opération temporelle sous-linéaire tout à coup.

Cela dit, si vous voulez juste savoir si votre algorithme est susceptible de fonctionner rapidement, l'un ou l'autre fera très probablement :-)

Raphaël
la source
2
Je pense que si vous évitez les opérations arithmétiques au niveau des bits ou des modèles de mots pour tenter d'éviter le problème de "la taille de la machine avec la taille de l'entrée", tout en utilisant une RAM à coût uniforme ou une machine à pointeur, vous vous trompez: ces autres modèles ont le même problème. Comment indexent-ils leurs entrées? La réponse est: les ordinateurs réels manquent de mémoire, mais malgré cela, il est toujours plus pratique de concevoir des algorithmes pour eux en supposant qu’ils sont RAM (ou peut-être même mieux d’utiliser un modèle qui prend en compte les coûts de hiérarchie de la mémoire) plutôt que de les supposer. un DFA.
David Eppstein
4
Un modèle de mémoire RAM dont Knuth discute, par exemple, prend w temps pour rechercher une adresse avec w bits et de même w temps pour ajouter deux nombres w bits (c’est ainsi qu’il obtient Theta (n log n) pour multiplier par deux n -bits dans un modèle de RAM sans opération à temps constant sur les mots). Il est intéressant de voir comment les modèles les plus largement acceptés ont changé au cours des 20 dernières années et combien de modèles ne sont plus jamais discutés.
Raphaël
8

Les modèles ne sont que des modèles. Je ne voudrais pas pousser trop loin; ils parlent de certains aspects de vos algorithmes, mais pas de la vérité.

Je suggérerais que vous utilisiez simplement le modèle de mot RAM standard dans votre analyse et que vous mettiez en œuvre l'algorithme pour voir comment il fonctionnait correctement.

(En réalité, mettre en œuvre votre algorithme sans jamais l'exécuter en dit déjà beaucoup sur lui ... Tout d'abord, il peut être implémenté de manière prouvable.)

Jukka Suomela
la source
3
Eh bien, j'ai deux objections. Premièrement, peu de théoriciens mettent en œuvre des algorithmes et nous devons néanmoins les comparer d’une manière ou d’une autre. Deuxièmement, je veux comprendre quelles fonctionnalités d’un ordinateur nous pouvons ajouter à un modèle qui ne perd pas sa simplicité.
Tatiana Starikovskaya
11
La solution proposée par David Johnson consiste à avoir plus de personnes implémentant des algorithmes - il a lancé ALENEX et DIMACS Challenges pour résoudre ce problème. J'ai une certaine expérience avec cela aussi. Avec Ken Clarkson, j’ai mis au point un algorithme aléatoire de coque convexe qui, selon nous, fonctionnerait bien dans la pratique. Clarkson a fait appel à un étudiant d’été des Bell Labs. Sur la base des promesses de cette implémentation, les idées ont été intégrées dans le programme qhull (écrit au Centre de géométrie), mais avec certaines accélérations heuristiques, l’algorithme n’a plus la garantie théorique de fonctionner rapidement.
Peter Shor
5

Si votre tâche de calcul concerne davantage le déplacement de données que la réalisation d'opérations (arithmétiques), (les ensembles de données sont énormes et ne peuvent même pas être insérés dans la mémoire principale), le modèle I / O (introduit par Aggarwal et Vitter en 1988 ) peut être très précis. Pour des tâches telles que la permutation d’un grand nombre d’éléments dans la mémoire principale, il peut être utile d’utiliser les algorithmes qui sont optimaux en termes d’E / S (dans une implémentation minutieuse).

Pour les ordinateurs multicœurs modernes, la variante parallèle introduite par Arge, Goodrich, Nelson et Sitchinava en 2008 peut être un modèle précis.

Riko Jacob
la source
5

Si vous voulez dire "le meilleur" modèle de calcul pour vous rendre la vie plus compliquée, vous pouvez utiliser la machine de turing universelle à 2 états et à 3 symboles de Wolfram.

Avantages : aucun, sauf la sensation de marcher sur la ligne de démarcation entre la raison et la folie;

CONS : tonnes ...

:-D (seulement une blague, je suis fondamentalement d'accord avec les réponses précédentes ...)

Marzio De Biasi
la source
1

Sur une note plus théorique: L’article Ultimate, modèles théoriques de nanoc calculateurs, affirme que le modèle de maillage 3D réversible est le modèle physique optimal de calcul, en ce sens qu’aucun autre modèle physique ne peut être asymptotiquement plus rapide. Des considérations physiques telles que la vitesse de la lumière, le principe de Landauer et le lien de Bekenstein sont discutées.

Pour citer l'extrait:

Nous constatons qu'en utilisant la technologie actuelle, une machine réversible ne contenant que quelques centaines de couches de circuits pourrait surpasser toute machine existante et qu'un ordinateur réversible basé sur la nanotechnologie n'aurait besoin que de quelques microns pour pouvoir surpasser toute technologie irréversible éventuelle.

Nous pensons qu'une implémentation en silicium du maillage 3D réversible pourrait être utile aujourd'hui pour accélérer certains calculs scientifiques et d'ingénierie, et nous proposons que le modèle devienne un centre d'étude future de la théorie des algorithmes parallèles pour un large éventail de problèmes.

utilisateur76284
la source