diff options
Diffstat (limited to 'include/engine')
| -rw-r--r-- | include/engine/threads.h | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/include/engine/threads.h b/include/engine/threads.h index 4815a4c..b5f2163 100644 --- a/include/engine/threads.h +++ b/include/engine/threads.h @@ -5,10 +5,43 @@ #include <stdatomic.h> #include "bitboard.h" +#include "engine/ttable.h" #include "ipc/engine_message.h" #include "ipc/go_args.h" -struct thread_args { +enum { SPLITPOINT_STATE_FREE, SPLITPOINT_STATE_ACTIVE }; +enum { NODE_PV, NODE_CUT, NODE_ALL }; +typedef struct split_point { + atomic_int state; + atomic_int next_move_idx; + atomic_int alpha, beta; + atomic_int best_score; + atomic_int workers; + move_t best_score; + + struct split_point *parent; + int ply; + int node_type; + int confidence; + position_t position_snapshot; + moves_t moves; +} split_point_t; + +struct child_thread_args { + // signal sent by threads manager + atomic_int stop; + + // signal sent by thread + atomic_int finished; + + int id; + go_args_t *go_args; + + position_t position; + int sp_stack; + int +}; +struct root_thread_args { // signal sent by threads manager atomic_int stop; @@ -21,9 +54,14 @@ struct thread_args { engine_message_handler_t *message; }; +typedef union { + struct child_thread_args child_thread_args; + struct root_thread_args root_thread_args; +} thread_args_t; + struct threads { pthread_t *threads; - struct thread_args *args; + thread_args_t *args; size_t count; size_t capacity; @@ -31,11 +69,14 @@ struct threads { engine_messages_t *engine_messages; go_args_t *go_args; position_t *position; + + ttable_t ttable; + void* split_point_pool; }; #ifdef ENGINE_THREADS_INTERNAL void __threads_args_init( - struct thread_args* args, + thread_args_t* args, struct threads *handler, int i ); @@ -48,6 +89,7 @@ bool threads_go_loop(struct threads *handler); bool threads_all_done(struct threads *handler); void threads_cleanup(struct threads *handler); -void *engine_thread(void *args); +void *child_thread(void *args); +void *root_thread(void *args); #endif // ENGINE_THREADS_H |
