Coder Social home page Coder Social logo

lantonov / asmfish Goto Github PK

View Code? Open in Web Editor NEW
117.0 34.0 49.0 118.79 MB

A continuation of the nice project asmFish by Mohammed Li. Latest version: 07.08.2019

Home Page: https://lantonov.github.io/asmFish/

License: Other

Assembly 92.27% Batchfile 1.06% Makefile 0.13% C++ 5.77% PHP 0.42% Python 0.21% Visual Basic 0.14%
asmfish armfish matefish

asmfish's Introduction

Introduction

Welcome to the project of translating Stockfish into assembly language. This project now uses the new assembler engine fasmg from Tomasz Grysztar. The includes in arm/includes/ or x86/include/ contain instruction and formatting macros for the four popular targets in the Building section. The hello world examples in these directories should provide enough to grasp the syntax.

Building

All versions of the executables may be built using the fasmg executable. However, fasmg is currently only available as an x86 executable. fasmg is a generic assembler which relies on the particual flavor of the assembly language to be supplied by macros. This slows down the processing of the source by a few orders of magnitute. The location of these macros (relative to the current source) is harded coded into the fish source in the variable FASMG_INC. The -e 100 switch tells fasmg to display the last 100 errors when processing the source. The -i switch inserts lines at the beginning at the source. The fish source expect that VERSION_OS is defined this way. This allows multiple versions to be assembled from the same source. Your working directory should be the root directory of this repository (the one that contains the fasmg executables)

x86-64 Linux

The x86-64 linux version links against nothing and should work with any 64 bit x86 linux kernel.

    ~/asm$ ./fasmg "x86/fish.asm" "asmfish" -e 100 -i "VERSION_OS='L'" -i "VERSION_POST = 'popcnt'"
        flat assembler  version g.hwx32
        4 passes, 18.5 seconds, 112326 bytes.
    ~/asm$ chmod 755 ./asmfish
    ~/asm$ ./asmfish bench

x86-64 Windows

The x86-64 windows version links against only kernel32.dll and should work even on XP.

    C:\asm>fasmg.exe "x86\fish.asm" "asmfish.exe" -e 100 -i "VERSION_OS='W'" -i "VERSION_POST = 'popcnt'"
        flat assembler  version g.hwx32
        5 passes, 23.2 seconds, 115200 bytes.
    C:\asm>asmfish.exe bench

x86-64 Mac

The x86-64 macOS version links against /usr/lib/libSystem.B.dylib and works on version 10.12.16.

    ~/asm$ ./fasmg "x86/fish.asm" "asmfish" -e 100 -i "VERSION_OS='X'" -i "VERSION_POST = 'popcnt'"
        flat assembler  version g.hwx32
        4 passes, 17.7 seconds, 119495 bytes.
    ~/asm$ chmod 755 ./asmfish
    ~/asm$ ./asmfish bench

aarch64 Linux

The aarch64 linux version links against nothing should work with any 64 bit arm linux kernel. Of course it can currently only be built on x86 machines.

    ~/asm$ ./fasmg "arm/fish.arm" "armfish" -e 100 -i "VERSION_OS='L'" -i "VERSION_POST = 'v8'"
        flat assembler  version g.hwx32
        3 passes, 8.1 seconds, 128018 bytes.
    ~/asm$ chmod 755 ./armfish
    ~/asm$ qemu-aarch64 ./armfish bench

Using the engine from the command line

You can feed in commands to the engine as (":" -> ";" on windows):

    ./asmfish setoption name hash value 256: go depth 5: wait

The engine quits after this if assemble flag USE_CMDLINEQUIT=1 is set. Besides the usual uci commands there are the following:

included by default
perft Usual move generation verification. Use like perft 7.
bench Usual bench command. Use like stockfish or the more readable form bench hash 16 threads 1 depth 13. These are the defaults.
wait Waits for the main search thread to finish. Use with caution (esp. on an infinite search). This is useful when feeding commands via the command line. The command wait can be used after go to ensure that engine doesn't quit before finishing.
USE_BOOK=1 default assemble option
bookprobe Displays book entries from the current position. Use like bookprobe 3.
VERBOSE=1 assemble option
show Prints out the internal rep of the position.
moves Makes the succeeding moves then does show.
undo Undoes one or a certain number of moves
donull Does a null move.
eval Displays evaluation.

Engine options

included by default
Priority Try to set the priority of the process. The default is 'none', which runs the engine at whichever priority it was started.
LogFile Set the location to write all communication. Useful for buggy gui's. A value of <empty> means the logger is off.
TTFile Set the location of the file for TTSave and TTLoad. A value of <empty> means that the following two command will fail.
TTSave Saves the current hash table to TTFile.
TTLoad Loads the current hash table from TTFile while possibily changing the size.
LargePages Try to use large pages when allocating the hash. Hash and threads are only allocated when receiving isready or go.
NodeAffinity The default is all. The command setoption name nodeaffinity value all will show the detected cores/nodes in your machine. Here is the general behavior:
all       pin threads to all nodes your machine in a uniform way
none      disable pinning threads to nodes
0 1 2 3   only use nodes 0, 1, 2 and 3
2         only use node 2
0.1 2.3   use nodes 0, 1, 2 and 3
            but node 1 shares per-node memory with node 0
            node 3 shares per-node memory with node 2
0.1.2.3   use nodes 0, 1, 2 and 3
            but nodes 1, 2 and 3 share per-node memory with node 0
USE_SYZYGY=1 default assemble option
SyzygyProbeDepth Don't probe if plies from root is less than this.
SyzygyProbeLimit Don't probe if number of board pieces is bigger than this.
Syzygy50MoveRule Consider 50 move rule when probing.
SyzygyPath Path to syzygy tablebases.
USE_BOOK=1 default assemble option
OwnBook Lookup position in book if possible. Ponder moves are also selected from the book when possible
BookFile Loads polyglot book into engine.
BestBookMove Use only the best moves from the book (highest weight)
BookDepth Tricky setting works as follows:
BookDepth <= 0:
suppose the lines the book from the current position are
T0:     h2h3(30) c5d4(10) e3d4(14) g4h5(10) g2g4(11) 
        h2h3(30) g4h5(5) 
        d4c5(17) d6c5(17) b1c3(7) 
the moves g2g4(11), g4h5(5) and b1c3(7) are leaves and don't lead
to a position in the book. Triming off these leaves three times,
T1:     h2h3(30) c5d4(10) e3d4(14) g4h5(10)
        d4c5(17) d6c5(17)
T2:     h2h3(30) c5d4(10) e3d4(14)
        d4c5(17)
T3:     h2h3(30) c5d4(10)
If BookDepth = 0, probe as if it were in T0 (unchanged)
If BookDepth =-1, probe as if it were in T1 (leaves off)
If BookDepth =-2, probe as if it were in T2 (trim twice)
If BookDepth =-3, probe as if it were in T3 (trim trice)
So with BookDepth <= -3, the move d4c5 is not considered.
With BookDepth <= -5, the move h2h3 is also not considered.

BookDepth >= 1:
Book is not probed if gameply >= BookDepth

The option BestBookMove is also slightly complicated for compatibility with the cerebellum book in polyglot format. In the following pseudocode, movelist is the list of legal book moves after processing the BookDepth option. After this pseudocode if movelist is non-empty, then a random move is chosen from movelist according to the weights of these moves.

if BestBookMove = true
   if length(movelist) > 1
       filter out moves from movelist that lead to repetitions
       filter out moves from movelist without highest weight
   end if
else
   filter out moves from movelist that lead to repetitions
end if

This means that if BestBookMove=true and the first move is encoded with a higher weight than the second move (both having non-zero weight in the book), then the behaviour should match that of brainfish. If BestBookMove=false, then the only differences are

  • if the first move leads to repetition and there is no second move, then the engine starts calculating
  • if there are two moves, neither of which lead to a repition, then both of these moves will be considered.
USE_WEAKNESS=1 assembly option
UCI_LimitStrength make the engine play at certain level
UCI_Elo level at which to play
USE_VARIETY=1 assemble option
Variety In QSearch, if the score is in the range [-4v, 1000+4v), add a pseudorandom integer from (-4v, 4v) to the score.
The distribution of this integer is roughly triangular with mean 0.
               X
             X X X
           X X X X X
         X X X X X X X
         X X X X X X X
       X X X X X X X X X
     X X X X X X X X X X X
   X X X X X X X X X X X X X
-4v            0            +4v

Misbehaviour

If you observe a crash/misbehaviour in asmfish, please raise an issue here and give the following information:

  • name of the executable that crashed/misbehaved
  • exception code and exception offset in the case of a crash
  • a log of the commands that were sent to asmFish by your gui before the crash Simply stating that asmFish crashed in your gui is useless information by itself.

asmfish is known to have problems in the fritz15 gui, while it plays much better in the fritz11 gui.

Windows might throw a "The system cannot execute the specified program." or "Insufficient system resources exist to complete the requested service.". The likely source of this problem is your virus software. Rest assured that the sources here do not produce any behaviour that is even remotely virus-like (unless you run analysis for a long time with syzygy6 installed).

FAQ

Q: Why not just start with the compiler output and speed up the critical functions? or write critical functions in asm and include them in cpp code?

A: With this approach the critical functions would still need to conform to the standards set in place by the ABI. All of the critical functions in asmFish do not conform to these standards. Plus, asmFish would be dependent on a compiler in this case, which introduces many unnecessary compilcations. Both asmFish and its assembler are around 100KB; lets keep it simple. Note that compiler output was used in the case of Ronald de Man's syzygy probing code, as this is not speed critical but cumbersome to write by hand.

Q: Is asmFish search the same as official stockfish?

A: It does now that PEDANTIC = 1 is the default! The changes previously thought to be inconsequential lose about 2 Elo in a head-to-head matchup. The functionality when using syzygy is not 100% identical because asmFish uses Ronald's original alpha-beta search while official stockfish does not. This causes minor inconsequential differences due to the piece lists.

Q: Where can I find the executable files of the old versions?

A: All older versions of asmFish/pedantFish are in the branch https://github.com/lantonov/asmFish/tree/executables

updates

For a change log, see the Wiki https://github.com/lantonov/asmFish/wiki/Change-log

asmfish's People

Contributors

counterply avatar double-beep avatar jdehorty1 avatar lantonov avatar syzygy1 avatar tthsqe12 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

asmfish's Issues

Uci Parametres

Hallo, lantonov, could you create such parameter for asmFish as to add bin book, because of abscence of it, asmfish is always losing, you can learn more about this problem from my tests here: http://immortalchess.net/forum/showpost.php?p=738525&postcount=2366 and http://immortalchess.net/forum/showpost.php?p=739125&postcount=2372 and http://immortalchess.net/forum/showpost.php?p=739125&postcount=2372 and http://immortalchess.net/forum/showpost.php?p=739413&postcount=2376
Thank you

asmFish Cluster

Maybe it belongs to projects..
I see Mohammed Li again very active so i would replace my request to make a asmFish Cluster!!
We have asmFish syzygy+LP+Numa..so +Cluster would be a next step..
More and more people have more then one system at home..and it would be great to connect your systems and use all these cores together..imagine if it get possible to do this like Stockfish testframe..connect all people's computer,or who wants to work together..the possibilities would be endless..

Kind regards,
Ipman.

Cerebellum bug in linux

Cerebellum: The linux version has a bug.

./pedantFishL_2016-12-17_base
pedantFishL_2016-12-17_base
brain2polyglot depth 200 in "Cerebellum_light.bin" out "polybook.bin"
sys_write failed rax: 0xfffffffffffffff2

Thanks

Pieces protecting king

For this new SF commit, I wrote below the Protector array to be cut and pasted

.Protector_Knight:
 dd (  0 shl 16) + (  0)
 dd (  7 shl 16) + (  9)
 dd (  7 shl 16) + (  1)
 dd (  1 shl 16) + (  5)
 dd (-10 shl 16) + ( -4)
 dd ( -1 shl 16) + ( -4)
 dd ( -7 shl 16) + ( -3)
 dd (-16 shl 16) + (-10)

.Protector_Bishop:
 dd (  0 shl 16) + ( 0)
 dd ( 11 shl 16) + ( 8)
 dd ( -7 shl 16) + (-1)
 dd ( -1 shl 16) + (-2)
 dd ( -1 shl 16) + (-7)
 dd (-11 shl 16) + (-3)
 dd ( -9 shl 16) + (-1)
 dd (-16 shl 16) + (-1)

.Protector_Rook:
 dd (  0 shl 16) + ( 0)
 dd ( 10 shl 16) + ( 0)
 dd ( -2 shl 16) + ( 2)
 dd ( -5 shl 16) + ( 4)
 dd ( -6 shl 16) + ( 2)
 dd (-14 shl 16) + (-3)
 dd ( -2 shl 16) + (-9)
 dd (-12 shl 16) + (-7)

.Protector_Queen:
 dd (  0 shl 16) + ( 0)
 dd (  3 shl 16) + (-5)
 dd (  2 shl 16) + (-5)
 dd ( -4 shl 16) + ( 0)
 dd ( -9 shl 16) + (-6)
 dd ( -4 shl 16) + ( 7)
 dd (-13 shl 16) + (-7)
 dd (-10 shl 16) + (-7)

How about an armFish?

It might be interesting to see what can be done on aarch64. One can almost translate the base version of asmFish directly to aarch64. However, there are 16 additional gpr's! I will be using fasmarm (https://arm.flatassembler.net/) to accomplish this and testing with qemu-aarch64 on unbuntu.

Neural Net

I noticed neural net code is added now but is it being used? How does it work? I'm running infinite analysis and I would've thought there'd be some file created about what it learned.

There's no extra UCI options so I'm wondering if this is in preparation for the next release which will have it?

Null-move disable option

Hello guys, it would be very useful for analysis, if it were possible to disable "null-move". Can you implement this function in the asmfish engine? Thank for your work!

Allow pruning advance pawn pushes if not near endgame

                mov   al, byte[.captureOrPromotion]
		 or   al, byte[.givesCheck]
		jnz   .13else
		mov   eax, dword[rbp+Pos.sideToMove]
		lea   ecx, [8*rax+Pawn]
	      movzx   r8d, word[rbx+State.npMaterial+2*0]
	      movzx   r9d, word[rbx+State.npMaterial+2*1]
	        add   r8d, r9d
		cmp   r8d, 5000
	         jl   .13do
	         or   ecx, r8d
		cmp   r14d, ecx
		jne   .13do
		mov   ecx, r12d
		shr   ecx, 3
	       imul   eax, 7
		xor   ecx, eax
		cmp   ecx, RANK_4
		 ja   .13else
.13do:

The only good thing about this code is that it compiles. However, the bench is 8575827 and it should be 5803228. It means I have made a big error somewhere.

asmFish does not always output the best move from the most recent PV

The most recent PV suggests a1a2 while the most recent full PV suggests d4d5. However, the best move chosen is d2f4 which is from the PV at depth 10. Is this a bug or a feature?
This happens in about 10% of the best moves chosen by asmFish. Tweaking asmFish code to always take the best move from the most recent PV loses about 5-10 Elo.
This is a question in behalf of sterten

======================================================

#!/bin/sh
echo off
echo uci
echo setoption name threads value 4

...

echo position fen 2r1rbk1/2qn1p1p/p2p1np1/Pb4B1/1ppPP3/5NNP/1P1Q1PP1/RBR3K1 w - - 7 30,622,60,2993,3052,24,38,-17,5,d5,d4-d5,d4d5
echo go movetime 5000 
sleep 5 

=====================================================

asmFishL_2017-03-09_popcnt
error: unknown command off
id name asmFishL_2017-03-09_popcnt
id author TypingALot
option name Hash type spin default 16 min 1 max 65536
option name LargePages type check default false
option name Threads type spin default 1 min 1 max 256
option name NodeAffinity type string default all
option name Priority type combo default none var none var normal var low var idle
option name TTFile type string default <empty>
option name TTSave type button
option name TTLoad type button
option name Clear Hash type button
option name Ponder type check default false
option name UCI_Chess960 type check default false
option name MultiPV type spin default 1 min 1 max 224
option name Contempt type spin default 0 min -100 max 100
option name MoveOverhead type spin default 30 min 0 max 5000
option name MinThinkTime type spin default 20 min 0 max 5000
option name SlowMover type spin default 89 min 10 max 1000
option name SyzygyProbeDepth type spin default 1 min 1 max 100
option name SyzygyProbeLimit type spin default 6 min 0 max 6
option name Syzygy50MoveRule type check default true
option name SyzygyPath type string default <empty>
uciok
info string node -1 has threads 0 1 2 3

...

info depth 1 seldepth 1 multipv 1 time 11 nps 526363 score cp 71 nodes 5790 tbhits 0 pv d2b4 d6d5
info depth 2 seldepth 2 multipv 1 time 12 nps 495833 score cp 89 nodes 5950 tbhits 0 pv d2d1 c4c3 b2c3
info depth 3 seldepth 3 multipv 1 time 12 nps 511916 score cp 89 nodes 6143 tbhits 0 pv d2d1 c4c3 b2c3
info depth 4 seldepth 4 multipv 1 time 12 nps 552500 score cp 3 nodes 6630 tbhits 0 pv d2d1 b4b3 g5d2 h7h6
info depth 5 seldepth 5 multipv 1 time 13 nps 594692 score cp 45 nodes 7731 tbhits 0 pv d2f4 f8g7 b1c2 c4c3 b2c3 b4c3
info depth 6 seldepth 6 multipv 1 time 14 nps 621285 score cp 39 nodes 8698 tbhits 0 pv d2f4 f8e7 f4h4 c4c3 b2c3 b4c3
info depth 7 seldepth 7 multipv 1 time 15 nps 676600 score cp 52 nodes 10149 tbhits 0 pv d2f4 f8e7 f4h4 c8a8 h4f4 c4c3 b2c3
info depth 8 seldepth 9 multipv 1 time 29 nps 772310 score cp 44 nodes 22397 tbhits 0 pv d2f4 f8e7 b1c2 c4c3 b2c3 b4c3 a1b1 c7a5
info depth 9 seldepth 10 multipv 1 time 35 nps 822600 score cp 55 nodes 28791 tbhits 0 pv d2f4 f8g7 b2b3 c7b8 b1c2 c4c3 d4d5 b8c7 f3d4
info depth 10 seldepth 12 multipv 1 time 55 nps 1111381 score cp 60 nodes 61126 tbhits 0 pv d4d5 f8g7 d2b4 d7c5 f3d2 c7d7 c1c4 h7h6 g5e3 b5c4
info depth 11 seldepth 14 multipv 1 time 72 nps 1222472 score cp 59 nodes 88018 tbhits 0 pv d4d5 f8g7 d2b4 d7c5 f3d2 c7d7 g5f4 h7h6 d2c4 f6e4 b1e4 c5e4 c4d6 e4d6
info depth 12 seldepth 20 multipv 1 time 274 nps 1604912 score cp 19 nodes 439746 tbhits 0 pv b1c2 c8b8 c1e1 h7h6 g5h6 b4b3 c2b1 c4c3 b2c3 f8h6 d2h6 c7c3
info depth 13 seldepth 21 multipv 1 time 437 nps 1650835 score cp 16 nodes 721415 tbhits 0 pv b1c2 h7h5 d4d5 c4c3 b2c3 b4c3 d2d1 f6h7 g5f4 f8g7 f3d4 b5c4 d4c6 d7c5
info depth 14 seldepth 21 multipv 1 time 641 nps 1685121 score cp 73 nodes 1080163 tbhits 0 pv d4d5 f8g7 d2b4 d7c5 f3d2 c7d7 g5f4 h7h6 d2c4 c5e4 b1e4 f6e4 c4b6 c8c1 a1c1 d7e7
info depth 15 seldepth 25 multipv 1 time 938 nps 1712533 score cp 27 nodes 1606356 tbhits 0 pv d4d5 c7c5 g5e3 c4c3 b2c3 b4c3 d2c2 c5b4 e3d4 b4b2 c2b2 c3b2 d4b2 c8c1 b2c1 d7c5 f3d4 f8g7 a1a3 f6e4 d4b5 a6b5
info depth 16 seldepth 27 multipv 1 time 1136 nps 1718597 score cp 37 nodes 1952327 tbhits 0 hashfull 663 pv d4d5 c7c5 f3d4 f8g7 g5e3 c4c3 b2c3 b4c3 d2d1 h7h5 b1c2 c5c4 d4b5 a6b5 c2d3 c4c7 d1b3 d7c5 b3b5 h5h4
info depth 17 seldepth 28 multipv 1 time 2015 nps 1738991 score cp 46 nodes 3504067 tbhits 0 hashfull 898 pv d4d5 c7c5 f3d4 f8g7 g5e3 c4c3 b2c3 b4c3 d2d1 h7h5 d4b5 c5b5 b1d3 b5b7 c1b1 b7a8 d1c2 d7e5 b1b6 e5c4 e3d4 h5h4 g3e2 c4b6
info depth 18 currmove d2b4 currmovenumber 2
info depth 18 currmove d4d5 currmovenumber 3
info depth 18 currmove d2e3 currmovenumber 4
info depth 18 currmove d2f4 currmovenumber 5
info depth 18 currmove e4e5 currmovenumber 6
info depth 18 currmove f3e5 currmovenumber 7
info depth 18 currmove c1c3 currmovenumber 8
info depth 18 currmove d2c2 currmovenumber 9
info depth 18 currmove c1d1 currmovenumber 10
info depth 18 currmove b1d3 currmovenumber 11
info depth 18 currmove b1c2 currmovenumber 12
info depth 18 currmove c1e1 currmovenumber 13
info depth 18 currmove g3e2 currmovenumber 14
info depth 18 currmove g5e3 currmovenumber 15
info depth 18 currmove g5f4 currmovenumber 16
info depth 18 currmove d2e1 currmovenumber 17
info depth 18 currmove a1a3 currmovenumber 18
info depth 18 currmove d2d1 currmovenumber 19
info depth 18 currmove g5h6 currmovenumber 20
info depth 18 currmove b1a2 currmovenumber 21
info depth 18 currmove b2b3 currmovenumber 22
info depth 18 currmove g3f5 currmovenumber 23
info depth 18 currmove d2d3 currmovenumber 24
info depth 18 currmove g1h2 currmovenumber 25
info depth 18 currmove d2c3 currmovenumber 26
info depth 18 currmove h3h4 currmovenumber 27
info depth 18 currmove g1h1 currmovenumber 28
info depth 18 currmove a1a4 currmovenumber 29
info depth 18 currmove c1c2 currmovenumber 30
info depth 18 currmove d2e2 currmovenumber 31
info depth 18 currmove g3f1 currmovenumber 32
info depth 18 currmove g5h4 currmovenumber 33
info depth 18 currmove f3e1 currmovenumber 34
info depth 18 currmove f3h2 currmovenumber 35
info depth 18 currmove f3h4 currmovenumber 36
info depth 18 currmove g3h1 currmovenumber 37
info depth 18 currmove g3h5 currmovenumber 38
info depth 18 currmove c1f1 currmovenumber 39
info depth 18 currmove g1f1 currmovenumber 40
info depth 18 currmove g5f6 currmovenumber 41
info depth 18 currmove c1c4 currmovenumber 42
info depth 18 seldepth 28 multipv 1 time 3351 nps 1735232 score cp 30 upperbound nodes 5814763 tbhits 0 hashfull 983 pv a1a2 f8e7
info depth 18 currmove a1a2 currmovenumber 1
info depth 18 seldepth 28 multipv 1 time 4442 nps 1735208 score cp 42 lowerbound nodes 7707794 tbhits 0 hashfull 990 pv a1a2
info depth 18 currmove a1a2 currmovenumber 1
info depth 18 currmove d2b4 currmovenumber 2
info depth 18 currmove d4d5 currmovenumber 3
info depth 18 currmove f3e5 currmovenumber 4
info depth 18 currmove g3f5 currmovenumber 5
info depth 18 currmove e4e5 currmovenumber 6
info depth 18 currmove g5e3 currmovenumber 7
info depth 18 currmove g5h6 currmovenumber 8
info depth 18 currmove a1a3 currmovenumber 9
info depth 18 currmove g5f4 currmovenumber 10
info depth 18 currmove d2f4 currmovenumber 11
info depth 18 currmove c1e1 currmovenumber 12
info depth 18 currmove b1c2 currmovenumber 13
info depth 18 currmove c1f1 currmovenumber 14
info depth 18 currmove g1h2 currmovenumber 15
info depth 18 currmove c1d1 currmovenumber 16
info depth 18 currmove b1a2 currmovenumber 17
info depth 18 currmove h3h4 currmovenumber 18
info depth 18 currmove a1a4 currmovenumber 19
info depth 18 currmove g3e2 currmovenumber 20
info depth 18 currmove g1h1 currmovenumber 21
info depth 18 currmove b1d3 currmovenumber 22
info depth 18 currmove d2d1 currmovenumber 23
info depth 18 currmove c1c3 currmovenumber 24
info depth 18 currmove b2b3 currmovenumber 25
info depth 18 currmove d2c2 currmovenumber 26
info depth 18 currmove d2e1 currmovenumber 27
info depth 18 currmove d2d3 currmovenumber 28
info depth 18 currmove g3f1 currmovenumber 29
info depth 18 currmove d2e3 currmovenumber 30
info depth 18 currmove g3h5 currmovenumber 31
info depth 18 currmove f3e1 currmovenumber 32
info depth 18 currmove f3h2 currmovenumber 33
info depth 18 currmove c1c2 currmovenumber 34
info depth 18 currmove g1f1 currmovenumber 35
info depth 18 currmove d2e2 currmovenumber 36
info depth 18 currmove g3h1 currmovenumber 37
info depth 18 currmove d2c3 currmovenumber 38
info depth 18 currmove g5h4 currmovenumber 39
info depth 18 currmove f3h4 currmovenumber 40
info depth 18 currmove g5f6 currmovenumber 41
info depth 18 currmove c1c4 currmovenumber 42
info depth 18 seldepth 28 multipv 1 time 4926 nps 1732240 score cp 25 upperbound nodes 8533017 tbhits 0 hashfull 991 pv a1a2 c7b7
info depth 18 currmove a1a2 currmovenumber 1
info depth 18 seldepth 33 multipv 1 time 5000 nps 1731559 score cp 25 nodes 8657798 tbhits 0 hashfull 991 pv a1a2 c7b7
bestmove d2f4 ponder f8g7

time to get rid of asmFish/pedantFish split?

pedant fish was created to ease the process of finding bugs in search and eval. Now that the project is relatively bug-free and piece lists have been added, there is not much need for this split. Why not just make the asmFish executables with "PEDANTIC equ 1" from now on and forget about pedantFish?
Also,

  • piece lists have a very efficient implementation, they are only slow down the move do/undo mechanics by a tiny amount (verify with perft)
  • no one can produce evidence that asmFish plays better than pedantFish
  • pedantFish is a terrible name

mateFish name

I know this is no real problem with the engine but the GUI itself but it seems like any engine which name starts with 'mate' is not shown in engine options under Fritz 15 GUI so mateFish cannot be used.
I am using a temporary name 'killFish' but it sounds silly..

asmFishW_2017-03-15 sends info not according to uci specs

I run the engine in multipv value 5 using 2 threads on win 7 and it sends,

info depth 23 seldepth 35 multipv 5 time 27898 nps 3628448 score -INFINITE nodes 101226468 tbhits 0 hashfull 901 pv b6a7 ...

My script broke on reading,
score -INFINITE

This should have been,
score cp <centipawn value>
or
score mate <number of moves to mate>

Command sent.

ucinewgame
position fen r2qr1k1/1p1n1pp1/pbpp1n1p/4p3/1PP1P3/P2P2PP/4NPB1/R1BQ1RK1 b - - 3 18
go infinite

Exact file used:
asmFishW_2017-03-15_popcnt.exe

Only armFish updates?

Question: Are you no longer updating asmFish with the SF patches? I don't think there's been any updates for 3 weeks or more.

Crashes in Chess960

asmFish is very stable in normal chess but crashes randomly in FRC (Chess960). In the file /guts/Castling.asm there are functions that check legality for short and long castling for white and black. As Chess960 has different castling rules than normal chess, maybe the problem is there.

It is also possible that asmFish is just not meant to play Chess960.

-m 50000

From the manual:
"In the command line you can also include -m option followed by a number, which specifies how many kilobytes of memory flat assembler should maximally use. In case of DOS version this options limits only the usage of extended memory."
Why is this memory limitations on our compiles? Is it possible for it to affect engine strength ?

Hash Saving Capability ..

This is a feature request - if possible of course.

Full post here : http://talkchess.com/forum/viewtopic.php?t=64720&postdays=0&postorder=asc&topic_view=&start=0

Daniel Jose has uci options incuded in a version of Stockfish enabling hash saving ..

'I added to Stockfish the capability of saving the full hash to file, to allow the user to recover a previous analysis session and continue it. It has the same added uci options than in Andscacs.
The saved hash file will be of the same size of the hash memory, so if you defined 4 GB of hash, such will be the file size. Saving and loading such big files can take some time.
'

Insufficient resources for August 2 and August 3 versions of asmFish

I've downloaded many previous versions of asmFish with no problem, and likewise other engines, but when I do "create new engine" in ChessBase with the last two bmi2 versions of asmFish I get an error message saying that my system has insufficient resources, and the engine file is deleted from my engines folder. It doesn't seem to be a general problem - I just now installed the latest Brainfish version without any trouble. Help!, and thanks.

Neural Network Stuff

I made a simple plain vanilla NN in Python with adjustable layers. This is its take on the MNIST data set with 30 hidden nodes:

       Epoch 0: 9062 / 10000
       Epoch 1: 9196 / 10000
       Epoch 2: 9199 / 10000
       Epoch 3: 9307 / 10000
       Epoch 4: 9353 / 10000
       Epoch 5: 9381 / 10000
       Epoch 6: 9381 / 10000
       Epoch 7: 9398 / 10000
       Epoch 8: 9383 / 10000
       Epoch 9: 9419 / 10000
       Epoch 10: 9418 / 10000
       Epoch 11: 9421 / 10000
       Epoch 12: 9457 / 10000
       Epoch 13: 9456 / 10000
       Epoch 14: 9452 / 10000
       Epoch 15: 9438 / 10000
       Epoch 16: 9466 / 10000
       Epoch 17: 9461 / 10000
       Epoch 18: 9458 / 10000
       Epoch 19: 9488 / 10000
       Epoch 20: 9457 / 10000
       Epoch 21: 9473 / 10000
       Epoch 22: 9451 / 10000
       Epoch 23: 9491 / 10000
       Epoch 24: 9473 / 10000
       Epoch 25: 9484 / 10000
       Epoch 26: 9466 / 10000
       Epoch 27: 9486 / 10000
       Epoch 28: 9493 / 10000
       Epoch 29: 9467 / 10000

With optimisation of hyperparameters and regularisation (L2) I can make it reach 99%.
To start a serious work, first I need to make some helper programs to extract and work with FENs and evaluations, translate them in the necessary input format and create a database to be used for network training and testing.
Also, these discussions, including the closed issues will be moved to Wiki in respective topics to be easier to find them for reference.

Weird score in multi-PV

I was analyzing r1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 0 7 using the popcnt version March 28th, 2017 build in multi-pv=2. I was using 6 threads and 8192 MB hash, Large Pages, in the Fritz 14 GUI. The program had access to the 5 piece Syzygy files.

At about 30 or 31 ply (sorry I wasn't paying close attention), it showed Qf3 as best with a reasonable score and a3 as second best. The a3 move was scored as #1 (mate in one). Since a mate in one is impossible, it caught my eye. The erroneous score eventually disappeared and was replace with a plausible score.

Not sure if this is reproducible, but I thought I'd forward it along.

Virus

My Avast reports a virus with asmFishW_2017-05-15_base.exe

Patches in SF 15-25 March 2017

There have been 5 patches in SF for 15-19 March 2017:

  • Skip quiet moves based on moveCount pruning threshold and history stats
  • History stat bonus: Move condition to bonus calculation
  • Pawns count imbalance table
  • Assorted code style fixes
  • Fix pawn entry prefetch

Two of these change bench (functional) and I guess those are obligatory:

  • Skip quiet moves based on moveCount pruning threshold and history stats
  • Pawns count imbalance table

I am almost sure that the following patch does not need to be included:

  • Assorted code style fixes

I am not sure about the remaining two patches:

  • History stat bonus: Move condition to bonus calculation
  • Fix pawn entry prefetch

"History stat bonus: Move condition to bonus calculation" claims 0.5% speed increase. "Fix pawn entry prefetch" shows minimal speed increase on some machines.

possible endgame issue from PeterG

http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32132

If anyone has time, see if asmFish is unnecessarily dragging out the endgame or if this behavior matches official stockfish. This is the pgn

[Event "asmFish 170516"]
[Site "Newport, South Wales"]
[Date "2017.05.19"]
[Round "34.1"]
[White "Stockfish 8 64 POPCNT"]
[Black "asmFishW_2017-05-16_popcnt"]
[Result "0-1"]
[ECO "C07"]
[Annotator "0.27;0.08"]
[PlyCount "448"]
[EventDate "2017.05.18"]
[EventType "simul"]
[Source "Grayson"]

{Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz 3092 MHz W=65.3 plies; 13,827kN/s;
136,554,052 TBAs B=39.0 plies; 15,094kN/s; 447,506,885 TBAs} 1. e4 e6 2. d4 d5
3. Nd2 c5 4. Ngf3 cxd4 5. exd5 Qxd5 6. Bc4 Qd7 7. O-O Nc6 8. Nb3 Nf6 9. Nbxd4
Nxd4 10. Nxd4 a6 11. Bg5 {[%eval 27,22] [%emt 0:00:04]} b5 {[%eval 8,28] [%emt
0:00:26] (Be7)} 12. Bb3 {[%eval 25,27] [%emt 0:00:13]} Ne4 {[%eval 8,30] [%emt
0:00:23]} 13. Bf4 {[%eval 10,29] [%emt 0:00:00]} Bb7 {[%eval 0,28] [%emt 0:00:
06] (Bc5)} 14. Re1 {[%eval 19,26] [%emt 0:00:05] (c3)} Bc5 {[%eval 0,28] [%emt
0:00:19] (Nc5)} 15. c3 {[%eval 15,28] [%emt 0:00:15]} O-O {[%eval 0,30] [%emt
0:00:00]} 16. Bc2 {[%eval 9,29] [%emt 0:00:30] (Be5)} Nf6 {[%eval 0,27] [%emt
0:00:07]} 17. Be5 {[%eval 6,29] [%emt 0:00:00] (Qd2)} Qd5 {[%eval 0,29] [%emt
0:00:19]} 18. f3 {[%eval 14,30] [%emt 0:00:38]} Qd8 {[%eval -9,30] [%emt 0:00:
06] (Be7)} 19. Qd3 {[%eval -3,25] [%emt 0:00:15] (Kh1)} g6 {[%eval 0,25] [%emt
0:00:15]} 20. Rad1 {[%eval 0,26] [%emt 0:00:00] (Bb3)} Nd7 {[%eval -14,29]
[%emt 0:00:33] (Rc8)} 21. Bg3 {[%eval 0,27] [%emt 0:00:12]} Nb6 {[%eval -5,27]
[%emt 0:00:09]} 22. Qd2 {[%eval -10,28] [%emt 0:00:07]} Bd5 {[%eval -25,27]
[%emt 0:00:10] (Rc8)} 23. Kh1 {[%eval 0,25] [%emt 0:00:06] (Bb3)} Re8 {[%eval
-14,29] [%emt 0:00:21] (Rc8)} 24. Qc1 {[%eval 5,29] [%emt 0:00:42] (Bb3)} Rc8 {
[%eval -21,25] [%emt 0:00:03]} 25. Ne2 {[%eval -6,29] [%emt 0:00:14] (Bb3)} Qf6
{[%eval 0,28] [%emt 0:00:07] (Be7)} 26. Nf4 {[%eval 0,28] [%emt 0:00:13]} Ba8 {
[%eval 0,28] [%emt 0:00:08] (a5)} 27. Re2 {[%eval -10,27] [%emt 0:00:09]} Qg5 {
[%eval -31,29] [%emt 0:00:00] (Nc4)} 28. Bb3 {[%eval -7,29] [%emt 0:00:09]
(Nd3)} a5 {[%eval -11,27] [%emt 0:00:17] (Nc4)} 29. Nd5 {[%eval -16,27] [%emt
0:00:13] (a3)} Qxc1 {[%eval -11,30] [%emt 0:00:05]} 30. Nf6+ {[%eval -23,27]
[%emt 0:00:00]} Kh8 {[%eval -9,30] [%emt 0:00:01]} 31. Rxc1 {[%eval -14,28]
[%emt 0:00:02]} Red8 {[%eval -8,34] [%emt 0:00:04]} 32. Ng4 {[%eval -18,29]
[%emt 0:00:00] (Be5)} Kg7 {[%eval -34,25] [%emt 0:00:05]} 33. Be5+ {[%eval -22,
27] [%emt 0:00:02]} Kf8 {[%eval -28,26] [%emt 0:00:00]} 34. Nf6 {[%eval -25,27]
[%emt 0:00:01]} h5 {[%eval -31,28] [%emt 0:00:07]} 35. Nh7+ {[%eval -26,29]
[%emt 0:00:06] (Rce1)} Ke8 {[%eval -38,26] [%emt 0:00:07]} 36. Nf6+ {[%eval
-20,31] [%emt 0:00:00]} Ke7 {[%eval -38,27] [%emt 0:00:04]} 37. Nh7 {[%eval
-18,30] [%emt 0:00:03]} Kd7 {[%eval -40,29] [%emt 0:00:16] (Nd5)} 38. Rd1+ {
[%eval -20,27] [%emt 0:00:18] (Rce1)} Ke8 {[%eval -35,28] [%emt 0:00:08]} 39.
Rde1 {[%eval -14,29] [%emt 0:00:00]} a4 {[%eval -27,27] [%emt 0:00:01]} 40. Bc2
{[%eval -17,32] [%emt 0:00:19]} Nd5 {[%eval -53,27] [%emt 0:00:00]} 41. Be4 {
[%eval -20,30] [%emt 0:00:06]} a3 {[%eval -37,31] [%emt 0:00:49] (Be7)} 42. b3
{[%eval -43,28] [%emt 0:00:21] (h3)} b4 {[%eval -33,31] [%emt 0:00:07]} 43.
Bxd5 {[%eval -31,30] [%emt 0:00:00]} Bxd5 {[%eval -54,28] [%emt 0:00:03]} 44.
Nf6+ {[%eval -34,28] [%emt 0:00:00] (Bf6)} Ke7 {[%eval -50,34] [%emt 0:00:22]}
45. Nh7 {[%eval -29,31] [%emt 0:00:02]} bxc3 {[%eval -39,30] [%emt 0:00:00]}
46. Bxc3 {[%eval -29,27] [%emt 0:00:02]} Kd7 {[%eval -43,32] [%emt 0:00:07]}
47. Be5 {[%eval -35,31] [%emt 0:00:51] (h3)} Be7 {[%eval -42,35] [%emt 0:00:25]
} 48. Nf6+ {[%eval -52,32] [%emt 0:00:19]} Kc6 {[%eval -48,33] [%emt 0:00:00]}
49. Nxd5 {[%eval -43,33] [%emt 0:00:19]} Rxd5 {[%eval -67,31] [%emt 0:00:03]}
50. g4 {[%eval -58,33] [%emt 0:00:13]} Kb5 {[%eval -68,30] [%emt 0:00:16]} 51.
Kg2 {[%eval -66,34] [%emt 0:00:33] (gxh5)} h4 {[%eval -102,28] [%emt 0:00:12]
(Rd3)} 52. Bg7 {[%eval -70,30] [%emt 0:00:07] (Rf1)} g5 {[%eval -142,29] [%emt
0:00:10] (Rd3)} 53. Re5 {[%eval -101,31] [%emt 0:00:16]} Rc7 {[%eval -184,31]
[%emt 0:00:10] (Bd6)} 54. R1e2 {[%eval -145,29] [%emt 0:00:12]} Bd6 {[%eval
-218,34] [%emt 0:00:00]} 55. R5e3 {[%eval -147,27] [%emt 0:00:04] (Rxd5+)} h3+
{[%eval -197,36] [%emt 0:00:15]} 56. Kxh3 {[%eval -187,34] [%emt 0:00:00]} f6 {
[%eval -222,31] [%emt 0:00:01]} 57. Bxf6 {[%eval -206,30] [%emt 0:00:01]} Rh7+
{[%eval -226,33] [%emt 0:00:11]} 58. Kg2 {[%eval -195,34] [%emt 0:00:00]} Rxh2+
{[%eval -233,29] [%emt 0:00:01]} 59. Kf1 {[%eval -211,30] [%emt 0:00:02]} Rh1+
{[%eval -242,30] [%emt 0:00:03]} 60. Kf2 {[%eval -201,32] [%emt 0:00:02]} Bc5 {
[%eval -237,32] [%emt 0:00:07]} 61. Kg3 {[%eval -210,32] [%emt 0:00:01]} Rg1+ {
[%eval -233,29] [%emt 0:00:00]} 62. Kh3 {[%eval -221,27] [%emt 0:00:01]} Rd7 {
[%eval -243,30] [%emt 0:00:04]} 63. Kh2 {[%eval -221,31] [%emt 0:00:02]} Bxe3 {
[%eval -251,29] [%emt 0:00:00]} 64. Rxe3 {[%eval -219,27] [%emt 0:00:01]} Rgd1
{[%eval -262,30] [%emt 0:00:06]} 65. Kg3 {[%eval -241,28] [%emt 0:00:13]} R1d2
{[%eval -271,31] [%emt 0:00:14]} 66. Rxe6 {[%eval -247,29] [%emt 0:00:00]
(Bxg5)} Rxa2 {[%eval -278,29] [%emt 0:00:11]} 67. Bxg5 {[%eval -277,28] [%emt
0:00:02]} Rb2 {[%eval -296,29] [%emt 0:00:04]} 68. Bf6 {[%eval -285,30] [%emt
0:00:06] (Re5+)} Rxb3 {[%eval -319,32] [%emt 0:00:05]} 69. Re5+ {[%eval -300,
30] [%emt 0:00:04]} Kb6 {[%eval -352,34] [%emt 0:00:21]} 70. g5 {[%eval -314,
33] [%emt 0:00:03] (Re6+)} a2 {[%eval -366,29] [%emt 0:00:03]} 71. Re6+ {
[%eval -354,29] [%emt 0:00:10]} Kb7 {[%eval -381,33] [%emt 0:00:00]} 72. Re4 {
[%eval -362,30] [%emt 0:00:07]} Rdd3 {[%eval -396,34] [%emt 0:00:02]} 73. Rf4 {
[%eval -380,30] [%emt 0:00:15] (Kg4)} Ra3 {[%eval -461,29] [%emt 0:00:09]} 74.
Kg4 {[%eval -416,29] [%emt 0:00:00]} Rd1 {[%eval -481,26] [%emt 0:00:01] (Rd6)}
75. Rc4 {[%eval -416,27] [%emt 0:00:05]} Rg1+ {[%eval -544,29] [%emt 0:00:00]}
76. Kh5 {[%eval -431,25] [%emt 0:00:01]} Ra6 {[%eval -547,29] [%emt 0:00:01]}
77. Bb2 {[%eval -498,29] [%emt 0:00:09] (Bd4)} Rb1 {[%eval -823,32] [%emt 0:00:
14]} 78. Bd4 {[%eval -582,30] [%emt 0:00:00]} Rd6 {[%eval -875,26] [%emt 0:00:
03]} 79. Bg7 {[%eval -644,30] [%emt 0:00:04]} Rh1+ {[%eval -938,28] [%emt 0:00:
00]} 80. Kg4 {[%eval -653,26] [%emt 0:00:01]} Rg6 {[%eval -939,26] [%emt 0:00:
01]} 81. Bd4 {[%eval -1074,32] [%emt 0:01:03] (Bc3)} Rg1+ {[%eval -995,32]
[%emt 0:00:10]} 82. Kf4 {[%eval -1191,33] [%emt 0:00:16]} Ra6 {[%eval -12825,
28] [%emt 0:01:01]} 83. Bc3 {[%eval -6446,32] [%emt 0:00:00] (Rc2)} Ra3 {
[%eval -12835,34] [%emt 0:00:06] (a1Q)} 84. Bd4 {[%eval -12831,37] [%emt 0:00:
13] (Bg7)} a1=Q {[%eval -12838,39] [%emt 0:00:22]} 85. Bxa1 {[%eval -12835,45]
[%emt 0:00:00]} Rgxa1 {[%eval -12840,34] [%emt 0:00:02]} 86. Rc2 {[%eval
-12839,46] [%emt 0:00:15]} Ra5 {[%eval -12843,45] [%emt 0:00:00] (Rf1)} 87. Rc4
{[%eval -12836,48] [%emt 0:00:26] (Rb2+)} Rg1 {[%eval -12846,50] [%emt 0:00:07]
} 88. Rb4+ {[%eval -12839,46] [%emt 0:00:00]} Kc6 {[%eval -12847,47] [%emt 0:
00:02]} 89. Rb8 {[%eval -12840,49] [%emt 0:00:06] (Rc4+)} Rgxg5 {[%eval -32639,
42] [%emt 0:00:07]} 90. Rc8+ {[%eval -12841,52] [%emt 0:00:00] (Rf8)} Kd6 {
[%eval -32639,47] [%emt 0:00:21] (Kd7)} 91. Rd8+ {[%eval -12841,51] [%emt 0:00:
06] (Rc1)} Ke6 {[%eval -32639,45] [%emt 0:00:10] (Ke7)} 92. Re8+ {[%eval
-12842,54] [%emt 0:00:07] (Rf8)} Kd6 {[%eval -32639,45] [%emt 0:00:16] (Kf7)}
93. Rd8+ {[%eval 0,127] [%emt 0:00:02]} Ke6 {[%eval -32639,47] [%emt 0:00:05]}
94. Re8+ {[%eval 0,127] [%emt 0:00:00] (Rf8)} Kf6 {[%eval -32639,43] [%emt 0:
00:09] (Kd7)} 95. Rf8+ {[%eval -12842,59] [%emt 0:00:07] (Rd8)} Ke7 {[%eval
-32639,48] [%emt 0:00:08] (Kg7)} 96. Rb8 {[%eval -12842,56] [%emt 0:00:06]}
Raf5+ {[%eval -32639,47] [%emt 0:00:00] (Rg2)} 97. Ke4 {[%eval -12843,61]
[%emt 0:00:08] (Ke3)} Rf6 {[%eval -32639,45] [%emt 0:00:07] (Rb5)} 98. Rb7+ {
[%eval -12843,64] [%emt 0:00:06] (Rb5)} Ke8 {[%eval -32639,44] [%emt 0:00:06]
(Ke6)} 99. Rb8+ {[%eval -12842,59] [%emt 0:00:06] (f4)} Kf7 {[%eval -32639,44]
[%emt 0:00:05] (Kd7)} 100. Rb7+ {[%eval -12844,74] [%emt 0:00:07] (Rb1)} Kf8 {
[%eval -32639,46] [%emt 0:00:07] (Kg6)} 101. Rb8+ {[%eval -12843,68] [%emt 0:
00:05] (Rb1)} Ke7 {[%eval -32639,47] [%emt 0:00:06] (Kg7)} 102. Rb7+ {[%eval 0,
127] [%emt 0:00:00]} Ke8 {[%eval -32639,46] [%emt 0:00:04] (Ke6)} 103. Rb8+ {
[%eval 0,127] [%emt 0:00:00] (Rb4)} Kd7 {[%eval -32639,44] [%emt 0:00:05]} 104.
Rb7+ {[%eval -12843,67] [%emt 0:00:09] (Kd4)} Kd8 {[%eval -32639,47] [%emt 0:
00:06] (Kc6)} 105. Rb8+ {[%eval -12843,64] [%emt 0:00:05] (Ke3)} Kc7 {[%eval
-32639,44] [%emt 0:00:05]} 106. Rb2 {[%eval -12843,64] [%emt 0:00:01] (Rc8+)}
Rg1 {[%eval -32639,45] [%emt 0:00:06] (Ra5)} 107. Rc2+ {[%eval -12844,63]
[%emt 0:00:06] (Ke3)} Kd8 {[%eval -32639,46] [%emt 0:00:05] (Kd7)} 108. Rf2 {
[%eval -12844,61] [%emt 0:00:06] (Ra2)} Ke8 {[%eval -32639,43] [%emt 0:00:05]
(Ke7)} 109. Ke5 {[%eval -12844,65] [%emt 0:00:06] (Rd2)} Rf7 {[%eval -32639,44]
[%emt 0:00:07] (Ke7)} 110. Ke4 {[%eval -12845,62] [%emt 0:00:06] (Re2)} Kd7 {
[%eval -32639,42] [%emt 0:00:05] (Re1+)} 111. Kd3 {[%eval -12845,62] [%emt 0:
00:06]} Re1 {[%eval -32639,44] [%emt 0:00:00] (Ke6)} 112. Kd2 {[%eval -12845,
67] [%emt 0:00:06]} Ra1 {[%eval -32639,45] [%emt 0:00:00] (Re5)} 113. Ke3 {
[%eval -12846,69] [%emt 0:00:05] (f4)} Ra3+ {[%eval -32639,44] [%emt 0:00:06]
(Ke6)} 114. Ke4 {[%eval -12847,78] [%emt 0:00:11] (Kd2)} Ra4+ {[%eval -32639,
43] [%emt 0:00:04] (Ke6)} 115. Ke3 {[%eval -12846,74] [%emt 0:00:05]} Ra3+ {
[%eval -32639,44] [%emt 0:00:01] (Re7+)} 116. Ke4 {[%eval 0,127] [%emt 0:00:00]
(Kd2)} Rf8 {[%eval -32639,42] [%emt 0:00:05] (Ke6)} 117. Rf1 {[%eval -12846,79]
[%emt 0:00:06] (f4)} Ra4+ {[%eval -32639,42] [%emt 0:00:05] (Ke6)} 118. Ke3 {
[%eval -12845,69] [%emt 0:00:07]} Ra3+ {[%eval -32639,45] [%emt 0:00:00] (Ke6)}
119. Ke4 {[%eval 0,127] [%emt 0:00:00] (Kd2)} Rc3 {[%eval -32639,45] [%emt 0:
00:08] (Ke6)} 120. f4 {[%eval -12846,82] [%emt 0:00:15]} Ke6 {[%eval -32639,48]
[%emt 0:00:00]} 121. f5+ {[%eval -12847,83] [%emt 0:00:02]} Kf6 {[%eval -32639,
48] [%emt 0:00:09]} 122. Kd4 {[%eval -12847,90] [%emt 0:00:02]} Rcc8 {[%eval
-32639,45] [%emt 0:00:02] (Ra3)} 123. Rf3 {[%eval -12848,80] [%emt 0:00:11]
(Ke4)} Rc1 {[%eval -32639,45] [%emt 0:00:14] (Kg5)} (123... Rce8 124. Kc3 Re5
125. Rf1 Rxf5 {-#20}) 124. Rf2 {[%eval -12848,90] [%emt 0:00:11] (Rc3)} Rd8+ {
[%eval -32639,45] [%emt 0:00:11] (Re1)} 125. Ke4 {[%eval -12848,83] [%emt 0:00:
10] (Ke3)} Kg5 {[%eval -32639,42] [%emt 0:00:11] (Rc3)} 126. Rg2+ {[%eval
-12846,72] [%emt 0:00:09] (Kf3)} Kh6 {[%eval -32639,48] [%emt 0:00:13] (Kh4)}
127. Rh2+ {[%eval -12846,64] [%emt 0:00:09]} Kg5 {[%eval -32639,49] [%emt 0:00:
04] (Kg7)} 128. Rg2+ {[%eval 0,127] [%emt 0:00:01]} Kf6 {[%eval -32639,42]
[%emt 0:00:02] (Kh4)} 129. Rf2 {[%eval 0,127] [%emt 0:00:01] (Rg6+)} Ra1 {
[%eval -32639,47] [%emt 0:00:14] (Rc3)} 130. Kf4 {[%eval -12848,86] [%emt 0:00:
10] (Re2)} Rh8 {[%eval -32639,47] [%emt 0:00:13] (Rd5)} 131. Ke4 {[%eval
-12848,87] [%emt 0:00:10] (Rg2)} Rha8 {[%eval -32639,45] [%emt 0:00:13] (Ra5)}
132. Kd3 {[%eval -12848,81] [%emt 0:00:09] (Rf1)} R1a3+ {[%eval -32639,46]
[%emt 0:00:14] (R1a5)} 133. Ke4 {[%eval -12848,87] [%emt 0:00:09] (Kc4)} Ra1 {
[%eval -32639,46] [%emt 0:00:08] (R3a5)} (133... R3a4+ 134. Kd3 Re8 135. Kc3
Re5 136. Kb3 Raa5 137. Kb4 Rxf5 {-#17}) 134. Kd3 {[%eval 0,127] [%emt 0:00:01]
(Rf1)} R1a5 {[%eval -32639,45] [%emt 0:00:13]} 135. Ke4 {[%eval -12849,108]
[%emt 0:00:05] (Rh2)} Re5+ {[%eval -32639,46] [%emt 0:00:12] (Re8+)} 136. Kd4 {
[%eval -12850,111] [%emt 0:00:15] (Kf3)} Rf8 {[%eval -32639,46] [%emt 0:00:07]
(Rxf5)} (136... Rxf5 {-#19}) 137. Rf1 {[%eval -12850,111] [%emt 0:00:14] (Rf3)}
Rf7 {[%eval -32639,46] [%emt 0:00:08] (Rxf5)} (137... Rxf5 {-#20}) 138. Kc4 {
[%eval -12850,108] [%emt 0:00:09] (Rd1)} Rh7 {[%eval -32639,48] [%emt 0:00:11]
(Rxf5)} 139. Rf2 {[%eval -12850,101] [%emt 0:00:08] (Rg1)} Rc7+ {[%eval -32639,
47] [%emt 0:00:08] (Rxf5)} 140. Kb4 {[%eval -12850,83] [%emt 0:00:08] (Kd3)}
Kg5 {[%eval -32639,44] [%emt 0:00:06] (Rxf5)} 141. f6 {[%eval -12849,88] [%emt
0:00:08] (Rh2)} Re4+ {[%eval -32639,46] [%emt 0:00:11] (Rf5)} 142. Kb3 {[%eval
-12849,75] [%emt 0:00:07] (Ka3)} Re8 {[%eval -32639,45] [%emt 0:00:07] (Rf4)}
143. Rf3 {[%eval -12849,78] [%emt 0:00:07] (Rg2+)} Kg6 {[%eval -32639,42]
[%emt 0:00:05] (Rf8)} 144. Kb2 {[%eval -12849,81] [%emt 0:00:07]} Rd7 {[%eval
-32639,44] [%emt 0:00:03] (Rf8)} 145. Kb1 {[%eval -12849,80] [%emt 0:00:07]
(Ka2)} Re1+ {[%eval -32639,44] [%emt 0:00:07] (Rf7)} 146. Ka2 {[%eval -12849,
91] [%emt 0:00:07]} Re4 {[%eval -32639,46] [%emt 0:00:01] (Rf7)} 147. Kb1 {
[%eval -12849,85] [%emt 0:00:07] (Re3)} Rf7 {[%eval -32639,47] [%emt 0:00:08]}
148. Rf1 {[%eval -12850,88] [%emt 0:00:00] (Rg3+)} Re6 {[%eval -32639,45]
[%emt 0:00:07] (Rxf6)} 149. Kc1 {[%eval -12850,71] [%emt 0:00:07] (Rf2)} Re8 {
[%eval -32639,44] [%emt 0:00:06] (Rexf6)} 150. Rf4 {[%eval -12850,88] [%emt 0:
00:09] (Rf2)} Ra7 {[%eval -32639,44] [%emt 0:00:06] (Rxf6)} 151. Rf2 {[%eval
-12849,81] [%emt 0:00:07] (Re4)} Rd8 {[%eval -32639,44] [%emt 0:00:08] (Rf8)}
152. Kb2 {[%eval -12849,88] [%emt 0:00:07] (Rg2+)} Rb8+ {[%eval -32639,43]
[%emt 0:00:05] (Rf8)} 153. Kc1 {[%eval -12849,86] [%emt 0:00:07] (Kc2)} Ra1+ {
[%eval -32639,46] [%emt 0:00:08] (Rf8)} 154. Kd2 {[%eval -12849,85] [%emt 0:00:
07] (Kc2)} Rb2+ {[%eval -32639,45] [%emt 0:00:06]} 155. Ke3 {[%eval -12850,100]
[%emt 0:00:02]} Ra3+ {[%eval -32639,45] [%emt 0:00:00] (Rxf2)} 156. Kf4 {
[%eval -12850,100] [%emt 0:00:09] (Kd4)} Rb4+ {[%eval -32639,46] [%emt 0:00:05]
(Rxf2+)} 157. Ke5 {[%eval -4606,1] [%emt 0:00:00]} Kf7 {[%eval -32639,46]
[%emt 0:00:07] (Ra5+)} 158. Kd5 {[%eval -12848,89] [%emt 0:00:11] (Rf5)} Rb6 {
[%eval -32639,45] [%emt 0:00:08]} 159. Ke5 {[%eval -12849,104] [%emt 0:00:00]
(Rf5)} Ra5+ {[%eval -32639,44] [%emt 0:00:05]} 160. Kd4 {[%eval -12850,122]
[%emt 0:00:31] (Ke4)} Kf8 {[%eval -32639,47] [%emt 0:00:10] (Rxf6)} 161. Kc3 {
[%eval -12848,80] [%emt 0:00:11] (Ke4)} Raa6 {[%eval -32639,48] [%emt 0:00:16]}
162. f7 {[%eval -12849,108] [%emt 0:00:00] (Rc2)} Rb7 {[%eval -32639,48] [%emt
0:00:33] (Rf6)} 163. Rf1 {[%eval -12850,102] [%emt 0:00:19] (Rb2)} Rc7+ {
[%eval -32639,48] [%emt 0:00:16] (Rxf7)} 164. Kd3 {[%eval -12850,85] [%emt 0:
00:10]} Ra3+ {[%eval -32639,50] [%emt 0:00:00] (Rxf7)} 165. Kd2 {[%eval -12850,
98] [%emt 0:00:10]} Rd7+ {[%eval -32639,50] [%emt 0:00:01] (Rxf7)} 166. Ke2 {
[%eval -12850,103] [%emt 0:00:09]} Ra6 {[%eval -32639,52] [%emt 0:00:00] (Rxf7)
} 167. Rf2 {[%eval -12850,109] [%emt 0:00:10] (Rc1)} Rb7 {[%eval -32639,51]
[%emt 0:00:11] (Rxf7)} 168. Rf1 {[%eval -12850,103] [%emt 0:00:15] (Rh2)} Re6+
{[%eval -32639,51] [%emt 0:00:14] (Rxf7)} 169. Kd2 {[%eval -12850,80] [%emt 0:
00:09] (Kf2)} Rd7+ {[%eval -32639,50] [%emt 0:00:09] (Rxf7)} 170. Kc3 {[%eval
-12850,73] [%emt 0:00:09]} Rc7+ {[%eval -32639,51] [%emt 0:00:02] (Rxf7)} 171.
Kd2 {[%eval -12850,97] [%emt 0:00:08] (Kb4)} Rd7+ {[%eval -32639,51] [%emt 0:
00:10] (Rxf7)} 172. Kc3 {[%eval 0,127] [%emt 0:00:00]} Rc6+ {[%eval -32639,50]
[%emt 0:00:01] (Rxf7)} 173. Kb4 {[%eval -12850,72] [%emt 0:00:17]} Rc2 {[%eval
-32639,54] [%emt 0:00:00] (Rxf7)} 174. Kb3 {[%eval -12849,80] [%emt 0:00:07]}
Re2 {[%eval -32639,52] [%emt 0:00:07] (Rh2)} 175. Kc3 {[%eval -12850,89] [%emt
0:00:07] (Rf6)} Rb7 {[%eval -32639,52] [%emt 0:00:14] (Rxf7)} 176. Kd3 {[%eval
-12849,93] [%emt 0:00:07] (Kc4)} Ree7 {[%eval -32639,54] [%emt 0:00:10] (Rh2)}
177. Rf2 {[%eval -12850,88] [%emt 0:00:07] (Rc1)} Rb8 {[%eval -32639,53] [%emt
0:00:11] (Rxf7)} 178. Rf1 {[%eval -12850,79] [%emt 0:00:07] (Rc2)} Rd8+ {
[%eval -32639,50] [%emt 0:00:07] (Rxf7)} 179. Kc4 {[%eval -12850,70] [%emt 0:
00:07]} Rc7+ {[%eval -32639,50] [%emt 0:00:01] (Rxf7)} 180. Kb5 {[%eval -12850,
65] [%emt 0:00:07]} Rb8+ {[%eval -32639,52] [%emt 0:00:00] (Rxf7)} 181. Ka6 {
[%eval -12850,68] [%emt 0:00:07]} Rb3 {[%eval -32639,53] [%emt 0:00:01] (Rxf7)}
182. Rf2 {[%eval -12850,84] [%emt 0:00:06] (Rf4)} Rc6+ {[%eval -32639,50]
[%emt 0:00:10] (Rxf7)} 183. Ka7 {[%eval -12848,75] [%emt 0:00:06]} Rbc3 {
[%eval -32639,51] [%emt 0:00:01] (Rcb6)} 184. Ka8 {[%eval -12849,85] [%emt 0:
00:06] (Rf5)} Rb3 {[%eval -32639,52] [%emt 0:00:08] (Rc7)} 185. Ka7 {[%eval 0,
127] [%emt 0:00:00]} Rbc3 {[%eval -32639,51] [%emt 0:00:10] (Rcb6)} 186. Ka8 {
[%eval 0,127] [%emt 0:00:00] (Rf5)} Rc7 {[%eval -32639,49] [%emt 0:00:16]} 187.
Rf1 {[%eval -12850,99] [%emt 0:00:00] (Rb2)} Rb3 {[%eval -32639,45] [%emt 0:00:
06] (Rxf7)} 188. Rb1 {[%eval -12850,124] [%emt 0:00:07] (Rf4)} Rc8+ {[%eval
-32639,46] [%emt 0:00:17] (Ra7+)} 189. Ka7 {[%eval -12850,1] [%emt 0:00:00]}
Ra3+ {[%eval -32639,44] [%emt 0:00:08] (Rxb1)} 190. Kb7 {[%eval -12849,95]
[%emt 0:00:07]} Rc4 {[%eval -32639,45] [%emt 0:00:00] (Rc2)} 191. Ra1 {[%eval
-12850,102] [%emt 0:00:08] (Rb6)} Rb4+ {[%eval -32639,42] [%emt 0:00:07] (Rxa1)
} 192. Kc8 {[%eval -12850,106] [%emt 0:00:08] (Kc6)} Rc3+ {[%eval -32639,40]
[%emt 0:00:11] (Rxa1)} 193. Kd7 {[%eval -12850,82] [%emt 0:00:08]} Rb7+ {
[%eval -32639,44] [%emt 0:00:00] (Kxf7)} 194. Kd8 {[%eval -12850,107] [%emt 0:
00:07] (Ke6)} Rb5 {[%eval -32639,41] [%emt 0:00:09] (Rxf7)} 195. Ra7 {[%eval
-12849,103] [%emt 0:00:08] (Kd7)} Rd5+ {[%eval -32639,32] [%emt 0:00:04]} 196.
Rd7 {[%eval -12850,115] [%emt 0:00:00]} Re5 {[%eval -32639,35] [%emt 0:00:14]
(Rxd7+)} 197. Ra7 {[%eval -12849,109] [%emt 0:00:09] (Rd5)} Re2 {[%eval -32639,
30] [%emt 0:00:08] (Rf5)} 198. Rd7 {[%eval -12849,96] [%emt 0:00:10]} Rg3 {
[%eval -32639,28] [%emt 0:00:00] (Rf3)} 199. Rb7 {[%eval -12849,109] [%emt 0:
00:13] (Ra7)} Ra3 {[%eval -32639,31] [%emt 0:00:05] (Rf3)} 200. Rd7 {[%eval
-12849,112] [%emt 0:00:15] (Ra7)} Rb2 {[%eval -32639,24] [%emt 0:00:03] (Re7)}
201. Kc7 {[%eval -12849,94] [%emt 0:00:11] (Rd2)} Rb1 {[%eval -32639,23] [%emt
0:00:52] (Ra7+)} 202. Kc8 {[%eval -12849,102] [%emt 0:00:10] (Rd2)} Ra8+ {
[%eval -12850,22] [%emt 0:00:17] (Rf1)} 203. Kc7 {[%eval -4610,1] [%emt 0:00:
00]} Rf1 {[%eval -12850,25] [%emt 0:00:10] (Ra7+)} 204. Kb7 {[%eval -12849,122]
[%emt 0:00:10] (Rd4)} Ra3 {[%eval -12850,30] [%emt 0:00:09] (Ra4)} 205. Kc6 {
[%eval -12850,125] [%emt 0:00:10] (Rd2)} Rxf7 {[%eval -12850,42] [%emt 0:00:08]
} 206. Rd8+ {[%eval -32729,0] [%emt 0:00:00] (Rxf7+)} Ke7 {[%eval -32729,0]
[%emt 0:00:00]} 207. Rd7+ {[%eval -32731,1] [%emt 0:00:00]} Ke8 {[%eval -32731,
1] [%emt 0:00:00]} 208. Rd5 {[%eval -32733,1] [%emt 0:00:00]} Rc3+ {[%eval
-32733,1] [%emt 0:00:00]} 209. Kd6 {[%eval -32735,0] [%emt 0:00:00]} Rd7+ {
[%eval -32735,1] [%emt 0:00:00]} 210. Ke5 {[%eval -32737,1] [%emt 0:00:00]} Rh3
{[%eval -32737,1] [%emt 0:00:00]} 211. Kd4 {[%eval -32739,0] [%emt 0:00:00]}
Rxd5+ {[%eval -32739,1] [%emt 0:00:00]} 212. Kxd5 {[%eval -32741,1] [%emt 0:00:
00]} Rh4 {[%eval -32741,1] [%emt 0:00:00]} 213. Kd6 {[%eval -32743,0] [%emt 0:
00:00]} Rh5 {[%eval -32743,1] [%emt 0:00:00]} 214. Ke6 {[%eval -32745,1] [%emt
0:00:00]} Ra5 {[%eval -32745,0] [%emt 0:00:00]} 215. Kd6 {[%eval -32747,1]
[%emt 0:00:00]} Kf7 {[%eval -32747,0] [%emt 0:00:00]} 216. Kc6 {[%eval -32749,
0] [%emt 0:00:00]} Ke6 {[%eval -32749,0] [%emt 0:00:00]} 217. Kb6 {[%eval
-32751,1] [%emt 0:00:00]} Re5 {[%eval -32751,0] [%emt 0:00:00]} 218. Kc6 {
[%eval -32753,0] [%emt 0:00:00]} Ke7 {[%eval -32753,1] [%emt 0:00:00]} 219. Kc7
{[%eval -32755,0] [%emt 0:00:00]} Re6 {[%eval -32755,1] [%emt 0:00:00]} 220.
Kb8 {[%eval -32757,0] [%emt 0:00:00]} Kd6 {[%eval -32757,0] [%emt 0:00:00]}
221. Kb7 {[%eval -32759,0] [%emt 0:00:00]} Kd7 {[%eval -32759,1] [%emt 0:00:00]
} 222. Kb8 {[%eval -32761,0] [%emt 0:00:00]} Kc6 {[%eval -32761,1] [%emt 0:00:
00]} 223. Ka7 {[%eval -32763,0] [%emt 0:00:00]} Kc7 {[%eval -32763,0] [%emt 0:
00:00]} 224. Ka8 {[%eval -32765,1] [%emt 0:00:00]} Ra6# {[%eval -32765,1]
[%emt 0:00:00]} 0-1

armFish is not ready yet

It will take some time to get armFish working. The current status of armFish is:

  • no evaluation yet
  • search is written but completely untested
  • written in 'x86 emulation mode' (this is funny because I'm using an x86 machine to emulate arm)
  • Once the x86 -> arm translation has been verified for correctness, I will start to optimize the arm code. It is much easier to optimize correct code than to correct buggy optimized code.

asmFish vs Stockfish

15000 games pgn file with depth 14 games played by ssj.
Below are games in which SF wins and asmFish draws or loses, or SF draws and asmFish loses.
First, 2 pairs of games in which SF wins and asmFish draws. The first pair was taken from the beginning of the pgn file and the second pair was taken from the end. It is interesting that although these pairs were so far apart and they belong to different openings, they are in fact the same as the openings are just transposed. All the moves of the second pair (excluding the transposed openings) are repeats of the first pair. A systematic search in the pgn file showed that there are 54 such pairs of exactly the same games. This means that the set of openings is limited and they repeat at more or less equal intervals.
The different move is 58...Kf7 by SF vs 58...Nd1 by asmFish.

[Event "My Tournament"]
[Site "?"]
[Date "2017.07.02"]
[Round "1"]
[White "asmFishW_2017-06-28_bmi2"]
[Black "stockfish_x64_bmi2_June21ultimaq"]
[Result "1/2-1/2"]
[ECO "A04"]
[Opening "Reti Opening"]
[PlyCount "151"]
[TimeControl "inf"]

1. Nf3 {book} Nc6 {book} 2. e4 {book} e5 {book} 3. Bb5 {book} a6 {book}
4. Ba4 {book} Nf6 {book} 5. O-O {book} Be7 {book} 6. Re1 {book} b5 {book}
7. Bb3 {book} O-O {book} 8. d4 {book} d6 {-0.25/14 0.15s} 9. c3 {+0.16/14 0.12s}
Bg4 {-0.18/14 0.063s} 10. Be3 {+0.16/14 0.13s} Na5 {-0.25/14 0.14s}
11. Bc2 {+0.23/14 0.081s} Nc4 {-0.16/14 0.090s} 12. Bc1 {+0.27/14 0.062s}
Nd7 {-0.27/14 0.092s} 13. b3 {+0.27/14 0.055s} Ncb6 {-0.20/14 0.090s}
14. Be3 {+0.33/14 0.10s} exd4 {-0.17/14 0.11s} 15. cxd4 {+0.37/14 0.041s}
c5 {-0.08/14 0.11s} 16. Nbd2 {+0.11/14 0.15s} cxd4 {-0.08/14 0.039s}
17. Bxd4 {+0.11/14 0.037s} Bf6 {-0.04/14 0.027s} 18. Bxf6 {-0.07/14 0.030s}
Qxf6 {+0.11/14 0.025s} 19. h3 {-0.02/14 0.055s} Bh5 {+0.08/14 0.040s}
20. Qb1 {-0.13/14 0.12s} h6 {+0.17/14 0.13s} 21. a4 {-0.33/14 0.17s}
bxa4 {+0.06/14 0.036s} 22. bxa4 {-0.08/14 0.088s} Rac8 {+0.13/14 0.16s}
23. Ra3 {-0.08/14 0.049s} a5 {+0.09/14 0.11s} 24. Bd3 {-0.07/14 0.092s}
Bg6 {-0.04/14 0.11s} 25. Qa1 {-0.08/14 0.031s} Qxa1 {-0.04/14 0.012s}
26. Raxa1 {0.00/14 0.035s} Nc5 {-0.08/14 0.057s} 27. Bb5 {+0.02/14 0.029s}
Rc7 {-0.13/14 0.040s} 28. Nd4 {+0.06/14 0.083s} d5 {-0.13/14 0.080s}
29. exd5 {+0.10/14 0.039s} Nxd5 {-0.08/14 0.037s} 30. N2b3 {+0.14/14 0.041s}
Nxb3 {0.00/14 0.049s} 31. Nxb3 {+0.07/14 0.023s} Ra8 {0.00/14 0.004s}
32. Re8+ {+0.08/14 0.035s} Rxe8 {-0.04/14 0.020s} 33. Bxe8 {+0.08/14 0.001s}
Nf4 {0.00/14 0.027s} 34. Re1 {+0.08/14 0.019s} Nd3 {-0.08/14 0.027s}
35. Rf1 {+0.08/14 0.004s} Rc2 {-0.04/14 0.024s} 36. Bb5 {+0.10/14 0.026s}
Ra2 {-0.11/14 0.051s} 37. Nxa5 {+0.10/14 0.056s} Nc5 {-0.08/14 0.015s}
38. Nc6 {+0.10/14 0.056s} Nxa4 {-0.11/14 0.011s} 39. Ne7+ {+0.10/14 0.017s}
Kh7 {-0.18/14 0.043s} 40. Nxg6 {+0.09/14 0.037s} fxg6 {-0.09/14 0.024s}
41. Rc1 {+0.24/14 0.022s} Nb6 {-0.12/14 0.028s} 42. Rd1 {+0.12/14 0.034s}
Rb2 {-0.09/14 0.046s} 43. Bc6 {+0.24/14 0.027s} Nc4 {-0.11/14 0.023s}
44. Rd4 {+0.09/14 0.026s} Na3 {-0.41/14 0.063s} 45. g3 {+0.30/14 0.045s}
Nb1 {-0.26/14 0.15s} 46. Rd3 {+0.45/14 0.084s} Nd2 {-0.28/14 0.041s}
47. Kg2 {+0.51/14 0.025s} Nc4 {-0.31/14 0.10s} 48. Rd4 {+0.54/14 0.046s}
Ne3+ {-0.18/14 0.080s} 49. Kf3 {+0.58/14 0.012s} Nf5 {-0.28/14 0.022s}
50. Rd7 {+0.42/14 0.024s} Rb3+ {-0.15/14 0.018s} 51. Kf4 {+0.57/14 0.010s}
Rb2 {-0.57/14 0.029s} 52. f3 {+0.41/14 0.007s} Kg8 {-0.28/14 0.10s}
53. Bd5+ {+0.33/14 0.10s} Kf8 {-0.22/14 0.024s} 54. g4 {+0.31/14 0.034s}
Rb4+ {-0.08/14 0.022s} 55. Ke5 {+0.14/14 0.022s} Ke8 {-0.22/14 0.065s}
56. Rb7 {+0.28/14 0.017s} Rxb7 {-0.28/14 0.024s} 57. Bxb7 {+0.20/14 0.016s}
Ne3 {-0.16/14 0.017s} 58. f4 {+0.34/14 0.036s} Kf7 {-0.32/14 0.052s}
59. Ba6 {+0.21/14 0.014s} Nd1 {-0.32/14 0.020s} 60. Bc4+ {+0.23/14 0.012s}
Kf8 {-0.17/14 0.010s} 61. Be2 {+0.16/14 0.007s} Nf2 {-0.14/14 0.002s}
62. Bf1 {+0.15/14 0.012s} Nd1 {-0.11/14 0.004s} 63. Be2 {+0.18/14 0.014s}
Nf2 {-0.11/14 0.001s} 64. Bf1 {+0.31/14 0.003s} Nd1 {-0.10/14 0.002s}
65. h4 {+0.21/14 0.010s} Ne3 {-0.08/14 0.021s} 66. Bh3 {+0.08/14 0.007s}
Kf7 {-0.08/14 0.007s} 67. g5 {+0.15/14 0.011s} Ke7 {-0.08/14 0.032s}
68. Ke4 {+0.08/14 0.005s} Nc2 {-0.08/14 0.014s} 69. Bg2 {+0.08/14 0.003s}
Ne1 {-0.08/14 0.004s} 70. Bh1 {+0.08/14 0.001s} Ke6 {-0.08/14 0.012s}
71. Ke3 {+0.08/14 0.003s} hxg5 {-0.08/14 0.006s} 72. hxg5 {+0.08/14 0.010s}
Nc2+ {-0.08/14 0.011s} 73. Ke4 {+0.08/14 0.001s} Ne1 {-0.08/14 0.004s}
74. Ke3 {+0.08/14 0.003s} Nc2+ {0.00/14 0.002s} 75. Ke4 {0.00/14 0.004s}
Ne1 {0.00/14 0s} 76. Ke3 {0.00/14 0s, Draw by 3-fold repetition} 1/2-1/2

[Event "My Tournament"]
[Site "?"]
[Date "2017.07.02"]
[Round "1"]
[White "stockfish_x64_bmi2_June21ultimaq"]
[Black "asmFishW_2017-06-28_bmi2"]
[Result "1-0"]
[ECO "A04"]
[Opening "Reti Opening"]
[PlyCount "235"]
[TimeControl "inf"]

1. Nf3 {book} Nc6 {book} 2. e4 {book} e5 {book} 3. Bb5 {book} a6 {book}
4. Ba4 {book} Nf6 {book} 5. O-O {book} Be7 {book} 6. Re1 {book} b5 {book}
7. Bb3 {book} O-O {book} 8. d4 {book} d6 {-0.25/14 0.12s} 9. c3 {+0.16/14 0.14s}
Bg4 {-0.18/14 0.052s} 10. Be3 {+0.16/14 0.14s} Na5 {-0.25/14 0.12s}
11. Bc2 {+0.23/14 0.094s} Nc4 {-0.16/14 0.076s} 12. Bc1 {+0.27/14 0.075s}
Nd7 {-0.27/14 0.079s} 13. b3 {+0.27/14 0.065s} Ncb6 {-0.20/14 0.078s}
14. Be3 {+0.33/14 0.13s} exd4 {-0.17/14 0.090s} 15. cxd4 {+0.37/14 0.049s}
c5 {-0.08/14 0.094s} 16. Nbd2 {+0.11/14 0.18s} cxd4 {-0.08/14 0.033s}
17. Bxd4 {+0.11/14 0.044s} Bf6 {-0.04/14 0.022s} 18. Bxf6 {-0.07/14 0.037s}
Qxf6 {+0.11/14 0.021s} 19. h3 {-0.02/14 0.066s} Bh5 {+0.08/14 0.034s}
20. Qb1 {-0.13/14 0.13s} h6 {+0.17/14 0.11s} 21. a4 {-0.33/14 0.20s}
bxa4 {+0.06/14 0.029s} 22. bxa4 {-0.08/14 0.11s} Rac8 {+0.13/14 0.13s}
23. Ra3 {-0.08/14 0.061s} a5 {+0.09/14 0.084s} 24. Bd3 {-0.07/14 0.11s}
Bg6 {-0.04/14 0.096s} 25. Qa1 {-0.08/14 0.035s} Qxa1 {-0.04/14 0.009s}
26. Raxa1 {0.00/14 0.042s} Nc5 {-0.08/14 0.047s} 27. Bb5 {+0.02/14 0.036s}
Rc7 {-0.13/14 0.036s} 28. Nd4 {+0.06/14 0.096s} d5 {-0.13/14 0.068s}
29. exd5 {+0.10/14 0.050s} Nxd5 {-0.08/14 0.032s} 30. N2b3 {+0.14/14 0.050s}
Nxb3 {0.00/14 0.036s} 31. Nxb3 {+0.07/14 0.027s} Ra8 {0.00/14 0.003s}
32. Re8+ {+0.08/14 0.034s} Rxe8 {-0.04/14 0.016s} 33. Bxe8 {+0.08/14 0.001s}
Nf4 {0.00/14 0.023s} 34. Re1 {+0.08/14 0.024s} Nd3 {-0.08/14 0.022s}
35. Rf1 {+0.08/14 0.005s} Rc2 {-0.04/14 0.020s} 36. Bb5 {+0.10/14 0.028s}
Ra2 {-0.11/14 0.043s} 37. Nxa5 {+0.10/14 0.067s} Nc5 {-0.08/14 0.012s}
38. Nc6 {+0.10/14 0.072s} Nxa4 {-0.11/14 0.009s} 39. Ne7+ {+0.10/14 0.021s}
Kh7 {-0.18/14 0.034s} 40. Nxg6 {+0.09/14 0.045s} fxg6 {-0.09/14 0.020s}
41. Rc1 {+0.24/14 0.027s} Nb6 {-0.12/14 0.023s} 42. Rd1 {+0.12/14 0.043s}
Rb2 {-0.09/14 0.039s} 43. Bc6 {+0.24/14 0.032s} Nc4 {-0.11/14 0.018s}
44. Rd4 {+0.09/14 0.031s} Na3 {-0.41/14 0.053s} 45. g3 {+0.30/14 0.055s}
Nb1 {-0.26/14 0.13s} 46. Rd3 {+0.45/14 0.10s} Nd2 {-0.28/14 0.036s}
47. Kg2 {+0.51/14 0.030s} Nc4 {-0.31/14 0.084s} 48. Rd4 {+0.54/14 0.057s}
Ne3+ {-0.18/14 0.067s} 49. Kf3 {+0.58/14 0.017s} Nf5 {-0.28/14 0.018s}
50. Rd7 {+0.42/14 0.030s} Rb3+ {-0.15/14 0.014s} 51. Kf4 {+0.57/14 0.012s}
Rb2 {-0.57/14 0.024s} 52. f3 {+0.41/14 0.009s} Kg8 {-0.28/14 0.086s}
53. Bd5+ {+0.33/14 0.13s} Kf8 {-0.22/14 0.019s} 54. g4 {+0.31/14 0.042s}
Rb4+ {-0.08/14 0.018s} 55. Ke5 {+0.14/14 0.028s} Ke8 {-0.22/14 0.057s}
56. Rb7 {+0.28/14 0.020s} Rxb7 {-0.28/14 0.019s} 57. Bxb7 {+0.20/14 0.019s}
Ne3 {-0.16/14 0.013s} 58. f4 {+0.34/14 0.043s} Nd1 {-0.17/14 0.088s}
59. g5 {+0.25/14 0.060s} Nf2 {-0.53/14 0.024s} 60. Bg2 {+0.37/14 0.006s}
Nd3+ {-0.48/14 0.007s} 61. Ke4 {+0.28/14 0.007s} Ne1 {-0.50/14 0.006s}
62. Bh1 {+0.23/14 0.005s} Kf7 {-0.42/14 0.007s} 63. Kd4 {+0.52/14 0.011s}
Nc2+ {-0.79/14 0.014s} 64. Kd3 {+0.62/14 0.010s} Na3 {-0.64/14 0.002s}
65. Bd5+ {+0.45/14 0.034s} Ke7 {-0.58/14 0.002s} 66. Be4 {+0.36/14 0.008s}
Kf7 {-0.50/14 0.008s} 67. Kd4 {+0.58/14 0.006s} Nb5+ {-0.83/14 0.009s}
68. Ke5 {+0.38/14 0.007s} Nc3 {-0.74/14 0.008s} 69. Bc2 {+0.58/14 0.007s}
Ne2 {-0.55/14 0.016s} 70. h4 {+0.39/14 0.030s} Nc3 {-0.45/14 0.010s}
71. Bb3+ {+0.70/14 0.013s} Ke7 {-0.31/14 0.006s} 72. Bc2 {+0.54/14 0.006s}
Kf7 {-0.33/14 0.007s} 73. Bd3 {+0.32/14 0.011s} Na4 {-0.54/14 0.007s}
74. Kd6 {+0.69/14 0.011s} Nb6 {-0.58/14 0.014s} 75. Ba6 {+0.58/14 0.007s}
Na4 {-0.66/14 0.003s} 76. Bc4+ {+0.50/14 0.009s} Kf8 {-0.50/14 0.003s}
77. Bb5 {+0.48/14 0.009s} Nc3 {-0.50/14 0.001s} 78. Bd3 {+0.31/14 0.005s}
Kf7 {-0.50/14 0s} 79. Bc4+ {+0.31/14 0.005s} Kf8 {-0.45/14 0.003s}
80. Bd3 {+0.63/14 0.004s} Kf7 {-0.45/14 0s} 81. Bc4+ {+0.29/14 0.007s}
Kf8 {-0.45/14 0s} 82. Ke6 {+0.28/14 0.002s} Ne4 {-0.45/14 0.005s}
83. Bb5 {+0.28/14 0.008s} Nc5+ {-0.45/14 0.014s} 84. Kd6 {+0.22/14 0.003s}
Nb7+ {-0.45/14 0.003s} 85. Kc6 {+0.57/14 0.017s} Na5+ {-0.64/14 0.010s}
86. Kd6 {+0.72/14 0.005s} Nb3 {-0.45/14 0.004s} 87. Bd3 {+0.91/14 0.010s}
Nd4 {-1.23/14 0.011s} 88. Bxg6 {+0.90/14 0.005s} Nf3 {-1.07/14 0.002s}
89. Be4 {+0.92/14 0.009s} Nxh4 {-0.78/14 0.003s} 90. g6 {+1.21/14 0.009s}
h5 {-1.01/14 0.005s} 91. Kd7 {+1.52/14 0.006s} Nxg6 {-1.33/14 0.002s}
92. Bxg6 {+1.42/14 0.004s} h4 {-1.50/14 0.003s} 93. Bf5 {+1.76/14 0.003s}
Kf7 {-2.17/14 0.008s} 94. Bg4 {+2.05/14 0.007s} Kf6 {-2.13/14 0.002s}
95. Ke8 {+2.20/14 0.004s} Kg6 {-2.21/14 0.003s} 96. Ke7 {+2.50/14 0.003s}
Kh6 {-2.33/14 0.001s} 97. Kf7 {+2.66/14 0.005s} Kh7 {-2.33/14 0.001s}
98. Ke6 {+2.66/14 0.002s} Kg6 {-2.33/14 0.001s} 99. Ke5 {+2.66/14 0.002s}
h3 {-2.80/14 0.008s} 100. Bxh3 {+3.30/14 0.007s} Kh5 {-3.66/14 0.008s}
101. Kf5 {+3.73/14 0.005s} Kh6 {-4.00/14 0.002s} 102. Bg4 {+3.85/14 0.002s}
Kh7 {-4.02/14 0.005s} 103. Kg5 {+4.14/14 0.003s} Kg8 {-4.16/14 0.001s}
104. Kg6 {+13.16/14 0.004s} Kh8 {-13.19/14 0.002s} 105. Bf3 {+13.54/14 0.001s}
Kg8 {-13.58/14 0.001s} 106. Be4 {+50.95/14 0.002s} Kh8 {-50.87/14 0.001s}
107. Kf7 {+51.11/14 0.004s} g6 {-50.91/14 0.005s} 108. Kxg6 {+54.44/14 0.004s}
Kg8 {-54.36/14 0.006s} 109. f5 {+54.44/14 0.004s} Kf8 {-M20/14 0.003s}
110. f6 {+54.52/14 0.006s} Kg8 {-M16/14 0.001s} 111. f7+ {+M23/14 0.001s}
Kf8 {-M14/14 0.001s} 112. Bf3 {+M13/14 0.004s} Ke7 {-M12/14 0.002s}
113. Kg7 {+M11/14 0.003s} Kd6 {-M10/14 0.001s} 114. f8=Q+ {+M9/14 0.002s}
Kd7 {-M8/14 0.001s} 115. Qc5 {+M7/14 0.003s} Ke8 {-M6/14 0s}
116. Bg4 {+M5/14 0.001s} Kd8 {-M4/14 0s} 117. Kf6 {+M3/14 0.001s}
Ke8 {-M2/14 0s} 118. Qe7# {+M1/14 0s, White mates} 1-0
=======================================================
[Event "My Tournament"]
[Site "?"]
[Date "2017.07.03"]
[Round "1"]
[White "asmFishW_2017-06-28_bmi2"]
[Black "stockfish_x64_bmi2_June21ultimaq"]
[Result "1/2-1/2"]
[ECO "C88"]
[Opening "Ruy Lopez"]
[PlyCount "151"]
[TimeControl "inf"]
[Variation "Closed, 7...O-O"]

1. e4 {book} e5 {book} 2. Nf3 {book} Nc6 {book} 3. Bb5 {book} a6 {book}
4. Ba4 {book} Nf6 {book} 5. O-O {book} Be7 {book} 6. Re1 {book} b5 {book}
7. Bb3 {book} O-O {book} 8. d4 {book} d6 {-0.25/14 0.15s} 9. c3 {+0.16/14 0.12s}
Bg4 {-0.18/14 0.065s} 10. Be3 {+0.16/14 0.13s} Na5 {-0.25/14 0.14s}
11. Bc2 {+0.23/14 0.082s} Nc4 {-0.16/14 0.092s} 12. Bc1 {+0.27/14 0.064s}
Nd7 {-0.27/14 0.094s} 13. b3 {+0.27/14 0.055s} Ncb6 {-0.20/14 0.092s}
14. Be3 {+0.33/14 0.10s} exd4 {-0.17/14 0.11s} 15. cxd4 {+0.37/14 0.041s}
c5 {-0.08/14 0.12s} 16. Nbd2 {+0.11/14 0.16s} cxd4 {-0.08/14 0.044s}
17. Bxd4 {+0.11/14 0.041s} Bf6 {-0.04/14 0.028s} 18. Bxf6 {-0.07/14 0.030s}
Qxf6 {+0.11/14 0.028s} 19. h3 {-0.02/14 0.062s} Bh5 {+0.08/14 0.044s}
20. Qb1 {-0.13/14 0.11s} h6 {+0.17/14 0.14s} 21. a4 {-0.33/14 0.17s}
bxa4 {+0.06/14 0.038s} 22. bxa4 {-0.08/14 0.092s} Rac8 {+0.13/14 0.16s}
23. Ra3 {-0.08/14 0.051s} a5 {+0.09/14 0.11s} 24. Bd3 {-0.07/14 0.095s}
Bg6 {-0.04/14 0.12s} 25. Qa1 {-0.08/14 0.031s} Qxa1 {-0.04/14 0.012s}
26. Raxa1 {0.00/14 0.036s} Nc5 {-0.08/14 0.059s} 27. Bb5 {+0.02/14 0.029s}
Rc7 {-0.13/14 0.042s} 28. Nd4 {+0.06/14 0.083s} d5 {-0.13/14 0.082s}
29. exd5 {+0.10/14 0.041s} Nxd5 {-0.08/14 0.038s} 30. N2b3 {+0.14/14 0.043s}
Nxb3 {0.00/14 0.044s} 31. Nxb3 {+0.07/14 0.023s} Ra8 {0.00/14 0.004s}
32. Re8+ {+0.08/14 0.030s} Rxe8 {-0.04/14 0.021s} 33. Bxe8 {+0.08/14 0.001s}
Nf4 {0.00/14 0.029s} 34. Re1 {+0.08/14 0.020s} Nd3 {-0.08/14 0.028s}
35. Rf1 {+0.08/14 0.004s} Rc2 {-0.04/14 0.025s} 36. Bb5 {+0.10/14 0.023s}
Ra2 {-0.11/14 0.049s} 37. Nxa5 {+0.10/14 0.057s} Nc5 {-0.08/14 0.015s}
38. Nc6 {+0.10/14 0.059s} Nxa4 {-0.11/14 0.012s} 39. Ne7+ {+0.10/14 0.017s}
Kh7 {-0.18/14 0.040s} 40. Nxg6 {+0.09/14 0.037s} fxg6 {-0.09/14 0.024s}
41. Rc1 {+0.24/14 0.023s} Nb6 {-0.12/14 0.029s} 42. Rd1 {+0.12/14 0.034s}
Rb2 {-0.09/14 0.047s} 43. Bc6 {+0.24/14 0.026s} Nc4 {-0.11/14 0.023s}
44. Rd4 {+0.09/14 0.027s} Na3 {-0.41/14 0.067s} 45. g3 {+0.30/14 0.050s}
Nb1 {-0.26/14 0.15s} 46. Rd3 {+0.45/14 0.085s} Nd2 {-0.28/14 0.041s}
47. Kg2 {+0.51/14 0.025s} Nc4 {-0.31/14 0.10s} 48. Rd4 {+0.54/14 0.047s}
Ne3+ {-0.18/14 0.081s} 49. Kf3 {+0.58/14 0.013s} Nf5 {-0.28/14 0.022s}
50. Rd7 {+0.42/14 0.024s} Rb3+ {-0.15/14 0.018s} 51. Kf4 {+0.57/14 0.010s}
Rb2 {-0.57/14 0.029s} 52. f3 {+0.41/14 0.007s} Kg8 {-0.28/14 0.10s}
53. Bd5+ {+0.33/14 0.10s} Kf8 {-0.22/14 0.024s} 54. g4 {+0.31/14 0.034s}
Rb4+ {-0.08/14 0.022s} 55. Ke5 {+0.14/14 0.023s} Ke8 {-0.22/14 0.066s}
56. Rb7 {+0.28/14 0.017s} Rxb7 {-0.28/14 0.025s} 57. Bxb7 {+0.20/14 0.019s}
Ne3 {-0.16/14 0.021s} 58. f4 {+0.34/14 0.040s} Kf7 {-0.32/14 0.054s}
59. Ba6 {+0.21/14 0.015s} Nd1 {-0.32/14 0.021s} 60. Bc4+ {+0.23/14 0.012s}
Kf8 {-0.17/14 0.012s} 61. Be2 {+0.16/14 0.007s} Nf2 {-0.14/14 0.002s}
62. Bf1 {+0.15/14 0.012s} Nd1 {-0.11/14 0.004s} 63. Be2 {+0.18/14 0.015s}
Nf2 {-0.11/14 0.001s} 64. Bf1 {+0.31/14 0.003s} Nd1 {-0.10/14 0.002s}
65. h4 {+0.21/14 0.010s} Ne3 {-0.08/14 0.022s} 66. Bh3 {+0.08/14 0.008s}
Kf7 {-0.08/14 0.006s} 67. g5 {+0.15/14 0.013s} Ke7 {-0.08/14 0.033s}
68. Ke4 {+0.08/14 0.005s} Nc2 {-0.08/14 0.014s} 69. Bg2 {+0.08/14 0.003s}
Ne1 {-0.08/14 0.004s} 70. Bh1 {+0.08/14 0.001s} Ke6 {-0.08/14 0.012s}
71. Ke3 {+0.08/14 0.003s} hxg5 {-0.08/14 0.006s} 72. hxg5 {+0.08/14 0.011s}
Nc2+ {-0.08/14 0.011s} 73. Ke4 {+0.08/14 0.001s} Ne1 {-0.08/14 0.004s}
74. Ke3 {+0.08/14 0.003s} Nc2+ {0.00/14 0.002s} 75. Ke4 {0.00/14 0.004s}
Ne1 {0.00/14 0s} 76. Ke3 {0.00/14 0s, Draw by 3-fold repetition} 1/2-1/2

[Event "My Tournament"]
[Site "?"]
[Date "2017.07.03"]
[Round "1"]
[White "stockfish_x64_bmi2_June21ultimaq"]
[Black "asmFishW_2017-06-28_bmi2"]
[Result "1-0"]
[ECO "C88"]
[Opening "Ruy Lopez"]
[PlyCount "235"]
[TimeControl "inf"]
[Variation "Closed, 7...O-O"]

1. e4 {book} e5 {book} 2. Nf3 {book} Nc6 {book} 3. Bb5 {book} a6 {book}
4. Ba4 {book} Nf6 {book} 5. O-O {book} Be7 {book} 6. Re1 {book} b5 {book}
7. Bb3 {book} O-O {book} 8. d4 {book} d6 {-0.25/14 0.12s} 9. c3 {+0.16/14 0.14s}
Bg4 {-0.18/14 0.052s} 10. Be3 {+0.16/14 0.14s} Na5 {-0.25/14 0.12s}
11. Bc2 {+0.23/14 0.095s} Nc4 {-0.16/14 0.076s} 12. Bc1 {+0.27/14 0.074s}
Nd7 {-0.27/14 0.078s} 13. b3 {+0.27/14 0.065s} Ncb6 {-0.20/14 0.076s}
14. Be3 {+0.33/14 0.12s} exd4 {-0.17/14 0.090s} 15. cxd4 {+0.37/14 0.050s}
c5 {-0.08/14 0.093s} 16. Nbd2 {+0.11/14 0.18s} cxd4 {-0.08/14 0.032s}
17. Bxd4 {+0.11/14 0.046s} Bf6 {-0.04/14 0.022s} 18. Bxf6 {-0.07/14 0.036s}
Qxf6 {+0.11/14 0.021s} 19. h3 {-0.02/14 0.066s} Bh5 {+0.08/14 0.033s}
20. Qb1 {-0.13/14 0.13s} h6 {+0.17/14 0.12s} 21. a4 {-0.33/14 0.20s}
bxa4 {+0.06/14 0.030s} 22. bxa4 {-0.08/14 0.11s} Rac8 {+0.13/14 0.13s}
23. Ra3 {-0.08/14 0.061s} a5 {+0.09/14 0.089s} 24. Bd3 {-0.07/14 0.11s}
Bg6 {-0.04/14 0.10s} 25. Qa1 {-0.08/14 0.038s} Qxa1 {-0.04/14 0.010s}
26. Raxa1 {0.00/14 0.043s} Nc5 {-0.08/14 0.050s} 27. Bb5 {+0.02/14 0.036s}
Rc7 {-0.13/14 0.035s} 28. Nd4 {+0.06/14 0.10s} d5 {-0.13/14 0.069s}
29. exd5 {+0.10/14 0.049s} Nxd5 {-0.08/14 0.033s} 30. N2b3 {+0.14/14 0.052s}
Nxb3 {0.00/14 0.037s} 31. Nxb3 {+0.07/14 0.028s} Ra8 {0.00/14 0.003s}
32. Re8+ {+0.08/14 0.035s} Rxe8 {-0.04/14 0.017s} 33. Bxe8 {+0.08/14 0.001s}
Nf4 {0.00/14 0.023s} 34. Re1 {+0.08/14 0.024s} Nd3 {-0.08/14 0.023s}
35. Rf1 {+0.08/14 0.005s} Rc2 {-0.04/14 0.020s} 36. Bb5 {+0.10/14 0.027s}
Ra2 {-0.11/14 0.040s} 37. Nxa5 {+0.10/14 0.066s} Nc5 {-0.08/14 0.012s}
38. Nc6 {+0.10/14 0.068s} Nxa4 {-0.11/14 0.009s} 39. Ne7+ {+0.10/14 0.021s}
Kh7 {-0.18/14 0.033s} 40. Nxg6 {+0.09/14 0.044s} fxg6 {-0.09/14 0.020s}
41. Rc1 {+0.24/14 0.026s} Nb6 {-0.12/14 0.023s} 42. Rd1 {+0.12/14 0.041s}
Rb2 {-0.09/14 0.039s} 43. Bc6 {+0.24/14 0.032s} Nc4 {-0.11/14 0.018s}
44. Rd4 {+0.09/14 0.031s} Na3 {-0.41/14 0.052s} 45. g3 {+0.30/14 0.055s}
Nb1 {-0.26/14 0.13s} 46. Rd3 {+0.45/14 0.10s} Nd2 {-0.28/14 0.035s}
47. Kg2 {+0.51/14 0.031s} Nc4 {-0.31/14 0.083s} 48. Rd4 {+0.54/14 0.056s}
Ne3+ {-0.18/14 0.067s} 49. Kf3 {+0.58/14 0.015s} Nf5 {-0.28/14 0.018s}
50. Rd7 {+0.42/14 0.030s} Rb3+ {-0.15/14 0.015s} 51. Kf4 {+0.57/14 0.012s}
Rb2 {-0.57/14 0.024s} 52. f3 {+0.41/14 0.009s} Kg8 {-0.28/14 0.086s}
53. Bd5+ {+0.33/14 0.13s} Kf8 {-0.22/14 0.020s} 54. g4 {+0.31/14 0.042s}
Rb4+ {-0.08/14 0.018s} 55. Ke5 {+0.14/14 0.028s} Ke8 {-0.22/14 0.055s}
56. Rb7 {+0.28/14 0.021s} Rxb7 {-0.28/14 0.020s} 57. Bxb7 {+0.20/14 0.019s}
Ne3 {-0.16/14 0.014s} 58. f4 {+0.34/14 0.044s} Nd1 {-0.17/14 0.089s}
59. g5 {+0.25/14 0.058s} Nf2 {-0.53/14 0.024s} 60. Bg2 {+0.37/14 0.006s}
Nd3+ {-0.48/14 0.007s} 61. Ke4 {+0.28/14 0.007s} Ne1 {-0.50/14 0.006s}
62. Bh1 {+0.23/14 0.005s} Kf7 {-0.42/14 0.007s} 63. Kd4 {+0.52/14 0.011s}
Nc2+ {-0.79/14 0.014s} 64. Kd3 {+0.62/14 0.010s} Na3 {-0.64/14 0.002s}
65. Bd5+ {+0.45/14 0.034s} Ke7 {-0.58/14 0.002s} 66. Be4 {+0.36/14 0.008s}
Kf7 {-0.50/14 0.008s} 67. Kd4 {+0.58/14 0.006s} Nb5+ {-0.83/14 0.009s}
68. Ke5 {+0.38/14 0.007s} Nc3 {-0.74/14 0.008s} 69. Bc2 {+0.58/14 0.007s}
Ne2 {-0.55/14 0.016s} 70. h4 {+0.39/14 0.029s} Nc3 {-0.45/14 0.010s}
71. Bb3+ {+0.70/14 0.013s} Ke7 {-0.31/14 0.006s} 72. Bc2 {+0.54/14 0.006s}
Kf7 {-0.33/14 0.007s} 73. Bd3 {+0.32/14 0.011s} Na4 {-0.54/14 0.007s}
74. Kd6 {+0.69/14 0.011s} Nb6 {-0.58/14 0.014s} 75. Ba6 {+0.58/14 0.007s}
Na4 {-0.66/14 0.003s} 76. Bc4+ {+0.50/14 0.009s} Kf8 {-0.50/14 0.003s}
77. Bb5 {+0.48/14 0.009s} Nc3 {-0.50/14 0.001s} 78. Bd3 {+0.31/14 0.005s}
Kf7 {-0.50/14 0s} 79. Bc4+ {+0.31/14 0.005s} Kf8 {-0.45/14 0.003s}
80. Bd3 {+0.63/14 0.004s} Kf7 {-0.45/14 0s} 81. Bc4+ {+0.29/14 0.007s}
Kf8 {-0.45/14 0s} 82. Ke6 {+0.28/14 0.002s} Ne4 {-0.45/14 0.005s}
83. Bb5 {+0.28/14 0.008s} Nc5+ {-0.45/14 0.014s} 84. Kd6 {+0.22/14 0.003s}
Nb7+ {-0.45/14 0.003s} 85. Kc6 {+0.57/14 0.017s} Na5+ {-0.64/14 0.010s}
86. Kd6 {+0.72/14 0.005s} Nb3 {-0.45/14 0.004s} 87. Bd3 {+0.91/14 0.010s}
Nd4 {-1.23/14 0.011s} 88. Bxg6 {+0.90/14 0.005s} Nf3 {-1.07/14 0.002s}
89. Be4 {+0.92/14 0.009s} Nxh4 {-0.78/14 0.003s} 90. g6 {+1.21/14 0.009s}
h5 {-1.01/14 0.005s} 91. Kd7 {+1.52/14 0.006s} Nxg6 {-1.33/14 0.002s}
92. Bxg6 {+1.42/14 0.004s} h4 {-1.50/14 0.003s} 93. Bf5 {+1.76/14 0.003s}
Kf7 {-2.17/14 0.008s} 94. Bg4 {+2.05/14 0.007s} Kf6 {-2.13/14 0.002s}
95. Ke8 {+2.20/14 0.004s} Kg6 {-2.21/14 0.003s} 96. Ke7 {+2.50/14 0.003s}
Kh6 {-2.33/14 0.002s} 97. Kf7 {+2.66/14 0.005s} Kh7 {-2.33/14 0.001s}
98. Ke6 {+2.66/14 0.002s} Kg6 {-2.33/14 0.001s} 99. Ke5 {+2.66/14 0.002s}
h3 {-2.80/14 0.008s} 100. Bxh3 {+3.30/14 0.007s} Kh5 {-3.66/14 0.008s}
101. Kf5 {+3.73/14 0.006s} Kh6 {-4.00/14 0.002s} 102. Bg4 {+3.85/14 0.002s}
Kh7 {-4.02/14 0.004s} 103. Kg5 {+4.14/14 0.003s} Kg8 {-4.16/14 0.001s}
104. Kg6 {+13.16/14 0.004s} Kh8 {-13.19/14 0.002s} 105. Bf3 {+13.54/14 0.001s}
Kg8 {-13.58/14 0.001s} 106. Be4 {+50.95/14 0.002s} Kh8 {-50.87/14 0.001s}
107. Kf7 {+51.11/14 0.004s} g6 {-50.91/14 0.005s} 108. Kxg6 {+54.44/14 0.004s}
Kg8 {-54.36/14 0.006s} 109. f5 {+54.44/14 0.004s} Kf8 {-M20/14 0.003s}
110. f6 {+54.52/14 0.006s} Kg8 {-M16/14 0.001s} 111. f7+ {+M23/14 0.001s}
Kf8 {-M14/14 0.001s} 112. Bf3 {+M13/14 0.004s} Ke7 {-M12/14 0.002s}
113. Kg7 {+M11/14 0.003s} Kd6 {-M10/14 0.001s} 114. f8=Q+ {+M9/14 0.002s}
Kd7 {-M8/14 0.001s} 115. Qc5 {+M7/14 0.002s} Ke8 {-M6/14 0s}
116. Bg4 {+M5/14 0.001s} Kd8 {-M4/14 0s} 117. Kf6 {+M3/14 0s} Ke8 {-M2/14 0s}
118. Qe7# {+M1/14 0s, White mates} 1-0

messy commit on 3/9/2017

So I downloaded my fork to my windows box and made some (small) changes. I then uploaded the changed files via the online interface. Unfortunately, the diff checker seems to think that the whole file was changed, but only a small portion of each file changed.
Could it be the line endings?

Must be fixed: Failure to manage time-controls! - Games often lost on draw-positions

There must be a problem with management of time-controls - asmFishW (v2017-05-15) repeatedly loses games (while it has more material and position advantage) just because of flag!

The engine plays a drawn position (with about 1 min left on the clock) and tries to win it (without real attempt), until it finally loses on time-controls(!) For example, see this hillarious game (asmFishW plays black pieces):

Game-lost-on-Draw-Position.pgn.zip

Even the weakest player could not have lost this game, because Black could (and should) have simply given away its pieces to make it a draw โ€“ by chess rules!

Final position: (Game was played with 5-men Syzygy tables.)
final position black loses

  • Black (asmFish) managed to lose this position on time-controls.

armFish can play chess!

I decided to try pychess, and it turns out you can run engines via emulators like qemu and wine, which is not an emulator. It would be nice to have others try it on their systems (hopefully real arm hardware) and post any issues here.
Here are the approximate speeds of the engines I tested on a linux box:

armfish: 200knps in qemu
asmfish DEBUG: 300knps
asmfish: 1700knps
stockfish 3: 2600knps

armfish didn't do very well against asmfish or its debug version, so I tried it against stockfish 3. It won both as white and as black! I am going to assume this means that the basic game mechanics are working in armfish. I'm now going to learn python and make a python script for testing random positions in stockfish/asmfish/armfish and making sure the output is 100% identical.

Here is the win as black if you are interested:

[Event "Local Event"]
[Site "Local Site"]
[Date "2017.07.16"]
[Round "1"]
[White "Stockfish 3 64bit SSE4.2"]
[Black "armFish"]
[Result "0-1"]
[ECO "D38"]
[TimeControl "360+1"]
[Time "20:07:00"]
[WhiteClock "0:00:04.491"]
[BlackClock "0:01:19.914"]
[PlyCount "100"]

1. Nf3 Nf6 2. d4 d5 3. c4 e6 4. Nc3 Bb4 5. Bd2 O-O 6. e3 b6 7. cxd5 exd5 8. Bd3
Nbd7 9. Qa4 a5 10. O-O Bb7 11. Rfc1 Re8 12. Bb5 Bd6 13. Nh4 Rc8 14. Nf5 Bf8 15.
Ne2 Re6 16. Nf4 c6 17. Nh6+ gxh6 18. Nxe6 fxe6 19. Bxc6 Bxc6 20. Rxc6 Rxc6 21.
Qxc6 Kf7 22. f3 Qb8 23. g3 e5 24. Rc1 Qd6 25. Qb5 Qe6 26. Rc6 Qf5 27. Kg2 h5
28. h3 Be7 29. a3 e4 30. f4 h4 31. g4 Nxg4 32. hxg4 Qxg4+ 33. Kf1 Nf6 34. Rxf6+
Kxf6 35. Qxb6+ Kf7 36. Qb5 Qd1+ 37. Be1 Qf3+ 38. Bf2 Qh5 39. Ke1 h3 40. b3 h2
41. Qf1 h1=Q 42. Qxh1 Qxh1+ 43. Ke2 Qf3+ 44. Kf1 Bh4 45. Ke1 Bxf2+ 46. Kd2
Bxe3+ 47. Kc2 Qe2+ 48. Kb1 Qd1+ 49. Ka2 Bxd4 50. a4 Qa1# 0-1

Option NodeAffinity, how to set up?

Hello Ladies and Gentlemen

I have a machine which has 2 cpu on motherboard. (2 x E5-2697A v4) . Each cpu has 16 cores , so 32 cpu in total (NO hyperthreading). If I want to make asmfish using only 16 cores how can I make it, that it is using all those 16 cores from one cpu, means node 0 or node 1?

Any hint appreciated.
C.K.

make command fail on linux (latest version)

As title suggests, the make command ends prematurely at compiling matefish.

$ make
./asmFish/fasm "asmFish/asmFishW_base.asm" -m 50000 "Windows/asmFishW_2017-06-29_base.exe"
flat assembler version 1.71.54 (50000 kilobytes memory)
5 passes, 0.1 seconds, 123904 bytes.
./asmFish/fasm "asmFish/asmFishW_popcnt.asm" -m 50000 "Windows/asmFishW_2017-06-29_popcnt.exe"
flat assembler version 1.71.54 (50000 kilobytes memory)
5 passes, 0.1 seconds, 116224 bytes.
./asmFish/fasm "asmFish/asmFishW_bmi2.asm" -m 50000 "Windows/asmFishW_2017-06-29_bmi2.exe"
flat assembler version 1.71.54 (50000 kilobytes memory)
5 passes, 0.1 seconds, 111616 bytes.
./asmFish/fasm "asmFish/asmFishL_base.asm" -m 50000 "Linux/asmFishL_2017-06-29_base"
flat assembler version 1.71.54 (50000 kilobytes memory)
4 passes, 0.1 seconds, 120722 bytes.
./asmFish/fasm "asmFish/asmFishL_popcnt.asm" -m 50000 "Linux/asmFishL_2017-06-29_popcnt"
flat assembler version 1.71.54 (50000 kilobytes memory)
4 passes, 0.1 seconds, 113634 bytes.
./asmFish/fasm "asmFish/asmFishL_bmi2.asm" -m 50000 "Linux/asmFishL_2017-06-29_bmi2"
flat assembler version 1.71.54 (50000 kilobytes memory)
4 passes, 0.1 seconds, 109054 bytes.
./asmFish/fasm "asmFish/mateFishW_base.asm" -m 50000 "Matefinder/mateFishW_2017-06-29_base.exe"
flat assembler version 1.71.54 (50000 kilobytes memory)
error: write failed.
make: *** [makefile:9: all] Error 255

Help request

Need help with the patch "Keep pawns on both flanks" by snicolet

Strange mate score of asmFishW_2017-03-28_popcnt.exe

info depth 16 seldepth 26 multipv 3 time 6873 nps 1239588 score mate -2147483647 nodes 8519690 tbhits 0 hashfull 267 pv b2b4

score mate -2147483647

setoption name Hash value 256
setoption name Threads value 1
setoption name MultiPV value 5
isready
info string hash set to 256 MB no large pages
readyok
ucinewgame
position fen r1bqr1k1/pp3ppp/1bpp1nn1/4p3/3PP3/2PB1N1P/PP1N1PP1/R1BQR1K1 w - - 0 12
go infinite

[...]

Limit Book Depth

The polyglot book support is amazing. It's nice to have the fastest engine and the best features. I write my own custom polyglot books, and there is one more feature (maybe two) I would absolutely love to have. Could you have an option to limit how much you use the book? The naive way is just to say don't use it after say 40 ply. But what I actually want is to do some probing to see the max depth left in the tree, because if there are variations 20 ply deep still left in the tree, it is probably a strong move, but if the depth left in the tree is 2, I would want my engine to take over in long games.

The other idea is related to it, can't I be pondering while I am in book? Especially when I get to the end of my book and play the last move in it, I shouldn't have to wait for his response to start thinking. This would be very helpful for faster games using big hash tables since it takes several seconds to initialize and get up to speed on my machine.

ArmFish updates

@tthsqe12, would you like me to make the new updates of armFish to show changes and not the whole files deleted / added ?

Please review new patch

During the weekend, I applied the latest SF patch Simplify TT penalty stat (#980) which consisted of only deleting 2 lines (SearchMacros.asm:1653-54) involving the condition on alpha. Bench corresponds (5941174).
@muxel, @tthsqe12, please review if this is correct and sufficient.

syzygy code is still dirty

I downloaded the last version of cfish from syzygy1's repo.
The following actions will crash cfish:

  1. set syzygypath to valid location
  2. set position so that search will use tbs
  3. run the search
  4. reset syzygypath
  5. quit
    As it crashes on 5, it looks like ronald was not careful about the memory management. I will see what can be done.

asmfish also would crash from the same issue (freeing a free'ed pointer) but there is a different bug preventing that.

Remove minimum to contribution from king danger to score

This patch seemed straightforward and I made it by removing 3 lines of code. The bench is the same as that of the respective patch in Stockfish. However, ssj at chatwing consistently obtains worse results with this patch than without it so began to doubt if I have done it right.
Moha, can you look into it and correct if wrong? 1c8e117 in AF and b258b4f in SF

Windows performance on 8-node machine

Hello,
I noticed that Asmfish has slower nodespeed on 64Cores/8 Numa Nodes than CFish, Asmfish shows about 50000kN/s, where Cfish has 60000+kN/s. It's strange because single thread performance is higher for AsmFish.
Are you interesting in finding out the reason?
If yes, I would suggest, that I make several bench runs for CFish (latest version January this year) and compare it with AsmFish from this time, for 1 thread, 2, threads, 4, 8, 16, 32, 64, or whatever you suggest.
Also in CFish there is a possibility to turn off NUMA functionality, so I could also make bench runs when NUMA is turned off.
best regards

Network asmFish can't compile

I merged the network asmFish from the isolated repository https://github.com/tthsqe12/asm to branch 'network' of the main repository: https://github.com/lantonov/asmFish/tree/network. However, it could not compile with the error:

     flat assembler  version 1.71.57  (50000 kilobytes memory)
     asmFish\guts/Uci.asm [116]:
     GD String, 'processing cmd line command: '
     processed: GD String,'processing cmd line command: '
     error: illegal instruction.

I checked lest this was an artifact of the merging process, but it is not: files downloaded from the original repository https://github.com/tthsqe12/asm as a zip file, and unzipped on the HD, give the same error when trying to compile. I think some definition or macro upstream is missing.

Change definition of "weak" in threats calculation

In Evaluate.asm:942-953

		mov   r8, PiecesThem
		mov   r9, PiecesPawn
		and   r9, r8
		xor   r8, r9
		mov   r9, qword[.ei.attackedBy+8*(8*Them+Pawn)]
		and   r8, r9
	; r8 = defended
	       andn   r9, r9, PiecesThem
		and   r9, AttackedByUs
	; r9 = weak
		 or   r8, r9
	; r8 = defended | weak

we have to insert somehow qword[.ei.attackedBy2+8*Us] and qword[.ei.attackedBy2+8*Them] but the exact commands and registers are a bit unclear to me.

Problem with the work of the polybook.bin in the base versions.

The book itself is beautifully occurs providing you instructions, but, alas, neither nor pedantFishW base asmFishW base when this option is enabled in the settings of the uci is absolutely not use own book in the gui (fritz11 and arena 3.5.1), whereas in Komodo 10.1 64-bit , Stockfish 8 64 polybook.bin instantly responds to retaliatory moves. Is it possible to fix this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.