AI Chess Lab AI Chess Software, research, lab notes, and durable public pages.

Research

GPUPerft CDP2 Verify Corpus

Research Links

Artifact
Download artifact
Source
View source

This article documents the validation corpus built into the GPUPerft CDP2 --verify command. The set combines well-known Chess Programming Wiki perft positions, targeted mate-net positions, compact endgames, and deterministic random-walk game positions. Together these positions exercise castling, en passant, promotions, checks, pins, sparse endgames, and deeper game-state combinations.

The values below are reference node counts for the listed depth. Each listed value was validated with Stockfish 18 before being incorporated into the --verify corpus. The standard corpus records depth 8 and depth 9 for every position. The starting position is also carried to depth 10 and depth 11 because it is the primary long-run validation and throughput reference.

.verify-corpus-wrap {
margin: 1.25rem 0;
overflow-x: auto;
}
.verify-corpus {
border-collapse: separate;
border-spacing: 0;
width: 100%;
min-width: 1120px;
font-size: 0.94rem;
line-height: 1.35;
border: 1px solid #d7dde8;
border-radius: 12px;
overflow: hidden;
}
.verify-corpus th {
background: #162033;
color: #ffffff;
text-align: left;
font-weight: 650;
padding: 0.75rem 0.85rem;
border-right: 1px solid rgba(255,255,255,0.16);
white-space: nowrap;
}
.verify-corpus td {
padding: 0.72rem 0.85rem;
vertical-align: top;
border-top: 1px solid #e8edf5;
border-right: 1px solid #eef2f7;
background: #ffffff;
}
.verify-corpus tr:nth-child(even) td {
background: #f8fafc;
}
.verify-corpus td.position {
width: 16rem;
font-weight: 620;
color: #192234;
}
.verify-corpus td.fen {
width: 33rem;
font-family: ui-monospace, SFMono-Regular, Consolas, “Liberation Mono”, monospace;
font-size: 0.86rem;
color: #1b365d;
overflow-wrap: anywhere;
}
.verify-corpus td.num {
text-align: right;
white-space: nowrap;
font-variant-numeric: tabular-nums;
color: #10233f;
}
.verify-corpus td.na {
text-align: center;
color: #738096;
}
.verify-note {
margin: 0.75rem 0 1.1rem;
padding: 0.85rem 1rem;
border-left: 4px solid #3b6ea8;
background: #f3f7fc;
color: #25364f;
}

Reading the table: d8, d9, d10, and d11 refer to perft depth. Blank higher-depth cells mean that depth is not part of the standard built-in verify target for that position.
Position FEN d8 nodes d9 nodes d10 nodes d11 nodes
Standard chess starting position rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq – 0 1 84,998,978,956 2,439,530,234,167 69,352,859,712,417 2,097,651,003,696,806
Kiwipete castling, pin, and tactical validation position r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq – 0 1 15,493,944,087,984 708,027,759,953,502
En passant and endgame validation position 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w – – 0 1 3,009,794,393 50,086,749,815
Promotion and castling-rights validation position r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq – 0 1 1,209,257,875,296 47,475,324,529,267
Mirrored promotion and castling-rights validation position r2q1rk1/pP1p2pp/Q4n2/bbp1p3/Np6/1B3NBn/pPPP1PPP/R3K2R b KQ – 0 1 1,209,257,875,296 47,475,324,529,267
Tactical validation position with promoted-piece and castling-state edge cases rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ – 1 8 4,509,347,606,439 195,961,227,207,328
Complex middlegame validation position with dense legal move generation r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w – – 0 10 11,923,589,843,526 490,154,852,788,714
Simple queen-and-king mate net 7k/6pp/6Q1/5K2/8/8/8/8 w – – 0 1 115,390,317 2,929,540,282
King-and-queen versus king mate-net position 8/8/8/8/3Q4/k7/8/1K6 w – – 0 1 56,019,809 1,465,773,248
Promotion-race mate-net position 5B2/6P1/1p6/8/1N6/kP6/2K5/8 w – – 0 1 9,825,624 237,644,627
Light-piece mate-net tactical position 7r/p3R3/BpkP4/2b1P1p1/8/1K2n1B1/P5P1/8 w – – 1 1 244,206,784,213 6,790,744,524,028
Kings-only legal-move baseline 8/8/8/3k4/8/4K3/8/8 w – – 0 1 5,779,699 39,116,077
King-and-pawn versus king endgame 8/8/8/3k4/8/4K3/4P3/8 w – – 0 1 6,631,390 52,514,066
Rook-versus-king endgame 8/8/8/3k4/8/4K3/4R3/8 w – – 0 1 117,915,246 2,369,689,422
Queen-versus-king endgame 8/8/8/3k4/8/4K3/4Q3/8 w – – 0 1 217,233,519 6,031,342,299
Deterministic random-walk middlegame, ply 24 r3k1nr/pppbq2p/6nb/P4pp1/2pP4/2P5/1P1NPPPP/R1B1KBR1 w Qkq – 1 13 767,960,814,592 19,922,750,017,528
Deterministic random-walk late-middlegame, ply 48 3rkb1r/5q2/6Pn/1p1p1p1p/p4P2/p1P3PN/P2P4/RN3K1R w k – 0 25 127,001,516,784 2,865,809,814,110
Deterministic random-walk late-game position, ply 64 1r2k3/4p1pr/p7/2p3p1/bP4Pp/2pNP1nB/P7/1RB1K2R w – – 1 33 327,588,202,808 8,640,609,745,333

Use In The Release Process

The --verify corpus is intended to catch both correctness regressions and performance regressions before a GPUPerft CDP2 release artifact is staged. The individual positions are deliberately varied: some produce very dense legal move expansion, some emphasize rare rule handling, and others are compact enough to make exact high-depth checks practical during iteration.

For publication, the table should be treated as a reference list of expected perft values. Timing and throughput measurements are tracked in separate release-validation reports because they depend on hardware, driver state, build flags, and runtime configuration.

Staged Artifact