Laboratoire · expérience
Un même Fruit, deux machines
Fruit 2.1, compilé à partir du même code source pour Windows et pour Mac, affronte les mêmes adversaires dans les mêmes conditions — une fois sur un PC, une fois sur un Mac à puce Apple —, puis se mesure à lui-même, Mac contre PC. Ce que la différence de score mesure, ce n'est plus le moteur : c'est la machine. Après près de mille parties, le PC ressort devant, de 17 à 39 points selon la mesure. Mais l'écart n'apparaît que lorsque plusieurs parties tournent en même temps.
L'idée
On compare d'ordinaire des moteurs entre eux, sur une machine donnée. Ici on fait l'inverse : on fige le moteur et on change la machine. Si un même programme joue plus fort sur l'une que sur l'autre, l'écart en Elo donne une mesure directe de ce que vaut, aux échecs, la différence entre deux processeurs.
Encore faut-il que le moteur soit vraiment le même des deux côtés. C'est ce qui fait l'intérêt de Fruit 2.1.
Fruit 2.1, le même code pour tous
Fruit est l'œuvre de Fabien Letouzey. Sa version 2.1, publiée en 2005 sous licence libre, a marqué l'histoire des échecs sur ordinateur : un programme gratuit, écrit par un seul homme, qui tenait tête aux grands logiciels commerciaux, et dont le code a inspiré une longue lignée de moteurs. Fruit a terminé vice-champion du monde des programmes à Reykjavík en 2005, en tournant sur un seul processeur face à des adversaires qui en utilisaient plusieurs.
Parce que ce code source est public, il peut être recompilé aujourd'hui pour n'importe quelle plateforme. C'est ce qu'a fait Darius, auteur du site chessengeria.eu : il a compilé Fruit 2.1 avec des outils actuels pour Windows, pour Mac — puces Apple et Intel —, pour Linux et pour Android. Les versions utilisées ici sont les siennes, pour Windows et pour Mac.
Les deux machines
| PC | Mac | |
|---|---|---|
| Machine | poste fixe | MacBook Pro |
| Processeur | AMD Ryzen 9 7950X3D | Apple M1 Max |
| Architecture | x86-64 | ARM64 (Apple Silicon) |
| Binaire | Fruit 2.1.exe | Fruit-2.1_Mac_Apple_Silicon |
Fruit 2.1 ne sait utiliser qu'un seul processeur. La comparaison porte donc sur un cœur contre un cœur — ce qui la rend d'autant plus nette : ni le nombre de cœurs ni l'efficacité d'un parallélisme ne viennent s'y mêler.
Faire jouer un moteur Mac contre des moteurs PC
Il fallait résoudre un problème pratique. Les adversaires tournent sur le PC, et une partie d'entre eux ne peuvent tourner que là. Le tournoi est donc organisé sur le PC, par cutechess-cli. Mais cutechess ne sait parler qu'à des programmes installés sur la même machine que lui.
La solution tient en deux petits programmes qui se parlent par le réseau domestique. Sur le Mac, un serveur attend les connexions, lance Fruit à la demande et fait circuler les messages. Sur le PC, un relais se fait passer pour le moteur auprès de cutechess, et transmet tout au serveur. Pour cutechess, rien ne distingue Fruit du Mac d'un moteur installé localement.
Les deux programmes
Ils sont écrits en Python et n'utilisent que la bibliothèque standard : rien à installer d'autre. Le serveur n'exécute que les moteurs inscrits dans sa propre table — aucune commande reçue du réseau n'est lancée telle quelle.
uci_serveur.py — côté Mac
Écoute sur le réseau et lance le moteur à chaque connexion. Affiche en direct, pour chaque coup joué, la profondeur atteinte, l'évaluation et la vitesse du moteur.
uci_relais.py — côté PC
Lancé par cutechess comme s'il était le moteur. Se connecte au serveur et fait passer le dialogue dans les deux sens.
La mise en place
- Sur le Mac, placer
uci_serveur.pyet renseigner, en tête du fichier, le nom du binaire de Fruit et son dossier. - Rendre le binaire exécutable et lever la quarantaine que macOS pose sur les fichiers
téléchargés :
chmod +x Fruit-2.1_Mac_Apple_Silicon
xattr -d com.apple.quarantine Fruit-2.1_Mac_Apple_Silicon - Lancer le serveur, et laisser la fenêtre ouverte :
python3 uci_serveur.py
- Noter l'adresse du Mac sur le réseau :
ipconfig getifaddr en0
- Sur le PC, déclarer le moteur dans cutechess en appelant le relais, avec l'adresse du Mac :
-engine name="Fruit 2.1 Mac" cmd=py arg=-3 arg=uci_relais.py arg=192.168.x.x arg=5555 arg=fruit21 proto=uci
uci. Les espaces ensuite : l'invite de commandes
de Windows en glisse parfois en fin de ligne, que Fruit ne reconnaît pas davantage. L'ordre
enfin : quand deux commandes arrivent ensemble, le relais doit attendre la réponse du Mac
avant de se fermer. Les versions proposées ici corrigent les trois.
Deuxième partie · la mesure
Le protocole
Fruit 2.1 a joué trois séries, toutes dans les mêmes conditions de jeu. Seul change l'endroit où tourne Fruit, et le nombre de parties menées en même temps.
- Cadence : 60 coups en 15 minutes, reconduite à chaque période ;
- table de hachage de 512 Mo pour tous les moteurs ;
- livre d'ouvertures Perfect 2023, imposé sur huit coups environ, livres internes des moteurs désactivés ; chaque ouverture est jouée dans les deux couleurs ;
- tournoi organisé sur le PC par cutechess-cli ; Fruit du Mac y participe à travers le relais réseau.
| Série | Dates | Parties | Simultanées | Durée moy. |
|---|---|---|---|---|
| 1. Gauntlets, une partie à la fois | 21 – 24 septembre | Mac 100 · PC 100 | 1 + 1 | 42 · 43 min |
| 2. Gauntlets en parallèle | 25 – 26 septembre | Mac 177 · PC 200 | 4 · 12 | 42 · 44 min |
| 3. Affrontement direct Mac – PC | 26 – 28 septembre | 419 | 8 | 38 min |
Dans la première série, les deux gauntlets ont tourné en même temps, une partie à la fois chacun. Dans la deuxième, le gauntlet du Mac a mené quatre parties de front et celui du PC douze, pour aller plus vite : le Ryzen a seize cœurs, le M1 Max en a dix. L'affrontement direct a tourné avec huit parties simultanées : huit Fruit sur le Mac, huit sur le PC.
Les adversaires
Cinq moteurs d'un seul processeur, tous calibrés dans le classement du laboratoire, et choisis pour encadrer la force attendue de Fruit 2.1. Les cotes indiquées sont celles du classement actuel, après intégration de toutes les parties ; moyenne du champ : 2783.
| Adversaire | Cote | À savoir |
|---|---|---|
| Shredder 10 UCI | 2840 | La référence la plus éprouvée du classement. |
| Fritz 9 UCI py | 2820 | Moteur ChessBase, joué à travers le pont eng2uci. |
| ProDeo 2.0 | 2787 | Au niveau attendu de Fruit 2.1. |
| Chess Tiger 2007 | 2743 | |
| The King 3.50 | 2726 | Le moteur de Chessmaster. |
Où attend-on Fruit 2.1 ?
La liste CCRL place Fruit 2.1 à 2695, soit 90 points sous Fruit 2.3.1. Rapporté à l'échelle du laboratoire, où Fruit 2.3.1 est coté 2880, cela situait Fruit 2.1 vers 2790 — au niveau de ProDeo, au centre du champ. La mesure l'a placé nettement plus bas (voir les résultats).
Darius l'a lui-même mesuré sur un MacBook Pro M1, à cadence très rapide, et obtient 2723 dans sa propre liste de moteurs pour Mac. Les deux échelles ne sont pas directement comparables, mais les deux mesures placent Fruit 2.1 dans la même région.
Les résultats
En tout, 996 parties : 277 pour Fruit du Mac contre les cinq adversaires, 300 pour Fruit du PC, et 419 de Fruit contre lui-même. Trois mesures en sortent : la cote Ordo globale, la performance contre les mêmes adversaires, et le score de l'affrontement direct.
Le classement du laboratoire
Toutes les parties sont intégrées au classement du laboratoire, calculé par Ordo :
| Moteur | Processeur | Rang | Cote | ± | Parties |
|---|---|---|---|---|---|
| Fruit 2.1 PC | AMD Ryzen 9 7950X3D | 83 | 2723 | 8 | 710 |
| Fruit 2.1 Mac | Apple M1 Max | 94 | 2690 | 8 | 686 |
Contre les mêmes adversaires
Séries 1 et 2 réunies. Performances calculées sur la cote actuelle de chaque adversaire, par la formule perf = cote adverse + 400 · log10(p / (1 − p)).
| Adversaire | Cote | Fruit 2.1 Mac | Fruit 2.1 PC | ||||
|---|---|---|---|---|---|---|---|
| + = − | Score | Perf. | + = − | Score | Perf. | ||
| Shredder 10 UCI | 2840 | 4 28 24 | 18 / 56 | 2710 | 11 19 30 | 20,5 / 60 | 2726 |
| Fritz 9 UCI py | 2820 | 12 19 25 | 21,5 / 56 | 2738 | 14 19 27 | 23,5 / 60 | 2744 |
| ProDeo 2.0 | 2787 | 9 21 26 | 19,5 / 56 | 2678 | 16 17 27 | 24,5 / 60 | 2723 |
| Chess Tiger 2007 | 2743 | 10 23 22 | 21,5 / 55 | 2666 | 16 23 21 | 27,5 / 60 | 2714 |
| The King 3.50 | 2726 | 16 19 19 | 25,5 / 54 | 2707 | 17 18 25 | 26 / 60 | 2679 |
| Total | 2783 | 51 110 116 | 106 / 277 | 2701 | 74 96 130 | 122 / 300 | 2718 |
Sur l'ensemble, le PC fait 17 points de mieux, et devance le Mac contre quatre adversaires sur cinq. Mais cet écart global cache deux séries qui ne disent pas la même chose :
| Série | Parties simultanées | Perf. Mac | Perf. PC | Écart PC − Mac |
|---|---|---|---|---|
| 1. Une partie à la fois | 1 · 1 | 2720 (41 / 100) | 2709 (39,5 / 100) | −11 |
| 2. En parallèle | 4 · 12 | 2690 (65 / 177) | 2722 (82,5 / 200) | +32 |
Sur cent à deux cents parties, l'incertitude d'une performance est de ±30 à ±40 points : aucune de ces deux séries ne suffit à elle seule. C'est l'affrontement direct qui tranche.
L'affrontement direct
Fruit du Mac contre Fruit du PC, sur 169 ouvertures du livre, toutes jouées avec les deux couleurs sauf une. Chaque partie compare les deux machines dans la même position, contre le même adversaire : c'est la mesure la plus directe. 410 parties sont allées à leur terme.
| Parties | Fruit 2.1 PC (+ = −) | Score PC | Écart Elo | IC 95 % | |
|---|---|---|---|---|---|
| Parties jouées jusqu'au bout | 410 | 117 222 71 | 55,6 % | +39 | +17 à +62 |
| Avec les 8 parties interrompues | 418 | 125 222 71 | 56,5 % | +45 | +23 à +68 |
Quarante-six parties gagnées de plus que perdues : la probabilité que le PC soit réellement le plus fort dans ces conditions dépasse 99,9 %.
Les couleurs
| Avec les Blancs | Avec les Noirs | |
|---|---|---|
| Fruit 2.1 Mac (gauntlets) | +24 =53 −62 · 50,5 / 139 | +27 =57 −54 · 55,5 / 138 |
| Fruit 2.1 PC (gauntlets) | +40 =45 −65 · 62,5 / 150 | +34 =51 −65 · 59,5 / 150 |
| Fruit 2.1 PC contre le Mac | +69 =106 −30 · 122 / 205 | +48 =116 −41 · 106 / 205 |
Dans l'affrontement direct, le PC marque plus de la moitié des points avec les Blancs (59,5 %) comme avec les Noirs (51,7 %) : son avantage ne tient pas à la couleur.
La fiabilité de la chaîne
Fruit du Mac a joué 696 parties à travers le réseau. Une seule vraie déconnexion, le 26 septembre dans le gauntlet, et les huit parties coupées par l'arrêt de l'affrontement direct. Aucune perte au temps, aucun coup illégal. Les autres parties se sont terminées selon les règles ou par arbitrage :
| Fin de partie | Mac (gauntlets) | PC (gauntlets) | Mac contre PC |
|---|---|---|---|
| Abandon (3 coups à plus de 10 pions) | 164 | 202 | 186 |
| Mat | 2 | 2 | 2 |
| Nulle par triple répétition | 64 | 43 | 177 |
| Nulle par la règle des cinquante coups | 26 | 30 | 16 |
| Nulle par matériel insuffisant | 15 | 16 | 28 |
| Pat | 5 | 7 | 1 |
| Déconnexion / arrêt du tournoi | 1 | – | 8 |
| Parties décisives / nulles | 167 / 110 | 204 / 96 | 196 / 222 |
Le Mac fait plus de nulles que le PC contre les mêmes adversaires, dont 21 répétitions de plus. Dans les deux gauntlets de la deuxième série, aucune répétition n'a eu lieu dans une position que Fruit jugeait nettement gagnante ou perdante : sur ses cinq dernières évaluations avant la nulle, aucune ne dépasse ±0,66. Ce sont des nulles à égalité, pas des points bradés. L'affrontement direct, lui, fait plus de moitié de nulles, dont 177 répétitions : deux Fruit identiques tombent souvent d'accord.
Profondeur et temps de réflexion
Cutechess inscrit dans le PGN, pour chaque coup, la profondeur atteinte et le temps consommé. C'est la mesure la plus directe de la vitesse des deux machines : à temps égal, un cœur plus rapide va plus profond. Dans l'affrontement direct, les deux Fruit jouent les mêmes parties :
| Coups de Fruit (affrontement direct) | Prof. Mac | Prof. PC | Temps Mac | Temps PC |
|---|---|---|---|---|
| 1 à 20 (hors livre) | 14,04 | 14,35 | 25,5 s | 25,4 s |
| 21 à 40 | 15,08 | 15,44 | 15,9 s | 15,9 s |
| 41 à 60 | 17,88 | 18,14 | 14,7 s | 14,5 s |
| 61 et au-delà | 23,03 | 23,45 | 19,4 s | 19,1 s |
| Ensemble | 17,69 | 18,03 | 18,3 s | 18,2 s |
Même temps de réflexion, mais un tiers de demi-coup de plus pour le PC, à toutes les phases de la partie. Partie par partie, sur les quarante premiers coups, le PC va plus profond dans 346 parties sur 417, de 0,34 demi-coup en moyenne (±0,05). L'écart est faible mais parfaitement régulier. Comparé d'une série à l'autre, il suit la charge des machines :
| Écart de profondeur PC − Mac | Coups 1 à 20 | 21 à 40 | 41 à 60 |
|---|---|---|---|
| 1. Une partie à la fois | −0,04 | +0,05 | +0,57 |
| 2. En parallèle (Mac 4, PC 12) | +0,19 | +0,17 | +0,07 |
| 3. Affrontement direct (8 et 8) | +0,31 | +0,36 | +0,26 |
Au-delà du 40e coup, les gauntlets ne jouent pas les mêmes finales, et la profondeur y dépend surtout du matériel restant : seule la colonne de l'affrontement direct, où les positions sont communes, est comparable à ce stade. Le nombre de positions calculées par seconde n'est pas enregistré dans le PGN ; si l'on admet pour Fruit un facteur de branchement effectif de 2 à 3, un tiers de demi-coup correspond à 25 à 45 % de positions en plus pour le PC.
Pourquoi la charge compte
Un processeur ne tourne pas à la même fréquence selon le nombre de cœurs occupés. Seul, un cœur du M1 Max comme un cœur du Ryzen monte à sa fréquence maximale ; quand plusieurs parties tournent ensemble, les deux ralentissent, et pas forcément dans la même proportion. Nos mesures s'accordent avec un Mac qui perd davantage que le PC sous charge : égalité à une partie par machine, avantage au PC à quatre, huit ou douze parties. Nous n'avons pas mesuré les fréquences : c'est une explication plausible, pas une constatation. Un affrontement direct joué une partie à la fois permettrait de la vérifier.
Les ouvertures
Le livre Perfect 2023 tire ses ouvertures au hasard. Dans les gauntlets, chaque ouverture a été jouée dans les deux couleurs, mais les deux machines n'ont pas tiré les mêmes : dans la deuxième série, 82 ouvertures côté Mac, 90 côté PC, 15 seulement en commun. Une partie des écarts adversaire par adversaire tient donc aux ouvertures. L'affrontement direct n'a pas ce défaut : les deux Fruit jouent chaque ouverture, une fois de chaque côté.
Fruit 2.1 dans l'échelle du laboratoire
Coté 2723 sur le PC et 2690 sur le Mac, Fruit 2.1 se place 70 à 100 points sous la projection tirée de la liste CCRL (vers 2790), et 157 à 190 points sous Fruit 2.3.1 (2880), là où la CCRL met 90 points entre les deux versions. Fruit du PC se range juste sous The King 3.50 (2726), le plus faible des cinq adversaires : le champ choisi pour encadrer Fruit 2.1 s'est trouvé presque entièrement au-dessus de lui, pour une moyenne de 2783. La mesure de Darius, 2723 dans sa liste de moteurs pour Mac, est numériquement proche, mais les deux échelles n'ont pas la même origine.
chess.lumn.eu · laboratoire de calibration · mise à jour du 28 septembre 2026
