//// Constants and variables
////
-const int MAX_THREADS = 8;
-const int ACTIVE_SPLIT_POINTS_MAX = 8;
+const int MAX_THREADS = 16;
+const int MAX_ACTIVE_SPLIT_POINTS = 8;
////
Depth depth;
bool pvNode, mateThreat;
Value beta;
- int ply, master;
+ int ply;
+ int master;
+ Move threatMove;
SearchStack sstack[MAX_THREADS][PLY_MAX_PLUS_2];
// Const pointers to shared data
// Shared data
Lock lock;
+ volatile int64_t nodes;
volatile Value alpha;
volatile Value bestValue;
- volatile int moves;
- volatile bool stopRequest;
+ volatile int moveCount;
+ volatile bool betaCutoff;
volatile int slaves[MAX_THREADS];
};
enum ThreadState
{
+ THREAD_INITIALIZING, // thread is initializing itself
THREAD_SEARCHING, // thread is performing work
- THREAD_AVAILABLE, // thread is polling for work
- THREAD_SLEEPING, // we are not thinking, so thread is sleeping
+ THREAD_AVAILABLE, // thread is waiting for work
THREAD_BOOKED, // other thread (master) has booked us as a slave
THREAD_WORKISWAITING, // master has ordered us to start
THREAD_TERMINATED // we are quitting and thread is terminated
};
struct Thread {
- SplitPoint* splitPoint;
- volatile int activeSplitPoints;
- uint64_t nodes;
- uint64_t betaCutOffs[2];
volatile ThreadState state;
- unsigned char pad[64]; // set some distance among local data for each thread
+ SplitPoint* volatile splitPoint;
+ volatile int activeSplitPoints;
+ SplitPoint splitPoints[MAX_ACTIVE_SPLIT_POINTS];
};