From: Martin Mares Date: Wed, 23 May 2007 20:59:11 +0000 (+0200) Subject: Added SORT_INT64 mode. X-Git-Tag: holmes-import~506^2~13^2~124 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=f6d9e92d2dfc4d86e9599449cc56a3eba2bf9626;p=libucw.git Added SORT_INT64 mode. --- diff --git a/lib/sorter/govern.c b/lib/sorter/govern.c index 52d90e96..6b4dc696 100644 --- a/lib/sorter/govern.c +++ b/lib/sorter/govern.c @@ -251,7 +251,7 @@ sorter_run(struct sort_context *ctx) bin->size = ctx->in_size; bin->hash_bits = ctx->hash_bits; clist_add_tail(&ctx->bucket_list, &bin->n); - SORT_XTRACE(2, "Input size: %s", F_BSIZE(bin)); + SORT_XTRACE(2, "Input size: %s, %d hash bits", F_BSIZE(bin), bin->hash_bits); // Create bucket for the output struct sort_bucket *bout = sbuck_new(ctx); diff --git a/lib/sorter/s-radix.h b/lib/sorter/s-radix.h index 0b5f5e9f..289f255d 100644 --- a/lib/sorter/s-radix.h +++ b/lib/sorter/s-radix.h @@ -21,7 +21,7 @@ static void P(radix_split)(struct sort_context *ctx UNUSED, struct sort_bucket * while (P(read_key)(in, &k)) { - uns h = P(hash)(&k); + P(hash_t) h = P(hash)(&k); uns i = (h >> bitpos) & mask; if (unlikely(!outs[i])) outs[i] = sbuck_write(bouts[i]); diff --git a/lib/sorter/sort-test.c b/lib/sorter/sort-test.c index 9a822d14..34a74c72 100644 --- a/lib/sorter/sort-test.c +++ b/lib/sorter/sort-test.c @@ -560,6 +560,47 @@ test_graph(uns mode, u64 size) bclose(f); } +/*** Simple 8-byte integer keys ***/ + +struct key6 { + u64 x; +}; + +#define SORT_KEY_REGULAR struct key6 +#define SORT_PREFIX(x) s6_##x +#define SORT_INPUT_FB +#define SORT_OUTPUT_FB +#define SORT_UNIQUE +#define SORT_INT64(k) (k).x + +#include "lib/sorter/sorter.h" + +static void +test_int64(int mode, u64 size) +{ + u64 N = size ? nextprime(MIN(size/8, 0xffff0000)) : 0; + u64 K = N/4*3; + log(L_INFO, ">>> 64-bit integers (%s, N=%llu)", ((char *[]) { "increasing", "decreasing", "random" })[mode], N); + + struct fastbuf *f = bopen_tmp(65536); + for (u64 i=0; i> ctx.hash_bits)) + while (ctx.hash_bits < 64 && (int_range >> ctx.hash_bits)) ctx.hash_bits++; ctx.radix_split = P(radix_split); #endif @@ -281,6 +289,7 @@ static struct fastbuf *P(sort)( #undef SORT_VAR_KEY #undef SORT_VAR_DATA #undef SORT_INT +#undef SORT_INT64 #undef SORT_HASH_BITS #undef SORT_UNIFY #undef SORT_UNIFY_WORKSPACE