Changeset: 186f8c9f62b4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=186f8c9f62b4
Modified Files:
        monetdb5/mal/mal_recycle.c
        monetdb5/modules/mal/trader.c
        monetdb5/optimizer/opt_recycler.mx
        monetdb5/scheduler/run_octopus.c
Branch: default
Log Message:

Adjustments for octopus.bind:
- added subsumption of binds
- subsumption used also in bid computation
- use only base table recycling in distributed case


diffs (228 lines):

diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -1954,13 +1954,14 @@ static int
 RECYCLEdataTransfer(Client cntxt, MalStkPtr s, InstrPtr p)
 {
        int i, j, qidx, lcomp, rcomp, pc = -1;
-       bat bid, sbid = -1;
+       /*      bat bid; */
+       bat sbid = -1;
        InstrPtr q;
        bit gluse = FALSE;
-       size_t scnt = 0;
+       BUN scnt = 0;
        BAT *b, *bn;
-       oid lval = 0, hval = 0;
-       dbl ratio;
+       /*      oid lval = 0, hval = 0;
+         dbl ratio; */
        static str octopusRef = 0, bindRef = 0, bindidxRef = 0;
 
        if (octopusRef == 0)
@@ -1990,6 +1991,7 @@ RECYCLEdataTransfer(Client cntxt, MalStk
                        if ( p->argc == 7 )
                                goto exactmatch;
                        else goto subsumption;
+
                else {          /* q is bat partition */
 
                        lcomp = VALcmp(&getVar(recycleBlk,getArg(q,6))->value,
@@ -1999,8 +2001,8 @@ RECYCLEdataTransfer(Client cntxt, MalStk
 
                        if ( lcomp == 0 && rcomp == 0 )            /* found an 
exact match */
                                goto exactmatch;
-                       else if ( lcomp <= 0 && rcomp <= 0 )
-                               goto subsumption;
+/*                     else if ( lcomp <= 0 && rcomp <= 0 )
+                               goto subsumption;*/
                        else
                                continue;
                }
@@ -2028,38 +2030,39 @@ RECYCLEdataTransfer(Client cntxt, MalStk
             mal_unset_lock(recycleLock,"recycle");
             return i;
 
-               subsumption:
-                       bid = getVarConstant(recycleBlk, getArg(q,0)).val.bval;
-                       b = BBPquickdesc(bid, FALSE);
-                       if( sbid == -1){
-                               sbid = bid;
-                               scnt = BATcount(b);
-                               pc = i;
-                       }
-                       else if ( BATcount(b) < scnt ) {
-                               sbid = bid;
-                               scnt = BATcount(b);
-                               pc = i;
-                       }
+       subsumption:
+                       sbid = getVarConstant(recycleBlk, getArg(q,0)).val.bval;
+                       pc = i;
+                       break;
 
                notfound:
                        continue;
        }
 
        if ( sbid >= 0 ) {      /* subsumption of octopus.bind */
+               BUN psz;
+               int part_nr = *(int *)getArgReference(s, p, 6);
+               int nr_parts = *(int *)getArgReference(s, p, 7);
+
                b = BBPquickdesc(sbid, FALSE);
-               lval = *(oid *)getArgReference(s, p, 6);
+               scnt = BATcount(b);
+               psz = scnt?(scnt/nr_parts):0;
+               bn =  BATslice(b, part_nr*psz, 
(part_nr+1==nr_parts)?scnt:((part_nr+1)*psz));
+               BATseqbase(bn, part_nr*psz);
+
+               /*              lval = *(oid *)getArgReference(s, p, 6);
                hval = *(oid *)getArgReference(s, p, 7);
                bn = BATslice(b, lval, hval);
                BATseqbase(bn, lval);
-               ratio = (dbl)BATcount(bn)/(dbl)scnt;
+               ratio = (dbl)BATcount(bn)/(dbl)scnt; */
+
                VALset(&s->stk[getArg(p,0)], TYPE_bat, &bn->batCacheid);
                BBPkeepref( bn->batCacheid);
 
                recycleBlk->profiler[pc].counter++;
                recycleBlk->profiler[pc].clk = GDKusec();
                recycleQPat->ptrn[cntxt->rcc->curQ]->dtreuse +=
-                       (lng) (ratio * recycleBlk->profiler[pc].wbytes);
+                       (lng) scnt?(psz * recycleBlk->profiler[pc].wbytes / 
scnt):0;
                cntxt->rcc->recycled0++;
                cntxt->rcc->recent = i;
        }
diff --git a/monetdb5/modules/mal/trader.c b/monetdb5/modules/mal/trader.c
--- a/monetdb5/modules/mal/trader.c
+++ b/monetdb5/modules/mal/trader.c
@@ -55,17 +55,18 @@ static lng estimateSavings0(MalBlkPtr mb
 static lng estimateSavings(MalBlkPtr mb, sht bidtype)
 {
        MalStkPtr stk = NULL;
-       int i, j, k, marked = 0;
+       int i, j, k, marked = 0, maxparam = 0;
        ValPtr lhs, rhs;
        InstrPtr p, q;
        lng savedInstr = 0, savedKB = 0;
-       static str octopusRef = 0, bindRef = 0;
-
+       static str octopusRef = 0, bindRef = 0, bindidxRef = 0;
 
        if (octopusRef == 0)
                octopusRef = putName("octopus",7);
        if (bindRef == 0)
-        bindRef = putName("bind",4);
+               bindRef = putName("bind",4);
+       if (bindidxRef == 0)
+               bindidxRef = putName("bind_idxbat",11);
 
        if( recycleBlk == 0 || reusePolicy == 0)
                return 0;
@@ -93,6 +94,8 @@ static lng estimateSavings(MalBlkPtr mb,
                        lhs->len = 0;
                }
        }
+       maxparam = getArg(mb->stmt[0], mb->stmt[0]->argc - 1);
+       /* don't compare function parameters */
 
        for (k = 0; k < mb->stop; k++){
                p = getInstrPtr(mb,k);
@@ -112,20 +115,18 @@ static lng estimateSavings(MalBlkPtr mb,
                         (getModuleId(p) != getModuleId(q)))
                                continue;
 
-                       switch(reusePolicy){
+                       if (p->argc < q->argc-1) continue;
+                       /* sub-range instructions can be subsumed from entire 
table */
 
-                       case REUSE_COVER:
-                               /* 1: check for subsumption : TODO*/
-
-                       case REUSE_EXACT:
-                               /* 2: exact covering */
-                               if (p->argc != q->argc-1) continue;
+                       else if (p->argc == q->argc-1) { /* check for exact 
match */
 
                                if ( bidtype == BID_TRANS ) j = p->retc + 1;
                                else j = p->retc;
-                               for ( ; j < p->argc; j++)
+                               for ( ; j < p->argc; j++){
+                                       if (getArg(p,j) <= maxparam) continue;
                                        if (VALcmp(&stk->stk[getArg(p,j)], 
&getVarConstant(recycleBlk,getArg(q,j))))
                                                goto nomatch;
+                               }
 
                                /* found an exact match - get the results on 
the stack */
                                for( j=0; j<p->retc; j++){
@@ -136,18 +137,23 @@ static lng estimateSavings(MalBlkPtr mb,
                                if ( bidtype == BID_TRANS )
                                        savedKB += 
recycleBlk->profiler[i].wbytes;
                                else savedInstr++;
-                               goto nextinstr;
-
-                               nomatch:
+                               break;
+                       }
+                       else {  /* check for bind subsumption */
+                               int nr_part = 0;
+                               if ( bidtype != BID_TRANS )
                                        continue;
+                               for (j = p->retc + 1; j < 6; j++)
+                                       if ( VALcmp(&stk->stk[getArg(p,j)],
+                                               &getVarConstant(recycleBlk, 
getArg(q,j))) )
+                                       goto nomatch;
+                               nr_part = * (int*) getVarValue(mb, getArg(p,7));
+                               savedKB += 
nr_part?recycleBlk->profiler[i].wbytes/nr_part : 0;
                        }
 
-               }       /* end loop over RP */
-
-               /* processing of subsumed instruction: TODO */
-
-               nextinstr:
-                       continue;
+                       nomatch:
+                               continue;
+               }       /* end loop over RP */
        }
 
        /* clean up the phony stack */
diff --git a/monetdb5/optimizer/opt_recycler.mx 
b/monetdb5/optimizer/opt_recycler.mx
--- a/monetdb5/optimizer/opt_recycler.mx
+++ b/monetdb5/optimizer/opt_recycler.mx
@@ -115,7 +115,7 @@ comment "Recycler marking and code injec
 #include "mal_instruction.h"
 
 static lng recycleSeq = 0;             /* should become part of MAL block 
basics */
-static bte baseTableMode = 0;  /* only recycle base tables */
+static bte baseTableMode = 1;  /* only recycle base tables */
 
 static int
 OPTrecycleImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
diff --git a/monetdb5/scheduler/run_octopus.c b/monetdb5/scheduler/run_octopus.c
--- a/monetdb5/scheduler/run_octopus.c
+++ b/monetdb5/scheduler/run_octopus.c
@@ -612,6 +612,12 @@ OCTOPUSmakeSchedule(Client cntxt, MalBlk
                bid[j][k] = *(lng*) getArgReference(stk,pci,i);
        }
 
+       for ( j = 0; j < tcnt; j++){
+               for ( k = 0; k < tcnt; k++)
+                       mnstr_printf(cntxt->fdout, LLFMT" ", bid[j][k]);
+               mnstr_printf(cntxt->fdout, "\n");
+       }
+
        /* compute schedule */
 /*     Round Robin
        for ( j = 0; j < tcnt; j++)
@@ -626,6 +632,7 @@ OCTOPUSmakeSchedule(Client cntxt, MalBlk
                pr = workers[sch[j]].pnum;
                stk->stk[v].val.sval = GDKstrdup(peers[pr].uri);
                stk->stk[v].len = (int) strlen(stk->stk[v].val.sval);
+               mnstr_printf(cntxt->fdout, "Tentacle %d scheduled on node %d: 
%s\n", j+1, sch[j], peers[pr].uri);
        }
 
        for ( j= 0; j < tcnt; j++)
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to