Changeset: df8cf23feb5b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=df8cf23feb5b
Modified Files:
        MonetDB5/src/modules/kernel/aggr_bge_avg.mx
        MonetDB5/src/modules/kernel/aggr_bge_count.mx
        MonetDB5/src/modules/kernel/aggr_bge_minmax.mx
        MonetDB5/src/modules/kernel/aggr_bge_prod.mx
        MonetDB5/src/modules/kernel/aggr_bge_sum.mx
Branch: Jun2010
Log Message:

exploit denseness of the tail of BAT g


diffs (truncated from 624 to 300 lines):

diff -r b9b233fae319 -r df8cf23feb5b MonetDB5/src/modules/kernel/aggr_bge_avg.mx
--- a/MonetDB5/src/modules/kernel/aggr_bge_avg.mx       Wed Jun 30 12:43:24 
2010 +0200
+++ b/MonetDB5/src/modules/kernel/aggr_bge_avg.mx       Wed Jun 30 12:43:24 
2010 +0200
@@ -91,7 +91,8 @@
        }
        /* scan b & g, adding sums, and incrementing counts */
        base = BUNfirst(g);
-       offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gh_offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gt_offset = (ssize_t) g->tseqbase - (ssize_t) g->hseqbase;
        end = base + BATcount(g);
        (void) end;             /* keep compilers happy */
        bhsb = b->hseqbase;
@@ -99,49 +100,13 @@
                
BATaccessBegin(bn,USE_HEAD|USE_HHASH|USE_TAIL,BATtordered(g)&BAThordered(e)&1?MMAP_SEQUENTIAL:MMAP_WILLNEED);
        if (b_use)
                BATaccessBegin(b,b_use,MMAP_SEQUENTIAL);
-       BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
-       if (b->T->nonil) {
-               BATloop(b, p, q) {
-                       @6 *t = (@6*) b...@7(bi,p);
-                       oid v = *(oid*) @5;
-
-                       w = (BUN) (offset + v);
-                       if (w >= base && w < end) {
-                               oid *h = (oid*) BUNtail(gi, w);
-
-                               @3(r, bni, (oid*)h);
-                               if (r != BUN_NONE) {
-                                       dbl *dst = (dbl*) @8;
-                                       *dst += *t;
-                                       c...@9]++;
-                               }
-                       }
-               }
+       if (BATtdense(g)) {
+               @:aggrX3_avg3_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,@[10],oid hh = 
(oid) (gt_offset + v); oid *h = &hh)@
        } else {
-               BATloop(b, p, q) {
-                       @6 *t = (@6*) b...@7(bi,p);
-                       oid v = *(oid*) @5;
-
-                       w = (BUN) (offset + v);
-                       if (w >= base && w < end) {
-                               oid *h = (oid*) BUNtail(gi, w);
-
-                               @3(r, bni, (oid*)h);
-                               if (r != BUN_NONE) {
-                                       dbl *dst = (dbl*) @8;
-                                       if (*dst != dbl_nil) {
-                                               if (*t == @6_nil) {
-                                                       *dst = dbl_nil;
-                                               } else {
-                                                       *dst += *t;
-                                               }
-                                               c...@9]++;
-                                       }
-                               }
-                       }
-               }
+               BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
+               @:aggrX3_avg3_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,@[10],oid *h = 
(oid*) BUNtloc(gi, w))@
+               BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
        }
-       BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
        if (b_use)
                BATaccessEnd(b,b_use,MMAP_SEQUENTIAL);
        if (!(@1 && sums))
@@ -182,6 +147,54 @@
        if (cnt)
                GDKfree(cnt);
 @c
+/*     aggrX3_avg3_body
+       @[11]:  oid hh = (oid) (gt_offset + v); oid *h = &hh            g tail 
value calculation
+               oid *h = (oid*) BUNtloc(gi, w)                          g tail 
value lookup
+*/
+...@= aggrX3_avg3_body
+       ALGODEBUG THRprintf(GDKout, 
"#aggrX3_avg3_oid_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,@[10],@[11]);\n");
+       if (b->T->nonil) {
+               BATloop(b, p, q) {
+                       @6 *t = (@6*) b...@7(bi,p);
+                       oid v = *(oid*) @5;
+
+                       w = (BUN) (gh_offset + v);
+                       if (w >= base && w < end) {
+                               @[11];
+
+                               @3(r, bni, (oid*)h);
+                               if (r != BUN_NONE) {
+                                       dbl *dst = (dbl*) @8;
+                                       *dst += *t;
+                                       c...@9]++;
+                               }
+                       }
+               }
+       } else {
+               BATloop(b, p, q) {
+                       @6 *t = (@6*) b...@7(bi,p);
+                       oid v = *(oid*) @5;
+
+                       w = (BUN) (gh_offset + v);
+                       if (w >= base && w < end) {
+                               @[11];
+
+                               @3(r, bni, (oid*)h);
+                               if (r != BUN_NONE) {
+                                       dbl *dst = (dbl*) @8;
+                                       if (*dst != dbl_nil) {
+                                               if (*t == @6_nil) {
+                                                       *dst = dbl_nil;
+                                               } else {
+                                                       *dst += *t;
+                                               }
+                                               c...@9]++;
+                                       }
+                               }
+                       }
+               }
+       }
+...@c
 /*     arithavg3
        @6:     bte / sht / int / wrd / lng / flt / dbl b/bn-tail-type
        @7:     "loc" for fixsized b/bn-tail-type,      b/bn-tail-access
@@ -206,7 +219,7 @@
        BUN p, q, r;
        oid bhsb;
        BUN base, end, w;
-       ssize_t offset;
+       ssize_t gh_offset, gt_offset;
        int b_use = USE_TAIL;
 
        ALGODEBUG THRprintf(GDKout, "#cmdaggrx3_av...@1[@2](b=%s,g=%s,e=%s);\n",
diff -r b9b233fae319 -r df8cf23feb5b 
MonetDB5/src/modules/kernel/aggr_bge_count.mx
--- a/MonetDB5/src/modules/kernel/aggr_bge_count.mx     Wed Jun 30 12:43:24 
2010 +0200
+++ b/MonetDB5/src/modules/kernel/aggr_bge_count.mx     Wed Jun 30 12:43:24 
2010 +0200
@@ -77,7 +77,8 @@
        }
        /* scan b & g, and increment counts in-place or in cnt-array */
        base = BUNfirst(g);
-       offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gh_offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gt_offset = (ssize_t) g->tseqbase - (ssize_t) g->hseqbase;
        end = base + BATcount(g);
        bhsb = b->hseqbase;
        btt = b->ttype;
@@ -145,19 +146,31 @@
                if 
(!simple_EQ(BUNtloc(b,p),bt_nil,{chr,bte,sht,int,flt,lng,dbl}))
 */
 @= aggrX3_count3_loop
-       ALGODEBUG THRprintf(GDKout, 
"#aggrX3_count3_loop(@1,@2,@3,@4,@5,@6,@7);\n");
+       if (BATtdense(g)) {
+               @:aggrX3_count3_loop_body(@1,@2,@3,@4,@5,@6,@7,oid hh = (oid) 
(gt_offset + v); oid *h = &hh)@
+       } else {
+               BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
+               @:aggrX3_count3_loop_body(@1,@2,@3,@4,@5,@6,@7,oid *h = (oid*) 
BUNtloc(gi, w))@
+               BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
+       }
+...@c
+/*     aggrX3_count3_loop_body
+       @8:     oid hh = (oid) (gt_offset + v); oid *h = &hh            g tail 
value calculation
+               oid *h = (oid*) BUNtloc(gi, w)                          g tail 
value lookup
+*/
+...@= aggrX3_count3_loop_body
+       ALGODEBUG THRprintf(GDKout, 
"#aggrX3_count3_loop_body(@1,@2,@3,@4,@5,@6,@7,@8);\n");
        if (!(@1 && cnt))
                
BATaccessBegin(bn,USE_HEAD|USE_HHASH|USE_TAIL,BATtordered(g)&BAThordered(e)&1?MMAP_SEQUENTIAL:MMAP_WILLNEED);
        if (b_use)
                BATaccessBegin(b,b_use,MMAP_SEQUENTIAL);
-       BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
        BATloop(b, p, q) {
                oid v = *(oid*) @5;
 
-               w = (BUN) (offset + v);
+               w = (BUN) (gh_offset + v);
                if (w >= base && w < end) {
                        @7 {
-                               oid *h = (oid*) BUNtail(gi, w);
+                               @8;
 
                                @3(r, bni, h);
                                if (r != BUN_NONE) {
@@ -167,7 +180,6 @@
                        }
                }
        }
-       BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
        if (b_use)
                BATaccessEnd(b,b_use,MMAP_SEQUENTIAL);
        if (!(@1 && cnt))
@@ -188,7 +200,7 @@
        oid min, max;
        oid bhsb;
        BUN base, end, w;
-       ssize_t offset;
+       ssize_t gh_offset, gt_offset;
        int b_use = 0;
        int btt;
        ptr bt_nil = ATOMnilptr(b->ttype);
diff -r b9b233fae319 -r df8cf23feb5b 
MonetDB5/src/modules/kernel/aggr_bge_minmax.mx
--- a/MonetDB5/src/modules/kernel/aggr_bge_minmax.mx    Wed Jun 30 12:43:24 
2010 +0200
+++ b/MonetDB5/src/modules/kernel/aggr_bge_minmax.mx    Wed Jun 30 12:43:24 
2010 +0200
@@ -77,20 +77,45 @@
        }
        /* scan b & g and replace totals by the extreme value (just pointers to 
vals in b) */
        base = BUNfirst(g);
-       offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gh_offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gt_offset = (ssize_t) g->tseqbase - (ssize_t) g->hseqbase;
        end = base + BATcount(g);
        bhsb = b->hseqbase;
        if (b_use)
                BATaccessBegin(b,b_use,MMAP_SEQUENTIAL);
-       BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
+       if (BATtdense(g)) {
+               @:aggrX3_minmax3_ptr_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,oid hh = 
(oid) (gt_offset + v); oid *h = &hh)@
+       } else {
+               BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
+               @:aggrX3_minmax3_ptr_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,oid *h = 
(oid*) BUNtloc(gi, w))@
+               BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
+       }
+       if (b_use)
+               BATaccessEnd(b,b_use,MMAP_SEQUENTIAL);
+       /* insert the extreme values into the result */
+       BATaccessBegin(bn,USE_HEAD|USE_TAIL,MMAP_SEQUENTIAL);
+       BATloop(bn, r, q) {
+               oid *h = (oid*)b...@4(bni,r);
+               ptr val = extrem...@8];
+               (void) h;       /* silence compiler about unused variable */
+               ATOMput(bn->ttype, bn->T->vheap, BUNtloc(bni,r), val?val:nil);
+       }
+       BATaccessEnd(bn,USE_HEAD|USE_TAIL,MMAP_SEQUENTIAL);
+...@c
+/*     aggrX3_minmax3_ptr_body
+       @[10]:  oid hh = (oid) (gt_offset + v); oid *h = &hh            g tail 
value calculation
+               oid *h = (oid*) BUNtloc(gi, w)                          g tail 
value lookup
+*/
+...@= aggrX3_minmax3_ptr_body
+       ALGODEBUG THRprintf(GDKout, 
"#aggrX3_minmax3_ptr_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,@[10]);\n");
        if (b->T->nonil) {
                BATloop(b, p, q) {
                        ptr t = b...@7(bi,p);
                        oid v = *(oid*) @5;
 
-                       w = (BUN) (offset + v);
+                       w = (BUN) (gh_offset + v);
                        if (w >= base && w < end) {
-                               oid *h = (oid*) BUNtail(gi, w);
+                               @[10];
 
                                @3(r, bni, (oid*)h);
                                if (r != BUN_NONE) {
@@ -106,9 +131,9 @@
                        ptr t = b...@7(bi,p);
                        oid v = *(oid*) @5;
 
-                       w = (BUN) (offset + v);
+                       w = (BUN) (gh_offset + v);
                        if (w >= base && w < end) {
-                               oid *h = (oid*) BUNtail(gi, w);
+                               @[10];
 
                                @3(r, bni, (oid*)h);
                                if (r != BUN_NONE) {
@@ -124,18 +149,6 @@
                        }
                }
        }
-       BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
-       if (b_use)
-               BATaccessEnd(b,b_use,MMAP_SEQUENTIAL);
-       /* insert the extreme values into the result */
-       BATaccessBegin(bn,USE_HEAD|USE_TAIL,MMAP_SEQUENTIAL);
-       BATloop(bn, r, q) {
-               oid *h = (oid*)b...@4(bni,r);
-               ptr val = extrem...@8];
-               (void) h;       /* silence compiler about unused variable */
-               ATOMput(bn->ttype, bn->T->vheap, BUNtloc(bni,r), val?val:nil);
-       }
-       BATaccessEnd(bn,USE_HEAD|USE_TAIL,MMAP_SEQUENTIAL);
 @c
 /*     aggrX3_minmax3_oid
                e-void-head     e-oid-head      e-oid-head      e-oid-head
@@ -180,20 +193,34 @@
        }
        /* scan b & g and replace totals by the extreme value (just pointers to 
vals in b) */
        base = BUNfirst(g);
-       offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gh_offset = (ssize_t) base - (ssize_t) g->hseqbase;
+       gt_offset = (ssize_t) g->tseqbase - (ssize_t) g->hseqbase;
        end = base + BATcount(g);
        bhsb = b->hseqbase;
        if (b_use)
                BATaccessBegin(b,b_use,MMAP_SEQUENTIAL);
-       BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
+       if (BATtdense(g)) {
+               @:aggrX3_minmax3_oid_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,oid hh = 
(oid) (gt_offset + v); oid *h = &hh)@
+       } else {
+               BATaccessBegin(g,USE_TAIL,MMAP_SEQUENTIAL);
+               @:aggrX3_minmax3_oid_body(@1,@2,@3,@4,@5,@6,@7,@8,@9,oid *h = 
(oid*) BUNtloc(gi, w))@
+               BATaccessEnd(g,USE_TAIL,MMAP_SEQUENTIAL);
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to