Introducing Gyatso – My Open-Source Chess Engine

Discussion of chess software programming and technical issues.

Moderator: Ras

OttoLau
Posts: 18
Joined: Wed Oct 22, 2025 7:10 pm
Location: Finland
Full name: Otto Laukkanen

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by OttoLau »

GyatsoYT wrote: Fri Dec 12, 2025 6:52 pm
OttoLau wrote: Thu Dec 11, 2025 5:30 pm
GyatsoYT wrote: Thu Dec 11, 2025 3:46 pm
OttoLau wrote: Thu Dec 11, 2025 2:58 pm I think you should focus on hunting bugs, seems you have a lot of features already.
Also what elo do you estimate the engine as? I think if with all of these features you have, it would be like 2500 atleast, given that there are not significant bugs and its well tuned
I think its at around `~2000-2100` range and there are probably a lot of bugs which have escaped even with sprt testing and i am constantly trying to find it though i cant at this moment.
It helps a lot with using tests for move generation (perft) and different kinds of search tests (like ensuring consistent board hash).
I already have perft made into my engine and I have not yet found any inconsistencies in it.
Tbh for the past month after looking at only chess pieces and code + sprt tests my mind has been imagining things making me less productive and I can't really add stuff into the engine right now
My past 5 attempts after making the release version of engine have all failed so I decided to take a break for a week or so.


Though I still hope since I made it open source and maybe some people are testing it i might find people who actually make some changes in the code and send a PR... Though thats being too optimistic when I made a chess engine in nim and not in any much more famous language.
One thing i noticed it seems you allow stand pat when in check inside quiesce, generally not considered good practise, its trusting static evaluation in a volatile position.
GyatsoYT
Posts: 29
Joined: Fri May 09, 2025 12:27 pm
Full name: Gyatso Neesham

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by GyatsoYT »

OttoLau wrote: Fri Dec 12, 2025 7:22 pm
GyatsoYT wrote: Fri Dec 12, 2025 6:52 pm
OttoLau wrote: Thu Dec 11, 2025 5:30 pm
GyatsoYT wrote: Thu Dec 11, 2025 3:46 pm
OttoLau wrote: Thu Dec 11, 2025 2:58 pm I think you should focus on hunting bugs, seems you have a lot of features already.
Also what elo do you estimate the engine as? I think if with all of these features you have, it would be like 2500 atleast, given that there are not significant bugs and its well tuned
I think its at around `~2000-2100` range and there are probably a lot of bugs which have escaped even with sprt testing and i am constantly trying to find it though i cant at this moment.
It helps a lot with using tests for move generation (perft) and different kinds of search tests (like ensuring consistent board hash).
I already have perft made into my engine and I have not yet found any inconsistencies in it.
Tbh for the past month after looking at only chess pieces and code + sprt tests my mind has been imagining things making me less productive and I can't really add stuff into the engine right now
My past 5 attempts after making the release version of engine have all failed so I decided to take a break for a week or so.


Though I still hope since I made it open source and maybe some people are testing it i might find people who actually make some changes in the code and send a PR... Though thats being too optimistic when I made a chess engine in nim and not in any much more famous language.
One thing i noticed it seems you allow stand pat when in check inside quiesce, generally not considered good practise, its trusting static evaluation in a volatile position.
I'll look into it
If you find anything else just lmk.
GyatsoYT
Posts: 29
Joined: Fri May 09, 2025 12:27 pm
Full name: Gyatso Neesham

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by GyatsoYT »

ericlangedijk wrote: Wed Dec 10, 2025 11:49 pm Hello fellow chess programmer,

At the end here you can find 2 pgn's I played with gyatso, using CuteChess, which I can recommend for testing your engine, gradually increasing the strength of the opponents.
One game against a engine "Teki" (2400) and one against my own engine "chessnix" (3000). Not fair but always nice to see.

I am not familiar with nim and I had a very brief look at the code, which looks very nice.
The output of your engine is correct. What I saw is that it 'realises' quite late the position is lost.

I think I would start with these 3 steps:

1) boost the speed of the movegenerator. (I spent many weeks making it as fast as chessnix is and it still is not optimal). I asked Chat GPT: "is nim a fast language?" and the answer was yes, so that should be possible :-)

2) using the pesto tables or something alike as a base for evaluation, which should bring a few hundred ELO points. Manually typing the evaluations is too much. Been there done that. You cannot produce a really high rating unless you put an insane amount of time and typing and testing into it. In a later phase you can go for tuning the evaluation or self learning stuff.

3) I just recently learned history heuristics is quite an advanced topic. You could use a kind of "self balancing" scoring system, Then you do not need to decay.

Looking at your search in combination with stopflag: be *very very* sure a 0-score (when stopped) does not leak into your result or TT.
For example I see your null-move search return a score and this score is used. Could it be a timeout score?

As said I do not know nim, so no real tips there.

Best regards Eric

gyatso

perft 6
Performance test to depth 6
Nodes: 119060324
Time: 10102.0 ms
NPS: 11785817
go movetime 10000
info depth 1 score cp 49 nodes 52 nps 0 time 0 pv b1c3
info depth 2 score cp 15 nodes 240 nps 240000 time 1 pv b1c3 b8c6
info depth 3 score cp 49 nodes 1250 nps 625000 time 2 pv b1c3 b8c6 g1f3
info depth 4 score cp 15 nodes 1664 nps 554666 time 3 pv b1c3 b8c6 g1f3 g8f6
info depth 5 score cp -6 nodes 5297 nps 756714 time 7 pv b1c3 b8c6 g1h3 g8f6 h3f4
info depth 6 score cp 15 nodes 7261 nps 726100 time 10 pv b1c3 b8c6 g1f3 g8f6 a1b1 a8b8
info depth 7 score cp 11 nodes 16491 nps 916166 time 18 pv b1c3 g8f6 g1f3 b8c6 d2d3 f6g4 c1f4
info depth 8 score cp 17 nodes 24408 nps 1017000 time 24 pv b1c3 g8f6 g1f3 b8c6 d2d3 e7e6 c1e3 f8d6
info depth 9 score cp 0 nodes 50311 nps 1227097 time 41 pv b1c3 g8f6 g1f3 b8c6 e2e3 e7e6 f1d3 f8d6 e1g1
info depth 10 score cp 15 nodes 80542 nps 1278444 time 63 pv b1c3 g8f6 g1f3 b8c6 e2e3 e7e6 f1d3 f8d6 e1g1 e8g8
info depth 11 score cp 8 nodes 168565 nps 1359395 time 124 pv d2d3 b8c6 g1f3 g8f6 b1c3 e7e6 c1d2 f8d6 a1b1
info depth 12 score cp 12 nodes 309130 nps 1411552 time 219 pv b1c3 g8f6 g1f3 b8c6 e2e3 e7e6 f1b5 f8d6 b5c6 d7c6 f3d4 e8g8
info depth 13 score cp 9 nodes 491205 nps 1453269 time 338 pv b1c3 g8f6 g1f3 b8c6 e2e3 e7e6 f1d3 f8b4 e1g1 b4c3 d2c3 f6d5 f3d4
info depth 14 score cp 9 nodes 792840 nps 1441527 time 550 pv b1c3 g8f6 g1f3 b8c6 e2e3 e7e6 f1b5 f8b4 e1g1 e8f8 b5c6 d7c6 f3e5 b4c3
info depth 15 score cp 6 nodes 1505288 nps 1425462 time 1056 pv b1c3 g8f6 g1f3 b8c6 d2d4 e7e6 d4d5 e6d5 c3d5 f6d5
info depth 16 score cp 8 nodes 2868212 nps 1373664 time 2088 pv b1c3 b8c6 g1f3 e7e6 e2e3 g8f6 f1b5 f8b4 e1g1 e8g8 b5c6 b7c6 d1e2 b4c3 d2c3 a8b8
info depth 17 score cp 4 nodes 6000179 nps 1345331 time 4460 pv b1c3 e7e6 g1f3 b8c6 d2d4
info depth 18 score cp 13 nodes 8793051 nps 1332482 time 6599 pv b1c3 e7e6 g1f3 b8c6 d2d4 f8b4 c1g5 b4c3 b2c3 g8e7
bestmove b1c3 ponder e7e6


chessnix
qperft 6
perft 6: nodes: 119060324, time 121.724ms, nps 978111459
go movetime 10000
info depth 1 seldepth 1 score cp 80 nodes 20 qnodes 0% time 0 nps 72833 eff 0.00% pv b1c3
info depth 2 seldepth 2 score cp 86 nodes 53 qnodes 0% time 0 nps 116920 eff 80.00% pv b1c3 c7c6
info depth 3 seldepth 4 score cp 29 nodes 153 qnodes 0% time 0 nps 233801 eff 61.76% pv b1c3 e7e6 e2e3
info depth 4 seldepth 4 score cp 79 nodes 222 qnodes 0% time 0 nps 265963 eff 52.38% pv b1c3 c7c6
info depth 5 seldepth 8 score cp 22 nodes 1972 qnodes 6% time 1 nps 1350222 eff 62.54% pv d2d4 g8f6 b1c3 d7d5 e2e3
info depth 6 seldepth 10 score cp 23 nodes 3692 qnodes 8% time 2 nps 1765409 eff 61.80% pv b1c3 d7d5 e2e3 b8c6 g1f3 g8f6
info depth 7 seldepth 12 score cp 18 nodes 6716 qnodes 8% time 3 nps 2222148 eff 61.83% pv g1f3 g8f6 d2d4 e7e6 e2e3 b8c6 b1c3
info depth 8 seldepth 14 score cp 33 nodes 10187 qnodes 9% time 4 nps 2541096 eff 63.91% pv g1f3 b8c6 b1c3 d7d5 d2d4 e7e6 e2e4 d5e4
info depth 9 seldepth 15 score cp 33 nodes 13967 qnodes 10% time 5 nps 2722824 eff 66.89% pv g1f3 b8c6 b1c3 d7d5 d2d4 e7e6 e2e4 d5e4 c3e4
info depth 10 seldepth 16 score cp 30 nodes 29425 qnodes 11% time 9 nps 2986066 eff 67.19% pv d2d4 b8c6 b1c3 d7d5 g1f3 g8f6 f3e5 f6e4 e5c6 e4c3 b2c3 b7c6
info depth 11 seldepth 20 score cp 23 nodes 81603 qnodes 15% time 26 nps 3085191 eff 67.03% pv e2e4 d7d5 e4e5 c7c5 g1f3 b8c6 f1e2 g8h6 e1g1 h6f5
info depth 12 seldepth 19 score cp 30 nodes 113598 qnodes 15% time 36 nps 3099434 eff 65.96% pv e2e4 d7d5 e4d5 g8f6 g1f3 f6d5 d2d4 c7c6 c2c3 b8d7 f1d3
info depth 13 seldepth 21 score cp 39 nodes 156861 qnodes 14% time 50 nps 3108183 eff 65.08% pv e2e4 d7d5 e4d5 g8f6 g1f3 f6d5 d2d4 b8c6 c2c4 d5f6 d4d5 c6b4 b1c3
info depth 14 seldepth 22 score cp 26 nodes 285338 qnodes 14% time 90 nps 3139080 eff 65.97% pv b1c3 b8c6 d2d4 d7d5 g1f3 g8f6 e2e3 e7e6 f3e5 a7a6 f1e2
info depth 15 seldepth 23 score cp 18 nodes 506728 qnodes 15% time 160 nps 3162115 eff 67.41% pv d2d4 g8f6 g1f3 e7e6 e2e3 b8c6 b1c3 d7d5 f1d3 f8d6 a2a3 e8g8
info depth 16 seldepth 24 score cp 19 nodes 680579 qnodes 15% time 214 nps 3170767 eff 66.96% pv d2d4 g8f6 g1f3 d7d5 e2e3 e7e6 f1d3 b8c6 e1g1 f8d6 b1d2 e8g8 c2c3 a7a6
info depth 17 seldepth 25 score cp 14 nodes 1272169 qnodes 15% time 400 nps 3177092 eff 67.11% pv d2d4 g8f6 g1f3 d7d5 e2e3 e7e6 f1d3 b8c6 e1g1 f8d6 b1d2 e8g8 a2a3 a7a6 c2c4
info depth 18 seldepth 28 score cp 22 nodes 1832485 qnodes 16% time 581 nps 3148990 eff 67.44% pv d2d4 g8f6 g1f3 d7d5 e2e3 b8c6 b1d2 g7g6 f1b5 f8g7 f3e5 e8g8 b5c6 b7c6 e5c6
info depth 19 seldepth 30 score cp 18 nodes 3059258 qnodes 17% time 972 nps 3145882 eff 67.56% pv d2d4 e7e6 b1c3 d7d5 e2e4 d5e4 c3e4 g8f6 e4f6 d8f6 f1d3 b8c6 c2c3 f8d6 g1f3 h7h6 e1g1
info depth 20 seldepth 30 score cp 32 nodes 6318629 qnodes 18% time 2029 nps 3113367 eff 68.06% pv e2e4 d7d5 e4d5 e7e6 d2d4 e6d5 f1d3 f8d6 g1f3 d8e7 c1e3 g8f6 e1g1 e8g8 f1e1 b8c6 c2c3
info depth 21 seldepth 31 score cp 31 nodes 8047046 qnodes 17% time 2593 nps 3103320 eff 67.41% pv e2e4 d7d5 e4d5 c7c6 b1c3 c6d5 g1f3 g8f6 d2d4 e7e6 c1f4 a7a6 f1d3 b8c6 f4g3 d8e7 e1g1
info depth 22 seldepth 32 score cp 28 nodes 11257130 qnodes 18% time 3651 nps 3083110 eff 68.29% pv e2e4 d7d5 e4d5 c7c6 d5c6 b8c6 g1f3 e7e5 b1c3 g8f6 f1c4 f8d6 e1g1 e8g8 f1e1 a7a6 h2h3 d6c5 f3e5
info depth 23 seldepth 33 score cp 27 nodes 19539977 qnodes 19% time 6435 nps 3036192 eff 68.98% pv e2e4 c7c5 g1f3 b8c6 b1c3 e7e6 f1e2 g8f6 e4e5 f6g4 e1g1 h7h6 d2d4 c5d4 c3b5 d7d6 f3d4
info depth 24 seldepth 32 score cp 30 nodes 28713794 qnodes 20% time 9562 nps 3002700 eff 69.28% pv e2e4 c7c5 g1f3 b8c6 b1c3 g8f6 f1b5 e7e5 d2d3 f8d6 e1g1 a7a6 b5c4 e8g8 c1e3 b7b5 c4d5 f6g4 c3e2 g4e3 f2e3
bestmove e2e4


[Event "?"]
[Site "?"]
[Date "2025.12.10"]
[Round "?"]
[White "Gyatso-v1"]
[Black "(2400) teki 2"]
[Result "0-1"]
[ECO "A00"]
[GameDuration "00:01:18"]
[GameEndTime "2025-12-10T23:04:51.916 Central Europe Standard Time"]
[GameStartTime "2025-12-10T23:03:32.992 Central Europe Standard Time"]
[Opening "Dunst (Sleipner, Heinrichsen) Opening"]
[PlyCount "56"]
[TimeControl "40/60+0.1"]

1. Nc3 {0.00/15 1.5s} d5 {-0.13/14 1.6s} 2. d3 {+0.29/14 1.5s}
d4 {+0.17/14 1.6s} 3. Nb5 {+0.11/15 1.5s} c5 {+0.44/13 1.6s}
4. c4 {+0.24/14 1.5s} Nc6 {+0.79/15 1.6s} 5. Qb3 {+0.06/13 1.5s}
h6 {+0.85/14 1.6s} 6. Qa4 {+0.46/13 1.5s} a6 {+1.15/15 1.6s}
7. Bf4 {+0.73/15 1.5s} e5 {+1.26/15 1.6s} 8. Bxe5 {+0.58/16 1.5s}
axb5 {+1.43/16 1.6s} 9. Qxa8 {+0.49/16 1.5s} Nxe5 {+1.44/15 1.6s}
10. cxb5 {+0.56/15 1.5s} Nf6 {+1.61/14 1.6s} 11. g3 {+0.46/14 1.5s}
c4 {+1.69/13 1.6s} 12. Bg2 {+0.54/14 1.5s} cxd3 {+1.70/13 1.7s}
13. Bxb7 {+0.31/13 1.5s} Bb4+ {+1.87/12 1.6s} 14. Kf1 {+0.78/14 1.5s}
dxe2+ {+1.71/14 1.6s} 15. Nxe2 {+0.56/16 1.5s} Bh3+ {+2.07/15 1.6s}
16. Kg1 {+0.43/17 1.5s} d3 {+1.90/15 1.6s} 17. Bc6+ {+0.92/13 1.5s}
Ke7 {+1.44/12 1.6s} 18. Qa7+ {+0.85/14 1.5s} Kf8 {+1.92/13 1.6s}
19. Nd4 {+0.76/14 1.5s} Kg8 {+2.47/14 1.6s} 20. Bb7 {-0.01/14 1.6s}
Ba5 {+4.21/15 1.6s} 21. Qc5 {-1.42/14 1.6s} Nfg4 {+6.30/14 1.6s}
22. Bg2 {-2.33/15 1.6s} Bb6 {+9.73/14 1.6s} 23. Nc6 {-2.32/14 1.6s}
Bxc5 {+M11/13 1.6s} 24. Bxh3 {-10.17/12 1.6s} Qf6 {+M9/17 1.6s}
25. Ne7+ {-M8/45 1.6s} Kf8 {+M7/64 1.6s} 26. Nf5 {-M6/64 0.49s}
Qxf5 {+M5/127 0.56s} 27. Rf1 {-M4/64 0.004s} Bxf2+ {+M3/127 0.022s}
28. Kg2 {-M2/64 0.001s} Ne3# {+M1/127 0.005s, Black mates} 0-1


[Event "?"]
[Site "?"]
[Date "2025.12.10"]
[Round "?"]
[White "Gyatso-v1"]
[Black "chessnix dev"]
[Result "0-1"]
[ECO "A00"]
[GameDuration "00:01:47"]
[GameEndTime "2025-12-10T23:09:18.161 Central Europe Standard Time"]
[GameStartTime "2025-12-10T23:07:30.799 Central Europe Standard Time"]
[Opening "Dunst (Sleipner, Heinrichsen) Opening"]
[PlyCount "74"]
[TimeControl "40/60+0.1"]

1. Nc3 {+0.06/15 1.5s} d5 {-0.09/20 1.5s} 2. d4 {+0.16/14 1.5s}
Nf6 {-0.13/20 1.5s} 3. Qd3 {+0.31/15 1.5s} c5 {+0.39/19 1.6s}
4. dxc5 {+0.74/13 1.5s} Nc6 {+0.62/18 1.6s} 5. Bd2 {+0.51/13 1.5s}
e6 {+0.56/20 1.6s} 6. Nf3 {+0.47/13 1.5s} Bxc5 {+0.77/20 1.6s}
7. Qb5 {+0.34/13 1.5s} Be7 {+1.05/19 1.6s} 8. O-O-O {+0.44/12 1.5s}
a6 {+1.06/19 1.6s} 9. Qa4 {+0.75/14 1.5s} O-O {+1.39/18 1.6s}
10. Be3 {+0.70/14 1.5s} e5 {+1.85/20 1.6s} 11. Rg1 {+0.11/12 1.5s}
Be6 {+2.42/19 1.6s} 12. Ng5 {-0.07/12 1.5s} Bd7 {+3.15/21 1.6s}
13. Nxd5 {-0.27/13 1.5s} Nxd5 {+3.42/21 1.6s} 14. Nxf7 {-0.91/14 1.5s}
Ncb4 {+4.09/24 1.6s} 15. Qxb4 {-0.30/15 1.5s} Bxb4 {+4.22/24 1.6s}
16. Nxd8 {-1.91/16 1.5s} Nxe3 {+4.34/25 1.6s} 17. fxe3 {-2.18/17 1.5s}
Bc5 {+4.33/26 1.6s} 18. Nxb7 {-1.82/16 1.5s} Bxe3+ {+4.12/21 1.6s}
19. Kb1 {-2.42/18 1.5s} Bxg1 {+4.58/21 1.6s} 20. e3 {-2.42/16 1.6s}
Be6 {+4.62/21 1.6s} 21. Nc5 {-2.42/16 1.6s} Bf7 {+4.72/22 1.6s}
22. Nxa6 {-2.46/15 1.6s} Rfd8 {+5.79/26 1.6s} 23. Bd3 {-3.02/16 1.6s}
e4 {+8.14/23 1.6s} 24. Rxg1 {-3.76/16 1.6s} exd3 {+8.63/21 1.6s}
25. cxd3 {-5.74/14 1.6s} Rxa6 {+8.98/21 1.6s} 26. a3 {-6.39/14 1.6s}
Rxd3 {+9.28/22 1.6s} 27. Re1 {-7.10/14 1.6s} Rd2 {+9.89/22 1.6s}
28. Rc1 {-7.85/16 1.6s} Bg6+ {+10.74/23 1.6s} 29. Ka1 {-8.49/17 1.6s}
Rxg2 {+11.82/24 1.6s} 30. h4 {-8.93/17 1.6s} Rb6 {+299.51/26 1.6s}
31. b4 {-9990.02/2 1.7s} Rd6 {+299.87/39 1.6s} 32. h5 {-11.04/16 1.7s}
Bf5 {+299.89/38 1.6s} 33. Rg1 {-M10/22 1.7s} Rxg1+ {+299.91/39 1.6s}
34. Ka2 {-M8/27 1.7s} Rd3 {+299.93/41 1.6s} 35. Kb2 {-M8/64 0.50s}
Rxe3 {+299.95/127 0.23s} 36. a4 {-M4/64 0.007s} Rg2+ {+299.97/127 0.010s}
37. Kc1 {-M2/64 0.001s} Re1# {+299.99/127 0.001s, Black mates} 0-1
I was just wondering if the nps shown in perft of chessnix was normal perft or bulk counted?
Aleks Peshkov
Posts: 960
Joined: Sun Nov 19, 2006 9:16 pm
Location: Russia
Full name: Aleks Peshkov

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by Aleks Peshkov »

Newbies are too obsessed with perft because they fear to progress to real chess engine. As you already have a functional chess engine I suggest stop worry about perft optimisations.
GyatsoYT
Posts: 29
Joined: Fri May 09, 2025 12:27 pm
Full name: Gyatso Neesham

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by GyatsoYT »

Aleks Peshkov wrote: Tue Dec 16, 2025 7:30 am Newbies are too obsessed with perft because they fear to progress to real chess engine. As you already have a functional chess engine I suggest stop worry about perft optimisations.
To be honest I am not really obsessed with perft I still think that my perft is fast enough to be used in chess engines
Though what I was truly interested in is that chessnix showed around 975m+ nps in perft but while searching it's nps was around 3m while my perft was significantly slower than that but still my nps in search was around 3m and that's what I wanna figure out . Why is it that his nps is not translating in the search nps while i get a reasonable nps in search aswell as perft


First thing I thought was that his perft is bulk counted while mine isn't maybe that's why but I would like to hear it from the author of the engine itself.
User avatar
hgm
Posts: 28425
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by hgm »

This is not uncommon. The faster the perft, the slower the engine. This is because most perfts optimize the wrong thing, which the engine hardly does, at the expense of the important thing, which the engine does a lot. In particular there is a very different balance between MakeMoves and MoveGens in perft and search, and it is quite easy to shuttle essential tasks between the two.
GyatsoYT
Posts: 29
Joined: Fri May 09, 2025 12:27 pm
Full name: Gyatso Neesham

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by GyatsoYT »

hgm wrote: Tue Dec 16, 2025 8:48 am This is not uncommon. The faster the perft, the slower the engine. This is because most perfts optimize the wrong thing, which the engine hardly does, at the expense of the important thing, which the engine does a lot. In particular there is a very different balance between MakeMoves and MoveGens in perft and search, and it is quite easy to shuttle essential tasks between the two.
I see thanks for the info
User avatar
Steve Maughan
Posts: 1307
Joined: Wed Mar 08, 2006 8:28 pm
Location: Florida, USA

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by Steve Maughan »

If you're doing 3 mnps in normal search it's "good enough". Perft is super useful for ensuring you have a solid move generation and make-move / unmake-move routine. And if it's super slow (< 5 mnps) then there's a problem (usually memory allocation in the search).

FWIW, Juggernaut does 160 mnps perft and 6 mnps in the middlegame (simple pesto evaluation) on a fast Core Ultra i9.

— Steve
GyatsoYT wrote: Tue Dec 16, 2025 8:42 am
Aleks Peshkov wrote: Tue Dec 16, 2025 7:30 am Newbies are too obsessed with perft because they fear to progress to real chess engine. As you already have a functional chess engine I suggest stop worry about perft optimisations.
To be honest I am not really obsessed with perft I still think that my perft is fast enough to be used in chess engines
Though what I was truly interested in is that chessnix showed around 975m+ nps in perft but while searching it's nps was around 3m while my perft was significantly slower than that but still my nps in search was around 3m and that's what I wanna figure out . Why is it that his nps is not translating in the search nps while i get a reasonable nps in search aswell as perft


First thing I thought was that his perft is bulk counted while mine isn't maybe that's why but I would like to hear it from the author of the engine itself.
http://www.chessprogramming.net - Juggernaut & Maverick Chess Engine
GyatsoYT
Posts: 29
Joined: Fri May 09, 2025 12:27 pm
Full name: Gyatso Neesham

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by GyatsoYT »

Well the thing is my bot doesn't do 3mnps in normal search atleast on my cpu bcz it's a weak cpu 2 cores only. In perft it still does 4m+ though in search max I get in middlegame is 500k.

The 3mnps is in a powerful cpu which was tested by someone else not by me.

If you could test gyatso's speed on your cpu then I can get a relative idea of how it performs relative to juggernaut's speed.

Steve Maughan wrote: Thu Dec 18, 2025 11:01 am If you're doing 3 mnps in normal search it's "good enough". Perft is super useful for ensuring you have a solid move generation and make-move / unmake-move routine. And if it's super slow (< 5 mnps) then there's a problem (usually memory allocation in the search).

FWIW, Juggernaut does 160 mnps perft and 6 mnps in the middlegame (simple pesto evaluation) on a fast Core Ultra i9.

— Steve
GyatsoYT wrote: Tue Dec 16, 2025 8:42 am
Aleks Peshkov wrote: Tue Dec 16, 2025 7:30 am Newbies are too obsessed with perft because they fear to progress to real chess engine. As you already have a functional chess engine I suggest stop worry about perft optimisations.
To be honest I am not really obsessed with perft I still think that my perft is fast enough to be used in chess engines
Though what I was truly interested in is that chessnix showed around 975m+ nps in perft but while searching it's nps was around 3m while my perft was significantly slower than that but still my nps in search was around 3m and that's what I wanna figure out . Why is it that his nps is not translating in the search nps while i get a reasonable nps in search aswell as perft


First thing I thought was that his perft is bulk counted while mine isn't maybe that's why but I would like to hear it from the author of the engine itself.
User avatar
Steve Maughan
Posts: 1307
Joined: Wed Mar 08, 2006 8:28 pm
Location: Florida, USA

Re: Introducing Gyatso – My Open-Source Chess Engine

Post by Steve Maughan »

I can do that. I assume I'll use the "Gyatso-v1-avx2.exe" file. How do I run a perft?
GyatsoYT wrote: Thu Dec 18, 2025 12:07 pm<snip>If you could test gyatso's speed on your cpu then I can get a relative idea of how it performs relative to juggernaut's speed.<snip>
http://www.chessprogramming.net - Juggernaut & Maverick Chess Engine