Introducing Igel chess engine

Discussion of anything and everything relating to chess playing software and machines.

Moderator: Ras

User avatar
Graham Banks
Posts: 46265
Joined: Sun Feb 26, 2006 10:52 am
Location: Auckland, NZ

Re: Introducing Igel chess engine

Post by Graham Banks »

Thanks, Volodymyr. :)
gbanksnz at gmail.com
User avatar
Gabor Szots
Posts: 1594
Joined: Sat Jul 21, 2018 7:43 am
Location: Budapest, Hungary
Full name: Gabor Szots

Re: Introducing Igel chess engine

Post by Gabor Szots »

Wait for Sunday (or maybe already Saturday)!
Gabor Szots
CCRL testing group
voffka
Posts: 297
Joined: Sat Jun 30, 2018 10:58 pm
Location: Ukraine
Full name: Volodymyr Shcherbyna

Re: Introducing Igel chess engine

Post by voffka »

Igel 3.6.0 at https://github.com/vshcherbyna/igel/releases/tag/3.6.0 (official executable binaries for Windows and network).

This release brings marginal improvements in strength mostly in search.

What's new:

- extend by 2 in singular extension on non pv move
- improve low bound condition in singular extension
- check beta score in probcut condition
- store in TT in standing pat in qsearch
- implement iid
- tune null move depth
- tune razor depth
- remove instant moves handling

Regression run against Igel 3.5.0 at Long Time Control (60+0.6)

Code: Select all

Elo   | 21.28 +- 3.60 (95%)
Conf  | 60.0+0.60s Threads=1 Hash=64MB
Games | N: 8860 W: 2461 L: 1919 D: 4480
Penta | [7, 798, 2299, 1298, 28]
Regression run against Igel 3.5.0 at Short Time Control (10+0.1)

Code: Select all

Elo   | 20.07 +- 3.21 (95%)
Conf  | 10.0+0.10s Threads=1 Hash=8MB
Games | N: 13918 W: 3953 L: 3150 D: 6815
Penta | [76, 1392, 3306, 2023, 162]
cpeters
Posts: 254
Joined: Wed Feb 17, 2021 7:44 pm
Full name: Christian Petersen

Re: Introducing Igel chess engine

Post by cpeters »

Compiling
Official compilation method involves cmake and gcc/Visual Studio 2019 and assumes a modern CPU with AVX2 support (most of the computers produced in last 9 years).
Maybe, yes. But no easy way/simple switch to compile for older hardware or phones/arm-cpu. :-(

Code: Select all

$ make                                                                
g++ -Wall -std=c++17 -mpopcnt -pthread -lstdc++ -lm -O3 -march=native -flto=auto -DEVALFILE=\"weights/c049c1  17\" *.cpp fathom/tbprobe.cpp -DNDEBUG -D_BTYPE=0 -DSYZYGY_SUPPORT=TRUE -o igel                               
main.cpp: In function ‘int main(int, const char**)’:                                                          
main.cpp:28:19: error: ‘USE_AVX2’ was not declared in this scope                                              
   28 |     static_assert(USE_AVX2 == 1, "AVX2 is the minimum supported build type");                         
      |                   ^~~~~~~~                                                                            
nnue.cpp: In member function ‘int32_t Transformer::transform(Position&, uint8_t*, std::size_t)’:
nnue.cpp:152:23: warning: unused variable ‘offset’ [-Wunused-variable]
  152 |         std::uint32_t offset = (HalfDimensions / 2) * side;
      |                       ^~~~~~
nnue.cpp:145:12: warning: unused variable ‘acc’ [-Wunused-variable]
  145 |     auto & acc  = s->accumulator.accumulation;
      |            ^~~
nnue.cpp: In member function ‘void Transformer::incremental(Position&)’:
nnue.cpp:222:31: warning: unused variable ‘offset’ [-Wunused-variable]
  222 |                 std::uint32_t offset = HalfDimensions * removed[index];
      |                               ^~~~~~
nnue.cpp:236:27: warning: unused variable ‘offset’ [-Wunused-variable]
  236 |             std::uint32_t offset = HalfDimensions * added[index];
      |                           ^~~~~~
nnue.cpp: In member function ‘void Transformer::refresh(Position&)’:
nnue.cpp:256:23: warning: unused variable ‘ci’ [-Wunused-variable]
  256 |         std::uint32_t ci = pos.getActiveIndexes(c, indexes);
      |                       ^~
nnue.cpp:252:12: warning: unused variable ‘accumulator’ [-Wunused-variable]
  252 |     auto & accumulator = pos.state()->accumulator;
      |            ^~~~~~~~~~~
nnue.cpp: In static member function ‘static uint8_t* ClippedReLU<WeightScaleBits, InputDimensions>::propagate(int32_t*, char*)’:
nnue.cpp:389:27: error: ‘chunks’ was not declared in this scope
  389 |     std::uint32_t start = chunks * SIMD_WIDTH;
      |                           ^~~~~~
nnue.cpp: In instantiation of ‘int32_t* Layer<OutputDimensions, InputDimensions>::propagate(uint8_t*, char*) [with int OutputDimensions = 16; int InputDimensions = 1024; int32_t = int; uint8_t = unsigned char]’:
nnue.cpp:352:36:   required from herennue.cpp:328:29: warning: unused variable ‘offset’ [-Wunused-variable]
  328 |         const std::uint32_t offset = i * InputDimensions;
      |                             ^~~~~~
nnue.cpp: In instantiation of ‘int32_t* Layer<OutputDimensions, InputDimensions>::propagate(uint8_t*, char*) [with int OutputDimensions = 32; int InputDimensions = 32; int32_t = int; uint8_t = unsigned char]’:
nnue.cpp:359:33:   required from here
nnue.cpp:328:29: warning: unused variable ‘offset’ [-Wunused-variable]
nnue.cpp: In instantiation of ‘int32_t* Layer<OutputDimensions, InputDimensions>::propagate(uint8_t*, char*) [with int OutputDimensions = 1; int InputDimensions = 32; int32_t = int; uint8_t = unsigned char]’:
nnue.cpp:361:33:   required from here
nnue.cpp:328:29: warning: unused variable ‘offset’ [-Wunused-variable]
make: *** [Makefile:34: basic] fauldrominai 1
Please reconsider (https://en.wikipedia.org/wiki/The_Hare_and_the_Hedgehog -->> not a mention of some avx2)!
voffka
Posts: 297
Joined: Sat Jun 30, 2018 10:58 pm
Location: Ukraine
Full name: Volodymyr Shcherbyna

Re: Introducing Igel chess engine

Post by voffka »

Hi cpeters,
cpeters wrote: Sun Dec 29, 2024 2:33 am Maybe, yes. But no easy way/simple switch to compile for older hardware or phones/arm-cpu. :-(
Supporting mobile and older CPUs are on my todo list, but the list is very long and I need to choose priorities.

The reason why I focus only on modern CPUs for the moment is that I want to make sure that the mainstream community get's latest Igel builds as soon as possible.
cpeters
Posts: 254
Joined: Wed Feb 17, 2021 7:44 pm
Full name: Christian Petersen

Re: Introducing Igel chess engine

Post by cpeters »

Hello voffka!
voffka wrote: Sun Dec 29, 2024 3:30 pm Supporting mobile and older CPUs are on my todo list, but the list is very long and I need to choose priorities.

The reason why I focus only on modern CPUs for the moment is that I want to make sure that the mainstream community get's latest Igel builds as soon as possible.
Yes, I understand. In igel there's a benchmark-command. What would be the correct amount of Nodes for 3.6.0?

If I compile locally the altered source from the package in this thread:
viewtopic.php?t=83775&start=590

I get on both computers (a macbook with m2 (ARM) and an older machine with Debian (x86-64)):

Code: Select all

Nodes : 7815054
as result.

Jim included an ELF ("igel_360_64_ja_sse4_linux") which gives:

Code: Select all

Nodes : 1202492
Which one would be correct, if any? Will try later with the phone (armv8/in termux with clang).

Greetings!

ps
Maybe I should use the built-in perft? But how?
voffka
Posts: 297
Joined: Sat Jun 30, 2018 10:58 pm
Location: Ukraine
Full name: Volodymyr Shcherbyna

Re: Introducing Igel chess engine

Post by voffka »

Hi cpeters,
cpeters wrote: Mon Dec 30, 2024 2:45 am Which one would be correct, if any? Will try later with the phone (armv8/in termux with clang).
The correct bench for Igel 3.6.0 is 1202492.
cpeters
Posts: 254
Joined: Wed Feb 17, 2021 7:44 pm
Full name: Christian Petersen

Re: Introducing Igel chess engine

Post by cpeters »

Good evening voffka!

Thank you, got it working now (but it's veryvery slow on the frigging mac).
chessica
Posts: 1124
Joined: Thu Aug 11, 2022 11:30 pm
Full name: Esmeralda Pinto

Re: Introducing Igel chess engine

Post by chessica »

voffka wrote: Mon Dec 30, 2024 4:08 pm Hi cpeters,
cpeters wrote: Mon Dec 30, 2024 2:45 am Which one would be correct, if any? Will try later with the phone (armv8/in termux with clang).
The correct bench for Igel 3.6.0 is 1202492.
Is the bench the same for all targets? How does it have to be started? In the
Console input from bench doesn't work, then it closes.
voffka
Posts: 297
Joined: Sat Jun 30, 2018 10:58 pm
Location: Ukraine
Full name: Volodymyr Shcherbyna

Re: Introducing Igel chess engine

Post by voffka »

Hi chessica,
chessica wrote: Mon Dec 30, 2024 7:58 pm Is the bench the same for all targets? How does it have to be started? In the
Console input from bench doesn't work, then it closes.
Yes, the bench has to be the same for all flavours of igel compilation for the same version: e.g. Igel 3.6.0 correct bench must be 1202492. If it is not the same for some "custom compile" it means something is wrong and the produced binary is not actually Igel 3.6.0 in terms of playing strength.

To get the bench please run "igel.exe bench" in the command line.