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.
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.
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.
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.
Quatre configurations, quatre cotes
| Configuration | Parties | Score | % | Cote moyenne des adversaires | Performance | Cote au classement |
|---|---|---|---|---|---|---|
| MChess 1.71 — 486DX 33 MHz | 150 | 85,5 | 57,0 % | 2215 | 2255 | 2193 |
| MChess 1.71 — Pentium 90 MHz | 150 | 67,5 | 45,0 % | 2430 | 2376 | 2374 |
| MChess Pro 6 — 486DX 33 MHz | 150 | 63,5 | 42,3 % | 2353 | 2284 | 2281 |
| MChess Pro 6 — Pentium 90 MHz | 157 | 53,5 | 34,1 % | 2485 | 2327 | 2325 |
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 :
| Configuration | Profondeur moyenne | Médiane s/coup | Total sur 60 coups | Coups > 60 s |
|---|---|---|---|---|
| MChess 1.71 — 486DX 33 MHz | 5,0 | 16,0 s | 882 s | 3 |
| MChess 1.71 — Pentium 90 MHz | 6,9 | 7,5 s | 606 s | 21 |
| MChess Pro 6 — 486DX 33 MHz | 6,1 | 16,0 s | 875 s | 29 |
| MChess Pro 6 — Pentium 90 MHz | 8,1 | 14,0 s | 801 s | 36 |
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.
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.
| Programme | 486DX 33 MHz | Pentium 90 MHz | Gain |
|---|---|---|---|
| Rebel 6 | 30,3 % | 63,3 % | +239 |
| Rebel 9 | 29,8 % | 61,3 % | +229 |
| Chess Genius 5 | 45,2 % | 73,4 % | +210 |
| Fritz 1 | 14,9 % | 36,7 % | +208 |
| MChess 1.71 | 25,0 % | 50,0 % | +191 |
| Fritz 3 | 33,9 % | 53,2 % | +139 |
| Chess Genius 2 | 47,3 % | 66,5 % | +138 |
| Chess Genius 3 | 50,0 % | 66,0 % | +115 |
| Chess Genius 4 | 47,9 % | 63,8 % | +113 |
| Chess Genius 1 | 47,9 % | 61,7 % | +98 |
| MChess Pro 6 | 34,0 % | 41,8 % | +58 |
| Fritz 2 | 30,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'adversaires | Cote moyenne | Parties | Score | Attendu | Performance |
|---|---|---|---|---|---|
| Machines dédiées et moteurs émulés | 2277 | 479 | 55,4 % | 51,7 % | 2321 |
| Moteurs PC natifs (Ryzen) | 2729 | 128 | 3,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.
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é.
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.
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#.
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!
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.
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#.
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.
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
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.
