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

Print hash statistics when ALGODEBUG is in effect.


diffs (53 lines):

diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -410,6 +410,37 @@ BAThashsync(void *arg)
 }
 #endif
 
+static void
+HASHcollisions(BAT *b, Hash *h)
+{
+       BUN entries = 0;
+       BUN max = 0;
+       BUN cnt;
+       BUN total = 0;
+       BUN nil = h->nil;
+       int pcs;
+       BUN i;
+       BUN p;
+
+       for (pcs = 0; pcs < h->pieces; pcs++) {
+               for (i = 0; i <= h->mask; i++) {
+                       if ((p = HASHget(h, pcs, i)) != nil) {
+                               entries++;
+                               for (cnt = 0; p != nil; p = HASHgetlink(h, p))
+                                       cnt++;
+                               if (cnt > max)
+                                       max = cnt;
+                               total += cnt;
+                       }
+               }
+       }
+       fprintf(stderr, "#HASH stats %s#" BUNFMT ", pieces: %d, "
+               "chunksize: " BUNFMT ", mask: " BUNFMT ", entries: " BUNFMT ", "
+               "max chain: " BUNFMT ", average chain: %2.6f\n",
+               BATgetId(b), BATcount(b), h->pieces, h->chunk, h->mask,
+               entries, max, entries == 0 ? 0.0 : (double) total / entries);
+}
+
 gdk_return
 BAThash(BAT *b)
 {
@@ -453,7 +484,10 @@ BAThash(BAT *b)
                t0 = GDKusec();
                for (i = 0; i < pieces; i++)
                        BATparthash(b, h, i);
-               ALGODEBUG fprintf(stderr, "#BAThash: hash construction " LLFMT 
" usec\n", GDKusec() - t0);
+               ALGODEBUG {
+                       fprintf(stderr, "#BAThash(%s#" BUNFMT "[%s]): hash 
construction " LLFMT " usec\n", BATgetId(b), BATcount(b), ATOMname(b->ttype), 
GDKusec() - t0);
+                       HASHcollisions(b, h);
+               }
 #if 0
                /* check that the hash table is correct */
                {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to