Of course sometimes I don't remember immediately all pecularities of all programs and need to do some retesting.
With Bismark and WB I had a tough nut to crack though yesterday. Bismark would always crash in WB with 'usual' setups.
As I found no mentioning of this special case yet with the talkchess search, I thought I post here now for future reference.
Soon I found out by debugging that Bismark (=UCI) instead of MB for hash values uses a slot number, which defaults
to 22 = ~100MB already, with a max value of 64, which would then be already 100MB*2^42, which is much too much of course.
The problem is now that most users set a general hash size much higher in WB, may be 256 or 512 or similar and WB always
sends this plus the default hash size for EGTB. Bismark it seems will scale it down to 64 and still crash of course.
There is no possibility in WB, neither with polyglot nor with UCI2WB to send a single different hash to engines (anymore?) it seems.
Neither at all with (UCI2WB), nor w/o being overruled (Polyglot), all of this would Bismark make crash.
This means it would only work with a ugly workaround with Inbetween and changing the exact hash size sent to the desired number.
(or recompiling with some changes as the source is available, first trying a diff. max value and hoping it would scale each too high number
down again to the max)
I know this is mostly an incorrect usage of the hash option according to the uci specs, which mentions MB, but not everyone
understands that all examples in the specs often (or always?) are meant literally.
OTH what if uci engines would exist which just take a max of lets say 32MB and otherwise would stop working?
They would have the same problem w/o being 'incompatible' to the specs.
So I think even when there is a general hash option setting a different hash for programs should still be possible
and immediately be used at startup and not having sent the default size first.
With polyglot setting hash=23 (200MB)
WB setting: general hash=256/egt hash=16
Code: Select all
1611566214.418 POLYGLOT INI file "polyglot.ini"
1611566214.458 Adapter->Engine: uci
1611566214.668 Engine->Adapter: id name Bismark v. 1.4
1611566214.668 Engine->Adapter: id author Evgeny Shtranvasser
1611566214.668 Engine->Adapter: id name Bismark v. 1.4
1611566214.668 Engine->Adapter: id author Evgeny Shtranvasser
1611566214.668 Engine->Adapter: option name hash type spin default 22 min 0 max 64
...
1611566214.668 POLYGLOT [Engine] hash="23"
...
1611566214.668 Adapter->Engine: setoption name hash value 23
1611566214.668 POLYGLOT *** Mainloop started ***
1611566214.858 GUI->Adapter: xboard
1611566214.858 GUI->Adapter: protover 2
1611566214.858 Adapter->GUI: feature done=0
1611566214.858 Adapter->GUI: feature analyze=1
1611566214.858 Adapter->GUI: feature exclude=1
1611566214.858 Adapter->GUI: feature colors=0
1611566214.858 Adapter->GUI: feature draw=1
1611566214.858 Adapter->GUI: feature ics=1
1611566214.858 Adapter->GUI: feature myname="Bismark_14"
...
1611566214.958 GUI->Adapter: memory 272
1611566214.958 POLYGLOT setting the amount of memory to 272Mb
1611566214.958 POLYGLOT EGTB Cache is 0Mb
1611566214.958 Adapter->Engine: setoption name hash value 64
1611566214.958 GUI->Adapter: new
1611566214.958 Adapter->Engine: isready
1611566215.158 Engine->Adapter: info string bad hash size
1611566215.198 Engine->Adapter: EOFCode: Select all
"Bismark_14" /fd=C:\Engines\UCI\Bismark_14 /fUCCI -firstOptions "Hash=23,UCI2WB debug output=1"The extra option hash will be ignored and cannot be altered intentionally, only the GUI value will be considered.
This is ok in 99% of the cases, but too much babysitting IMHO, it should be possible to set a different hash.
May be there is a hidden way of doing this, I don't know yet?
Code: Select all
recognized 'normal' (-1) as variant normal
recognized 'normal' (-1) as variant normal
shuffleOpenings = 0
Version: WinBoard 4.9.1 + Bismark_14
Reset(1, 0) from gameMode 0
recognized 'normal' (-1) as variant normal
GameEnds(0, (null), 2)
shuffleOpenings = 0
StartChildProcess (dir="") UCI2WB Bismark_14 C:\Engines\UCI\Bismark_14
nice engine proc to 10
670 >first : xboard
protover 2
722 <first : feature setboard=1 usermove=1 debug=1 ping=1 name=1 reuse=0 exclude=1 pause=1 sigint=0 sigterm=0 done=0
722 >first : accepted setboard
722 >first : accepted usermove
722 >first : accepted debug
722 >first : accepted ping
722 >first : accepted name
722 >first : accepted reuse
722 >first : accepted exclude
722 >first : accepted pause
722 >first : accepted sigint
722 >first : accepted sigterm
722 >first : accepted done
722 <first : feature option="UCI2WB debug output -check 0"
722 >first : accepted option
722 >first : option UCI2WB debug output=1
722 <first : feature option="ponder always -check 0"
722 >first : accepted option
722 <first : # engine said: id name Bismark v. 1.4
732 <first : feature myname="Bismark v. 1.4 (UCI2WB)"
732 >first : accepted myname
732 <first : # engine said: id author Evgeny Shtranvasser
732 <first : # engine said: id name Bismark v. 1.4
732 <first : feature myname="Bismark v. 1.4 (UCI2WB)"
732 >first : accepted myname
732 <first : # engine said: id author Evgeny Shtranvasser
732 <first : # engine said: option name hash type spin default 22 min 0 max 64
732 <first : # engine said: uciok
732 <first : feature variants="normal,xiangqi"
732 >first : accepted variants
732 <first : feature smp=1 memory=1 done=1
732 >first : accepted smp
732 >first : accepted memory
732 >first : accepted done
752 >first : memory 272
752 >first : cores 1
752 >first : new
random
752 >first : level 40 2 0
752 >first : post
752 >first : hard
752 >first : easy
752 >first : ping 1
Impossible move , type = 0
752 <first : # queue 'memory', searching=0
752 <first : # command memory
752 <first : # queue 'cores', searching=0
752 <first : # command cores
752 <first : Error (unknown command): cores
752 <first : # queue 'new', searching=0
752 <first : # command new
752 <first : # setoption name hash value 272
752 <first : # isready
752 <first : # queue 'level', searching=0
752 <first : # queue 'ping', searching=0
752 <first : # engine said: readyok
752 <first : # ucinewgame
752 <first : # command level
752 <first : # command ping
752 <first : pong 1
5512 >first : force
StartChildProcess (dir="C:\Engines\WB\Abbess_20161211") Abbess_20161211
...
New game (0): Bismark v. 1.4 (UCI2WB)-Abbess 2016.12.11 (w)
6132 >first : computer
6132 >first : name Abbess 2016.12.11
6132 >second: computer
6132 >first : black
6132 >first : time 12000
6132 >first : otim 12000
6132 >first : white
book hit = (NULL)
6132 >first : go
nps: w=-1, b=-1
6142 <first : # queue 'name', searching=0
6142 <first : # command name
6142 <first : # queue 'black', searching=0
6142 <first : # queue 'white', searching=0
6142 <first : # queue 'go', searching=0
6142 <first : # command black
6142 <first : Error (unknown command): black
6142 <first : # command white
6142 <first : Error (unknown command): white
6142 <first : # command go
6142 <first : # start search
6142 <first : # position startpos moves
6142 <first : # go btime 120000 wtime 120000 movestogo 40
6152 <second: # new
...
Fatal Error: Error: first chess program (UCI2WB Bismark_14 C:\Engines\UCI\Bismark_14) exited unexpectedly
GameEnds(27, Error: first chess program (UCI2WB Bismark_14 C:\Engines\UCI\Bismark_14) exited unexpectedly, 2)