From: Martin Mares Date: Tue, 11 Sep 2007 12:49:31 +0000 (+0200) Subject: Another minor optimization: Added AddRadixBits. X-Git-Tag: holmes-import~506^2~13^2~19 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=1f71ba3ef3df61706d7aee1ffa981cf6fdee7c4e;p=libucw.git Another minor optimization: Added AddRadixBits. --- diff --git a/lib/sorter/common.h b/lib/sorter/common.h index 50cbf34b..a97b4dd2 100644 --- a/lib/sorter/common.h +++ b/lib/sorter/common.h @@ -14,7 +14,7 @@ /* 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; diff --git a/lib/sorter/config.c b/lib/sorter/config.c index cc4bb3e6..d12a65bd 100644 --- a/lib/sorter/config.c +++ b/lib/sorter/config.c @@ -18,6 +18,7 @@ u64 sorter_bufsize = 65536; 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; @@ -35,6 +36,7 @@ static struct cf_section sorter_config = { 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), diff --git a/lib/sorter/govern.c b/lib/sorter/govern.c index 826417d1..619b351d 100644 --- a/lib/sorter/govern.c +++ b/lib/sorter/govern.c @@ -283,6 +283,9 @@ sorter_multiway(struct sort_context *ctx, struct sort_bucket *b) 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));