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