- // Set of rows with half bits set to 1 and half to 0. It is used to allocate
- // the search depths across the threads.
- typedef std::vector<int> Row;
-
- const Row HalfDensity[] = {
- {0, 1},
- {1, 0},
- {0, 0, 1, 1},
- {0, 1, 1, 0},
- {1, 1, 0, 0},
- {1, 0, 0, 1},
- {0, 0, 0, 1, 1, 1},
- {0, 0, 1, 1, 1, 0},
- {0, 1, 1, 1, 0, 0},
- {1, 1, 1, 0, 0, 0},
- {1, 1, 0, 0, 0, 1},
- {1, 0, 0, 0, 1, 1},
- {0, 0, 0, 0, 1, 1, 1, 1},
- {0, 0, 0, 1, 1, 1, 1, 0},
- {0, 0, 1, 1, 1, 1, 0 ,0},
- {0, 1, 1, 1, 1, 0, 0 ,0},
- {1, 1, 1, 1, 0, 0, 0 ,0},
- {1, 1, 1, 0, 0, 0, 0 ,1},
- {1, 1, 0, 0, 0, 0, 1 ,1},
- {1, 0, 0, 0, 0, 1, 1 ,1},
- };
+ // skip half of the plies in blocks depending on the helper thread idx.
+ bool skip_ply(int idx, int ply) {
+
+ idx = (idx - 1) % 20 + 1; // cycle after 20 threads.
+
+ // number of successive plies to skip, depending on idx.
+ int ones = 1;
+ while (ones * (ones + 1) < idx)
+ ones++;