ok the code says they don't count reused nodes for npsGuenther wrote:If this is true I see no way to get a reliable bench with LCZero.CMCanavessi wrote:It is not wrong, what may be misleading is the total number of nodes, because of tree reuse. Those are not part of the real speed, it's like cache.Guenther wrote:The displayed speed in kN/s for Leela is wrong in TCEC.Daniel Shawul wrote:What is astounding is that it lost 20-0 against standard scorpio on single core. Your GPU is getting about 1 kN/s that is 3x slower than TCEC's which was getting about 3-4 kN/s.l
See my other post.
It can just print a fictional nps, because it does not show which nodes
are reused and which not.
Code: Select all
// UCI requires long algebraic notation, so use_san=false
std::string pvstring = get_pv(bh, *m_root, false);
float feval = m_root->get_eval(color);
// UCI-like output wants a depth and a cp, so convert winrate to a cp estimate.
int cp = 290.680623072 * tan(3.096181612 * (feval - 0.5));
// same for nodes to depth, assume nodes = 1.8 ^ depth.
int depth = log(float(m_nodes)) / log(1.8);
// To report nodes, use visits.
// - Only includes expanded nodes.
// - Includes nodes carried over from tree reuse.
auto visits = m_root->get_visits();
// To report nps, use m_playouts to exclude nodes added by tree reuse,
// which is similar to a ponder hit. The user will expect to know how
// fast nodes are being added, not how big the ponder hit was.
myprintf_so("info depth %d nodes %d nps %0.f score cp %d time %lld pv %s\n",
depth, visits, 1000.0 * m_playouts / (elapsed + 1),
cp, elapsed, pvstring.c_str());
}
For the example below that is 7.758*199 ~ 1544 nodes vs. 501 reused nodes (total 2045)
Code: Select all
464246 <LCZero_06ID139(0): info depth 19 nodes 2045 nps 199 score cp 17 winrate 53.46% time 7758 pv dxe4 Nxe4 Nbd2 Bf6 Bxf6 Nxf6 h3 h6 a3 d5 c4 dxc4 bxc4 Bf5