JGIsland_BB - C++ header-only library for ultrafast solving #2 and #1 - is now available on github at https://github.com/msterkowiec/JGIsland_BB
It works solely on 64-byte bitboard data using from 6k to 23k additional buffers and is able to solve more than 25 two-movers per 1 millisecond (i7-14700; in All Solutions mode). JGIsland_BB is now a part of the engine of J.G.Island Chess Moremovers 11.0 and is responsible for about 10% performance improvement in this version.; see also its thread: viewtopic.php?t=85039&start=40
JGIsland_BB - code for ultrafast solving #2
Moderator: Ras
-
msterkowiec
- Posts: 29
- Joined: Sat Apr 26, 2025 7:01 pm
- Full name: Marcin Sterkowiec
-
Roland Chastain
- Posts: 718
- Joined: Sat Jun 08, 2013 10:07 am
- Location: France
- Full name: Roland Chastain
Re: JGIsland_BB - code for ultrafast solving #2
Hello! Thank you for sharing.
Please could you provide a simple usage example, for people who don't know C++?
When trying to compile the following program, I get a lot of error messages.
I used the following command:
Please could you provide a simple usage example, for people who don't know C++?
When trying to compile the following program, I get a lot of error messages.
Code: Select all
// test.cpp
#include "JGIsland_BB.h"
int main()
{
return 0;
}Code: Select all
g++ test.cpp -IincludeCode: Select all
In file included from include/JGIsland_BB.h:14,
from test.cpp:3:
include/data.h: In function 'constexpr T CTABS(T)':
include/data.h:44:18: error: 'is_constant_evaluated' is not a member of 'std' [-Wtemplate-body]
44 | if (std::is_constant_evaluated())
| ^~~~~~~~~~~~~~~~~~~~~
include/data.h: In function 'constexpr std::array<long unsigned int, 64> InitQueenAttackMasks()':
include/data.h:195:39: error: uninitialized variable 'res' in 'constexpr' function
195 | std::array<std::uint64_t, 64> res;
| ^~~-
msterkowiec
- Posts: 29
- Joined: Sat Apr 26, 2025 7:01 pm
- Full name: Marcin Sterkowiec
Re: JGIsland_BB - code for ultrafast solving #2
Hi Roland,
The most reliable way of building this project is by using the included CMakeLists.txt, which is, for example:
cmake .
cmake --build . --verbose
(The first line is configuration of cmake, so it should be run only once)
Alternatively you can open the folder in some IDE like Visual Studio 2022 (Windows), Visual Studio Code or CLion (Linux) and the IDE will build it and let you run or debug it.
BTW: The error you mentioned is most probably due to C++ language version (the project requires C++20, which is specified in the CMakeLists.txt; std::is_constant_evaluated is a feature of C++20). Thus, the compiler version (e.g. gcc, clang, msvc) on your machine should be up-to-date in order to handle C++ 20
The most reliable way of building this project is by using the included CMakeLists.txt, which is, for example:
cmake .
cmake --build . --verbose
(The first line is configuration of cmake, so it should be run only once)
Alternatively you can open the folder in some IDE like Visual Studio 2022 (Windows), Visual Studio Code or CLion (Linux) and the IDE will build it and let you run or debug it.
BTW: The error you mentioned is most probably due to C++ language version (the project requires C++20, which is specified in the CMakeLists.txt; std::is_constant_evaluated is a feature of C++20). Thus, the compiler version (e.g. gcc, clang, msvc) on your machine should be up-to-date in order to handle C++ 20
-
Roland Chastain
- Posts: 718
- Joined: Sat Jun 08, 2013 10:07 am
- Location: France
- Full name: Roland Chastain
Re: JGIsland_BB - code for ultrafast solving #2
Thank you. Using the information that you provided, I could compile a first example.
Code: Select all
// test.cpp
// g++ -o test test.cpp -std=c++20
#define private public
#include "JGIsland_BB.h"
int main()
{
FullBitboards bb;
bb.fromFEN("b3BN1n/b3npP1/pP1RRPP1/p1k1b1Rn/B1p1b2p/2K1pp1p/3PP1R1/1b2r2b");
printf("%d\n", bb.AllBetweenEmpty(_B1_, _B6_) == true);
return 0;
}-
msterkowiec
- Posts: 29
- Joined: Sat Apr 26, 2025 7:01 pm
- Full name: Marcin Sterkowiec
Re: JGIsland_BB - code for ultrafast solving #2
Keep also in mind that the following compiler switches for performance (for release build) may be crucial in this project:
-O3 -march=native
(You can find them in CMakeLists.txt)
-O3 -march=native
(You can find them in CMakeLists.txt)
-
msterkowiec
- Posts: 29
- Joined: Sat Apr 26, 2025 7:01 pm
- Full name: Marcin Sterkowiec
Re: JGIsland_BB - code for ultrafast solving #2
Now JGIsland_BB is extended by implemenations of Fancy Magic Bitboards (uses more than 800kB on hot path) and Dense Fancy Magic Bitboards (uses only 161 kB on hot path). Both implementations outperform Hyperbola Quintessence: almost 45 two-movers can be solved in all solutions mode per millisecond on Intel i7-14700 (single thread) using Dense Fancy Magic Bitboards, while only 39 when using Hyperbola Quintessence. Additional tests indicate that Dense Fancy Magic Bitboards outperform Hyperbola Quintessence also in more complex analyses involving more memory usage (transposition tables, etc.)
-
msterkowiec
- Posts: 29
- Joined: Sat Apr 26, 2025 7:01 pm
- Full name: Marcin Sterkowiec
Re: JGIsland_BB - code for ultrafast solving #2
BTW: After further corrections, data of Dense Fancy Magic Bitboards on JGIsland_BB is now reduced to less than 110kB.