Posts

Showing posts with the label SMP

Android UCI Engines with Parallel Search

Image
Multi-core Android devices are becoming more widespread. Therefore, v2.8.2. of Chess for Android, available from the Android Market or as direct download, adds support for setting up UCI engines with parallel search. Unfortunately, the UCI protocol did not standardize the option name for parallel search (despite some efforts) so the GUI simply looks in the UCI engine output for commonly used option names like "Cores", "Processors", "Threads", and "CPUs". The GUI then presents this choice in the option setup window (always labeled as CPUs), and eventually sends any selected value back to the engine using the recognized option name. Please let me know if you would like to see alternative option names for other UCI engines on Android with parallel search. As for all other options, only option values supported by the engine can be selected in the setup window.

Below a screenshot of the new UCI option setup window.


Back to BikJump

November last year, I posted a blog entry on my progress with "Deep" BikJump, i.e. adding multi-threading to my engine to speedup the search. Due to many distractions, I have not worked on that feature since that posting....

The chess engine bug is starting to itch again, however, so I decided to pick this up. Hopefully I can release a SMP version of BikJump soon!

UCI option: Processors

My attempts to get consensus on standardizing an option to define the number of processors for an UCI engine on talkchess failed miserably, so I simply picked "Processors". The output of the prototype Deep BikJump on the "uci" command is shown below.

id name BikJump v2.1P (64-bit)
id author Aart J.C. Bik
option name Hash type spin default 32 min 1 max 65536
option name NalimovPath type string default
option name NalimovCache type spin default 8 min 1 max 2048
option name Ponder type check default true
option name Processors type spin default 1 min 1 max 4
uciok

I completed the threading toolkit for Linux and MacOS using pthreads and for Windows using the Windows threads. The latter was slightly more elaborate as I found out that CONDITION_VARIABLE (a synchronization primitive) is only supported on Vista, but not XP. Since I want to keep BikJump as portable as possible, I had to rewrite the Windows version using the slightly less elegant, but more widely supported events in…

"Deep" BikJump

The 32-bit version of BikJump v2.01 (after a minor bug fix) received a first rating of 2103 RUEL. Since this was tested on a Pentium IV processor (not good for bitscans), I am looking forward to get results back for the 64-bit version running on a Core 2 Duo or Quad platform.

In the meanwhile, I have started work on Deep BikJump, featuring multi-threading to perform the search in parallel (commonly referred to as SMP support). Upcoming versions will be designated with the suffix P (e.g. v2.1P) to denote this new parallel support. Because I want to continue support for all major platform (Windows, Linux, and MacOS), I am working on a small threading toolkit that provides the right abstraction for keeping the major part of the chess engine unaware of details on Windows threads and pthreads.