Skip to content
Programmes DOS en UCI

MChess : deux programmes, deux PC

MChess 1.71 et MChess Pro 6 de Marty Hirsch, branchés en UCI et mesurés sur un 486DX à 33 MHz puis sur un Pentium 90 émulé. 607 parties, quatre cotes — et un résultat qui ne va pas dans le sens attendu.

1.71 · 486DX 332193
1.71 · Pentium 902374
Pro 6 · 486DX 332281
Pro 6 · Pentium 902325
Parties607

Deux programmes de Marty Hirsch

MChess est un programme MS-DOS avec sa propre interface graphique, écrit par Marty Hirsch. La branche 1.x date du début des années 1990 — la version 1.32 circule en juillet 1991, la 1.71 suit peu après. La branche Pro culmine en octobre 1995 avec le Pro 5, champion du monde des micro-ordinateurs à Paderborn devant Chess Genius ; le Pro 6 paraît un an plus tard, en octobre 1996.

Entre les deux versions testées ici, il y a donc environ cinq ans, un titre mondial, l'apparition de la reconnaissance de motifs, de l'apprentissage du livre et d'une évaluation positionnelle nettement plus fournie. On s'attend à un écart net en faveur du Pro 6. Ce n'est pas ce que donne la mesure.

Ce que le relais voit

Les deux programmes tournent sans modification, dans un PC émulé, pilotés au clavier par le relais UCI : il lit l'écran, saisit les coups de l'adversaire, met le programme en analyse et lui arrache son coup au budget de la pendule. Voici l'écran du Pro 6 tel que le relais le trouve au démarrage.

Capture d'écran de MChess Pro 6 sous DOS, position de départ
MChess Pro 6 au démarrage, tel que le relais le découvre. En bas : la table de hachage d'un mégaoctet, l'apprentissage et l'apprentissage du livre activés, le niveau à 5 secondes par coup. À droite, les deux pendules et la zone d'analyse que le relais lit coup après coup.

Tout est là : la table de hachage d'un mégaoctet — 10 240 Ko, 1 048 576 positions —, l'apprentissage et l'apprentissage du livre, le niveau par défaut à 5 secondes par coup, l'évaluation à 0,00 et les deux pendules. C'est cette ligne de statut que le relais lit pour suivre la partie. Cet écran est celui du démarrage : juste après, le relais passe dans les menus et coupe les deux apprentissages, met le niveau sur Infinite et active Easier play — pas de réflexion sur le temps de l'adversaire. Les mêmes frappes sont envoyées sur le 486 et sur le Pentium : les deux configurations sont identiques par construction.

Capture d'écran de MChess Pro 6 réglé en niveau Infinite
Après le réglage du relais : le niveau est passé à Infinite, en bas à droite. Le programme calcule sans limite et c'est le relais qui lui prend son coup au budget de la pendule.

Après le réglage, le niveau est passé à Infinite : le programme calcule sans limite et c'est le relais qui l'interrompt, exactement comme pour les machines dédiées du laboratoire. Les 5 secondes par coup du niveau par défaut ne servent donc jamais. L'apprentissage annoncé à l'écran ne sert pas davantage : outre qu'il est coupé, les deux émulateurs jettent leurs écritures disque à la fin de chaque partie — QEMU tourne en snapshot, MAME avec un fichier de différence temporaire. Chaque partie repart d'un disque neuf.

La capture du MChess 1.71 manque encore — son écran est différent de celui du Pro 6, et le script de capture du laboratoire n'a été écrit que pour ce dernier. À ajouter ici quand elle sera faite.

Quatre configurations, quatre cotes

ConfigurationPartiesScore%Cote moyenne des adversairesPerformanceCote au classement
MChess 1.71 — 486DX 33 MHz15085,557,0 %221522552193
MChess 1.71 — Pentium 90 MHz15067,545,0 %243023762374
MChess Pro 6 — 486DX 33 MHz15063,542,3 %235322842281
MChess Pro 6 — Pentium 90 MHz15753,534,1 %248523272325
2150 2200 2250 2300 2350 2400 MChess 1.71 2193 2374 +181 MChess Pro 6 2281 2325 +44 486DX 33 MHz Pentium 90 MHz (QEMU) cote Elo du classement

Le 486 à 33 MHz et le Pentium à 90 MHz, c'est un facteur 2,7 sur l'horloge et bien davantage sur le travail réel — le Pentium peut exécuter deux instructions par cycle là où le 486 en exécute au mieux une. Le gain mesuré, lui, n'a rien de commun d'un programme à l'autre : +181 points pour le 1.71, +44 pour le Pro 6.

Et sur le Pentium, le programme du début des années 1990 passe devant celui de 1996 : 2374 contre 2325.

Le paradoxe du Pentium

La première explication qui vient à l'esprit — le Pro 6 ne profite pas du Pentium parce qu'il cherche moins loin — est fausse. Les lignes d'analyse remontées par les deux programmes donnent la profondeur atteinte à chaque coup :

ConfigurationProfondeur moyenneMédiane s/coupTotal sur 60 coupsCoups > 60 s
MChess 1.71 — 486DX 33 MHz5,016,0 s882 s3
MChess 1.71 — Pentium 90 MHz6,97,5 s606 s21
MChess Pro 6 — 486DX 33 MHz6,116,0 s875 s29
MChess Pro 6 — Pentium 90 MHz8,114,0 s801 s36

Le Pro 6 cherche plus profond que le 1.71 sur les deux machines, et le passage au Pentium lui apporte les mêmes deux demi-coups qu'à son aîné. Côté recherche, tout est normal.

Ce qui n'est pas normal, c'est la consommation. Le 1.71 sur Pentium ne dépense que 606 secondes des 900 de la cadence, contre 882 sur le 486 : il rend ses coups avant d'avoir épuisé son budget, et il gagne quand même 123 points. Le Pro 6, lui, dépense 801 secondes — et ne gagne presque rien.

Le signe le plus net vient d'une confrontation directe. MChess 1.71 sur 486 figure au tableau des deux versions du Pro 6 :

  • Pro 6 sur 486 contre 1.71 sur 486 : 8,5 / 11, soit 77 %
  • Pro 6 sur Pentium contre le même 1.71 sur 486 : 5,5 / 10, soit 55 %

Le même programme, contre le même adversaire, fait moins bien sur la machine la plus rapide. Sur une vingtaine de parties l'écart n'est pas démonstratif à lui seul, mais il va dans le même sens que les +44 points.

Restait une piste matérielle. Le Pro 6 sur Pentium produit 36 coups de plus de 60 secondes, avec une pointe à 452 secondes, là où il n'en produit que 29 sur le 486 et où le 1.71 sur 486 n'en produit que 3. Des décrochages de cette ampleur ressembleraient à des blocages de l'émulation plutôt qu'à de la réflexion. La vérification ne le confirme pas : dans ce gauntlet, le Pro 6 sur Pentium marque 33,6 % dans les parties sans coup long et 36,2 % dans celles qui en contiennent un. C'est l'inverse de ce qu'un blocage produirait. Ces coups longs existent, ils ne coûtent rien au score.

Les explications techniques, une par une. La profondeur de recherche : écartée, le tableau ci-dessus la donne normale. Les blocages : écartés, ils n'ont pas d'effet sur le score. La persistance de l'apprentissage d'une partie sur l'autre : impossible, les deux émulateurs jettent leurs écritures disque. Des réglages qui différeraient entre les deux matériels : impossible, le relais impose les mêmes frappes de part et d'autre. Restait l'étalonnage de QEMU, c'est-à-dire la conversion du budget de la pendule en temps virtuel, propre à chaque programme. Il a été remesuré : le Pro 6 reçoit 95,6 % de son quota de réflexion et le 1.71 en reçoit 101,9 %. L'écart de 6,4 % va dans le bon sens mais il vaut environ six points Elo, soit un vingtième de ce qu'il faudrait expliquer. Aucune de ces pistes ne rend compte de l'écart.

Le tournoi dit la même chose

Un gauntlet mesure chaque configuration contre son propre lot d'adversaires : une cote ajustée peut toujours cacher un biais d'appariement. Un tournoi toutes rondes entre programmes émulés lève le doute, parce que tous les participants rencontrent exactement le même champ. Sur 2 253 parties, 48 participants, double ronde, douze programmes figurent à la fois en 486 à 33 MHz et en Pentium à 90 MHz. Les pourcentages ci-dessous sont donc directement comparables entre eux, sans ajustement d'aucune sorte, et le gain est exprimé en points Elo.

Programme486DX 33 MHzPentium 90 MHzGain
Rebel 630,3 %63,3 %+239
Rebel 929,8 %61,3 %+229
Chess Genius 545,2 %73,4 %+210
Fritz 114,9 %36,7 %+208
MChess 1.7125,0 %50,0 %+191
Fritz 333,9 %53,2 %+139
Chess Genius 247,3 %66,5 %+138
Chess Genius 350,0 %66,0 %+115
Chess Genius 447,9 %63,8 %+113
Chess Genius 147,9 %61,7 %+98
MChess Pro 634,0 %41,8 %+58
Fritz 230,3 %30,9 %+4

Le gain médian est de +138 points, et il n'est pas acquis d'avance : Rebel 6 et 9 doublent leur score, Chess Genius 5 passe de 45 à 73 %. Mais deux programmes se détachent par le bas, loin du peloton : MChess Pro 6 à +58 et Fritz 2 à +4, alors que le suivant, Chess Genius 1, est à +98. L'anomalie du Pro 6 n'est donc pas un accident d'appariement de son gauntlet : elle se reproduit sur un jeu de parties entièrement différent, et elle n'est pas isolée.

Cela déplace la question plutôt que de la résoudre. Ce n'est pas une affaire de génération : Fritz 2 est de 1992 et ne gagne rien, MChess 1.71 est de 1991 et gagne 191 points. Ce n'est pas la recherche : le Pro 6 gagne bien ses deux demi-coups de profondeur en passant au Pentium. Il reste donc deux programmes qui voient plus loin sans jouer mieux, et une explication qui n'est pas encore trouvée.

Le mur des moteurs natifs

Les quatre configurations rencontrent deux familles d'adversaires : des machines dédiées et des moteurs émulés d'un côté, des moteurs PC natifs tournant sur le Ryzen de l'autre. Le contraste est brutal.

Famille d'adversairesCote moyennePartiesScoreAttenduPerformance
Machines dédiées et moteurs émulés227747955,4 %51,7 %2321
Moteurs PC natifs (Ryzen)27291283,5 %8,7 %2149

Contre les adversaires émulés cotés 2277 en moyenne, les MChess font 55,4 % — une performance de 2321, c'est-à-dire exactement leur niveau. Contre les moteurs natifs cotés 2729, ils font 3,5 % là où leur cote leur promettrait 9 %. La performance correspondante tombe à 2149 : 172 points de moins.

Ce n'est pas une particularité de MChess. Le même décrochage apparaît sur tous les programmes DOS du laboratoire mesurés contre des moteurs natifs, et il ne s'explique ni par les pendules ni par des incidents techniques : ces parties se terminent par mat, régulièrement. C'est une non-transitivité réelle de l'échelle, et elle mérite son propre article.

Quatre parties

Une par configuration. Les évaluations citées sont celles de Stockfish 16, en pions, du point de vue de MChess.

1. MChess 1.71 sur 486 — un gambit mené jusqu'au mat

MChess 1.71 486DX 33 MHz – Fidelity Designer Mach IV, 1–0, 23 coups. Gambit écossais.

1.e4 e5 2.Cf3 Cc6 3.d4 exd4 4.Fc4 Fb4+ 5.c3 dxc3 6.O-O cxb2 7.Fxb2 : deux pions donnés pour le développement, et un fou braqué sur la grande diagonale. Le Mach IV prend tout, ce qui est son droit, et se retrouve avec huit coups de retard.

7...Cf6 8.a3 Fe7 9.e5 Ch5 10.Dd5 Tf8 — la tour retourne en f8 pour défendre f7, aveu que les noirs n'ont plus rien à proposer. 11.Cc3 f6 12.Tfe1 Cf4 13.De4 fxe5 14.Dxh7 : l'évaluation est à +3,4 et les blancs n'ont toujours pas récupéré un seul pion.

a8b7c6d5e4f3g2h1
Position après 14.Dxh7, les noirs jouent. Les blancs ont donné deux pions et n'ont rien repris : la dame est en h7, la tour en e1 face au roi noir, et le cavalier f3 n'attend que d'entrer en e5 (flèche).

14...Ff6 15.Cd5 Cxd5 16.Dh5+ Re7, et voici le coup de la partie.

17.Cxe5! L'évaluation saute de +3,4 à +16,2 : Stockfish annonce le mat à partir d'ici. Le cavalier s'offre pour ouvrir la colonne e sur le roi noir, qui n'a plus de case.

17...Cxe5 18.Txe5+! Fxe5 19.Dxe5+ Rf7 20.Dh5+ g6 21.Fxd5+ Re8 22.Dxg6+ Re7 23.Te1#. Deux pions, un cavalier et une tour donnés ; le Mach IV n'a pas commis une seule faute grossière — son plus mauvais coup coûte 0,18 — il a simplement été joué.

a8b7c6d5e4f3g2h1
23.Te1# — le roi noir est mat en e7 : la tour tient la colonne e, le fou d5 couvre la fuite, et la dame g6 interdit le reste.
MChess 1.71 486DX 33 MHz – Fidelity Designer Mach IV
1.e4 e5 2.Cf3 Cc6 3.d4 exd4 4.Fc4 Fb4+ 5.c3 dxc3 6.O-O cxb2 7.Fxb2 Cf6 8.a3 Fe7 9.e5 Ch5 10.Dd5 Tf8 11.Cc3 f6 12.Tfe1 Cf4 13.De4 fxe5 14.Dxh7 Ff6 15.Cd5 Cxd5 16.Dh5+ Re7 17.Cxe5 Cxe5 18.Txe5+ Fxe5 19.Dxe5+ Rf7 20.Dh5+ g6 21.Fxd5+ Re8 22.Dxg6+ Re7 23.Te1# 1–0

2. MChess 1.71 sur Pentium — contre le plus fort de tous

MChess 1.71 Pentium 90 MHz QEMU – Saitek RISC 2500 à 400 MHz, 1–0, 45 coups. Espagnole, défense berlinoise.

Le Saitek RISC 2500 poussé à 400 MHz est coté 2440 : c'est l'adversaire le plus fort battu par l'une des quatre configurations. MChess le bat 6,5 à 4,5 sur l'ensemble du match, et cette partie-là est la plus nette.

Après 1.e4 e5 2.Cf3 Cc6 3.Fb5 Cf6 4.O-O Cxe4 5.d4 exd4 6.Te1 d5 7.Cxd4 Df6 8.f3 Fc5 9.Fxc6+ bxc6 10.c3 Ff5 11.b4 Fb6 12.Fe3 Fxd4 13.Fxd4 De6 14.fxe4 Fxe4, les blancs ont gagné une pièce contre deux pions et l'évaluation est déjà à +4.

Suit une longue phase de manœuvre — vingt coups où MChess ne lâche rien et améliore pièce après pièce, pendant que le Saitek cherche du contre-jeu sur l'aile dame. Au 35e coup la dame blanche arrive en a5 et l'affaire est réglée.

a8b7c6d5e4f3g2h1
Position après 35.Da5, les noirs jouent. La dame blanche s'est installée en a5 et prépare l'entrée en d8 (flèche) ; le pion a6 n'attend que la case a7.

36.Dd8+ Ra7 37.Dd7+ Ra8 38.Dc8+ Ra7 39.Dxc5+ Db6, et le coup décisif : 40.Fb8+! Le fou se donne pour attirer le roi en b8 et dégager la case a7 au pion. 40...Rxb8 41.a7+ Dxa7 42.Txa7 Te1+ 43.Cxe1 Fxg2+ 44.Rxg2 d4 45.Dc7#.

a8b7c6d5e4f3g2h1
Position après 40.Fb8+ : le fou se donne pour attirer le roi en b8 et libérer a7 au pion (flèche). 40…Rxb8 41.a7+ est forcé.
MChess 1.71 Pentium 90 MHz QEMU – Saitek RISC 2500 à 400 MHz
1.e4 e5 2.Cf3 Cc6 3.Fb5 Cf6 4.O-O Cxe4 5.d4 exd4 6.Te1 d5 7.Cxd4 Df6 8.f3 Fc5 9.Fxc6+ bxc6 10.c3 Ff5 11.b4 Fb6 12.Fe3 Fxd4 13.Fxd4 De6 14.fxe4 Fxe4 15.Fc5 Dg6 16.De2 O-O-O 17.Fxa7 Fd3 18.Dd2 The8 19.a4 Txe1+ 20.Dxe1 Fe4 21.Df1 Fd3 22.Dc1 Te8 23.Cd2 Te2 24.Ff2 Df6 25.Fg3 c5 26.Rh1 De7 27.a5 Rb8 28.bxc5 Dxc5 29.Cf3 Fe4 30.a6 Ra8 31.Df1 Dxc3 32.Fe5 Dd3 33.Dc1 Dc2 34.Da3 c5 35.Da5 Db2 36.Dd8+ Ra7 37.Dd7+ Ra8 38.Dc8+ Ra7 39.Dxc5+ Db6 40.Fb8+ Rxb8 41.a7+ Dxa7 42.Txa7 Te1+ 43.Cxe1 Fxg2+ 44.Rxg2 d4 45.Dc7# 1–0

3 et 4. Le Pro 6 contre le Genius 68030, deux fois

MChess Pro 6 – Mephisto Genius 68030 London, 1–0 sur les deux machines. Partie du fou, même ligne.

Ces deux parties méritent d'être lues ensemble. Le Pro 6, sur le 486 puis sur le Pentium, joue exactement la même chose contre le même adversaire pendant onze coups :

1.e4 e5 2.Fc4 Cf6 3.d4 exd4 4.Cf3 Cxe4 5.Dxd4 Cf6 6.Cc3 Cc6 7.Dh4 Fe7 8.Fg5 O-O 9.O-O-O d6 10.Fd3 h6, et dans les deux parties, 11.Fxh6!

a8b7c6d5e4f3g2h1
Position après 11.Fxh6, dans les deux parties. Le fou se donne contre le pion h6 : après la reprise, la colonne h s'ouvre à la dame et la diagonale b1-h7 au fou d3 (flèches). Les blancs ont une pièce de moins et trois pièces braquées sur le roi.

Le fou se donne contre le pion h6 pour ouvrir la colonne h et la diagonale sur le roi. Après 11...gxh6 12.Dxh6, les blancs ont une pièce de moins et trois pièces braquées sur le roque noir. L'évaluation est à +1,9 — le sacrifice n'est pas un gain forcé, c'est un investissement.

C'est ici que les deux parties se séparent, et c'est le Genius qui choisit différemment.

Sur le Pentium, il joue 12...Te8, et Stockfish annonce déjà le mat. 13.Cg5 Fe6 14.Fh7+ Rh8 15.Ff5+ Rg8 16.Fxe6 Tf8 17.Cd5 fxe6 18.Dg6+ Rh8 19.Cxf6 Tf7 20.Cxf7#. Vingt coups.

a8b7c6d5e4f3g2h1
Version Pentium : 20.Cxf7# — neuf coups plus tôt. Le cavalier mate en f7, soutenu par la dame g6 ; le roi h8 n'a aucune case.

Sur le 486, il joue 12...Fe6, qui tient mieux : il faut à MChess neuf coups de plus. 13.Cg5 Dd7 14.Cce4 Ff5 15.Cxf6+ Fxf6 16.Dxf6 Ce7 17.The1 Fxd3 18.Txd3 Cg6 19.Ce6! fxe6 20.Dxg6+ Dg7 21.Dxe6+ Df7 — et là le mat est annoncé — 22.Tg3+ Rh8 23.Te4 Dh7 24.Th3 Dxh3 25.Dxh3+ Rg7 26.Dg3+ Rf6 27.Df3+ Rg7 28.Tg4+ Rh7 29.Dh3#.

a8b7c6d5e4f3g2h1
Version 486 : 29.Dh3# — le roi noir, poussé de g7 à h7, est mat ; la tour g4 et la dame h3 se partagent les cases.

Les deux parties disent la même chose : le sacrifice en h6 fait partie du bagage du Pro 6, il le trouve sur les deux machines, et le Genius 68030 — coté 2363, plus fort que le Pro 6 sur le papier — n'a de réponse ni dans un cas ni dans l'autre. Le Pro 6 marque 7,5 sur 11 contre lui depuis le 486 et 5,5 sur 10 depuis le Pentium.

MChess Pro 6 Pentium 90 MHz QEMU – Mephisto Genius 68030 London
1.e4 e5 2.Fc4 Cf6 3.d4 exd4 4.Cf3 Cxe4 5.Dxd4 Cf6 6.Cc3 Cc6 7.Dh4 Fe7 8.Fg5 O-O 9.O-O-O d6 10.Fd3 h6 11.Fxh6 gxh6 12.Dxh6 Te8 13.Cg5 Fe6 14.Fh7+ Rh8 15.Ff5+ Rg8 16.Fxe6 Tf8 17.Cd5 fxe6 18.Dg6+ Rh8 19.Cxf6 Tf7 20.Cxf7# 1–0
MChess Pro 6 486DX 33 MHz – Mephisto Genius 68030 London
1.e4 e5 2.Fc4 Cf6 3.d4 exd4 4.Cf3 Cxe4 5.Dxd4 Cf6 6.Cc3 Cc6 7.Dh4 Fe7 8.Fg5 O-O 9.O-O-O d6 10.Fd3 h6 11.Fxh6 gxh6 12.Dxh6 Fe6 13.Cg5 Dd7 14.Cce4 Ff5 15.Cxf6+ Fxf6 16.Dxf6 Ce7 17.The1 Fxd3 18.Txd3 Cg6 19.Ce6 fxe6 20.Dxg6+ Dg7 21.Dxe6+ Df7 22.Tg3+ Rh8 23.Te4 Dh7 24.Th3 Dxh3 25.Dxh3+ Rg7 26.Dg3+ Rf6 27.Df3+ Rg7 28.Tg4+ Rh7 29.Dh3# 1–0

Ce qu'on en retient

Trois choses. D'abord, les deux MChess se tiennent dans un mouchoir : 2193 à 2374, soit la zone des bonnes machines dédiées du début des années 1990, ce qui est cohérent avec ce qu'on attend de programmes PC de cette génération sur ce matériel.

Ensuite, le Pentium profite beaucoup au 1.71 et presque pas au Pro 6. Le résultat tient : il se reproduit sur un tournoi toutes rondes de 2 253 parties où tous les participants affrontent le même champ, et Fritz 2 y présente la même anomalie, en plus marquée encore. Les explications techniques auxquelles on pense d'abord — profondeur insuffisante, blocages de l'émulation, apprentissage qui persiste, réglages divergents, étalonnage faussé — ont été testées une par une et ne rendent pas compte de l'écart. Il faut donc prendre le +44 du Pro 6 pour ce qu'il est, un résultat, sans savoir encore pourquoi deux de ces programmes ne tirent presque rien d'un matériel 2,7 fois plus rapide alors qu'ils cherchent visiblement plus profond.

Enfin, le mur des moteurs natifs est ici parfaitement visible : 55,4 % contre des adversaires émulés à 2277, 3,5 % contre des moteurs natifs à 2729. Cent soixante-douze points d'écart entre les deux performances du même programme, dans les mêmes conditions de pendule, sur des parties qui se terminent par mat. C'est le sujet le plus intéressant que cette série ait fait remonter.

  • Mesures : gauntlets de classement du laboratoire, 150 à 157 parties par configuration, cadence 60 coups en 15 minutes, livre d'ouvertures Perfect 2023.
  • Cotes : classement du site, ajustement Ordo sur l'ensemble des parties du laboratoire.
  • Analyses des parties : Stockfish 16.
  • Histoire des versions : Chess Programming Wiki, pages MChess et WMCCC 1995.