Help - can't clear bug with tt-move.

Discussion of chess software programming and technical issues.

Moderator: Ras

Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Help - can't clear bug with tt-move.

Post by Chan Rasjid »

Hello,

I just discover a ttmove bug in my program and has no clue where the problem lies.

I have checked that every bestmove stored in the TT is ok with a call to a function is_move_available(bestmove, side) (this generates the move list using the actual generator and checks that the move is in the list); so the bestmove seems ok at the point of storehash(). This is confirmed in debug auto play and the relevant assert (codes below) passes without being triggered (with many games). The problem arises (easily) in real matches with another engine - the hashed ttmove is sometimes not available; also the piece type could be 0 which is a bug.

Maybe someone with a nose to smell out bugs can help.

Best Regards,
Rasjid.

Code: Select all

bool probehash(ttdata_t *tt, const int depth, const int ply, const int side) {
    ttentry_t *p, *pTT = transpositionTable + (pstack->hash & ttIndexMask & ~3);
    u64 signature = (pstack->hash & HASH_MASK) | matindex;
    assert(((u64)pTT) % 64 == 0);
    depth <= 0 ? ++numprobeqs : ++numprobe;
    assert(tt->move == 0);
    /* pTT is 1st element of 4-element bucket aligned at 64-byte address */
    for (p = pTT + 4; (p--) > pTT;) {
        if (PROBE_HASH_FAILS(p, signature));
        else {// hash hit
            pstack->probehit = 1;
            pstack->probehit_index = (p - pTT);
            tt->depth = PROBE_DEPTH(p);
            tt->move = PROBE_MOVE(p);
            assert(tt->depth >= 0 && tt->depth <= MAX_DEPTH);
            assert(tt->move && IS_MOVE_EP(tt->move) ? pstack->epRights: 1);
            assert(tt->move && IS_MOVE_EP(tt->move) ? TO(tt->move) == pstack->ep : 1);
            assert(tt->move ? FROM(tt->move) >= 0 && FROM(tt->move) <= 63: 1);
            assert(tt->move ? TO(tt->move) >= 0 && TO(tt->move) <= 63: 1);
            assert(tt->move ? MOVE_PC(tt->move) >= 1 && MOVE_PC(tt->move) <= 6 : 1);
            // this assert clear in auto play games
            assert(tt->move ? is_move_available(tt->move, side) : 1);
#if 1
            if (tt->move) {
                char buf[8];
                if (is_move_available(tt->move, side)) {
                   sendlog("OK ttmove\n");
                } else {
                   //fails in actual matches in release  mode; pc could be  0 which is a bug
                   sendlog("!!!HASH ERROR ttmove\n");
                   sendlog("pc %d, from %d, to %d, %s\n", MOVE_PC(tt->move),
                           FROM(tt->move), TO(tt->move) , move_string(tt->move, buf));
                }
            }
#endif
            // only 1 slot hit
            assert(p - 1 >= pTT ? PROBE_HASH_FAILS(p - 1, signature) : 1);
            assert(p - 2 >= pTT ? PROBE_HASH_FAILS(p - 2, signature) : 1);
            assert(p - 3 >= pTT ? PROBE_HASH_FAILS(p - 3, signature) : 1);
            assert(PROBE_SCORE(p) >= -INFI && PROBE_SCORE(p) <= INFI);
            assert(PROBE_TYPE(p) >= 1 && PROBE_TYPE(p) <= 8);
            assert(PROBE_SEARCHNUM(p) >= 0 && PROBE_SEARCHNUM(p) <= 255);
            /* set as current - ok */
            SET_SEARCHNUM(p, searchnum);
            if (tt->depth >= depth) {
                tt->type = PROBE_TYPE(p);
                depth <= 0 ? probehitqs++ : probehit++;
                tt->score = PROBE_SCORE(p);
                assert(tt->score ^ 0);
                if (tt->score > M_MATE && tt->score < P_MATE);
                else {
                    if (tt->score <= M_MATE) {
                        tt->score += ply;
                        assert(ply&1 ? (tt->score & 1) : !(tt->score & 1));
                    } else {
                        tt->score -= ply;
                        assert(ply&1 ? !(tt->score & 1) : tt->score & 1);
                    }
                }
                assert(tt->score >= -INFI && tt->score <= INFI);
                return true;
            }
            return false;
        }
    }
    return false;
}
User avatar
OliverUwira
Posts: 170
Joined: Mon Sep 13, 2010 9:57 am
Location: Frankfurt am Main

Re: Help - can't clear bug with tt-move.

Post by OliverUwira »

Is it reasonable to expect a legal move 100% of the time in case of a hash hit? It could be a collision. But if, as you say, the problem shows up easily and collisions should be rare, there might be another problem.

One that just sprang into my eyes is the following:

Code: Select all

/* pTT is 1st element of 4-element bucket aligned at 64-byte address */ 
    for (p = pTT + 4; (p--) > pTT;)  {
        ...
    }
If pTT really points to the first element of the bucket, shouldn't the loop read rather like below?

Code: Select all

    for(p = pTT + 3; (p--) >= pTT;) {
        ...
    }
User avatar
beachknight
Posts: 3533
Joined: Tue Jan 09, 2007 8:33 pm
Location: Antalya, Turkey

Re: Help - can't clear bug with tt-move.

Post by beachknight »

Hi Oliver,

Off-topic :

Bitte sag Ismet, one of your teammates, viele Gruesse von mir.

Best,
hi, merhaba, hallo HT
User avatar
hgm
Posts: 28409
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Help - can't clear bug with tt-move.

Post by hgm »

It must mean you have collissons (unless somewhere a faulty pointer makes you write randomly in the TT).

When you have a positon where you reproduciby can generate this error, it is reasonably simple to debug it: First run the search, test for the erroneous hash move, and print the TT entry number and board position when it occurs (and then exit). Second, add code near you hash store code that prints the board every time you store in that hash entry, and rn the serch again. Now the last board printed before you hit on the erroneous hash move is the positon where the store was dne that produced an error when you retrieved it. If they are different, you had a collission, and this explains the bad hash move. If they are the same, and the move ws valid when it went in, but an invalid mov came ot, it must have been overwritten. In that case, also print the node counter with the board, and add test at the beginning of search to test fo any node counter value between those extremes if the hash move of that entry is still what went in, and print the node counter when it is not. Then you can determine the node where the overwriting occurs.
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: Help - can't clear bug with tt-move.

Post by Chan Rasjid »

OliverUwira wrote:Is it reasonable to expect a legal move 100% of the time in case of a hash hit? It could be a collision. But if, as you say, the problem shows up easily and collisions should be rare, there might be another problem.

One that just sprang into my eyes is the following:

Code: Select all

/* pTT is 1st element of 4-element bucket aligned at 64-byte address */ 
    for (p = pTT + 4; (p--) > pTT;)  {
        ...
    }
If pTT really points to the first element of the bucket, shouldn't the loop read rather like below?

Code: Select all

    for(p = pTT + 3; (p--) >= pTT;) {
        ...
    }
I think my loop is correct; (p--) is post decrement which decrements after the comparison; within the loop body, p would be pTT+3, pTT+2,pTT+1,pTT+0.

I am aware of the issue of collision and I think it is not collision (I have about 40+ check bits for TT size 64M); any collision would as easily show up in debug auto games as in real matches; real matches have about 5 - 10 failure for every search of 1 sec, ie about 300-400k nodes. For every ttmove failure there are great number of valid ttmoves.

I discover this bug only now when I implement searching the ttmove before move generation. In the past, I always clear the ttmove as my qsearch excludes some moves and a ttmove might not be in my generated list. So my program could play many real matches withou any crash.

This bug now really stumbles me and it is why I seek help here.

Rasjid
Dann Corbit
Posts: 12803
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: Help - can't clear bug with tt-move.

Post by Dann Corbit »

Do you over-write pv nodes in your hash table?
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: Help - can't clear bug with tt-move.

Post by Chan Rasjid »

Dann Corbit wrote:Do you over-write pv nodes in your hash table?
Yes.

In storehash(), it is either passed a valid bestmove or 0; so the move member of a tt-record is either set to 0 or stores the valid bestmove.

I have used codes to check that at storehash(), the move is available with a gen().

Rasjid.
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: Help - can't clear bug with tt-move.

Post by Chan Rasjid »

hgm wrote:It must mean you have collissons (unless somewhere a faulty pointer makes you write randomly in the TT).

When you have a positon where you reproduciby can generate this error, it is reasonably simple to debug it: First run the search, test for the erroneous hash move, and print the TT entry number and board position when it occurs (and then exit). Second, add code near you hash store code that prints the board every time you store in that hash entry, and rn the serch again. Now the last board printed before you hit on the erroneous hash move is the positon where the store was dne that produced an error when you retrieved it. If they are different, you had a collission, and this explains the bad hash move. If they are the same, and the move ws valid when it went in, but an invalid mov came ot, it must have been overwritten. In that case, also print the node counter with the board, and add test at the beginning of search to test fo any node counter value between those extremes if the hash move of that entry is still what went in, and print the node counter when it is not. Then you can determine the node where the overwriting occurs.
I am not sure yet how to get a reproducible point to debug. I'll have to think a bit more.

Meantime I have my log printout below. I don't print when the ttmove is ok as there are too many, only those failures which seem to have a corrupted string like the 3 bits of promote type (my move is an unsigned int with 6 bits from, 6 to, 3 promote type, 1 is-check-move).

Also it seems the bug decrease as the game proceeds.

Rasjid.
Cowrie Chess Version 1.0, 3rd Feb 2010

pTT_malloc (0x7f733076a010), pTT (0x7f733076a080)
TT Table Size( 32 MB )
No of Entry( 2097152 )
Entry Size(16 byte)

Pawnhash Table Size( 3 MB )
No of Entry( 65536 )
Entry Size(56 byte)

allocate time, node-mask 0xf
num move 20
Computer NPS = 382491
pTT_malloc (0x7f732e76a010), pTT (0x7f732e76a080)
TT Table Size( 64 MB )
No of Entry( 4194304 )
Entry Size(16 byte)

1 reply g1f3
allocate time, node-mask 0x3fff
num move 20
!!!HASH ERROR ttmove
pc 0, from 59, to 55, h4g8
!!!HASH ERROR ttmove
pc 3, from 18, to 7, c3a8r
!!!HASH ERROR ttmove
pc 0, from 45, to 48, f6g1
!!!HASH ERROR ttmove
pc 1, from 25, to 42, d2f3b
!!!HASH ERROR ttmove
pc 4, from 7, to 31, a8d8b
!!!HASH ERROR ttmove
pc 1, from 25, to 42, d2f3b
!!!HASH ERROR ttmove
pc 0, from 30, to 21, d7c6q
!!!HASH ERROR ttmove
pc 5, from 39, to 18, e8c3b
!!!HASH ERROR ttmove
pc 0, from 50, to 22, g3c7r
!!!HASH ERROR ttmove
pc 0, from 24, to 0, d1a1r
!!!HASH ERROR ttmove
pc 5, from 39, to 18, e8c3b
!!!HASH ERROR ttmove
pc 0, from 35, to 63, e4h8
!!!HASH ERROR ttmove
pc 0, from 35, to 63, e4h8
bestmove c7c6
1 c7c6 ( -19) depth( 6) pvL( 7) ply(22) nps( 397329) pc(32) cttime(46) ctpoll(1)
sec(1.10, 1.40) nodes(557056) q(12.7%) h(52.5%) f(34.8%) FH(100.1%) invalid(0) evasion(4.9%)
Hash(5.4%, qs 3.1%, p 91.0%) matOWrite( 89.37) draw(0) null(5.2% / 11.8%, 0.00%, 0.00%)
Pvs-zero/re(66.43% / 0.51%) ext(16.83%) mat-prune/qs(0.07% / 0.00%) lmr(71.26% / 6.51%)
Root resrc(11.34%) see(4.64%)
EV (268.03%) lazy(23.44%) fut(16.79%) fl(6.65%) nom(0.00%)
2 reply b1c3
allocate time, node-mask 0x3fff
num move 21
!!!HASH ERROR ttmove
pc 6, from 24, to 21, d1c6r
!!!HASH ERROR ttmove
pc 0, from 51, to 22, g4c7q
!!!HASH ERROR ttmove
pc 1, from 49, to 12, g2b5r
!!!HASH ERROR ttmove
pc 0, from 37, to 53, e6g6q
bestmove b7b5
2 b7b5 ( 4) depth( 6) pvL( 7) ply(21) nps( 361469) pc(32) cttime(42) ctpoll(0)
sec(1.18, 1.34) nodes(485453) q(10.2%) h(56.1%) f(33.7%) FH(92.1%) invalid(0) evasion(3.5%)
Hash(8.0%, qs 2.8%, p 90.4%) matOWrite( 87.00) draw(0) null(6.4% / 15.7%, 0.00%, 0.00%)
Pvs-zero/re(67.87% / 0.48%) ext(11.84%) mat-prune/qs(0.10% / 0.00%) lmr(94.95% / 5.57%)
Root resrc(14.74%) see(5.20%)
EV (295.41%) lazy(23.60%) fut(17.73%) fl(5.85%) nom(0.02%)
3 reply d2d4
allocate time, node-mask 0x3fff
num move 22
Opponent followPV, score(4) bestmove(b5b4)
bestmove d8a5
3 d8a5 ( -46) depth( 6) pvL( 7) ply(22) nps( 177018) pc(32) cttime(30) ctpoll(0)
sec(1.07, 1.67) nodes(294912) q(14.7%) h(53.5%) f(31.9%) FH(97.8%) invalid(0) evasion(5.7%)
Hash(6.4%, qs 2.3%, p 91.9%) matOWrite( 89.94) draw(0) null(5.7% / 20.3%, 0.07%, 0.00%)
Pvs-zero/re(70.36% / 0.61%) ext(17.78%) mat-prune/qs(0.01% / 0.00%) lmr(94.58% / 4.72%)
Root resrc(21.25%) see(4.13%)
EV (301.88%) lazy(29.21%) fut(23.08%) fl(6.13%) nom(0.00%)
4 reply c1d2
allocate time, node-mask 0x1fff
num move 28
bestmove b5b4
4 b5b4 ( 3) depth( 6) pvL( 8) ply(20) nps( 335612) pc(32) cttime(78) ctpoll(2)
sec(1.28, 1.61) nodes(540672) q(14.8%) h(53.2%) f(32.0%) FH(94.7%) invalid(0) evasion(6.1%)
Hash(9.8%, qs 2.5%, p 93.1%) matOWrite( 80.27) draw(0) null(6.4% / 24.8%, 0.00%, 0.00%)
Pvs-zero/re(71.33% / 0.51%) ext(18.73%) mat-prune/qs(0.06% / 0.00%) lmr(100.15% / 3.02%)
Root resrc(20.51%) see(4.65%)
EV (361.77%) lazy(37.69%) fut(31.03%) fl(6.57%) nom(0.09%)
5 reply c3e4
allocate time, node-mask 0x3fff
num move 33
Opponent followPV, score(3) bestmove(d7d5)
!!!HASH ERROR ttmove
pc 0, from 34, to 52, e3g5b
bestmove d7d5
5 d7d5 ( -60) depth( 8) pvL( 9) ply(28) nps( 379696) pc(32) cttime(46) ctpoll(0)
sec(1.08, 1.28) nodes(486771) q(23.1%) h(48.3%) f(28.6%) FH(103.3%) invalid(0) evasion(6.4%)
Hash(6.4%, qs 2.4%, p 93.3%) matOWrite( 85.85) draw(0) null(7.9% / 36.9%, 0.40%, 0.00%)
Pvs-zero/re(73.95% / 0.15%) ext(24.06%) mat-prune/qs(0.08% / 0.00%) lmr(103.33% / 1.28%)
Root resrc(0.00%) see(7.18%)
EV (316.37%) lazy(43.62%) fut(35.68%) fl(7.94%) nom(0.00%)
6 reply e4c5
allocate time, node-mask 0x7fff
num move 31
Opponent followPV, score(-60) bestmove(b8d7)
!!!HASH ERROR ttmove
pc 4, from 63, to 22, h8c7b
bestmove b8d7
6 b8d7 ( -122) depth( 8) pvL(10) ply(27) nps( 421511) pc(32) cttime(51) ctpoll(2)
sec(1.34, 2.77) nodes(1166322) q(20.2%) h(50.9%) f(28.9%) FH(96.8%) invalid(0) evasion(9.9%)
Hash(6.0%, qs 2.7%, p 94.0%) matOWrite( 89.55) draw(0) null(10.0% / 40.4%, 0.67%, 0.00%)
Pvs-zero/re(72.71% / 0.08%) ext(26.66%) mat-prune/qs(1.71% / 0.00%) lmr(112.59% / 1.88%)
Root resrc(0.00%) see(6.56%)
EV (292.42%) lazy(46.37%) fut(38.76%) fl(7.56%) nom(0.05%)
7 reply a2a3
allocate time, node-mask 0x7fff
num move 30
Opponent followPV, score(-122) bestmove(d7c5)
!!!HASH ERROR ttmove
pc 0, from 14, to 0, b7a1
bestmove a5c7
7 a5c7 ( -98) depth( 8) pvL( 9) ply(25) nps( 393019) pc(32) cttime(40) ctpoll(1)
sec(1.29, 2.00) nodes(786432) q(17.5%) h(53.8%) f(28.6%) FH(96.0%) invalid(0) evasion(6.5%)
Hash(8.9%, qs 3.2%, p 93.7%) matOWrite( 87.15) draw(0) null(10.2% / 42.2%, 0.58%, 0.00%)
Pvs-zero/re(74.09% / 0.18%) ext(24.54%) mat-prune/qs(2.59% / 0.00%) lmr(125.16% / 2.13%)
Root resrc(3.70%) see(7.36%)
EV (312.06%) lazy(44.91%) fut(37.63%) fl(6.75%) nom(0.53%)
8 reply c5d7
allocate time, node-mask 0x3fff
num move 32
!!!HASH ERROR ttmove
pc 0, from 8, to 6, b1a7r
!!!HASH ERROR ttmove
pc 0, from 8, to 6, b1a7r
!!!HASH ERROR ttmove
pc 0, from 8, to 6, b1a7r
!!!HASH ERROR ttmove
pc 0, from 8, to 6, b1a7r
!!!HASH ERROR ttmove
pc 0, from 8, to 6, b1a7r
!!!HASH ERROR ttmove
pc 0, from 5, to 24, a6d1r
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
bestmove c8d7
8 c8d7 ( -105) depth( 8) pvL(11) ply(25) nps( 332093) pc(30) cttime(63) ctpoll(1)
sec(1.19, 2.36) nodes(784736) q(16.5%) h(50.9%) f(32.6%) FH(92.4%) invalid(0) evasion(6.3%)
Hash(10.8%, qs 3.6%, p 96.5%) matOWrite( 83.78) draw(0) null(8.1% / 44.3%, 0.40%, 0.01%)
Pvs-zero/re(72.01% / 0.17%) ext(25.11%) mat-prune/qs(0.91% / 0.00%) lmr(96.05% / 2.66%)
Root resrc(0.00%) see(9.10%)
EV (371.37%) lazy(41.33%) fut(34.72%) fl(6.56%) nom(0.05%)
9 reply a3b4
allocate time, node-mask 0x3fff
num move 34
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
!!!HASH ERROR ttmove
pc 1, from 34, to 33, e3e2
bestmove g8f6
9 g8f6 ( -91) depth( 7) pvL( 4) ply(24) nps( 364482) pc(29) cttime(38) ctpoll(0)
sec(1.09, 1.04) nodes(377604) q(20.2%) h(51.6%) f(28.1%) FH(103.3%) invalid(0) evasion(6.0%)
Hash(8.8%, qs 2.9%, p 97.6%) matOWrite( 86.43) draw(0) null(7.7% / 39.3%, 0.56%, 0.00%)
Pvs-zero/re(74.53% / 0.17%) ext(28.30%) mat-prune/qs(2.29% / 0.00%) lmr(117.57% / 2.24%)
Root resrc(4.76%) see(9.39%)
EV (328.59%) lazy(42.73%) fut(35.11%) fl(7.60%) nom(0.02%)
10 reply e2e3
allocate time, node-mask 0x3fff
num move 35
bestmove f6e4
10 f6e4 ( -190) depth( 7) pvL( 9) ply(23) nps( 377929) pc(29) cttime(61) ctpoll(1)
sec(1.10, 2.08) nodes(786093) q(15.2%) h(49.3%) f(35.5%) FH(96.4%) invalid(0) evasion(8.9%)
Hash(6.2%, qs 3.0%, p 96.9%) matOWrite( 86.76) draw(0) null(4.6% / 24.6%, 0.23%, 0.00%)
Pvs-zero/re(67.28% / 0.16%) ext(27.84%) mat-prune/qs(0.08% / 0.00%) lmr(66.70% / 1.65%)
Root resrc(5.26%) see(7.38%)
EV (321.84%) lazy(36.58%) fut(28.44%) fl(7.02%) nom(1.13%)
11 reply f1d3
allocate time, node-mask 0x3fff
num move 41
bestmove e8d8
11 e8d8 ( -281) depth( 8) pvL(11) ply(23) nps( 399603) pc(29) cttime(68) ctpoll(1)
sec(1.12, 2.16) nodes(862745) q(13.8%) h(57.1%) f(29.1%) FH(96.4%) invalid(0) evasion(10.4%)
Hash(6.7%, qs 1.6%, p 95.5%) matOWrite( 88.28) draw(0) null(6.6% / 15.5%, 1.15%, 0.00%)
Pvs-zero/re(73.23% / 0.23%) ext(27.09%) mat-prune/qs(3.66% / 0.04%) lmr(132.89% / 3.53%)
Root resrc(28.00%) see(3.12%)
EV (308.60%) lazy(47.99%) fut(37.22%) fl(6.79%) nom(3.98%)
12 reply d3e4
allocate time, node-mask 0x3fff
num move 33
Opponent followPV, score(-281) bestmove(d5e4)
bestmove d5e4
12 d5e4 ( -269) depth( 9) pvL(11) ply(23) nps( 408470) pc(27) cttime(76) ctpoll(1)
sec(1.08, 2.36) nodes(962766) q(12.6%) h(54.9%) f(32.4%) FH(90.5%) invalid(0) evasion(11.6%)
Hash(9.0%, qs 2.2%, p 95.4%) matOWrite( 80.66) draw(0) null(6.9% / 23.5%, 0.98%, 0.01%)
Pvs-zero/re(70.93% / 0.10%) ext(28.32%) mat-prune/qs(3.41% / 0.10%) lmr(110.69% / 4.13%)
Root resrc(0.00%) see(2.83%)
EV (340.15%) lazy(54.67%) fut(42.49%) fl(7.41%) nom(4.76%)
13 reply f3g5
allocate time, node-mask 0x3fff
num move 31
Opponent followPV, score(-269) bestmove(d8e8)
!!!HASH ERROR ttmove
pc 1, from 37, to 53, e6g6n
bestmove d8e8
13 d8e8 ( -270) depth( 8) pvL( 7) ply(21) nps( 378409) pc(27) cttime(67) ctpoll(1)
sec(0.93, 2.22) nodes(841204) q(11.1%) h(50.2%) f(38.7%) FH(91.7%) invalid(0) evasion(9.8%)
Hash(7.2%, qs 3.3%, p 95.8%) matOWrite( 81.68) draw(0) null(6.0% / 19.2%, 0.41%, 0.00%)
Pvs-zero/re(64.10% / 0.18%) ext(21.36%) mat-prune/qs(9.63% / 0.15%) lmr(59.25% / 1.81%)
Root resrc(6.41%) see(3.19%)
EV (318.57%) lazy(58.60%) fut(42.66%) fl(11.05%) nom(4.90%)
14 reply g5e4
allocate time, node-mask 0x3fff
num move 32
Opponent followPV, score(-270) bestmove(h7h5)
bestmove g7g6
14 g7g6 ( -297) depth( 7) pvL( 8) ply(18) nps( 412089) pc(26) cttime(54) ctpoll(1)
sec(0.81, 1.63) nodes(670470) q(10.5%) h(60.4%) f(29.1%) FH(90.2%) invalid(0) evasion(14.5%)
Hash(10.2%, qs 3.9%, p 96.1%) matOWrite( 77.50) draw(0) null(7.3% / 25.5%, 0.34%, 0.00%)
Pvs-zero/re(73.30% / 0.45%) ext(33.89%) mat-prune/qs(4.97% / 0.14%) lmr(145.24% / 2.23%)
Root resrc(19.85%) see(2.08%)
EV (303.75%) lazy(66.95%) fut(55.92%) fl(8.80%) nom(2.23%)
15 reply e4c5
allocate time, node-mask 0x3fff
num move 32
bestmove a8d8
15 a8d8 ( -321) depth( 6) pvL( 6) ply(17) nps( 405563) pc(26) cttime(33) ctpoll(0)
sec(0.77, 0.81) nodes(328101) q(14.6%) h(53.7%) f(31.8%) FH(102.2%) invalid(0) evasion(8.9%)
Hash(7.6%, qs 2.8%, p 96.4%) matOWrite( 82.70) draw(0) null(4.4% / 22.2%, 0.00%, 0.00%)
Pvs-zero/re(69.33% / 0.76%) ext(27.29%) mat-prune/qs(3.31% / 0.67%) lmr(86.84% / 6.26%)
Root resrc(44.90%) see(5.17%)
EV (291.53%) lazy(45.23%) fut(29.10%) fl(7.89%) nom(8.24%)
16 reply e1g1
allocate time, node-mask 0x3fff
num move 30
bestmove e7e6
16 e7e6 ( -301) depth( 7) pvL( 8) ply(20) nps( 400968) pc(26) cttime(50) ctpoll(1)
sec(0.96, 1.47) nodes(589824) q(8.2%) h(56.1%) f(35.6%) FH(83.3%) invalid(0) evasion(9.4%)
Hash(6.7%, qs 2.1%, p 95.9%) matOWrite( 84.23) draw(0) null(7.7% / 24.0%, 0.14%, 0.00%)
Pvs-zero/re(68.32% / 0.45%) ext(22.52%) mat-prune/qs(2.35% / 0.10%) lmr(97.58% / 2.57%)
Root resrc(7.69%) see(3.99%)
EV (343.64%) lazy(54.85%) fut(39.96%) fl(8.13%) nom(6.76%)
17 reply d1f3
allocate time, node-mask 0x3fff
num move 29
Opponent followPV, score(-301) bestmove(f8d6)
bestmove d7c8
17 d7c8 ( -328) depth( 6) pvL( 6) ply(19) nps( 455111) pc(26) cttime(50) ctpoll(1)
sec(0.90, 1.37) nodes(622592) q(11.2%) h(55.5%) f(33.3%) FH(87.2%) invalid(0) evasion(14.4%)
Hash(9.5%, qs 1.9%, p 96.1%) matOWrite( 78.10) draw(0) null(6.7% / 23.8%, 0.00%, 0.00%)
Pvs-zero/re(70.06% / 0.42%) ext(32.34%) mat-prune/qs(3.58% / 0.36%) lmr(105.23% / 1.50%)
Root resrc(13.04%) see(3.84%)
EV (294.83%) lazy(65.10%) fut(48.35%) fl(9.11%) nom(7.65%)
18 reply g2g3
allocate time, node-mask 0x3fff
num move 32
!!!HASH ERROR ttmove
pc 1, from 9, to 28, b2d5
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
!!!HASH ERROR ttmove
pc 0, from 16, to 63, c1h8
bestmove f8e7
18 f8e7 ( -294) depth( 5) pvL( 6) ply(19) nps( 407456) pc(26) cttime(35) ctpoll(0)
sec(0.91, 0.98) nodes(399307) q(17.2%) h(47.0%) f(35.7%) FH(94.5%) invalid(0) evasion(11.9%)
Hash(7.8%, qs 3.7%, p 96.0%) matOWrite( 83.94) draw(0) null(4.1% / 29.1%, 0.00%, 0.00%)
Pvs-zero/re(68.29% / 0.97%) ext(31.02%) mat-prune/qs(0.66% / 0.26%) lmr(64.14% / 2.83%)
Root resrc(13.70%) see(4.91%)
EV (335.42%) lazy(55.95%) fut(40.35%) fl(10.25%) nom(5.35%)
19 reply d2c3
allocate time, node-mask 0x3fff
num move 33
bestmove h8g8
19 h8g8 ( -280) depth( 6) pvL( 6) ply(24) nps( 456465) pc(26) cttime(116) ctpoll(3)
sec(0.89, 3.70) nodes(1687552) q(14.7%) h(50.3%) f(35.0%) FH(88.3%) invalid(0) evasion(12.4%)
Hash(6.7%, qs 1.9%, p 96.4%) matOWrite( 87.78) draw(0) null(6.1% / 21.7%, 0.19%, 0.00%)
Pvs-zero/re(68.19% / 0.21%) ext(25.72%) mat-prune/qs(4.29% / 0.64%) lmr(83.84% / 3.10%)
Root resrc(35.85%) see(4.11%)
EV (348.56%) lazy(66.89%) fut(46.54%) fl(8.31%) nom(12.03%)
20 reply e3e4
allocate time, node-mask 0x3fff
num move 34
!!!HASH ERROR ttmove
pc 4, from 55, to 16, g8c1b
!!!HASH ERROR ttmove
pc 0, from 15, to 38, b8e7
bestmove c7b8
20 c7b8 ( -280) depth( 5) pvL( 5) ply(17) nps( 391954) pc(26) cttime(26) ctpoll(0)
sec(0.57, 0.67) nodes(260650) q(16.7%) h(49.0%) f(34.3%) FH(94.6%) invalid(0) evasion(9.5%)
Hash(12.4%, qs 6.7%, p 96.5%) matOWrite( 76.54) draw(0) null(4.3% / 33.8%, 0.00%, 0.00%)
Pvs-zero/re(70.22% / 0.89%) ext(30.25%) mat-prune/qs(0.88% / 0.24%) lmr(76.81% / 2.46%)
Root resrc(12.99%) see(4.42%)
EV (357.80%) lazy(55.92%) fut(40.59%) fl(8.88%) nom(6.45%)
21 reply e4e5
allocate time, node-mask 0x1fff
num move 32
Opponent followPV, score(-280) bestmove(b8b6)
!!!HASH ERROR ttmove
pc 2, from 18, to 63, c3h8n
bestmove b8b6
21 b8b6 ( -309) depth( 6) pvL( 8) ply(19) nps( 387341) pc(26) cttime(37) ctpoll(0)
sec(0.59, 0.51) nodes(197157) q(11.6%) h(54.4%) f(33.9%) FH(88.7%) invalid(0) evasion(9.5%)
Hash(9.0%, qs 3.0%, p 96.9%) matOWrite( 76.78) draw(0) null(6.3% / 31.6%, 0.00%, 0.00%)
Pvs-zero/re(70.27% / 0.49%) ext(31.12%) mat-prune/qs(1.09% / 0.19%) lmr(97.11% / 1.23%)
Root resrc(0.00%) see(4.54%)
EV (346.29%) lazy(55.86%) fut(43.24%) fl(8.08%) nom(4.55%)
22 reply b2b3
allocate time, node-mask 0x1fff
num move 32
Opponent followPV, score(-309) bestmove(g6g5)
!!!HASH ERROR ttmove
pc 0, from 7, to 53, a8g6b
bestmove g8f8
22 g8f8 ( -309) depth( 6) pvL( 3) ply(22) nps( 402666) pc(26) cttime(164) ctpoll(2)
sec(0.62, 3.07) nodes(1236992) q(16.2%) h(51.3%) f(32.5%) FH(91.7%) invalid(0) evasion(11.1%)
Hash(10.5%, qs 2.8%, p 98.0%) matOWrite( 82.85) draw(0) null(6.6% / 32.5%, 0.20%, 0.00%)
Pvs-zero/re(71.46% / 0.43%) ext(31.07%) mat-prune/qs(1.31% / 0.28%) lmr(99.60% / 3.18%)
Root resrc(22.92%) see(5.19%)
EV (359.68%) lazy(62.16%) fut(46.30%) fl(7.97%) nom(7.90%)
23 reply f1e1
allocate time, node-mask 0x1fff
num move 29
bestmove h7h5
23 h7h5 ( -319) depth( 7) pvL(10) ply(21) nps( 427317) pc(26) cttime(83) ctpoll(1)
sec(0.46, 1.33) nodes(567478) q(15.6%) h(53.0%) f(31.4%) FH(97.2%) invalid(0) evasion(8.3%)
Hash(8.2%, qs 2.9%, p 98.1%) matOWrite( 80.48) draw(0) null(5.9% / 24.3%, 0.59%, 0.00%)
Pvs-zero/re(70.70% / 0.71%) ext(25.20%) mat-prune/qs(2.35% / 0.35%) lmr(96.35% / 4.04%)
Root resrc(17.39%) see(3.03%)
EV (305.26%) lazy(50.42%) fut(37.20%) fl(9.09%) nom(4.14%)
24 reply e1e4
allocate time, node-mask 0x1fff
num move 28
bestmove h5h4
24 h5h4 ( -279) depth( 7) pvL( 7) ply(17) nps( 468258) pc(26) cttime(46) ctpoll(0)
sec(0.44, 0.55) nodes(255201) q(23.7%) h(57.9%) f(18.4%) FH(128.3%) invalid(0) evasion(7.0%)
Hash(10.5%, qs 3.1%, p 98.9%) matOWrite( 82.03) draw(0) null(8.7% / 30.7%, 0.02%, 0.00%)
Pvs-zero/re(81.07% / 0.91%) ext(9.07%) mat-prune/qs(3.59% / 0.18%) lmr(225.67% / 1.84%)
Root resrc(34.04%) see(3.70%)
EV (247.30%) lazy(62.58%) fut(49.28%) fl(10.18%) nom(3.13%)
25 reply e4f4
allocate time, node-mask 0x1fff
num move 28
bestmove h4g3
25 h4g3 ( -277) depth( 7) pvL(13) ply(22) nps( 490598) pc(25) cttime(136) ctpoll(1)
sec(0.41, 2.04) nodes(999840) q(15.3%) h(53.1%) f(31.6%) FH(90.4%) invalid(0) evasion(14.9%)
Hash(6.4%, qs 1.9%, p 98.0%) matOWrite( 87.97) draw(0) null(7.4% / 31.6%, 0.99%, 0.00%)
Pvs-zero/re(70.48% / 0.26%) ext(32.37%) mat-prune/qs(3.42% / 0.21%) lmr(107.09% / 2.56%)
Root resrc(33.33%) see(4.21%)
EV (278.32%) lazy(63.35%) fut(47.05%) fl(9.31%) nom(6.98%)
26 reply f2g3
allocate time, node-mask 0x1fff
num move 27
bestmove b6c7
26 b6c7 ( -306) depth( 8) pvL( 8) ply(21) nps( 780501) pc(24) cttime(48) ctpoll(0)
sec(0.36, 0.34) nodes(261468) q(8.3%) h(70.6%) f(21.1%) FH(83.8%) invalid(0) evasion(19.1%)
Hash(5.6%, qs 0.6%, p 98.9%) matOWrite( 94.33) draw(0) null(9.0% / 13.3%, 0.08%, 0.00%)
Pvs-zero/re(79.55% / 0.24%) ext(45.52%) mat-prune/qs(5.21% / 0.30%) lmr(282.80% / 0.91%)
Root resrc(72.00%) see(1.25%)
EV (215.40%) lazy(89.14%) fut(76.32%) fl(8.32%) nom(4.50%)
27 reply f3g4
allocate time, node-mask 0x3fff
num move 26
bestmove f8h8
27 f8h8 ( -289) depth( 6) pvL( 9) ply(19) nps( 408142) pc(24) cttime(26) ctpoll(0)
sec(0.36, 0.56) nodes(229376) q(13.6%) h(53.4%) f(33.0%) FH(87.9%) invalid(0) evasion(9.2%)
Hash(8.5%, qs 2.5%, p 99.1%) matOWrite( 88.46) draw(0) null(7.8% / 38.1%, 0.02%, 0.00%)
Pvs-zero/re(71.77% / 0.57%) ext(27.00%) mat-prune/qs(1.34% / 0.04%) lmr(102.38% / 1.70%)
Root resrc(25.00%) see(5.87%)
EV (372.83%) lazy(63.31%) fut(47.58%) fl(7.95%) nom(7.78%)
28 reply f4f2
allocate time, node-mask 0x1fff
num move 34
bestmove e8f8
28 e8f8 ( -471) depth( 7) pvL( 8) ply(22) nps( 576131) pc(24) cttime(36) ctpoll(0)
sec(0.35, 0.30) nodes(175144) q(12.2%) h(55.8%) f(32.0%) FH(88.6%) invalid(0) evasion(20.6%)
Hash(5.6%, qs 1.1%, p 98.9%) matOWrite( 89.15) draw(0) null(5.8% / 12.5%, 0.80%, 0.00%)
Pvs-zero/re(69.10% / 0.28%) ext(37.11%) mat-prune/qs(9.01% / 0.70%) lmr(112.52% / 2.63%)
Root resrc(41.67%) see(2.23%)
EV (274.00%) lazy(79.37%) fut(58.42%) fl(9.67%) nom(11.28%)
29 reply g4g6
allocate time, node-mask 0x1fff
num move 32
Opponent followPV, score(-471) bestmove(e7c5)
bestmove e7c5
29 e7c5 ( -503) depth( 8) pvL(10) ply(18) nps( 553777) pc(22) cttime(35) ctpoll(0)
sec(0.37, 0.27) nodes(149520) q(9.5%) h(59.0%) f(31.5%) FH(79.5%) invalid(0) evasion(24.4%)
Hash(12.8%, qs 2.8%, p 99.5%) matOWrite( 61.06) draw(0) null(5.7% / 15.4%, 0.11%, 0.00%)
Pvs-zero/re(71.60% / 0.50%) ext(33.52%) mat-prune/qs(10.33% / 0.61%) lmr(138.53% / 2.06%)
Root resrc(4.17%) see(2.49%)
EV (288.61%) lazy(75.95%) fut(63.08%) fl(10.52%) nom(2.35%)
30 reply b4c5
allocate time, node-mask 0x1fff
num move 29
bestmove c7e7
30 c7e7 ( -569) depth( 8) pvL( 7) ply(21) nps( 677481) pc(21) cttime(84) ctpoll(0)
sec(0.36, 0.83) nodes(563665) q(11.6%) h(61.2%) f(27.2%) FH(90.9%) invalid(0) evasion(27.3%)
Hash(6.5%, qs 1.4%, p 99.4%) matOWrite( 87.62) draw(0) null(7.7% / 11.5%, 0.48%, 0.03%)
Pvs-zero/re(70.95% / 0.37%) ext(38.28%) mat-prune/qs(9.32% / 0.98%) lmr(162.11% / 2.06%)
Root resrc(58.33%) see(0.97%)
EV (260.65%) lazy(87.57%) fut(72.19%) fl(12.21%) nom(3.16%)
31 reply a1a7
allocate time, node-mask 0x1fff
num move 28
bestmove e7a7
31 e7a7 ( -527) depth( 8) pvL(12) ply(22) nps( 574297) pc(19) cttime(77) ctpoll(0)
sec(0.35, 0.88) nodes(503659) q(11.7%) h(60.7%) f(27.6%) FH(95.1%) invalid(0) evasion(18.7%)
Hash(7.3%, qs 3.3%, p 99.7%) matOWrite( 84.23) draw(0) null(7.4% / 19.8%, 1.35%, 0.00%)
Pvs-zero/re(71.09% / 0.70%) ext(26.92%) mat-prune/qs(5.80% / 0.59%) lmr(154.07% / 7.11%)
Root resrc(13.33%) see(5.68%)
EV (236.67%) lazy(70.12%) fut(51.15%) fl(11.85%) nom(7.12%)
32 reply g6f6
allocate time, node-mask 0x1fff
num move 31
Opponent followPV, score(-527) bestmove(h8g8)
!!!HASH ERROR ttmove
pc 0, from 40, to 45, f1f6q
bestmove h8g8
32 h8g8 (-1031) depth(10) pvL(10) ply(25) nps( 898721) pc(19) cttime(52) ctpoll(0)
sec(0.31, 0.29) nodes(257933) q(7.4%) h(63.7%) f(28.9%) FH(77.6%) invalid(0) evasion(34.8%)
Hash(5.9%, qs 1.7%, p 99.4%) matOWrite( 77.89) draw(0) null(10.2% / 12.5%, 0.01%, 0.00%)
Pvs-zero/re(70.64% / 0.06%) ext(38.03%) mat-prune/qs(8.86% / 2.08%) lmr(174.87% / 0.04%)
Root resrc(9.68%) see(0.25%)
EV (218.65%) lazy(99.51%) fut(82.78%) fl(14.99%) nom(1.74%)
33 reply f6d8
allocate time, node-mask 0x3fff
num move 1
single move
bestmove f8g7
33 f8g7 ( -400) depth(10) pvL( 1) ply( 0) nps( 898721) pc(18) cttime(53) ctpoll(0)
sec(0.35, 0.00) nodes(257933) q(7.4%) h(63.7%) f(28.9%) FH(77.6%) invalid(0) evasion(34.8%)
Hash(5.9%, qs 1.7%, p 99.4%) matOWrite( 77.89) draw(0) null(10.2% / 12.5%, 0.01%, 0.00%)
Pvs-zero/re(70.64% / 0.06%) ext(38.03%) mat-prune/qs(8.86% / 2.08%) lmr(174.87% / 0.04%)
Root resrc(9.68%) see(0.25%)
EV (218.66%) lazy(99.51%) fut(82.78%) fl(14.99%) nom(1.74%)
34 reply d8h4
allocate time, node-mask 0x1fff
num move 25
bestmove a7c7
34 a7c7 ( -528) depth( 6) pvL( 8) ply(18) nps( 705185) pc(18) cttime(41) ctpoll(0)
sec(0.27, 0.34) nodes(236237) q(17.3%) h(51.1%) f(31.6%) FH(102.1%) invalid(0) evasion(26.8%)
Hash(7.8%, qs 2.5%, p 99.6%) matOWrite( 85.44) draw(0) null(3.8% / 12.5%, 0.04%, 0.00%)
Pvs-zero/re(65.49% / 0.66%) ext(33.66%) mat-prune/qs(3.68% / 0.25%) lmr(87.09% / 5.50%)
Root resrc(20.73%) see(4.69%)
EV (242.78%) lazy(85.91%) fut(45.82%) fl(12.16%) nom(27.92%)
35 reply g1g2
allocate time, node-mask 0x1fff
num move 21
bestmove g7f8
35 g7f8 ( -530) depth( 7) pvL( 9) ply(18) nps( 706349) pc(18) cttime(48) ctpoll(0)
sec(0.28, 0.39) nodes(274770) q(14.3%) h(53.0%) f(32.7%) FH(96.6%) invalid(0) evasion(22.8%)
Hash(10.2%, qs 4.5%, p 99.8%) matOWrite( 79.20) draw(0) null(4.6% / 10.4%, 0.12%, 0.00%)
Pvs-zero/re(65.07% / 1.32%) ext(22.83%) mat-prune/qs(2.69% / 0.47%) lmr(86.65% / 6.56%)
Root resrc(11.34%) see(4.19%)
EV (232.98%) lazy(82.74%) fut(35.19%) fl(10.85%) nom(36.71%)
36 reply h4h6
allocate time, node-mask 0x1fff
num move 3
bestmove f8e8
36 f8e8 ( -538) depth( 7) pvL( 5) ply(21) nps( 637360) pc(18) cttime(56) ctpoll(0)
sec(0.27, 0.55) nodes(349911) q(15.9%) h(47.3%) f(36.8%) FH(91.7%) invalid(0) evasion(22.6%)
Hash(11.4%, qs 4.3%, p 99.7%) matOWrite( 69.91) draw(0) null(4.8% / 10.5%, 0.03%, 0.00%)
Pvs-zero/re(62.88% / 0.73%) ext(27.60%) mat-prune/qs(4.22% / 0.09%) lmr(61.67% / 4.99%)
Root resrc(15.00%) see(2.99%)
EV (253.16%) lazy(92.99%) fut(41.05%) fl(12.32%) nom(39.62%)
37 reply h6h7
allocate time, node-mask 0x1fff
num move 26
bestmove g8g4
37 g8g4 ( -612) depth( 8) pvL(13) ply(19) nps( 728736) pc(18) cttime(47) ctpoll(0)
sec(0.26, 0.34) nodes(249228) q(17.7%) h(50.2%) f(32.1%) FH(96.1%) invalid(0) evasion(24.9%)
Hash(12.3%, qs 4.0%, p 99.8%) matOWrite( 73.50) draw(0) null(5.9% / 13.0%, 1.65%, 0.00%)
Pvs-zero/re(66.12% / 0.74%) ext(28.67%) mat-prune/qs(15.70% / 0.50%) lmr(91.65% / 4.15%)
Root resrc(14.29%) see(3.16%)
EV (249.74%) lazy(90.86%) fut(45.74%) fl(12.08%) nom(33.04%)
38 reply h2h3
allocate time, node-mask 0x1fff
num move 28
bestmove g4g6
38 g4g6 ( -693) depth( 9) pvL(11) ply(25) nps( 841782) pc(18) cttime(89) ctpoll(0)
sec(0.27, 0.70) nodes(588406) q(15.9%) h(50.5%) f(33.6%) FH(91.3%) invalid(0) evasion(25.9%)
Hash(9.0%, qs 3.0%, p 99.4%) matOWrite( 81.62) draw(0) null(7.4% / 11.6%, 0.53%, 0.00%)
Pvs-zero/re(65.78% / 0.30%) ext(33.35%) mat-prune/qs(8.49% / 0.64%) lmr(90.54% / 2.27%)
Root resrc(42.86%) see(1.96%)
EV (241.18%) lazy(95.44%) fut(50.80%) fl(13.17%) nom(31.48%)
39 reply h7h8
allocate time, node-mask 0x1fff
num move 3
single move
bestmove e8e7
39 e8e7 ( -576) depth( 2) pvL( 1) ply( 9) nps( 841782) pc(18) cttime(4) ctpoll(0)
sec(0.26, 0.00) nodes(364) q(37.4%) h(34.6%) f(28.0%) FH(130.4%) invalid(0) evasion(25.2%)
Hash(39.8%, qs 34.0%, p 100.0%) matOWrite( 56.00) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(59.34% / 6.94%) ext(8.82%) mat-prune/qs(0.00% / 6.11%) lmr(0.00% / nan%)
Root resrc(33.33%) see(4.58%)
EV (204.20%) lazy(96.07%) fut(22.06%) fl(16.26%) nom(57.76%)
40 reply c3a5
allocate time, node-mask 0x1fff
num move 22
bestmove c7d7
40 c7d7 (-1242) depth( 9) pvL(11) ply(25) nps( 956218) pc(18) cttime(97) ctpoll(0)
sec(0.24, 0.68) nodes(652141) q(14.5%) h(54.8%) f(30.6%) FH(91.2%) invalid(0) evasion(40.8%)
Hash(5.8%, qs 2.5%, p 99.4%) matOWrite( 93.47) draw(0) null(6.8% / 6.2%, 0.00%, 0.00%)
Pvs-zero/re(66.65% / 0.11%) ext(38.14%) mat-prune/qs(23.66% / 3.73%) lmr(116.16% / 0.04%)
Root resrc(68.97%) see(0.09%)
EV (203.46%) lazy(99.97%) fut(72.19%) fl(21.86%) nom(5.92%)
41 reply a5d8
allocate time, node-mask 0x3fff
num move 1
single move
bestmove d7d8
41 d7d8 ( -100) depth( 9) pvL( 1) ply( 0) nps( 956218) pc(17) cttime(98) ctpoll(0)
sec(0.27, 0.00) nodes(652141) q(14.5%) h(54.8%) f(30.6%) FH(91.2%) invalid(0) evasion(40.8%)
Hash(5.8%, qs 2.5%, p 99.4%) matOWrite( 93.47) draw(0) null(6.8% / 6.2%, 0.00%, 0.00%)
Pvs-zero/re(66.65% / 0.11%) ext(38.14%) mat-prune/qs(23.66% / 3.73%) lmr(116.16% / 0.04%)
Root resrc(68.97%) see(0.09%)
EV (203.46%) lazy(99.97%) fut(72.19%) fl(21.86%) nom(5.92%)
42 reply f2f7
allocate time, node-mask 0x1fff
num move 1
single move
bestmove e7f7
42 e7f7 ( 300) depth( 9) pvL( 1) ply( 0) nps( 956218) pc(15) cttime(99) ctpoll(0)
sec(0.17, 0.00) nodes(652141) q(14.5%) h(54.8%) f(30.6%) FH(91.2%) invalid(0) evasion(40.8%)
Hash(5.8%, qs 2.5%, p 99.4%) matOWrite( 93.47) draw(0) null(6.8% / 6.2%, 0.00%, 0.00%)
Pvs-zero/re(66.65% / 0.11%) ext(38.14%) mat-prune/qs(23.66% / 3.73%) lmr(116.16% / 0.04%)
Root resrc(68.97%) see(0.09%)
EV (203.46%) lazy(99.97%) fut(72.19%) fl(21.86%) nom(5.92%)
43 reply h8d8
allocate time, node-mask 0xfff
num move 11
bestmove f7g7
43 f7g7 (-1838) depth( 7) pvL( 5) ply(15) nps( 717691) pc(14) cttime(26) ctpoll(0)
sec(0.08, 0.07) nodes(48803) q(15.8%) h(50.9%) f(33.4%) FH(94.9%) invalid(0) evasion(42.0%)
Hash(10.8%, qs 7.2%, p 99.7%) matOWrite( 82.10) draw(0) null(6.6% / 14.3%, 0.00%, 0.00%)
Pvs-zero/re(62.15% / 0.89%) ext(39.37%) mat-prune/qs(19.05% / 10.80%) lmr(77.73% / 0.17%)
Root resrc(51.72%) see(0.01%)
EV (182.20%) lazy(100.00%) fut(64.70%) fl(34.47%) nom(0.83%)
44 reply d8c8
allocate time, node-mask 0x1fff
num move 8
bestmove g6g5
44 g6g5 (-2273) depth(10) pvL(11) ply(23) nps( 942348) pc(13) cttime(43) ctpoll(0)
sec(0.24, 0.19) nodes(180931) q(9.0%) h(61.9%) f(29.1%) FH(77.7%) invalid(0) evasion(37.4%)
Hash(13.6%, qs 5.6%, p 99.2%) matOWrite( 82.29) draw(0) null(4.6% / 14.3%, 0.00%, 0.00%)
Pvs-zero/re(70.16% / 1.08%) ext(9.05%) mat-prune/qs(17.68% / 8.33%) lmr(163.00% / 0.31%)
Root resrc(52.94%) see(0.03%)
EV (146.15%) lazy(100.00%) fut(69.59%) fl(29.85%) nom(0.55%)
45 reply c8e6
allocate time, node-mask 0x1fff
num move 9
!!!HASH ERROR ttmove
pc 0, from 11, to 6, b4a7q
bestmove g5g6
45 g5g6 (-2022) depth( 9) pvL( 6) ply(21) nps( 885385) pc(12) cttime(56) ctpoll(0)
sec(0.26, 0.35) nodes(309885) q(13.6%) h(56.4%) f(30.1%) FH(95.4%) invalid(0) evasion(38.9%)
Hash(17.4%, qs 9.1%, p 99.3%) matOWrite( 67.07) draw(0) null(4.4% / 8.5%, 0.00%, 0.00%)
Pvs-zero/re(66.08% / 0.42%) ext(27.05%) mat-prune/qs(5.31% / 7.00%) lmr(120.43% / 0.37%)
Root resrc(50.98%) see(0.11%)
EV (175.04%) lazy(100.00%) fut(72.72%) fl(26.77%) nom(0.51%)
46 reply e6d7
allocate time, node-mask 0x1fff
num move 4
!!!HASH ERROR ttmove
pc 0, from 11, to 6, b4a7q
!!!HASH ERROR ttmove
pc 0, from 11, to 6, b4a7q
!!!HASH ERROR ttmove
pc 0, from 11, to 6, b4a7q
bestmove g7h8
46 g7h8 (-1947) depth( 8) pvL( 6) ply(23) nps( 781869) pc(12) cttime(38) ctpoll(0)
sec(0.24, 0.23) nodes(179830) q(11.2%) h(53.8%) f(35.0%) FH(86.8%) invalid(0) evasion(38.2%)
Hash(17.8%, qs 11.2%, p 99.7%) matOWrite( 62.39) draw(0) null(4.1% / 7.0%, 0.00%, 0.00%)
Pvs-zero/re(64.73% / 0.11%) ext(44.42%) mat-prune/qs(3.84% / 6.39%) lmr(94.22% / 0.38%)
Root resrc(31.25%) see(0.97%)
EV (202.29%) lazy(100.00%) fut(71.96%) fl(25.61%) nom(2.43%)
47 reply e5e6
allocate time, node-mask 0x1fff
num move 9
!!!HASH ERROR ttmove
pc 0, from 36, to 17, e5c2q
!!!HASH ERROR ttmove
pc 0, from 36, to 17, e5c2q
bestmove g6g8
47 g6g8 (-2339) depth( 8) pvL( 8) ply(27) nps( 951392) pc(12) cttime(54) ctpoll(0)
sec(0.24, 0.33) nodes(310154) q(20.7%) h(48.5%) f(30.8%) FH(91.9%) invalid(0) evasion(41.2%)
Hash(15.9%, qs 8.3%, p 99.8%) matOWrite( 72.43) draw(0) null(6.8% / 6.7%, 0.00%, 0.00%)
Pvs-zero/re(65.37% / 0.23%) ext(26.86%) mat-prune/qs(8.17% / 14.01%) lmr(89.62% / 0.31%)
Root resrc(70.97%) see(1.91%)
EV (159.54%) lazy(100.00%) fut(61.93%) fl(34.84%) nom(3.23%)
48 reply e6e7
allocate time, node-mask 0x1fff
num move 13
Opponent followPV, score(-2339) bestmove(g8b8)
bestmove g8b8
48 g8b8 (-2795) depth(10) pvL( 2) ply(27) nps( 1020147) pc(12) cttime(96) ctpoll(0)
sec(0.23, 0.61) nodes(627391) q(12.2%) h(53.5%) f(34.3%) FH(85.0%) invalid(0) evasion(43.6%)
Hash(19.0%, qs 9.2%, p 99.9%) matOWrite( 76.63) draw(0) null(5.0% / 10.7%, 0.00%, 0.00%)
Pvs-zero/re(65.83% / 0.44%) ext(41.91%) mat-prune/qs(3.90% / 7.01%) lmr(100.52% / 0.26%)
Root resrc(37.78%) see(1.24%)
EV (175.30%) lazy(100.00%) fut(70.55%) fl(29.04%) nom(0.42%)
49 reply e7e8n
allocate time, node-mask 0x1fff
num move 10
single move
bestmove b8e8
49 b8e8 (-2595) depth( 4) pvL( 1) ply( 9) nps( 1020147) pc(11) cttime(8) ctpoll(0)
sec(0.19, 0.00) nodes(2781) q(4.9%) h(51.4%) f(43.7%) FH(86.6%) invalid(0) evasion(38.3%)
Hash(13.0%, qs 19.9%, p 100.0%) matOWrite( 76.21) draw(0) null(2.6% / 6.2%, 0.00%, 0.00%)
Pvs-zero/re(55.70% / 1.74%) ext(70.86%) mat-prune/qs(4.44% / 2.11%) lmr(42.55% / 4.84%)
Root resrc(30.77%) see(0.00%)
EV (262.32%) lazy(100.00%) fut(71.23%) fl(26.63%) nom(2.14%)
50 reply d7e8
allocate time, node-mask 0x1fff
num move 2
!!!HASH ERROR ttmove
pc 0, from 0, to 0, a1a1
bestmove h8g7
50 h8g7 (-3193) depth( 9) pvL( 2) ply(23) nps( 880644) pc(10) cttime(45) ctpoll(0)
sec(0.18, 0.24) nodes(213116) q(9.9%) h(59.7%) f(30.5%) FH(75.8%) invalid(0) evasion(41.2%)
Hash(30.6%, qs 12.5%, p 99.4%) matOWrite( 64.54) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(69.92% / 2.59%) ext(8.33%) mat-prune/qs(8.01% / 10.06%) lmr(162.40% / 0.67%)
Root resrc(72.22%) see(0.03%)
EV (146.85%) lazy(100.00%) fut(71.45%) fl(28.55%) nom(0.00%)
51 reply b3b4
allocate time, node-mask 0x1fff
num move 3
bestmove g7f6
51 g7f6 (-3293) depth( 8) pvL( 8) ply(21) nps( 895819) pc(10) cttime(43) ctpoll(0)
sec(0.18, 0.24) nodes(218580) q(5.6%) h(60.5%) f(33.9%) FH(75.6%) invalid(0) evasion(39.2%)
Hash(25.9%, qs 11.2%, p 99.6%) matOWrite( 43.53) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(70.65% / 0.32%) ext(42.44%) mat-prune/qs(0.00% / 3.95%) lmr(139.15% / 0.19%)
Root resrc(50.00%) see(0.03%)
EV (173.02%) lazy(100.00%) fut(76.00%) fl(23.86%) nom(0.14%)
52 reply e8c6
allocate time, node-mask 0x1fff
num move 5
bestmove f6f7
52 f6f7 (-3493) depth( 8) pvL( 4) ply(21) nps( 817523) pc(9) cttime(36) ctpoll(0)
sec(0.17, 0.20) nodes(159417) q(18.1%) h(53.2%) f(28.7%) FH(85.8%) invalid(0) evasion(41.5%)
Hash(27.7%, qs 15.7%, p 99.6%) matOWrite( 63.49) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(69.67% / 1.99%) ext(7.44%) mat-prune/qs(0.00% / 18.99%) lmr(134.75% / 1.09%)
Root resrc(60.00%) see(0.02%)
EV (151.37%) lazy(100.00%) fut(67.91%) fl(31.22%) nom(0.87%)
53 reply b4b5
allocate time, node-mask 0x1fff
num move 4
bestmove f7g8
53 f7g8 (-7990) depth( 8) pvL( 1) ply(19) nps( 761637) pc(9) cttime(27) ctpoll(0)
sec(0.17, 0.12) nodes(94443) q(10.9%) h(61.9%) f(27.2%) FH(104.1%) invalid(0) evasion(39.1%)
Hash(25.9%, qs 14.4%, p 99.7%) matOWrite( 46.35) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(68.42% / 0.61%) ext(21.66%) mat-prune/qs(0.46% / 0.86%) lmr(154.77% / 0.53%)
Root resrc(37.04%) see(0.29%)
EV (161.29%) lazy(100.00%) fut(76.49%) fl(23.46%) nom(0.05%)
54 reply c6d7
allocate time, node-mask 0x1fff
num move 2
bestmove g8h8
54 g8h8 (-7990) depth( 2) pvL( 1) ply( 5) nps( 761637) pc(9) cttime(4) ctpoll(0)
sec(0.18, 0.00) nodes(129) q(32.6%) h(45.0%) f(22.5%) FH(203.4%) invalid(0) evasion(42.8%)
Hash(43.3%, qs 60.0%, p 100.0%) matOWrite( 60.00) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(42.64% / 10.91%) ext(24.14%) mat-prune/qs(0.00% / 0.00%) lmr(0.00% / nan%)
Root resrc(25.00%) see(0.00%)
EV (156.00%) lazy(100.00%) fut(73.08%) fl(25.00%) nom(1.92%)
55 reply b5b6
allocate time, node-mask 0x1fff
num move 1
single move
bestmove h8g8
55 h8g8 (-1500) depth( 2) pvL( 1) ply( 0) nps( 761637) pc(9) cttime(5) ctpoll(0)
sec(0.19, 0.00) nodes(129) q(32.6%) h(45.0%) f(22.5%) FH(203.4%) invalid(0) evasion(42.3%)
Hash(43.3%, qs 60.0%, p 100.0%) matOWrite( 60.00) draw(0) null(0.0% / nan%, nan%, nan%)
Pvs-zero/re(42.64% / 10.91%) ext(24.14%) mat-prune/qs(0.00% / 0.00%) lmr(0.00% / nan%)
Root resrc(25.00%) see(0.00%)
EV (158.00%) lazy(100.00%) fut(72.15%) fl(24.68%) nom(3.16%)
56 reply b6b7
allocate time, node-mask 0x1fff
num move 2
bestmove g8h8
56 g8h8 (-7998) depth(-1) pvL( 1) ply( 0) nps( 761637) pc(9) cttime(1) ctpoll(0)
sec(0.20, 0.00) nodes(0) q(nan%) h(nan%) f(nan%) FH(nan%) invalid(0) evasion(0.0%)
Hash(100.0%, qs nan%, p 100.0%) matOWrite( nan) draw(0) null(nan% / nan%, nan%, nan%)
Pvs-zero/re(nan% / nan%) ext(nan%) mat-prune/qs(nan% / nan%) lmr(nan% / nan%)
Root resrc(nan%) see(nan%)
EV (inf%) lazy(100.00%) fut(0.00%) fl(0.00%) nom(100.00%)
User avatar
OliverUwira
Posts: 170
Joined: Mon Sep 13, 2010 9:57 am
Location: Frankfurt am Main

Re: Help - can't clear bug with tt-move.

Post by OliverUwira »

Chan Rasjid wrote: I think my loop is correct; (p--) is post decrement which decrements after the comparison; within the loop body, p would be pTT+3, pTT+2,pTT+1,pTT+0.
Point taken 8-)

Ok, some more questions.

Code: Select all

            assert(tt->move ? is_move_available(tt->move, side) : 1); 
#if 1 
            if (tt->move) { 
                char buf[8]; 
                if (is_move_available(tt->move, side)) { 
                   sendlog("OK ttmove\n"); 
                } else { 
                   //fails in actual matches in release  mode; pc could be  0 which is a bug 
                   sendlog("!!!HASH ERROR ttmove\n"); 
                   sendlog("pc %d, from %d, to %d, %s\n", MOVE_PC(tt->move), 
                           FROM(tt->move), TO(tt->move) , move_string(tt->move, buf)); 
                } 
            } 
#endif 
First how is it possible that the assert directly above the #if passes but then the else block within the #if #endif is entered?

Second, is there something that is done in release mode but not in auto-play-mode? Surely, the protocol handling. The hash table would be intitialised to the requested size there. Something else?

Third, could you also give the code of PROBE_MOVE() - it looks like a suspect.
kongsian
Posts: 46
Joined: Thu Jun 15, 2006 11:21 am

Re: Help - can't clear bug with tt-move.

Post by kongsian »

OliverUwira wrote:

Code: Select all

            assert(tt->move ? is_move_available(tt->move, side) : 1); 
#if 1 
            if (tt->move) { 
                char buf[8]; 
                if (is_move_available(tt->move, side)) { 
                   sendlog("OK ttmove\n"); 
                } else { 
                   //fails in actual matches in release  mode; pc could be  0 which is a bug 
                   sendlog("!!!HASH ERROR ttmove\n"); 
                   sendlog("pc %d, from %d, to %d, %s\n", MOVE_PC(tt->move), 
                           FROM(tt->move), TO(tt->move) , move_string(tt->move, buf)); 
                } 
            } 
#endif 
First how is it possible that the assert directly above the #if passes but then the else block within the #if #endif is entered?
Good catch! The same with MOVE_PC(tt->move). It passes the assert (>=1 & <=6) but when you print it, pc=0? Looks like tt->move is being trashed by something. How about printing tt->move, tt->depth between all the asserts to make sure it doesn't get change? Could be something is clobbering your tt structure.

Kong Sian