Line data Source code
1 : #pragma once
2 :
3 : #include "definition.hpp"
4 : #include "logging.hpp"
5 :
6 : /*!
7 : * This array is used to store statistic of search and evaluation
8 : * for each thread.
9 : */
10 : struct Stats {
11 : enum StatId {
12 : sid_nodes = 0,
13 : sid_qnodes,
14 : sid_tthits,
15 : sid_ttInsert,
16 : sid_ttPawnhits,
17 : sid_ttPawnInsert,
18 : sid_ttschits,
19 : sid_ttscmiss,
20 : sid_ttAlphaCut,
21 : sid_ttExactCut,
22 : sid_ttBetaCut,
23 : sid_ttAlphaLateCut,
24 : sid_ttBetaLateCut,
25 : sid_ttWrongBound,
26 : sid_staticScoreIsFromSearch,
27 : sid_qsearchInCheck,
28 : sid_qEvalNullMoveTrick,
29 : sid_materialTableHits,
30 : sid_materialTableHitsSearch,
31 : sid_materialTableMiss,
32 : sid_materialTableMissSearch,
33 : sid_materialTableHelper,
34 : sid_materialTableDraw,
35 : sid_materialTableDraw2,
36 : sid_staticNullMove,
37 : sid_threatsPruning,
38 : sid_lmr,
39 : sid_lmrcap,
40 : sid_lmrFail,
41 : sid_pvsFail,
42 : sid_razoringTry,
43 : sid_razoring,
44 : sid_razoringNoThreat,
45 : sid_razoringNoQ,
46 : sid_nullMoveTry,
47 : sid_nullMoveTry2,
48 : sid_nullMoveTry3,
49 : sid_nullMove,
50 : sid_nullMove2,
51 : sid_probcutTry,
52 : sid_probcutNoCap,
53 : sid_probcutMoves,
54 : sid_probcutTry2,
55 : sid_probcut,
56 : sid_lmp,
57 : sid_lmrAR,
58 : sid_historyPruning,
59 : sid_futility,
60 : sid_CMHPruning,
61 : sid_capHistPruning,
62 : sid_see,
63 : sid_see2,
64 : sid_seeQuiet,
65 : sid_seeQuiet2,
66 : sid_seeQuiet3,
67 : sid_iid,
68 : sid_iir,
69 : sid_ttalpha,
70 : sid_ttbeta, // beta cut from the tt move
71 : sid_alpha,
72 : sid_beta,
73 : sid_beta_gc, // beta cut from good cap
74 : sid_beta_p, // beta cut from prom
75 : sid_beta_k1, // beta cut from killer
76 : sid_beta_k2,
77 : sid_beta_k3,
78 : sid_beta_k4,
79 : sid_beta_c, // beta cut from counter
80 : sid_beta_q, // beta cut other quiet
81 : sid_beta_bc, // beta cut bad cap
82 : sid_alphanoupdate,
83 : sid_qttalpha,
84 : sid_qttbeta,
85 : sid_qalpha,
86 : sid_qbeta,
87 : sid_qalphanoupdate,
88 : sid_checkExtension,
89 : sid_checkExtension2,
90 : sid_recaptureExtension,
91 : sid_castlingExtension,
92 : sid_CMHExtension,
93 : sid_pawnPushExtension,
94 : sid_singularExtension,
95 : sid_singularExtension2,
96 : sid_singularExtension3,
97 : sid_singularExtension4,
98 : sid_singularExtension5,
99 : sid_singularExtension6,
100 : sid_singularExtension7,
101 : sid_queenThreatExtension,
102 : sid_BMExtension,
103 : sid_mateThreatExtension,
104 : sid_endGameExtension,
105 : sid_goodHistoryExtension,
106 : sid_EGExtension,
107 : sid_dangerExt,
108 : sid_tbHit1,
109 : sid_tbHit2,
110 : sid_tbFail,
111 : sid_dangerPrune,
112 : sid_dangerForwardPrune,
113 : sid_dangerReduce,
114 : sid_hashComputed,
115 : sid_qfutility,
116 : sid_qsee,
117 : sid_deltaAlpha,
118 : sid_deltaBeta,
119 : sid_evalNoKing,
120 : sid_evalStd,
121 : sid_evalNNUE,
122 : sid_evalNNUE2,
123 : sid_PVupdate,
124 : sid_maxid
125 : };
126 :
127 : static constexpr array1d<std::string_view, sid_maxid> Names{
128 : "nodes",
129 : "qnodes",
130 : "tthits",
131 : "ttInsert",
132 : "ttPawnhits",
133 : "ttPawnInsert",
134 : "ttScHits",
135 : "ttScMiss",
136 : "ttAlphaCut",
137 : "ttExactCut",
138 : "ttBetaCut",
139 : "ttAlphaLateCut",
140 : "ttBetaLateCut",
141 : "ttWrongBound",
142 : "staticScoreIsFromSearch",
143 : "qsearchInCheck",
144 : "qEvalNullMoveTrick",
145 : "materialHits",
146 : "materialHitsSearch",
147 : "materialMiss",
148 : "materialMissSearch",
149 : "materialHelper",
150 : "materialDraw",
151 : "materialDraw2",
152 : "staticNullMove",
153 : "threatsPruning",
154 : "lmr",
155 : "lmrcap",
156 : "lmrfail",
157 : "pvsfail",
158 : "razoringTry",
159 : "razoring",
160 : "razoringNoThreat",
161 : "razoringNoQ",
162 : "nullMoveTry",
163 : "nullMoveTry2",
164 : "nullMoveTry3",
165 : "nullMove",
166 : "nullMove2",
167 : "probcutTry",
168 : "probcutNoCap",
169 : "probcutMoves",
170 : "probcutTry2",
171 : "probcut",
172 : "lmp",
173 : "lmrAR",
174 : "historyPruning",
175 : "futility",
176 : "CMHPruning",
177 : "capHistPruning",
178 : "see",
179 : "see2",
180 : "seeQuiet",
181 : "seeQuiet2",
182 : "seeQuiet3",
183 : "iid",
184 : "iir",
185 : "ttalpha",
186 : "ttbeta",
187 : "alpha",
188 : "beta",
189 : "beta_gc",
190 : "beta_p",
191 : "beta_k1",
192 : "beta_k2",
193 : "beta_k3",
194 : "beta_k4",
195 : "beta_c",
196 : "beta_q",
197 : "beta_bc",
198 : "alphanoupdate",
199 : "qttalpha",
200 : "qttbeta",
201 : "qalpha",
202 : "qbeta",
203 : "qalphanoupdate",
204 : "checkExtension",
205 : "checkExtension2",
206 : "recaptureExtension",
207 : "castlingExtension",
208 : "CMHExtension",
209 : "pawnPushExtension",
210 : "singularExtension",
211 : "singularExtension2",
212 : "singularExtension3",
213 : "singularExtension4",
214 : "singularExtension5",
215 : "singularExtension6",
216 : "singularExtension7",
217 : "queenThreatExtension",
218 : "BMExtension",
219 : "mateThreatExtension",
220 : "endGameExtension",
221 : "goodHistoryExtension",
222 : "EGExtension",
223 : "dangerExtenstion",
224 : "TBHit1",
225 : "TBHit2",
226 : "TBFail",
227 : "dangerPrune",
228 : "dangerForwardPrune",
229 : "dangerReduce",
230 : "computedHash",
231 : "qfutility",
232 : "qsee",
233 : "deltaAlpha",
234 : "deltaBeta",
235 : "evalNoKing",
236 : "evalStd",
237 : "evalNNUE",
238 : "evalNNUE2",
239 : "PVupdate"};
240 :
241 : array1d<Counter, sid_maxid> counters;
242 :
243 : #ifdef WITH_STATS
244 37586356 : FORCE_FINLINE void incr(StatId id) { ++counters[id]; }
245 : #else
246 : FORCE_FINLINE void incr(StatId) {}
247 : #endif
248 :
249 275 : void init() {
250 275 : Logging::LogIt(Logging::logInfo) << "Init stat";
251 : counters.fill(0ull);
252 275 : }
253 : };
254 :
|