Régler une HashTable - Echecs et informatique sur PC-Windows

Rechercher
Aller au contenu

Menu principal :

Comment bien régler une table de hachage ?



Un bon réglage de la table de hachage est la condition nécessaire pour qu'un moteur d'échecs joue au maximum de ses possibilités. Voici l'essentiel de ce que vous devez savoir à ce sujet...


Si vous voulez avoir une idée de ce qu'est une table de transposition - ou HashTable - commencez d'abord par lire le point du glossaire à ce sujet. Le thème de cet article est plus technique. Il répond de façon pratique à la question : comment bien régler une HashTable dans toutes les situations ?




Les principes

La taille que vous devez réserver à ses fameuses tables, utilisées par presque tous les moteurs d'échecs, dépend essentiellement de trois paramètres :

1/ Du contrôle de temps choisi : plus vous exigerez de votre moteur qu'il réfléchisse longtemps, plus vous devrez augmenter la taille de la table. Petite pour une partie blitz, grosse pour une partie longue ou pour les activités de conseil et d'analyse, pour lesquelles le moteur est le plus sollicité…

2/ De la quantité de mémoire ram dont dispose votre ordinateur. En dessous de 4 Go, disons-le tout de suite, les moteurs très puissants comme Stockfish, Houdini ou Komodo seront à la peine en partie longue ou en mode d'analyse.

3/ Du moteur lui-même.
➤Un moteur puissant remplira évidemment beaucoup plus vite une table de hachage qu'un moteur 2000 Elo, pour lequel, si vous avez 4 Go de ram, 256 Mo seront toujours largement suffisants. Voilà pourquoi cet article n'a vraiment d'intérêt que pour les moteurs dont la force est supérieure à 2600 Elo.
➤Plus le moteur utilisera de coeurs de processeur, plus il sera puissant et plus vos tables seront rapidement saturées. Nous revenons en pratique au point précédent.
➤Les moteurs tactiques comme Houdini, Stockfish ou Rybka, dont la puissance repose largement sur le calcul, explorent plus profondément et saturent plus vite la table de hachage que les moteurs positionnels comme Komodo ou Fruit, dont les performances reposent davantage sur une très bonne appréciation de la position.


Essentiel : économiser la mémoire

Si on considère que le moteur utilisé et le contrôle de temps sont des données intangibles, le seul paramètre sur lequel il est encore possible d'agir est la quantité de mémoire ram disponible. En rajouter est la solution idéale mais avant cela, vous devez libérer tout ce qui n'est pas absolument  indispensable au fonctionnement de l'ordinateur, de l'interface et du moteur. Notamment, fermez tous les programmes que vous étiez en train d'utiliser, en particulier les navigateurs internet (gros consommateurs de ram). Personnellement, je fais aussi un Ctrl+Alt+Suppr et j'arrête manuellement tout ce que j'aurais pu oublier.
Vous devriez également fermer les nombreux programmes qui démarrent automatiquement dès que vous allumez votre ordinateur : pilotes d'imprimante, logiciels de communication (Skype), applications de partage (DropBox)…
Un logiciel d'optimisation comme Ccleaner (gratuit) vous permettra de voir tout ce qui se lance automatiquement et soit de supprimer certains processus, soit de les désactiver provisoirement.



Voici par exemple les processus qui démarrent automatiquement sur l'ordinateur que j'utilise habituellement pour les échecs : aucun ! Les deux processus qui apparaissent ici sont en grisé, donc provisoirement suspendus.

Télécharger Ccleaner ?

Enfin, si vous voulez encore faire quelques économies de mémoire, vous pouvez désactiver, provisoirement ou définitivement les services Windows dont vous n'avez pas besoin. je vous invite pour cela à consulter les pages suivantes :

Désactiver les services inutiles de Windows 7

Désactiver les services inutiles de Windows 8

Optimiser le démarrage de Windows 10

Important : faites une liste des services que vous auriez arrêtés définitivement ou placés en manuel. Si quelque chose dysfonctionne parce que vous avez été trop hard, vous pourrez toujours rallumer les services un par un pour restaurer la situation.


Méthode de réglage

Pour régler les tables de hachage des moteurs que j'utilise, j'emploie la méthode suggérée par les auteurs de Komodo. Je vous conseille pour la mettre en œuvre d'employer l'interface Arena.

Premièrement, déterminer le contrôle de temps que votre moteur aura à jouer puis prenez le temps principal en minutes et le temps incrémentiel en secondes et faites ce petit calcul :
Temps principal + temps secondaire x 3.
Vous obtenez une valeur x en secondes. Exemple, pour une partie 40/15 avec 5 secondes d'incrément : (15 + 5) x 3 = 60 secondes.

Deuxièmement, lancez Arena avec le moteur à employer, ouvrez le menu "Niveau" > "Régler" puis cochez "Temps par coup" et régler sur la valeur x, dans mon exemple 60 secondes.

Troisièmement, lancez une partie automatique (le moteur joue contre lui-même) ; menu "Parties" > "Auto" (ou Ctrl+D). Laissez le moteur épuiser la bibliothèque d'ouvertures puis observez bien  dans la zone de notification d'Arena, sous l'échiquier, l'évolution de la valeur la plus à droite, pour le premier coup de la partie. Il s'agit précisément de l'occupation de la table de hash en pourcentage. Dans l'idéal, ce chiffre ne devrait pas dépasser la majeure partie du temps les 50% durant le premier 1/2 coup. Au delà, le moteur est ralenti.



Dans cet exemple, j'ai lancé une partie 40/15 avec Komodo 12 et la valeur standard de la table de hachage : 192 Mo. Komodo a commencé sa réflexion et en peu de temps la table était déjà pleine. Clairement, la taille de la table est bien trop faible pour ce contrôle de temps.

➤Quatrièmement, arrêtez la partie automatique et ouvrez le menu de configuration du moteur: menu "Modules" > "Gérer" > "Module 1" et "Configurer" (ou Ctrl + 1). Ici, augmentez la taille de la table et recommencez à tester.



Pour cette partie de tournoi 40/15, j'ai réglé la taille de la table sur 2 Go. Le contenu de la table est resté modéré (ici 48%) et n'avait pas encore dépassé 50% lorsque le moteur a commencé à jouer le 1/2 coup suivant.

Dans l'exemple précédent, j'ai mobilisé la moitié de ma mémoire ram. Comme l'utilitaire Wise Memory Optimizer le montre, j'ai encore de la marge pour le fonctionnement de l'ordinateur : 1,4 Go. Mais j'ai taillé dur dans les processus de mon ordinateur (j'ai même coupé le son !).
En pratique, vous n'aurez pas toujours la possibilité de mobiliser autant de ram pour la table de hachage. Par exemple, si vous affrontez un moteur puissant en partie longue avec Lucas Chess et que vous utilisez Komodo en tuteur, vous n'aurez pas une mais deux tables de hachage à alimenter !
Généralement, le jeu consiste à trouver le meilleur compromis possible. J'espère que cet article vous y aidera.

Le calcul de la valeur x vu ci-dessus est valable disons pour tous les moteurs utilisés à plus de 3000 Elo. Les besoins en taille pour la table de hash chutent rapidement avec le niveau de force. Mais la méthode pour tester le remplissage de la table reste valable. Pour un moteur de 2800 Elo, essayez par exemple de diviser par deux la valeur x et lancez le moteur dans Arena en contrôlant le remplissage de la table de hash...

Un dernier point important : si vous mobilisez trop de ram pour les tables de hachage et que d'autres processus se mettent à consommer de la mémoire, jusqu'à épuiser totalement la ram (genre une mise-à-jour intempestive de votre anti-virus), votre ordinateur va utiliser le système de la mémoire virtuelle - en claire c'est votre disque dur qui servira de mémoire de substitution. Les accès disques étant considérablement plus lents que les barrettes de ram, le moteur va ramer sérieusement.

Dans tous les cas, il n'est pas conseillé de définir une taille de table de hachage supérieure à la moitié de la ram disponible, même si vous croyez avoir de la marge.


Rob Robinson, avril 2021.


 
 
 
 
 
 
 
 
Retourner au contenu | Retourner au menu _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();