23static unsigned long long click()
25#if defined(USE_GAS_X64)
29 "rdtsc" :
"=a" (a),
"=d" (d));
30 return a | (((
unsigned long long)d) << 32);
32#elif defined(USE_GAS_X86)
49 const char *b =
"OOOOOOOOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOOOOOOOO O";
54 const int N_WARMUP = 1000;
55 const int N_REPEAT = 1000000;
56 unsigned long long c, overhead;
57 double t, t_mean, t_var, t_min, t_max;
60 for (i = 0; i < N_WARMUP; ++i) {
65 for (i = 0; i < N_REPEAT; ++i) {
74 for (x =
A1; x <
PASS; ++x) {
76 board.
player &= ~x_to_bit(x);
80 for (i = 0; i < N_WARMUP; ++i) {
86 for (i = 0; i < N_REPEAT; ++i) {
91 t = ((double)(c - overhead)) / N_REPEAT;
94 if (t < t_min) t_min = t;
95 if (t > t_max) t_max = t;
102 t_var = t_var / x - (t_mean * t_mean);
104 printf(
"board_get_move: %.2f < %.2f +/- %.2f < %.2f\n", t_min, t_mean, sqrt(t_var), t_max);
112 const char *b =
"OOOOOOOOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOOOOOOOO O";
116 const int N_WARMUP = 1000;
117 const int N_REPEAT = 1000000;
118 unsigned long long c, overhead;
119 double t, t_mean, t_var, t_min, t_max;
122 for (i = 0; i < N_WARMUP; ++i) {
127 for (i = 0; i < N_REPEAT; ++i) {
132 t_mean = t_var = 0.0;
136 for (x =
A1; x <
PASS; ++x) {
138 board.
player &= ~x_to_bit(x);
142 for (i = 0; i < N_WARMUP; ++i) {
148 for (i = 0; i < N_REPEAT; ++i) {
153 t = ((double)(c - overhead)) / N_REPEAT;
156 if (t < t_min) t_min = t;
157 if (t > t_max) t_max = t;
164 t_var = t_var / x - (t_mean * t_mean);
166 printf(
"count_last_flip: %.2f < %.2f +/- %.2f < %.2f\n", t_min, t_mean, sqrt(t_var), t_max);
174 const char *b =
"OOOOOOOOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOOOOOOOO O";
178 const int N_WARMUP = 1000;
179 const int N_REPEAT = 1000000;
180 unsigned long long c, overhead;
181 double t, t_mean, t_var, t_min, t_max;
185 for (i = 0; i < N_WARMUP; ++i) {
190 for (i = 0; i < N_REPEAT; ++i) {
195 t_mean = t_var = 0.0;
199 for (x =
A1; x <
PASS; ++x) {
201 board.
player &= ~x_to_bit(x);
205 for (i = 0; i < N_WARMUP; ++i) {
211 for (i = 0; i < N_REPEAT; ++i) {
216 t = ((double)(c - overhead)) / N_REPEAT;
219 if (t < t_min) t_min = t;
220 if (t > t_max) t_max = t;
227 t_var = t_var / x - (t_mean * t_mean);
229 printf(
"board_score_1: %.2f < %.2f +/- %.2f < %.2f\n", t_min, t_mean, sqrt(t_var), t_max);
237 const char *b =
"OOOOOOOOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOOOOOOOO O";
241 const int N_WARMUP = 1000;
242 const int N_REPEAT = 1000000;
243 unsigned long long c, overhead;
244 double t, t_mean, t_var, t_min, t_max;
250 for (i = 0; i < N_WARMUP; ++i) {
251 board.
player &= ~x_to_bit(x);
257 for (i = 0; i < N_REPEAT; ++i) {
258 board.
player &= ~x_to_bit(x);
264 t_mean = t_var = 0.0;
268 for (x =
A1; x <
PASS; ++x) {
273 for (i = 0; i < N_WARMUP; ++i) {
274 board.
player &= ~x_to_bit(x);
282 for (i = 0; i < N_REPEAT; ++i) {
283 board.
player &= ~x_to_bit(x);
290 t = ((double)(c - overhead)) / N_REPEAT / 2;
293 if (t < t_min) t_min = t;
294 if (t > t_max) t_max = t;
301 t_var = t_var / x - (t_mean * t_mean);
303 printf(
"mobility: %.2f < %.2f +/- %.2f < %.2f\n", t_min, t_mean, sqrt(t_var), t_max);
311 const char *b =
"OOOOOOOOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOXXXXXXOOOOOOOOO O";
315 const int N_WARMUP = 1000;
316 const int N_REPEAT = 1000000;
317 unsigned long long c, overhead;
318 double t, t_mean, t_var, t_min, t_max;
324 for (i = 0; i < N_WARMUP; ++i) {
325 board.
player &= ~x_to_bit(x);
331 for (i = 0; i < N_REPEAT; ++i) {
332 board.
player &= ~x_to_bit(x);
338 t_mean = t_var = 0.0;
342 for (x =
A1; x <
PASS; ++x) {
347 for (i = 0; i < N_WARMUP; ++i) {
348 board.
player &= ~x_to_bit(x);
355 for (i = 0; i < N_REPEAT; ++i) {
356 board.
player &= ~x_to_bit(x);
362 t = ((double)(c - overhead)) / N_REPEAT;
365 if (t < t_min) t_min = t;
366 if (t > t_max) t_max = t;
373 t_var = t_var / x - (t_mean * t_mean);
375 printf(
"stability: %.2f < %.2f +/- %.2f < %.2f\n", t_min, t_mean, sqrt(t_var), t_max);
383 printf(
"The unit of the results is CPU cycles\n");
void bench(void)
perform various performance tests.
Definition bench.c:381
static void bench_stability()
Definition bench.c:309
static void bench_mobility()
Definition bench.c:235
static void bench_move_generator()
Definition bench.c:47
static void bench_count_last_flip()
Definition bench.c:110
static unsigned long long click()
Definition bench.c:23
static void bench_board_score_1()
Definition bench.c:172
unsigned long long board_get_move(const Board *board, const int x, Move *move)
Compute a move.
Definition board.c:438
int get_stability(const unsigned long long P, const unsigned long long O)
Estimate the stability.
Definition board.c:1067
void board_init(Board *board)
Set a board to the starting position.
Definition board.c:280
int get_mobility(const unsigned long long P, const unsigned long long O)
Count legal moves.
Definition board.c:833
int board_set(Board *board, const char *string)
Set a board from a string description.
Definition board.c:154
#define SCORE_MAX
Definition const.h:58
@ PASS
Definition const.h:37
@ A1
Definition const.h:29
@ WHITE
Definition const.h:43
int(* count_last_flip[])(const unsigned long long)
Definition count_flip.c:1234
int board_score_1(const Board *board, const int beta, const int x)
Get the final score.
Definition endgame.c:96
char * move_to_string(const int x, const int player, char *s)
Print out a move.
Definition move.c:76
Options options
Definition options.c:22
unsigned long long player
Definition board.h:27
unsigned long long opponent
Definition board.h:27
int verbosity
Definition options.h:32
Miscellaneous utilities header.
long long cpu_clock(void)