Changeset: d751bda6c6d2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d751bda6c6d2
Modified Files:
        gdk/gdk_group.c
Branch: partioned-hash
Log Message:

Calculate mixed hash for pre-grouped grouping differently.
This results in more than double the speed for TPC-H query 16 at scale
factor 10.


diffs (64 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -327,30 +327,6 @@
        } while (0)
 #endif
 
-/* Count number of 1 bits in the argument.
- * The algorithm comes from Henry S. Warren, Jr., Hacker's Delight,
- * 2nd Edition, page 82. */
-static inline int
-pop(BUN n)
-{
-#if SIZEOF_BUN == 4
-       n -= (n >> 1) & 0x55555555;
-       n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
-       n = (n + (n >> 4)) & 0x0F0F0F0F;
-       n += n >> 8;
-       n += n >> 16;
-       return (int) (n & 0x3F);
-#else
-       n -= (n >> 1) & 0x5555555555555555;
-       n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333);
-       n = (n + (n >> 4)) & 0x0F0F0F0F0F0F0F0F;
-       n += n >> 8;
-       n += n >> 16;
-       n += n >> 32;
-       return (int) (n & 0x7F);
-#endif
-}
-
 #define GRP_create_partial_hash_table(INIT_0,INIT_1,HASH,COMP)         \
        do {                                                            \
                INIT_0;                                                 \
@@ -383,7 +359,7 @@ pop(BUN n)
                                        hb = HASHnil(hs);               \
                                }                                       \
                        } else if (grps) {                              \
-                               prb = (prb ^ (BUN) grps[p-r] << bits) & 
hs->mask; \
+                               prb = (prb ^ (BUN) grps[p-r]) & hs->mask; \
                                for (hb = HASHget(hs, 0, prb);          \
                                     hb != HASHnil(hs);                 \
                                     hb = HASHgetlink(hs, hb)) {        \
@@ -909,7 +885,6 @@ BATgroup_internal(BAT **groups, BAT **ex
                size_t nmelen;
                Heap *hp = NULL;
                BUN prb;
-               int bits = 0;
 
                /* not sorted, and no pre-existing hash table: we'll
                 * build an incomplete hash table on the fly--also see
@@ -944,12 +919,6 @@ BATgroup_internal(BAT **groups, BAT **ex
                        goto error;
                }
 
-               /* when combining value and group-id hashes,
-                * we left-shift one of them by half the hash-mask width
-                * to better spread bits and use the entire hash-mask,
-                * and thus reduce collisions */
-               bits = pop(hs->mask) >> 1;
-
                gn->tsorted = 1; /* be optimistic */
 
                switch (t) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to