My Project
stats.c
Go to the documentation of this file.
1
14#include "stats.h"
15#include "options.h"
16#include "search.h"
17#include "ybwc.h"
18
19#include <stdio.h>
20
22
27{
28 int i, j;
29
38
39 for (i = 0; i < MAX_THREADS; ++i) {
41 statistics.n_task[i] = 0;
42 }
52
67
81
82 for (j = 0; j < BOARD_SIZE; ++j)
83 for (i = 0; i < 10; ++i) {
85 statistics.n_good_square[j][i] = 0;
86 }
87
90}
91
98{
99 int i;
100
102 statistics.n_nodes += search->n_nodes;
103 for (i = 0; i < search->tasks->n; ++i) {
104 statistics.n_task_nodes[i] = search->tasks->task[i].n_nodes;
105 statistics.n_task[i] = search->tasks->task[i].n_calls;
106 }
107}
108
112void statistics_print(FILE *f)
113{
114 int i, j;
115
117
119 unsigned long long n_helper_nodes = statistics.n_parallel_nodes;
120 fprintf(f, "YBWC:\n");
121 fprintf(f, "nodes splitted: %12llu (%6.2f%%)\n", statistics.n_split_success, 100.0 * statistics.n_split_success / statistics.n_split_try);
122 fprintf(f, "master helper tasks: %12llu (%6.2f%%)\n", statistics.n_master_helper, 100.0 * statistics.n_master_helper / statistics.n_split_success);
123 fprintf(f, "slave nodes stopped: %12llu (%6.2f%%)\n", statistics.n_stopped_slave, 100.0 * statistics.n_stopped_slave / statistics.n_split_success);
124 fprintf(f, "slave master stopped:%12llu (%6.2f%%) = %12llu\n", statistics.n_stopped_master, 100.0 * statistics.n_stopped_master / statistics.n_split_success, statistics.n_wake_up);
125 fprintf(f, "slave nodes waited: %12llu (%6.2f%%)\n", statistics.n_waited_slave, 100.0 * statistics.n_waited_slave / statistics.n_split_success);
126 fprintf(f, "main thread (%llu nodes)\n", statistics.n_nodes);
127 for (i = 1; i < options.n_task; ++i) {
128 fprintf(f, "task %d called %llu times (%llu nodes)\n", i, statistics.n_task[i], statistics.n_task_nodes[i]);
129 n_helper_nodes -= statistics.n_task_nodes[i];
130 }
131 fprintf(f, "helper (%llu nodes)\n", n_helper_nodes);
132 fprintf(f, "\n\n");
133 }
134
135
137 fprintf(f, "Search:\n");
138 fprintf(f, "PVS_root = %12llu\n", statistics.n_PVS_root);
139 fprintf(f, "PVS+NWS_midgame = %12llu + %12llu\n", statistics.n_PVS_midgame, statistics.n_NWS_midgame);
140 fprintf(f, "PVS+NWS_shallow = %12llu + %12llu\n", statistics.n_PVS_shallow, statistics.n_NWS_shallow);
141 fprintf(f, "search_eval_2 = %12llu\n", statistics.n_search_eval_2);
142 fprintf(f, "search_eval_1 = %12llu\n", statistics.n_search_eval_1);
143 fprintf(f, "search_eval_0 = %12llu\n\n", statistics.n_search_eval_0);
144 fprintf(f, "NWS_endgame = %12llu\n", statistics.n_NWS_endgame);
145 fprintf(f, "NWS_solve_4 = %12llu\n", statistics.n_search_solve_4);
146 fprintf(f, "NWS_solve_3 = %12llu\n", statistics.n_search_solve_3);
147 fprintf(f, "NWS_solve_2 = %12llu\n", statistics.n_board_solve_2);
148 fprintf(f, "search_solve_0 = %12llu\n", statistics.n_search_solve_0);
149 fprintf(f, "search_solve = %12llu\n\n\n", statistics.n_search_solve);
150 }
151
153 fprintf(f, "HashTable:\n");
154 fprintf(f, "Probe: %llu found: %llu (%6.2f%%)\n", statistics.n_hash_search, statistics.n_hash_found, 100.0 * statistics.n_hash_found / statistics.n_hash_search);
155 fprintf(f, "New: %llu Update: %llu Ugrade: %llu Remove: %llu\n",
157 }
158
159 if (statistics.n_hash_n) {
160 fprintf(f, "HashTable collision:\n");
161 fprintf(f, "Probes: %llu Collisions: %llu (%6.2f%%)\n", statistics.n_hash_n, statistics.n_hash_collision, 100.0 * statistics.n_hash_collision / statistics.n_hash_n);
162 }
163 if (SQUARE_STATS(1) +0) {
164 for (j = 0; j < BOARD_SIZE; ++j) {
165 fprintf(f, "\n%2d: ", j);
166 for (i = 0; i < 9; ++i) {
167 if (statistics.n_played_square[j][i])
168 fprintf(f, "[%d] = %.1f, ", i, 100.0 * statistics.n_good_square[j][i]/statistics.n_played_square[j][i]);
169 }
170 }
171 fprintf(f, "\n\n");
172 }
173
174 if (CUTOFF_STATS(1) +0) {
176 fprintf(f, "Transposition cutoff:\n");
177 fprintf(f, "try = %llu, low cutoff = %llu (%6.2f%%), high cutoff = %llu (%6.2f%%)\n",
181 }
183 fprintf(f, "Stability cutoff:\n");
184 fprintf(f, "try = %llu, low cutoff = %llu (%6.2f%%)\n",
187 }
188 if (statistics.n_etc_try) {
189 fprintf(f, "(E)nhance (T)ransposition & (S)tability (C)utoff:\n");
190 fprintf(f, "try = %llu, high ETC = %llu (%6.2f%%), high ESC = %llu (%6.2f%%)\n",
194 }
195 fprintf(f, "\n\n");
196 }
197
199 fprintf(f, "Probcut:\n");
200 fprintf(f, "\ttry = %llu,\n\tlow cutoff = %llu try (%6.2f%%) %llu success (%6.2f%% (%6.2f%%)),\n\thigh cutoff = %llu try (%6.2f%%) %llu success (%6.2f%% (%6.2f%%))\n",
206 }
207
209 fprintf(f, "NWS candidate as best root move:\n");
210 fprintf(f, "Candidate: %llu, Best Move: %llu (%6.2f%%), Bad Candidate: %llu (%6.2f%%)\n",
214 );
215 }
216}
217
#define BOARD_SIZE
Definition const.h:21
#define MAX_THREADS
Definition const.h:15
Options options
Definition options.c:22
void statistics_sum_nodes(Search *search)
Cumulate node counts from the last search.
Definition stats.c:97
void statistics_init(void)
Intialization of the statistics.
Definition stats.c:26
Statistics statistics
Definition stats.c:21
void statistics_print(FILE *f)
Print statistics.
Definition stats.c:112
Statistics header.
#define SQUARE_STATS(x)
Definition stats.h:29
#define CUTOFF_STATS(x)
Definition stats.h:31
int n_task
Definition options.h:29
Definition search.h:95
struct TaskStack * tasks
Definition search.h:109
volatile unsigned long long child_nodes
Definition search.h:156
volatile unsigned long long n_nodes
Definition search.h:155
Definition stats.h:61
unsigned long long n_wake_up
Definition stats.h:101
unsigned long long n_stopped_slave
Definition stats.h:99
unsigned long long n_master_helper
Definition stats.h:97
unsigned long long n_NWS_endgame
Definition stats.h:79
unsigned long long n_search_eval_1
Definition stats.h:88
unsigned long long n_esc_high_cutoff
Definition stats.h:108
unsigned long long n_PVS_root
Definition stats.h:76
unsigned long long n_search_solve_4
Definition stats.h:86
unsigned long long n_stability_try
Definition stats.h:104
unsigned long long n_probcut_high_try
Definition stats.h:107
unsigned long long n_hash_try
Definition stats.h:103
unsigned long long n_task_nodes[MAX_THREADS]
Definition stats.h:63
unsigned long long n_probcut_high_cutoff
Definition stats.h:107
unsigned long long n_board_solve_2
Definition stats.h:84
unsigned long long n_probcut_low_cutoff
Definition stats.h:106
unsigned long long n_search_solve_3
Definition stats.h:85
unsigned long long n_NWS_candidate
Definition stats.h:113
unsigned long long n_etc_try
Definition stats.h:108
unsigned long long n_NWS_bad_candidate
Definition stats.h:114
unsigned long long n_waited_slave
Definition stats.h:98
unsigned long long n_stopped_master
Definition stats.h:100
unsigned long long n_PVS_shallow
Definition stats.h:80
unsigned long long n_search_eval_0
Definition stats.h:87
unsigned long long n_task[MAX_THREADS]
Definition stats.h:64
unsigned long long n_search_solve_0
Definition stats.h:83
unsigned long long n_split_success
Definition stats.h:96
unsigned long long n_search_eval_2
Definition stats.h:89
unsigned long long n_search_solve
Definition stats.h:82
unsigned long long n_hash_found
Definition stats.h:72
unsigned long long n_hash_upgrade
Definition stats.h:68
unsigned long long n_parallel_nodes
Definition stats.h:65
unsigned long long n_split_try
Definition stats.h:95
unsigned long long n_hash_n
Definition stats.h:74
unsigned long long n_hash_low_cutoff
Definition stats.h:103
unsigned long long n_nodes
Definition stats.h:62
unsigned long long n_NWS_shallow
Definition stats.h:81
unsigned long long n_hash_high_cutoff
Definition stats.h:103
unsigned long long n_hash_search
Definition stats.h:71
unsigned long long n_played_square[BOARD_SIZE][10]
Definition stats.h:110
unsigned long long n_NWS_midgame
Definition stats.h:78
unsigned long long n_hash_update
Definition stats.h:67
unsigned long long n_good_square[BOARD_SIZE][10]
Definition stats.h:111
unsigned long long n_hash_new
Definition stats.h:69
unsigned long long n_probcut_try
Definition stats.h:105
unsigned long long n_stability_low_cutoff
Definition stats.h:104
unsigned long long n_hash_collision
Definition stats.h:73
unsigned long long n_hash_remove
Definition stats.h:70
unsigned long long n_PVS_midgame
Definition stats.h:77
unsigned long long n_etc_high_cutoff
Definition stats.h:108
unsigned long long n_probcut_low_try
Definition stats.h:106
int n
Definition ybwc.h:97
Task * task
Definition ybwc.h:95
unsigned long long n_calls
Definition ybwc.h:37
unsigned long long n_nodes
Definition ybwc.h:38
Parallel search header.