/* Configuration, some of the variables are used by the old sorter, too. */
extern uns sorter_trace, sorter_stream_bufsize;
-extern uns sorter_debug, sorter_min_radix_bits, sorter_max_radix_bits;
+extern uns sorter_debug, sorter_min_radix_bits, sorter_max_radix_bits, sorter_add_radix_bits;
extern uns sorter_min_multiway_bits, sorter_max_multiway_bits;
extern uns sorter_threads, sorter_thread_threshold, sorter_thread_chunk;
extern uns sorter_radix_threshold;
uns sorter_debug;
uns sorter_min_radix_bits;
uns sorter_max_radix_bits;
+uns sorter_add_radix_bits;
uns sorter_min_multiway_bits;
uns sorter_max_multiway_bits;
uns sorter_threads;
CF_UNS("Debug", &sorter_debug),
CF_UNS("MinRadixBits", &sorter_min_radix_bits),
CF_UNS("MaxRadixBits", &sorter_max_radix_bits),
+ CF_UNS("AddRadixBits", &sorter_add_radix_bits),
CF_UNS("MinMultiwayBits", &sorter_min_multiway_bits),
CF_UNS("MaxMultiwayBits", &sorter_max_multiway_bits),
CF_UNS("Threads", &sorter_threads),
static void
sorter_radix(struct sort_context *ctx, struct sort_bucket *b, uns bits)
{
+ // Add more bits if requested and allowed.
+ bits = MIN(bits + sorter_add_radix_bits, sorter_max_radix_bits);
+
uns nbuck = 1 << bits;
SORT_XTRACE(2, "Running radix split on %s with hash %d bits of %d (expecting %s buckets)",
F_BSIZE(b), bits, b->hash_bits, stk_fsize(sbuck_size(b) / nbuck));